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 |