Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(317)

Side by Side Diff: content/browser/renderer_host/render_widget_host_unittest.cc

Issue 177213016: Give blink a chance to consume ctrl+wheel events before zooming (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge with trunk (no changes) Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 } 422 }
423 423
424 // TestView -------------------------------------------------------------------- 424 // TestView --------------------------------------------------------------------
425 425
426 // This test view allows us to specify the size, and keep track of acked 426 // This test view allows us to specify the size, and keep track of acked
427 // touch-events. 427 // touch-events.
428 class TestView : public TestRenderWidgetHostView { 428 class TestView : public TestRenderWidgetHostView {
429 public: 429 public:
430 explicit TestView(RenderWidgetHostImpl* rwh) 430 explicit TestView(RenderWidgetHostImpl* rwh)
431 : TestRenderWidgetHostView(rwh), 431 : TestRenderWidgetHostView(rwh),
432 unhandled_wheel_event_count_(0),
432 acked_event_count_(0), 433 acked_event_count_(0),
433 gesture_event_type_(-1), 434 gesture_event_type_(-1),
434 use_fake_physical_backing_size_(false), 435 use_fake_physical_backing_size_(false),
435 ack_result_(INPUT_EVENT_ACK_STATE_UNKNOWN) { 436 ack_result_(INPUT_EVENT_ACK_STATE_UNKNOWN) {
436 } 437 }
437 438
438 // Sets the bounds returned by GetViewBounds. 439 // Sets the bounds returned by GetViewBounds.
439 void set_bounds(const gfx::Rect& bounds) { 440 void set_bounds(const gfx::Rect& bounds) {
440 bounds_ = bounds; 441 bounds_ = bounds;
441 } 442 }
442 443
443 const WebTouchEvent& acked_event() const { return acked_event_; } 444 const WebTouchEvent& acked_event() const { return acked_event_; }
444 int acked_event_count() const { return acked_event_count_; } 445 int acked_event_count() const { return acked_event_count_; }
445 void ClearAckedEvent() { 446 void ClearAckedEvent() {
446 acked_event_.type = blink::WebInputEvent::Undefined; 447 acked_event_.type = blink::WebInputEvent::Undefined;
447 acked_event_count_ = 0; 448 acked_event_count_ = 0;
448 } 449 }
449 450
450 const WebMouseWheelEvent& unhandled_wheel_event() const { 451 const WebMouseWheelEvent& unhandled_wheel_event() const {
451 return unhandled_wheel_event_; 452 return unhandled_wheel_event_;
452 } 453 }
454 int unhandled_wheel_event_count() const {
455 return unhandled_wheel_event_count_;
456 }
453 int gesture_event_type() const { return gesture_event_type_; } 457 int gesture_event_type() const { return gesture_event_type_; }
454 InputEventAckState ack_result() const { return ack_result_; } 458 InputEventAckState ack_result() const { return ack_result_; }
455 459
456 void SetMockPhysicalBackingSize(const gfx::Size& mock_physical_backing_size) { 460 void SetMockPhysicalBackingSize(const gfx::Size& mock_physical_backing_size) {
457 use_fake_physical_backing_size_ = true; 461 use_fake_physical_backing_size_ = true;
458 mock_physical_backing_size_ = mock_physical_backing_size; 462 mock_physical_backing_size_ = mock_physical_backing_size;
459 } 463 }
460 void ClearMockPhysicalBackingSize() { 464 void ClearMockPhysicalBackingSize() {
461 use_fake_physical_backing_size_ = false; 465 use_fake_physical_backing_size_ = false;
462 } 466 }
463 467
464 // RenderWidgetHostView override. 468 // RenderWidgetHostView override.
465 virtual gfx::Rect GetViewBounds() const OVERRIDE { 469 virtual gfx::Rect GetViewBounds() const OVERRIDE {
466 return bounds_; 470 return bounds_;
467 } 471 }
468 virtual void ProcessAckedTouchEvent(const TouchEventWithLatencyInfo& touch, 472 virtual void ProcessAckedTouchEvent(const TouchEventWithLatencyInfo& touch,
469 InputEventAckState ack_result) OVERRIDE { 473 InputEventAckState ack_result) OVERRIDE {
470 acked_event_ = touch.event; 474 acked_event_ = touch.event;
471 ++acked_event_count_; 475 ++acked_event_count_;
472 } 476 }
473 virtual void UnhandledWheelEvent(const WebMouseWheelEvent& event) OVERRIDE { 477 virtual void UnhandledWheelEvent(const WebMouseWheelEvent& event) OVERRIDE {
478 unhandled_wheel_event_count_++;
474 unhandled_wheel_event_ = event; 479 unhandled_wheel_event_ = event;
475 } 480 }
476 virtual void GestureEventAck(const WebGestureEvent& event, 481 virtual void GestureEventAck(const WebGestureEvent& event,
477 InputEventAckState ack_result) OVERRIDE { 482 InputEventAckState ack_result) OVERRIDE {
478 gesture_event_type_ = event.type; 483 gesture_event_type_ = event.type;
479 ack_result_ = ack_result; 484 ack_result_ = ack_result;
480 } 485 }
481 virtual gfx::Size GetPhysicalBackingSize() const OVERRIDE { 486 virtual gfx::Size GetPhysicalBackingSize() const OVERRIDE {
482 if (use_fake_physical_backing_size_) 487 if (use_fake_physical_backing_size_)
483 return mock_physical_backing_size_; 488 return mock_physical_backing_size_;
484 return TestRenderWidgetHostView::GetPhysicalBackingSize(); 489 return TestRenderWidgetHostView::GetPhysicalBackingSize();
485 } 490 }
486 491
487 protected: 492 protected:
488 WebMouseWheelEvent unhandled_wheel_event_; 493 WebMouseWheelEvent unhandled_wheel_event_;
494 int unhandled_wheel_event_count_;
489 WebTouchEvent acked_event_; 495 WebTouchEvent acked_event_;
490 int acked_event_count_; 496 int acked_event_count_;
491 int gesture_event_type_; 497 int gesture_event_type_;
492 gfx::Rect bounds_; 498 gfx::Rect bounds_;
493 bool use_fake_physical_backing_size_; 499 bool use_fake_physical_backing_size_;
494 gfx::Size mock_physical_backing_size_; 500 gfx::Size mock_physical_backing_size_;
495 InputEventAckState ack_result_; 501 InputEventAckState ack_result_;
496 502
497 DISALLOW_COPY_AND_ASSIGN(TestView); 503 DISALLOW_COPY_AND_ASSIGN(TestView);
498 }; 504 };
499 505
500 // MockRenderWidgetHostDelegate -------------------------------------------- 506 // MockRenderWidgetHostDelegate --------------------------------------------
501 507
502 class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate { 508 class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
503 public: 509 public:
504 MockRenderWidgetHostDelegate() 510 MockRenderWidgetHostDelegate()
505 : prehandle_keyboard_event_(false), 511 : prehandle_keyboard_event_(false),
506 prehandle_keyboard_event_called_(false), 512 prehandle_keyboard_event_called_(false),
507 prehandle_keyboard_event_type_(WebInputEvent::Undefined), 513 prehandle_keyboard_event_type_(WebInputEvent::Undefined),
508 unhandled_keyboard_event_called_(false), 514 unhandled_keyboard_event_called_(false),
509 unhandled_keyboard_event_type_(WebInputEvent::Undefined) { 515 unhandled_keyboard_event_type_(WebInputEvent::Undefined),
516 handle_wheel_event_(false),
517 handle_wheel_event_called_(false) {
510 } 518 }
511 virtual ~MockRenderWidgetHostDelegate() {} 519 virtual ~MockRenderWidgetHostDelegate() {}
512 520
513 // Tests that make sure we ignore keyboard event acknowledgments to events we 521 // Tests that make sure we ignore keyboard event acknowledgments to events we
514 // didn't send work by making sure we didn't call UnhandledKeyboardEvent(). 522 // didn't send work by making sure we didn't call UnhandledKeyboardEvent().
515 bool unhandled_keyboard_event_called() const { 523 bool unhandled_keyboard_event_called() const {
516 return unhandled_keyboard_event_called_; 524 return unhandled_keyboard_event_called_;
517 } 525 }
518 526
519 WebInputEvent::Type unhandled_keyboard_event_type() const { 527 WebInputEvent::Type unhandled_keyboard_event_type() const {
520 return unhandled_keyboard_event_type_; 528 return unhandled_keyboard_event_type_;
521 } 529 }
522 530
523 bool prehandle_keyboard_event_called() const { 531 bool prehandle_keyboard_event_called() const {
524 return prehandle_keyboard_event_called_; 532 return prehandle_keyboard_event_called_;
525 } 533 }
526 534
527 WebInputEvent::Type prehandle_keyboard_event_type() const { 535 WebInputEvent::Type prehandle_keyboard_event_type() const {
528 return prehandle_keyboard_event_type_; 536 return prehandle_keyboard_event_type_;
529 } 537 }
530 538
531 void set_prehandle_keyboard_event(bool handle) { 539 void set_prehandle_keyboard_event(bool handle) {
532 prehandle_keyboard_event_ = handle; 540 prehandle_keyboard_event_ = handle;
533 } 541 }
534 542
543 void set_handle_wheel_event(bool handle) {
544 handle_wheel_event_ = handle;
545 }
546
547 bool handle_wheel_event_called() {
548 return handle_wheel_event_called_;
549 }
550
535 protected: 551 protected:
536 virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, 552 virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event,
537 bool* is_keyboard_shortcut) OVERRIDE { 553 bool* is_keyboard_shortcut) OVERRIDE {
538 prehandle_keyboard_event_type_ = event.type; 554 prehandle_keyboard_event_type_ = event.type;
539 prehandle_keyboard_event_called_ = true; 555 prehandle_keyboard_event_called_ = true;
540 return prehandle_keyboard_event_; 556 return prehandle_keyboard_event_;
541 } 557 }
542 558
543 virtual void HandleKeyboardEvent( 559 virtual void HandleKeyboardEvent(
544 const NativeWebKeyboardEvent& event) OVERRIDE { 560 const NativeWebKeyboardEvent& event) OVERRIDE {
545 unhandled_keyboard_event_type_ = event.type; 561 unhandled_keyboard_event_type_ = event.type;
546 unhandled_keyboard_event_called_ = true; 562 unhandled_keyboard_event_called_ = true;
547 } 563 }
548 564
565 virtual bool HandleWheelEvent(
566 const blink::WebMouseWheelEvent& event) OVERRIDE {
567 handle_wheel_event_called_ = true;
568 return handle_wheel_event_;
569 }
570
549 private: 571 private:
550 bool prehandle_keyboard_event_; 572 bool prehandle_keyboard_event_;
551 bool prehandle_keyboard_event_called_; 573 bool prehandle_keyboard_event_called_;
552 WebInputEvent::Type prehandle_keyboard_event_type_; 574 WebInputEvent::Type prehandle_keyboard_event_type_;
553 575
554 bool unhandled_keyboard_event_called_; 576 bool unhandled_keyboard_event_called_;
555 WebInputEvent::Type unhandled_keyboard_event_type_; 577 WebInputEvent::Type unhandled_keyboard_event_type_;
578
579 bool handle_wheel_event_;
580 bool handle_wheel_event_called_;
556 }; 581 };
557 582
558 // RenderWidgetHostTest -------------------------------------------------------- 583 // RenderWidgetHostTest --------------------------------------------------------
559 584
560 class RenderWidgetHostTest : public testing::Test { 585 class RenderWidgetHostTest : public testing::Test {
561 public: 586 public:
562 RenderWidgetHostTest() 587 RenderWidgetHostTest()
563 : process_(NULL), 588 : process_(NULL),
564 handle_key_press_event_(false), 589 handle_key_press_event_(false),
565 handle_mouse_event_(false) { 590 handle_mouse_event_(false) {
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
1143 SimulateWheelEvent(-5, 0, 0, true); 1168 SimulateWheelEvent(-5, 0, 0, true);
1144 1169
1145 // Make sure we sent the input event to the renderer. 1170 // Make sure we sent the input event to the renderer.
1146 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( 1171 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
1147 InputMsg_HandleInputEvent::ID)); 1172 InputMsg_HandleInputEvent::ID));
1148 process_->sink().ClearMessages(); 1173 process_->sink().ClearMessages();
1149 1174
1150 // Send the simulated response from the renderer back. 1175 // Send the simulated response from the renderer back.
1151 SendInputEventACK(WebInputEvent::MouseWheel, 1176 SendInputEventACK(WebInputEvent::MouseWheel,
1152 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1177 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1178 EXPECT_TRUE(delegate_->handle_wheel_event_called());
1179 EXPECT_EQ(1, view_->unhandled_wheel_event_count());
1153 EXPECT_EQ(-5, view_->unhandled_wheel_event().deltaX); 1180 EXPECT_EQ(-5, view_->unhandled_wheel_event().deltaX);
1154 } 1181 }
1155 1182
1183 TEST_F(RenderWidgetHostTest, HandleWheelEvent) {
1184 // Indicate that we're going to handle this wheel event
1185 delegate_->set_handle_wheel_event(true);
1186
1187 SimulateWheelEvent(-5, 0, 0, true);
1188
1189 // Make sure we sent the input event to the renderer.
1190 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
1191 InputMsg_HandleInputEvent::ID));
1192 process_->sink().ClearMessages();
1193
1194 // Send the simulated response from the renderer back.
1195 SendInputEventACK(WebInputEvent::MouseWheel,
1196 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1197
1198 // ensure the wheel event handler was invoked
1199 EXPECT_TRUE(delegate_->handle_wheel_event_called());
1200
1201 // and that it suppressed the unhandled wheel event handler.
1202 EXPECT_EQ(0, view_->unhandled_wheel_event_count());
1203 }
1204
1156 TEST_F(RenderWidgetHostTest, UnhandledGestureEvent) { 1205 TEST_F(RenderWidgetHostTest, UnhandledGestureEvent) {
1157 SimulateGestureEvent(WebInputEvent::GestureTwoFingerTap, 1206 SimulateGestureEvent(WebInputEvent::GestureTwoFingerTap,
1158 WebGestureEvent::Touchscreen); 1207 WebGestureEvent::Touchscreen);
1159 1208
1160 // Make sure we sent the input event to the renderer. 1209 // Make sure we sent the input event to the renderer.
1161 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( 1210 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
1162 InputMsg_HandleInputEvent::ID)); 1211 InputMsg_HandleInputEvent::ID));
1163 process_->sink().ClearMessages(); 1212 process_->sink().ClearMessages();
1164 1213
1165 // Send the simulated response from the renderer back. 1214 // Send the simulated response from the renderer back.
(...skipping 1393 matching lines...) Expand 10 before | Expand all | Expand 10 after
2559 2608
2560 // Tests RWHI::ForwardTouchEventWithLatencyInfo(). 2609 // Tests RWHI::ForwardTouchEventWithLatencyInfo().
2561 PressTouchPoint(0, 1); 2610 PressTouchPoint(0, 1);
2562 SendTouchEvent(); 2611 SendTouchEvent();
2563 CheckLatencyInfoComponentInMessage( 2612 CheckLatencyInfoComponentInMessage(
2564 process_, GetLatencyComponentId(), WebInputEvent::TouchStart); 2613 process_, GetLatencyComponentId(), WebInputEvent::TouchStart);
2565 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 2614 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
2566 } 2615 }
2567 2616
2568 } // namespace content 2617 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.cc ('k') | content/browser/web_contents/web_contents_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698