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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/bind.h" | 6 #include "base/bind.h" |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/memory/shared_memory.h" | 9 #include "base/memory/shared_memory.h" |
10 #include "base/timer/timer.h" | 10 #include "base/timer/timer.h" |
(...skipping 30 matching lines...) Expand all Loading... |
41 | 41 |
42 #if defined(USE_AURA) | 42 #if defined(USE_AURA) |
43 #include "content/browser/renderer_host/ui_events_helper.h" | 43 #include "content/browser/renderer_host/ui_events_helper.h" |
44 #include "ui/events/event.h" | 44 #include "ui/events/event.h" |
45 #endif | 45 #endif |
46 | 46 |
47 using base::TimeDelta; | 47 using base::TimeDelta; |
48 using blink::WebGestureEvent; | 48 using blink::WebGestureEvent; |
49 using blink::WebInputEvent; | 49 using blink::WebInputEvent; |
50 using blink::WebKeyboardEvent; | 50 using blink::WebKeyboardEvent; |
51 using blink::WebMouseEvent; | |
52 using blink::WebMouseWheelEvent; | 51 using blink::WebMouseWheelEvent; |
53 using blink::WebTouchEvent; | 52 using blink::WebTouchEvent; |
54 using blink::WebTouchPoint; | 53 using blink::WebTouchPoint; |
55 | 54 |
56 namespace content { | 55 namespace content { |
57 | 56 |
58 // TestOverscrollDelegate ------------------------------------------------------ | 57 // TestOverscrollDelegate ------------------------------------------------------ |
59 | 58 |
60 class TestOverscrollDelegate : public OverscrollControllerDelegate { | 59 class TestOverscrollDelegate : public OverscrollControllerDelegate { |
61 public: | 60 public: |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 | 192 |
194 class MockRenderWidgetHost : public RenderWidgetHostImpl { | 193 class MockRenderWidgetHost : public RenderWidgetHostImpl { |
195 public: | 194 public: |
196 MockRenderWidgetHost( | 195 MockRenderWidgetHost( |
197 RenderWidgetHostDelegate* delegate, | 196 RenderWidgetHostDelegate* delegate, |
198 RenderProcessHost* process, | 197 RenderProcessHost* process, |
199 int routing_id) | 198 int routing_id) |
200 : RenderWidgetHostImpl(delegate, process, routing_id, false), | 199 : RenderWidgetHostImpl(delegate, process, routing_id, false), |
201 unresponsive_timer_fired_(false) { | 200 unresponsive_timer_fired_(false) { |
202 input_router_impl_ = static_cast<InputRouterImpl*>(input_router_.get()); | 201 input_router_impl_ = static_cast<InputRouterImpl*>(input_router_.get()); |
203 acked_touch_event_type_ = blink::WebInputEvent::Undefined; | |
204 } | 202 } |
205 | 203 |
206 // Allow poking at a few private members. | 204 // Allow poking at a few private members. |
207 using RenderWidgetHostImpl::OnUpdateRect; | 205 using RenderWidgetHostImpl::OnUpdateRect; |
208 using RenderWidgetHostImpl::RendererExited; | 206 using RenderWidgetHostImpl::RendererExited; |
209 using RenderWidgetHostImpl::last_requested_size_; | 207 using RenderWidgetHostImpl::last_requested_size_; |
210 using RenderWidgetHostImpl::is_hidden_; | 208 using RenderWidgetHostImpl::is_hidden_; |
211 using RenderWidgetHostImpl::resize_ack_pending_; | 209 using RenderWidgetHostImpl::resize_ack_pending_; |
212 using RenderWidgetHostImpl::input_router_; | 210 using RenderWidgetHostImpl::input_router_; |
213 | 211 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 | 254 |
257 void set_debounce_interval_time_ms(int delay_ms) { | 255 void set_debounce_interval_time_ms(int delay_ms) { |
258 gesture_event_queue(). | 256 gesture_event_queue(). |
259 set_debounce_interval_time_ms_for_testing(delay_ms); | 257 set_debounce_interval_time_ms_for_testing(delay_ms); |
260 } | 258 } |
261 | 259 |
262 bool TouchEventQueueEmpty() const { | 260 bool TouchEventQueueEmpty() const { |
263 return touch_event_queue().empty(); | 261 return touch_event_queue().empty(); |
264 } | 262 } |
265 | 263 |
266 virtual void OnTouchEventAck( | |
267 const TouchEventWithLatencyInfo& event, | |
268 InputEventAckState ack_result) OVERRIDE { | |
269 // Sniff touch acks. | |
270 acked_touch_event_type_ = event.event.type; | |
271 RenderWidgetHostImpl::OnTouchEventAck(event, ack_result); | |
272 } | |
273 | |
274 WebInputEvent::Type acked_touch_event_type() const { | |
275 return acked_touch_event_type_; | |
276 } | |
277 | |
278 bool ScrollStateIsContentScrolling() const { | 264 bool ScrollStateIsContentScrolling() const { |
279 return scroll_state() == OverscrollController::STATE_CONTENT_SCROLLING; | 265 return scroll_state() == OverscrollController::STATE_CONTENT_SCROLLING; |
280 } | 266 } |
281 | 267 |
282 bool ScrollStateIsOverscrolling() const { | 268 bool ScrollStateIsOverscrolling() const { |
283 return scroll_state() == OverscrollController::STATE_OVERSCROLLING; | 269 return scroll_state() == OverscrollController::STATE_OVERSCROLLING; |
284 } | 270 } |
285 | 271 |
286 bool ScrollStateIsUnknown() const { | 272 bool ScrollStateIsUnknown() const { |
287 return scroll_state() == OverscrollController::STATE_UNKNOWN; | 273 return scroll_state() == OverscrollController::STATE_UNKNOWN; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 const GestureEventQueue& gesture_event_queue() const { | 314 const GestureEventQueue& gesture_event_queue() const { |
329 return input_router_impl_->gesture_event_queue_; | 315 return input_router_impl_->gesture_event_queue_; |
330 } | 316 } |
331 | 317 |
332 GestureEventQueue& gesture_event_queue() { | 318 GestureEventQueue& gesture_event_queue() { |
333 return input_router_impl_->gesture_event_queue_; | 319 return input_router_impl_->gesture_event_queue_; |
334 } | 320 } |
335 | 321 |
336 private: | 322 private: |
337 bool unresponsive_timer_fired_; | 323 bool unresponsive_timer_fired_; |
338 WebInputEvent::Type acked_touch_event_type_; | |
339 | 324 |
340 // |input_router_impl_| and |mock_input_router_| are owned by | 325 // |input_router_impl_| and |mock_input_router_| are owned by |
341 // RenderWidgetHostImpl. The handles below are provided for convenience so | 326 // RenderWidgetHostImpl. The handles below are provided for convenience so |
342 // that we don't have to reinterpret_cast it all the time. | 327 // that we don't have to reinterpret_cast it all the time. |
343 InputRouterImpl* input_router_impl_; | 328 InputRouterImpl* input_router_impl_; |
344 MockInputRouter* mock_input_router_; | 329 MockInputRouter* mock_input_router_; |
345 | 330 |
346 scoped_ptr<TestOverscrollDelegate> overscroll_delegate_; | 331 scoped_ptr<TestOverscrollDelegate> overscroll_delegate_; |
347 | 332 |
348 DISALLOW_COPY_AND_ASSIGN(MockRenderWidgetHost); | 333 DISALLOW_COPY_AND_ASSIGN(MockRenderWidgetHost); |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 bool handle_wheel_event_called_; | 575 bool handle_wheel_event_called_; |
591 }; | 576 }; |
592 | 577 |
593 // RenderWidgetHostTest -------------------------------------------------------- | 578 // RenderWidgetHostTest -------------------------------------------------------- |
594 | 579 |
595 class RenderWidgetHostTest : public testing::Test { | 580 class RenderWidgetHostTest : public testing::Test { |
596 public: | 581 public: |
597 RenderWidgetHostTest() | 582 RenderWidgetHostTest() |
598 : process_(NULL), | 583 : process_(NULL), |
599 handle_key_press_event_(false), | 584 handle_key_press_event_(false), |
600 handle_mouse_event_(false), | 585 handle_mouse_event_(false) { |
601 simulated_event_time_delta_seconds_(0) { | |
602 last_simulated_event_time_seconds_ = | |
603 (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); | |
604 } | 586 } |
605 virtual ~RenderWidgetHostTest() { | 587 virtual ~RenderWidgetHostTest() { |
606 } | 588 } |
607 | 589 |
608 bool KeyPressEventCallback(const NativeWebKeyboardEvent& /* event */) { | 590 bool KeyPressEventCallback(const NativeWebKeyboardEvent& /* event */) { |
609 return handle_key_press_event_; | 591 return handle_key_press_event_; |
610 } | 592 } |
611 bool MouseEventCallback(const blink::WebMouseEvent& /* event */) { | 593 bool MouseEventCallback(const blink::WebMouseEvent& /* event */) { |
612 return handle_mouse_event_; | 594 return handle_mouse_event_; |
613 } | 595 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
656 } | 638 } |
657 | 639 |
658 void SendInputEventACK(WebInputEvent::Type type, | 640 void SendInputEventACK(WebInputEvent::Type type, |
659 InputEventAckState ack_result) { | 641 InputEventAckState ack_result) { |
660 scoped_ptr<IPC::Message> response( | 642 scoped_ptr<IPC::Message> response( |
661 new InputHostMsg_HandleInputEvent_ACK(0, type, ack_result, | 643 new InputHostMsg_HandleInputEvent_ACK(0, type, ack_result, |
662 ui::LatencyInfo())); | 644 ui::LatencyInfo())); |
663 host_->OnMessageReceived(*response); | 645 host_->OnMessageReceived(*response); |
664 } | 646 } |
665 | 647 |
666 double GetNextSimulatedEventTimeSeconds() { | |
667 last_simulated_event_time_seconds_ += simulated_event_time_delta_seconds_; | |
668 return last_simulated_event_time_seconds_; | |
669 } | |
670 | |
671 void SimulateKeyboardEvent(WebInputEvent::Type type) { | 648 void SimulateKeyboardEvent(WebInputEvent::Type type) { |
672 SimulateKeyboardEvent(type, 0); | 649 WebKeyboardEvent event = SyntheticWebKeyboardEventBuilder::Build(type); |
673 } | 650 NativeWebKeyboardEvent native_event; |
674 | 651 memcpy(&native_event, &event, sizeof(event)); |
675 void SimulateKeyboardEvent(WebInputEvent::Type type, int modifiers) { | |
676 WebKeyboardEvent event = SyntheticWebKeyboardEventBuilder::Build(type); | |
677 event.modifiers = modifiers; | |
678 NativeWebKeyboardEvent native_event; | |
679 memcpy(&native_event, &event, sizeof(event)); | |
680 host_->ForwardKeyboardEvent(native_event); | 652 host_->ForwardKeyboardEvent(native_event); |
681 } | 653 } |
682 | 654 |
683 void SimulateMouseEvent(WebInputEvent::Type type) { | 655 void SimulateMouseEvent(WebInputEvent::Type type) { |
684 host_->ForwardMouseEvent(SyntheticWebMouseEventBuilder::Build(type)); | 656 host_->ForwardMouseEvent(SyntheticWebMouseEventBuilder::Build(type)); |
685 } | 657 } |
686 | 658 |
687 void SimulateMouseEventWithLatencyInfo(WebInputEvent::Type type, | 659 void SimulateMouseEventWithLatencyInfo(WebInputEvent::Type type, |
688 const ui::LatencyInfo& ui_latency) { | 660 const ui::LatencyInfo& ui_latency) { |
689 host_->ForwardMouseEventWithLatencyInfo( | 661 host_->ForwardMouseEventWithLatencyInfo( |
(...skipping 10 matching lines...) Expand all Loading... |
700 float dY, | 672 float dY, |
701 int modifiers, | 673 int modifiers, |
702 bool precise, | 674 bool precise, |
703 const ui::LatencyInfo& ui_latency) { | 675 const ui::LatencyInfo& ui_latency) { |
704 host_->ForwardWheelEventWithLatencyInfo( | 676 host_->ForwardWheelEventWithLatencyInfo( |
705 SyntheticWebMouseWheelEventBuilder::Build(dX, dY, modifiers, precise), | 677 SyntheticWebMouseWheelEventBuilder::Build(dX, dY, modifiers, precise), |
706 ui_latency); | 678 ui_latency); |
707 } | 679 } |
708 | 680 |
709 void SimulateMouseMove(int x, int y, int modifiers) { | 681 void SimulateMouseMove(int x, int y, int modifiers) { |
710 SimulateMouseEvent(WebInputEvent::MouseMove, x, y, modifiers, false); | 682 host_->ForwardMouseEvent( |
711 } | 683 SyntheticWebMouseEventBuilder::Build(WebInputEvent::MouseMove, |
712 | 684 x, |
713 void SimulateMouseEvent( | 685 y, |
714 WebInputEvent::Type type, int x, int y, int modifiers, bool pressed) { | 686 modifiers)); |
715 WebMouseEvent event = | |
716 SyntheticWebMouseEventBuilder::Build(type, x, y, modifiers); | |
717 if (pressed) | |
718 event.button = WebMouseEvent::ButtonLeft; | |
719 event.timeStampSeconds = GetNextSimulatedEventTimeSeconds(); | |
720 host_->ForwardMouseEvent(event); | |
721 } | 687 } |
722 | 688 |
723 void SimulateWheelEventWithPhase(WebMouseWheelEvent::Phase phase) { | 689 void SimulateWheelEventWithPhase(WebMouseWheelEvent::Phase phase) { |
724 host_->ForwardWheelEvent(SyntheticWebMouseWheelEventBuilder::Build(phase)); | 690 host_->ForwardWheelEvent(SyntheticWebMouseWheelEventBuilder::Build(phase)); |
725 } | 691 } |
726 | 692 |
727 // Inject provided synthetic WebGestureEvent instance. | 693 // Inject provided synthetic WebGestureEvent instance. |
728 void SimulateGestureEventCore(const WebGestureEvent& gesture_event) { | 694 void SimulateGestureEventCore(const WebGestureEvent& gesture_event) { |
729 host_->ForwardGestureEvent(gesture_event); | 695 host_->ForwardGestureEvent(gesture_event); |
730 } | 696 } |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
815 base::MessageLoopForUI message_loop_; | 781 base::MessageLoopForUI message_loop_; |
816 | 782 |
817 scoped_ptr<TestBrowserContext> browser_context_; | 783 scoped_ptr<TestBrowserContext> browser_context_; |
818 RenderWidgetHostProcess* process_; // Deleted automatically by the widget. | 784 RenderWidgetHostProcess* process_; // Deleted automatically by the widget. |
819 scoped_ptr<MockRenderWidgetHostDelegate> delegate_; | 785 scoped_ptr<MockRenderWidgetHostDelegate> delegate_; |
820 scoped_ptr<MockRenderWidgetHost> host_; | 786 scoped_ptr<MockRenderWidgetHost> host_; |
821 scoped_ptr<TestView> view_; | 787 scoped_ptr<TestView> view_; |
822 scoped_ptr<gfx::Screen> screen_; | 788 scoped_ptr<gfx::Screen> screen_; |
823 bool handle_key_press_event_; | 789 bool handle_key_press_event_; |
824 bool handle_mouse_event_; | 790 bool handle_mouse_event_; |
825 double last_simulated_event_time_seconds_; | |
826 double simulated_event_time_delta_seconds_; | |
827 | 791 |
828 private: | 792 private: |
829 SyntheticWebTouchEvent touch_event_; | 793 SyntheticWebTouchEvent touch_event_; |
830 | 794 |
831 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostTest); | 795 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostTest); |
832 }; | 796 }; |
833 | 797 |
834 #if GTEST_HAS_PARAM_TEST | 798 #if GTEST_HAS_PARAM_TEST |
835 // RenderWidgetHostWithSourceTest ---------------------------------------------- | 799 // RenderWidgetHostWithSourceTest ---------------------------------------------- |
836 | 800 |
(...skipping 1573 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2410 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); | 2374 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); |
2411 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->completed_mode()); | 2375 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->completed_mode()); |
2412 | 2376 |
2413 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, | 2377 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
2414 WebGestureEvent::Touchscreen); | 2378 WebGestureEvent::Touchscreen); |
2415 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); | 2379 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); |
2416 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->completed_mode()); | 2380 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->completed_mode()); |
2417 process_->sink().ClearMessages(); | 2381 process_->sink().ClearMessages(); |
2418 } | 2382 } |
2419 | 2383 |
2420 std::string GetInputMessageTypes(RenderWidgetHostProcess* process) { | |
2421 const WebInputEvent* event = NULL; | |
2422 ui::LatencyInfo latency_info; | |
2423 bool is_keyboard_shortcut; | |
2424 std::string result; | |
2425 for (size_t i = 0; i < process->sink().message_count(); ++i) { | |
2426 const IPC::Message *message = process->sink().GetMessageAt(i); | |
2427 EXPECT_EQ(InputMsg_HandleInputEvent::ID, message->type()); | |
2428 EXPECT_TRUE(InputMsg_HandleInputEvent::Read( | |
2429 message, &event, &latency_info, &is_keyboard_shortcut)); | |
2430 if (i != 0) | |
2431 result += " "; | |
2432 result += WebInputEventTraits::GetName(event->type); | |
2433 } | |
2434 process->sink().ClearMessages(); | |
2435 return result; | |
2436 } | |
2437 | |
2438 TEST_F(RenderWidgetHostTest, TouchEmulator) { | |
2439 simulated_event_time_delta_seconds_ = 0.1; | |
2440 host_->DisableGestureDebounce(); | |
2441 // Immediately ack all touches instead of sending them to the renderer. | |
2442 host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, false)); | |
2443 host_->OnMessageReceived( | |
2444 ViewHostMsg_SetTouchEventEmulationEnabled(0, true, true)); | |
2445 process_->sink().ClearMessages(); | |
2446 view_->set_bounds(gfx::Rect(0, 0, 400, 200)); | |
2447 view_->Show(); | |
2448 | |
2449 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 10, 0, false); | |
2450 EXPECT_EQ(0U, process_->sink().message_count()); | |
2451 | |
2452 // Mouse press becomes touch start which in turn becomes tap. | |
2453 SimulateMouseEvent(WebInputEvent::MouseDown, 10, 10, 0, true); | |
2454 EXPECT_EQ(WebInputEvent::TouchStart, host_->acked_touch_event_type()); | |
2455 EXPECT_EQ("GestureTapDown", GetInputMessageTypes(process_)); | |
2456 SendInputEventACK(WebInputEvent::GestureTapDown, | |
2457 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
2458 | |
2459 // Mouse drag generates touch move, cancels tap and starts scroll. | |
2460 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 30, 0, true); | |
2461 EXPECT_EQ(WebInputEvent::TouchMove, host_->acked_touch_event_type()); | |
2462 EXPECT_EQ( | |
2463 "GestureTapCancel GestureScrollBegin GestureScrollUpdate", | |
2464 GetInputMessageTypes(process_)); | |
2465 SendInputEventACK(WebInputEvent::GestureTapCancel, | |
2466 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
2467 SendInputEventACK(WebInputEvent::GestureScrollBegin, | |
2468 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2469 SendInputEventACK(WebInputEvent::GestureScrollUpdate, | |
2470 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2471 EXPECT_EQ(0U, process_->sink().message_count()); | |
2472 | |
2473 // Mouse drag with shift becomes pinch. | |
2474 SimulateMouseEvent( | |
2475 WebInputEvent::MouseMove, 10, 40, WebInputEvent::ShiftKey, true); | |
2476 EXPECT_EQ(WebInputEvent::TouchMove, host_->acked_touch_event_type()); | |
2477 EXPECT_EQ("GesturePinchBegin", | |
2478 GetInputMessageTypes(process_)); | |
2479 SendInputEventACK(WebInputEvent::GesturePinchBegin, | |
2480 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2481 EXPECT_EQ(0U, process_->sink().message_count()); | |
2482 | |
2483 SimulateMouseEvent( | |
2484 WebInputEvent::MouseMove, 10, 50, WebInputEvent::ShiftKey, true); | |
2485 EXPECT_EQ(WebInputEvent::TouchMove, host_->acked_touch_event_type()); | |
2486 EXPECT_EQ("GesturePinchUpdate", | |
2487 GetInputMessageTypes(process_)); | |
2488 SendInputEventACK(WebInputEvent::GesturePinchUpdate, | |
2489 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2490 EXPECT_EQ(0U, process_->sink().message_count()); | |
2491 | |
2492 // Mouse drag without shift becomes scroll again. | |
2493 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 60, 0, true); | |
2494 EXPECT_EQ(WebInputEvent::TouchMove, host_->acked_touch_event_type()); | |
2495 EXPECT_EQ("GesturePinchEnd GestureScrollUpdate", | |
2496 GetInputMessageTypes(process_)); | |
2497 SendInputEventACK(WebInputEvent::GestureScrollUpdate, | |
2498 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2499 EXPECT_EQ(0U, process_->sink().message_count()); | |
2500 | |
2501 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 70, 0, true); | |
2502 EXPECT_EQ(WebInputEvent::TouchMove, host_->acked_touch_event_type()); | |
2503 EXPECT_EQ("GestureScrollUpdate", | |
2504 GetInputMessageTypes(process_)); | |
2505 SendInputEventACK(WebInputEvent::GestureScrollUpdate, | |
2506 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2507 EXPECT_EQ(0U, process_->sink().message_count()); | |
2508 | |
2509 SimulateMouseEvent(WebInputEvent::MouseUp, 10, 70, 0, true); | |
2510 EXPECT_EQ(WebInputEvent::TouchEnd, host_->acked_touch_event_type()); | |
2511 EXPECT_EQ("GestureScrollEnd", GetInputMessageTypes(process_)); | |
2512 SendInputEventACK(WebInputEvent::GestureScrollEnd, | |
2513 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2514 EXPECT_EQ(0U, process_->sink().message_count()); | |
2515 | |
2516 // Mouse move does nothing. | |
2517 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 80, 0, false); | |
2518 EXPECT_EQ(0U, process_->sink().message_count()); | |
2519 | |
2520 // Another mouse down continues scroll. | |
2521 SimulateMouseEvent(WebInputEvent::MouseDown, 10, 80, 0, true); | |
2522 EXPECT_EQ(WebInputEvent::TouchStart, host_->acked_touch_event_type()); | |
2523 EXPECT_EQ("GestureTapDown", GetInputMessageTypes(process_)); | |
2524 SendInputEventACK(WebInputEvent::GestureTapDown, | |
2525 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
2526 EXPECT_EQ(0U, process_->sink().message_count()); | |
2527 | |
2528 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 100, 0, true); | |
2529 EXPECT_EQ(WebInputEvent::TouchMove, host_->acked_touch_event_type()); | |
2530 EXPECT_EQ( | |
2531 "GestureTapCancel GestureScrollBegin GestureScrollUpdate", | |
2532 GetInputMessageTypes(process_)); | |
2533 SendInputEventACK(WebInputEvent::GestureTapCancel, | |
2534 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
2535 SendInputEventACK(WebInputEvent::GestureScrollBegin, | |
2536 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2537 SendInputEventACK(WebInputEvent::GestureScrollUpdate, | |
2538 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2539 EXPECT_EQ(0U, process_->sink().message_count()); | |
2540 | |
2541 // Another pinch. | |
2542 SimulateMouseEvent( | |
2543 WebInputEvent::MouseMove, 10, 110, WebInputEvent::ShiftKey, true); | |
2544 EXPECT_EQ(WebInputEvent::TouchMove, host_->acked_touch_event_type()); | |
2545 EXPECT_EQ("GesturePinchBegin", | |
2546 GetInputMessageTypes(process_)); | |
2547 SendInputEventACK(WebInputEvent::GesturePinchBegin, | |
2548 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2549 EXPECT_EQ(0U, process_->sink().message_count()); | |
2550 | |
2551 SimulateMouseEvent( | |
2552 WebInputEvent::MouseMove, 10, 120, WebInputEvent::ShiftKey, true); | |
2553 EXPECT_EQ(WebInputEvent::TouchMove, host_->acked_touch_event_type()); | |
2554 EXPECT_EQ("GesturePinchUpdate", | |
2555 GetInputMessageTypes(process_)); | |
2556 SendInputEventACK(WebInputEvent::GesturePinchUpdate, | |
2557 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2558 EXPECT_EQ(0U, process_->sink().message_count()); | |
2559 | |
2560 // Turn off emulation during a pinch. | |
2561 host_->OnMessageReceived( | |
2562 ViewHostMsg_SetTouchEventEmulationEnabled(0, false, false)); | |
2563 EXPECT_EQ(WebInputEvent::TouchCancel, host_->acked_touch_event_type()); | |
2564 EXPECT_EQ("GesturePinchEnd GestureScrollEnd", | |
2565 GetInputMessageTypes(process_)); | |
2566 SendInputEventACK(WebInputEvent::GesturePinchEnd, | |
2567 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2568 SendInputEventACK(WebInputEvent::GestureScrollEnd, | |
2569 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2570 EXPECT_EQ(0U, process_->sink().message_count()); | |
2571 | |
2572 // Mouse event should pass untouched. | |
2573 SimulateMouseEvent( | |
2574 WebInputEvent::MouseMove, 10, 10, WebInputEvent::ShiftKey, true); | |
2575 EXPECT_EQ("MouseMove", GetInputMessageTypes(process_)); | |
2576 SendInputEventACK(WebInputEvent::MouseMove, | |
2577 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2578 EXPECT_EQ(0U, process_->sink().message_count()); | |
2579 | |
2580 // Turn on emulation. | |
2581 host_->OnMessageReceived( | |
2582 ViewHostMsg_SetTouchEventEmulationEnabled(0, true, true)); | |
2583 EXPECT_EQ(0U, process_->sink().message_count()); | |
2584 | |
2585 // Another touch. | |
2586 SimulateMouseEvent(WebInputEvent::MouseDown, 10, 10, 0, true); | |
2587 EXPECT_EQ(WebInputEvent::TouchStart, host_->acked_touch_event_type()); | |
2588 EXPECT_EQ("GestureTapDown", GetInputMessageTypes(process_)); | |
2589 SendInputEventACK(WebInputEvent::GestureTapDown, | |
2590 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
2591 EXPECT_EQ(0U, process_->sink().message_count()); | |
2592 | |
2593 // Scroll. | |
2594 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 30, 0, true); | |
2595 EXPECT_EQ(WebInputEvent::TouchMove, host_->acked_touch_event_type()); | |
2596 EXPECT_EQ( | |
2597 "GestureTapCancel GestureScrollBegin GestureScrollUpdate", | |
2598 GetInputMessageTypes(process_)); | |
2599 SendInputEventACK(WebInputEvent::GestureTapCancel, | |
2600 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
2601 SendInputEventACK(WebInputEvent::GestureScrollBegin, | |
2602 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2603 SendInputEventACK(WebInputEvent::GestureScrollUpdate, | |
2604 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2605 | |
2606 // Turn off emulation during a scroll. | |
2607 host_->OnMessageReceived( | |
2608 ViewHostMsg_SetTouchEventEmulationEnabled(0, false, false)); | |
2609 EXPECT_EQ(WebInputEvent::TouchCancel, host_->acked_touch_event_type()); | |
2610 | |
2611 EXPECT_EQ("GestureScrollEnd", GetInputMessageTypes(process_)); | |
2612 SendInputEventACK(WebInputEvent::GestureScrollEnd, | |
2613 INPUT_EVENT_ACK_STATE_CONSUMED); | |
2614 EXPECT_EQ(0U, process_->sink().message_count()); | |
2615 } | |
2616 | |
2617 #define TEST_InputRouterRoutes_NOARGS(INPUTMSG) \ | 2384 #define TEST_InputRouterRoutes_NOARGS(INPUTMSG) \ |
2618 TEST_F(RenderWidgetHostTest, InputRouterRoutes##INPUTMSG) { \ | 2385 TEST_F(RenderWidgetHostTest, InputRouterRoutes##INPUTMSG) { \ |
2619 host_->SetupForInputRouterTest(); \ | 2386 host_->SetupForInputRouterTest(); \ |
2620 host_->INPUTMSG(); \ | 2387 host_->INPUTMSG(); \ |
2621 EXPECT_TRUE(host_->mock_input_router()->send_event_called_); \ | 2388 EXPECT_TRUE(host_->mock_input_router()->send_event_called_); \ |
2622 } | 2389 } |
2623 | 2390 |
2624 TEST_InputRouterRoutes_NOARGS(Focus); | 2391 TEST_InputRouterRoutes_NOARGS(Focus); |
2625 TEST_InputRouterRoutes_NOARGS(Blur); | 2392 TEST_InputRouterRoutes_NOARGS(Blur); |
2626 TEST_InputRouterRoutes_NOARGS(LostCapture); | 2393 TEST_InputRouterRoutes_NOARGS(LostCapture); |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2847 | 2614 |
2848 // Tests RWHI::ForwardTouchEventWithLatencyInfo(). | 2615 // Tests RWHI::ForwardTouchEventWithLatencyInfo(). |
2849 PressTouchPoint(0, 1); | 2616 PressTouchPoint(0, 1); |
2850 SendTouchEvent(); | 2617 SendTouchEvent(); |
2851 CheckLatencyInfoComponentInMessage( | 2618 CheckLatencyInfoComponentInMessage( |
2852 process_, GetLatencyComponentId(), WebInputEvent::TouchStart); | 2619 process_, GetLatencyComponentId(), WebInputEvent::TouchStart); |
2853 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); | 2620 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); |
2854 } | 2621 } |
2855 | 2622 |
2856 } // namespace content | 2623 } // namespace content |
OLD | NEW |