| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" | 
| 6 | 6 | 
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" | 
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" | 
| 9 #include "base/memory/shared_memory.h" | 9 #include "base/memory/shared_memory.h" | 
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" | 
| (...skipping 2583 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2594                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2594                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
| 2595   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 2595   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 
| 2596   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 2596   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 
| 2597 | 2597 | 
| 2598   SendInputEventACK(WebInputEvent::MouseWheel, | 2598   SendInputEventACK(WebInputEvent::MouseWheel, | 
| 2599                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2599                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
| 2600   EXPECT_EQ(0U, sink_->message_count()); | 2600   EXPECT_EQ(0U, sink_->message_count()); | 
| 2601   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 2601   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 
| 2602 | 2602 | 
| 2603   // Indicate the end of the scrolling from the touchpad. | 2603   // Indicate the end of the scrolling from the touchpad. | 
|  | 2604   SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 
|  | 2605                        blink::WebGestureDeviceTouchscreen); | 
| 2604   SimulateGestureFlingStartEvent(-1200.f, 0.f, blink::WebGestureDeviceTouchpad); | 2606   SimulateGestureFlingStartEvent(-1200.f, 0.f, blink::WebGestureDeviceTouchpad); | 
| 2605   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 2607   EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); | 
| 2606 | 2608 | 
| 2607   // Start another scroll. This time, do not consume any scroll events. | 2609   // Start another scroll. This time, do not consume any scroll events. | 
| 2608   SimulateWheelEvent(0, -5, 0, true);    // sent directly | 2610   SimulateWheelEvent(0, -5, 0, true);    // sent directly | 
| 2609   SimulateWheelEvent(0, -1, 0, true);    // enqueued | 2611   SimulateWheelEvent(0, -1, 0, true);    // enqueued | 
| 2610   SimulateWheelEvent(-10, -3, 0, true);  // coalesced into previous event | 2612   SimulateWheelEvent(-10, -3, 0, true);  // coalesced into previous event | 
| 2611   SimulateWheelEvent(-15, -1, 0, true);  // coalesced into previous event | 2613   SimulateWheelEvent(-15, -1, 0, true);  // coalesced into previous event | 
| 2612   SimulateWheelEvent(-30, -3, 0, true);  // coalesced into previous event | 2614   SimulateWheelEvent(-30, -3, 0, true);  // coalesced into previous event | 
| 2613   SimulateWheelEvent(-20, 6, 1, true);   // enqueued, different modifiers | 2615   SimulateWheelEvent(-20, 6, 1, true);   // enqueued, different modifiers | 
| 2614   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 2616   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 
| 2615   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 2617   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2714   EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode()); | 2716   EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode()); | 
| 2715   EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode()); | 2717   EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode()); | 
| 2716   EXPECT_EQ(60.f, overscroll_delta_x()); | 2718   EXPECT_EQ(60.f, overscroll_delta_x()); | 
| 2717   EXPECT_EQ(10.f, overscroll_delegate()->delta_x()); | 2719   EXPECT_EQ(10.f, overscroll_delegate()->delta_x()); | 
| 2718   EXPECT_EQ(0.f, overscroll_delegate()->delta_y()); | 2720   EXPECT_EQ(0.f, overscroll_delegate()->delta_y()); | 
| 2719   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 2721   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 
| 2720 | 2722 | 
| 2721   // Send a fling start, but with a small velocity, so that the overscroll is | 2723   // Send a fling start, but with a small velocity, so that the overscroll is | 
| 2722   // aborted. The fling should proceed to the renderer, through the gesture | 2724   // aborted. The fling should proceed to the renderer, through the gesture | 
| 2723   // event filter. | 2725   // event filter. | 
|  | 2726   SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 
|  | 2727                        blink::WebGestureDeviceTouchscreen); | 
| 2724   SimulateGestureFlingStartEvent(0.f, 0.1f, blink::WebGestureDeviceTouchpad); | 2728   SimulateGestureFlingStartEvent(0.f, 0.1f, blink::WebGestureDeviceTouchpad); | 
| 2725   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 2729   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 
| 2726   EXPECT_EQ(1U, sink_->message_count()); | 2730   EXPECT_EQ(2U, sink_->message_count()); | 
| 2727 } | 2731 } | 
| 2728 | 2732 | 
| 2729 // Same as ScrollEventsOverscrollWithFling, but with zero velocity. Checks that | 2733 // Same as ScrollEventsOverscrollWithFling, but with zero velocity. Checks that | 
| 2730 // the zero-velocity fling does not reach the renderer. | 2734 // the zero-velocity fling does not reach the renderer. | 
| 2731 TEST_F(RenderWidgetHostViewAuraOverscrollTest, | 2735 TEST_F(RenderWidgetHostViewAuraOverscrollTest, | 
| 2732        ScrollEventsOverscrollWithZeroFling) { | 2736        ScrollEventsOverscrollWithZeroFling) { | 
| 2733   SetUpOverscrollEnvironment(); | 2737   SetUpOverscrollEnvironment(); | 
| 2734 | 2738 | 
| 2735   // Send a wheel event. ACK the event as not processed. This should not | 2739   // Send a wheel event. ACK the event as not processed. This should not | 
| 2736   // initiate an overscroll gesture since it doesn't cross the threshold yet. | 2740   // initiate an overscroll gesture since it doesn't cross the threshold yet. | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 2756   EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode()); | 2760   EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode()); | 
| 2757   EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode()); | 2761   EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode()); | 
| 2758   EXPECT_EQ(60.f, overscroll_delta_x()); | 2762   EXPECT_EQ(60.f, overscroll_delta_x()); | 
| 2759   EXPECT_EQ(10.f, overscroll_delegate()->delta_x()); | 2763   EXPECT_EQ(10.f, overscroll_delegate()->delta_x()); | 
| 2760   EXPECT_EQ(0.f, overscroll_delegate()->delta_y()); | 2764   EXPECT_EQ(0.f, overscroll_delegate()->delta_y()); | 
| 2761   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 2765   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 
| 2762 | 2766 | 
| 2763   // Send a fling start, but with a small velocity, so that the overscroll is | 2767   // Send a fling start, but with a small velocity, so that the overscroll is | 
| 2764   // aborted. The fling should proceed to the renderer, through the gesture | 2768   // aborted. The fling should proceed to the renderer, through the gesture | 
| 2765   // event filter. | 2769   // event filter. | 
|  | 2770   SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 
|  | 2771                        blink::WebGestureDeviceTouchscreen); | 
| 2766   SimulateGestureFlingStartEvent(10.f, 0.f, blink::WebGestureDeviceTouchpad); | 2772   SimulateGestureFlingStartEvent(10.f, 0.f, blink::WebGestureDeviceTouchpad); | 
| 2767   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 2773   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 
| 2768   EXPECT_EQ(1U, sink_->message_count()); | 2774   EXPECT_EQ(2U, sink_->message_count()); | 
| 2769 } | 2775 } | 
| 2770 | 2776 | 
| 2771 // Tests that a fling in the opposite direction of the overscroll cancels the | 2777 // Tests that a fling in the opposite direction of the overscroll cancels the | 
| 2772 // overscroll nav instead of completing it. | 2778 // overscroll nav instead of completing it. | 
| 2773 TEST_F(RenderWidgetHostViewAuraOverscrollTest, ReverseFlingCancelsOverscroll) { | 2779 TEST_F(RenderWidgetHostViewAuraOverscrollTest, ReverseFlingCancelsOverscroll) { | 
| 2774   SetUpOverscrollEnvironment(); | 2780   SetUpOverscrollEnvironment(); | 
| 2775 | 2781 | 
| 2776   { | 2782   { | 
| 2777     // Start and end a gesture in the same direction without processing the | 2783     // Start and end a gesture in the same direction without processing the | 
| 2778     // gesture events in the renderer. This should initiate and complete an | 2784     // gesture events in the renderer. This should initiate and complete an | 
| (...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3341   SendInputEventACK(WebInputEvent::MouseWheel, INPUT_EVENT_ACK_STATE_CONSUMED); | 3347   SendInputEventACK(WebInputEvent::MouseWheel, INPUT_EVENT_ACK_STATE_CONSUMED); | 
| 3342   EXPECT_TRUE(ScrollStateIsContentScrolling()); | 3348   EXPECT_TRUE(ScrollStateIsContentScrolling()); | 
| 3343   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 3349   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 
| 3344 | 3350 | 
| 3345   // The second wheel event is consumed. | 3351   // The second wheel event is consumed. | 
| 3346   SendInputEventACK(WebInputEvent::MouseWheel, INPUT_EVENT_ACK_STATE_CONSUMED); | 3352   SendInputEventACK(WebInputEvent::MouseWheel, INPUT_EVENT_ACK_STATE_CONSUMED); | 
| 3347   EXPECT_TRUE(ScrollStateIsContentScrolling()); | 3353   EXPECT_TRUE(ScrollStateIsContentScrolling()); | 
| 3348 | 3354 | 
| 3349   // Touchpad scroll can end with a zero-velocity fling. But it is not | 3355   // Touchpad scroll can end with a zero-velocity fling. But it is not | 
| 3350   // dispatched, but it should still reset the overscroll controller state. | 3356   // dispatched, but it should still reset the overscroll controller state. | 
|  | 3357   SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 
|  | 3358                        blink::WebGestureDeviceTouchscreen); | 
| 3351   SimulateGestureFlingStartEvent(0.f, 0.f, blink::WebGestureDeviceTouchpad); | 3359   SimulateGestureFlingStartEvent(0.f, 0.f, blink::WebGestureDeviceTouchpad); | 
| 3352   EXPECT_TRUE(ScrollStateIsUnknown()); | 3360   EXPECT_TRUE(ScrollStateIsUnknown()); | 
| 3353   EXPECT_EQ(0U, sink_->message_count()); | 3361   EXPECT_EQ(1U, sink_->message_count()); | 
| 3354 | 3362 | 
| 3355   // Dropped flings should neither propagate *nor* indicate that they were | 3363   // Dropped flings should neither propagate *nor* indicate that they were | 
| 3356   // consumed and have triggered a fling animation (as tracked by the router). | 3364   // consumed and have triggered a fling animation (as tracked by the router). | 
| 3357   EXPECT_FALSE(parent_host_->input_router()->HasPendingEvents()); | 3365   EXPECT_FALSE(parent_host_->input_router()->HasPendingEvents()); | 
| 3358 | 3366 | 
| 3359   SimulateWheelEvent(-5, 0, 0, true);    // sent directly | 3367   SimulateWheelEvent(-5, 0, 0, true);    // sent directly | 
| 3360   SimulateWheelEvent(-60, 0, 0, true);   // enqueued | 3368   SimulateWheelEvent(-60, 0, 0, true);   // enqueued | 
| 3361   SimulateWheelEvent(-100, 0, 0, true);  // coalesced into previous event | 3369   SimulateWheelEvent(-100, 0, 0, true);  // coalesced into previous event | 
| 3362   EXPECT_TRUE(ScrollStateIsUnknown()); | 3370   EXPECT_TRUE(ScrollStateIsUnknown()); | 
| 3363   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 3371   EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); | 
| 3364 | 3372 | 
| 3365   // The first wheel scroll did not scroll content. Overscroll should not start | 3373   // The first wheel scroll did not scroll content. Overscroll should not start | 
| 3366   // yet, since enough hasn't been scrolled. | 3374   // yet, since enough hasn't been scrolled. | 
| 3367   SendInputEventACK(WebInputEvent::MouseWheel, | 3375   SendInputEventACK(WebInputEvent::MouseWheel, | 
| 3368                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 3376                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
| 3369   EXPECT_TRUE(ScrollStateIsUnknown()); | 3377   EXPECT_TRUE(ScrollStateIsUnknown()); | 
| 3370   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 3378   EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 
| 3371 | 3379 | 
| 3372   SendInputEventACK(WebInputEvent::MouseWheel, | 3380   SendInputEventACK(WebInputEvent::MouseWheel, | 
| 3373                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 3381                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
| 3374   EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode()); | 3382   EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode()); | 
| 3375   EXPECT_TRUE(ScrollStateIsOverscrolling()); | 3383   EXPECT_TRUE(ScrollStateIsOverscrolling()); | 
| 3376   EXPECT_EQ(0U, sink_->message_count()); | 3384   EXPECT_EQ(0U, sink_->message_count()); | 
| 3377 | 3385 | 
|  | 3386   // The GestureScrollBegin will reset the delegate's mode, so check it here. | 
|  | 3387   EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode()); | 
|  | 3388   SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 
|  | 3389                        blink::WebGestureDeviceTouchscreen); | 
| 3378   SimulateGestureFlingStartEvent(0.f, 0.f, blink::WebGestureDeviceTouchpad); | 3390   SimulateGestureFlingStartEvent(0.f, 0.f, blink::WebGestureDeviceTouchpad); | 
| 3379   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 3391   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 
| 3380   EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->completed_mode()); |  | 
| 3381   EXPECT_TRUE(ScrollStateIsUnknown()); | 3392   EXPECT_TRUE(ScrollStateIsUnknown()); | 
| 3382   EXPECT_EQ(0U, sink_->message_count()); | 3393   EXPECT_EQ(1U, sink_->message_count()); | 
| 3383   EXPECT_FALSE(parent_host_->input_router()->HasPendingEvents()); | 3394   EXPECT_FALSE(parent_host_->input_router()->HasPendingEvents()); | 
| 3384 } | 3395 } | 
| 3385 | 3396 | 
| 3386 TEST_F(RenderWidgetHostViewAuraOverscrollTest, OverscrollResetsOnBlur) { | 3397 TEST_F(RenderWidgetHostViewAuraOverscrollTest, OverscrollResetsOnBlur) { | 
| 3387   SetUpOverscrollEnvironment(); | 3398   SetUpOverscrollEnvironment(); | 
| 3388 | 3399 | 
| 3389   // Start an overscroll with gesture scroll. In the middle of the scroll, blur | 3400   // Start an overscroll with gesture scroll. In the middle of the scroll, blur | 
| 3390   // the host. | 3401   // the host. | 
| 3391   SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 3402   SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 
| 3392                        blink::WebGestureDeviceTouchscreen); | 3403                        blink::WebGestureDeviceTouchscreen); | 
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3592   // Wheel event scroll ending with a fling. | 3603   // Wheel event scroll ending with a fling. | 
| 3593   SimulateWheelEvent(5, 0, 0, true); | 3604   SimulateWheelEvent(5, 0, 0, true); | 
| 3594   SendInputEventACK(WebInputEvent::MouseWheel, | 3605   SendInputEventACK(WebInputEvent::MouseWheel, | 
| 3595                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 3606                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
| 3596   SimulateWheelEvent(10, -5, 0, true); | 3607   SimulateWheelEvent(10, -5, 0, true); | 
| 3597   SendInputEventACK(WebInputEvent::MouseWheel, | 3608   SendInputEventACK(WebInputEvent::MouseWheel, | 
| 3598                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 3609                     INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 
| 3599   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 3610   EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); | 
| 3600   EXPECT_EQ(15.f, overscroll_delta_x()); | 3611   EXPECT_EQ(15.f, overscroll_delta_x()); | 
| 3601   EXPECT_EQ(-5.f, overscroll_delta_y()); | 3612   EXPECT_EQ(-5.f, overscroll_delta_y()); | 
|  | 3613   SimulateGestureEvent(WebInputEvent::GestureScrollBegin, | 
|  | 3614                        blink::WebGestureDeviceTouchscreen); | 
| 3602   SimulateGestureFlingStartEvent(0.f, 0.1f, blink::WebGestureDeviceTouchpad); | 3615   SimulateGestureFlingStartEvent(0.f, 0.1f, blink::WebGestureDeviceTouchpad); | 
| 3603   EXPECT_EQ(0.f, overscroll_delta_x()); | 3616   EXPECT_EQ(0.f, overscroll_delta_x()); | 
| 3604   EXPECT_EQ(0.f, overscroll_delta_y()); | 3617   EXPECT_EQ(0.f, overscroll_delta_y()); | 
| 3605 } | 3618 } | 
| 3606 | 3619 | 
| 3607 // Tests the RenderWidgetHostImpl sends the correct surface ID namespace to | 3620 // Tests the RenderWidgetHostImpl sends the correct surface ID namespace to | 
| 3608 // the renderer process. | 3621 // the renderer process. | 
| 3609 TEST_F(RenderWidgetHostViewAuraTest, SurfaceIdNamespaceInitialized) { | 3622 TEST_F(RenderWidgetHostViewAuraTest, SurfaceIdNamespaceInitialized) { | 
| 3610   gfx::Size size(5, 5); | 3623   gfx::Size size(5, 5); | 
| 3611 | 3624 | 
| 3612   const IPC::Message* msg = | 3625   const IPC::Message* msg = | 
| 3613       sink_->GetUniqueMessageMatching(ViewMsg_SetSurfaceIdNamespace::ID); | 3626       sink_->GetUniqueMessageMatching(ViewMsg_SetSurfaceIdNamespace::ID); | 
| 3614   EXPECT_TRUE(msg); | 3627   EXPECT_TRUE(msg); | 
| 3615   ViewMsg_SetSurfaceIdNamespace::Param params; | 3628   ViewMsg_SetSurfaceIdNamespace::Param params; | 
| 3616   ViewMsg_SetSurfaceIdNamespace::Read(msg, ¶ms); | 3629   ViewMsg_SetSurfaceIdNamespace::Read(msg, ¶ms); | 
| 3617   view_->InitAsChild(NULL); | 3630   view_->InitAsChild(NULL); | 
| 3618   view_->Show(); | 3631   view_->Show(); | 
| 3619   view_->SetSize(size); | 3632   view_->SetSize(size); | 
| 3620   view_->OnSwapCompositorFrame(0, | 3633   view_->OnSwapCompositorFrame(0, | 
| 3621                                MakeDelegatedFrame(1.f, size, gfx::Rect(size))); | 3634                                MakeDelegatedFrame(1.f, size, gfx::Rect(size))); | 
| 3622   EXPECT_EQ(view_->GetSurfaceIdNamespace(), base::get<0>(params)); | 3635   EXPECT_EQ(view_->GetSurfaceIdNamespace(), base::get<0>(params)); | 
| 3623 } | 3636 } | 
| 3624 | 3637 | 
| 3625 }  // namespace content | 3638 }  // namespace content | 
| OLD | NEW | 
|---|