| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/renderer/mus/compositor_mus_connection.h" | 5 #include "content/renderer/mus/compositor_mus_connection.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 result_(content::InputEventAckState::INPUT_EVENT_ACK_STATE_UNKNOWN) {} | 72 result_(content::InputEventAckState::INPUT_EVENT_ACK_STATE_UNKNOWN) {} |
| 73 ~TestInputHandlerManager() override {} | 73 ~TestInputHandlerManager() override {} |
| 74 | 74 |
| 75 // Stops overriding the behaviour of HandleInputEvent | 75 // Stops overriding the behaviour of HandleInputEvent |
| 76 void ClearHandleInputEventOverride(); | 76 void ClearHandleInputEventOverride(); |
| 77 | 77 |
| 78 // Overrides the behaviour of HandleInputEvent, returing |result|. | 78 // Overrides the behaviour of HandleInputEvent, returing |result|. |
| 79 void SetHandleInputEventResult(content::InputEventAckState result); | 79 void SetHandleInputEventResult(content::InputEventAckState result); |
| 80 | 80 |
| 81 // content::InputHandlerManager: | 81 // content::InputHandlerManager: |
| 82 content::InputEventAckState HandleInputEvent( | 82 void HandleInputEvent(int routing_id, |
| 83 int routing_id, | 83 ui::ScopedWebInputEvent input_event, |
| 84 const blink::WebInputEvent* input_event, | 84 const ui::LatencyInfo& latency_info, |
| 85 ui::LatencyInfo* latency_info) override; | 85 const InputEventAckStateCallback& callback) override; |
| 86 | 86 |
| 87 private: | 87 private: |
| 88 // If true content::InputHandlerManager::HandleInputEvent is not called. | 88 // If true content::InputHandlerManager::HandleInputEvent is not called. |
| 89 bool override_result_; | 89 bool override_result_; |
| 90 | 90 |
| 91 // The result to return in HandleInputEvent if |override_result_|. | 91 // The result to return in HandleInputEvent if |override_result_|. |
| 92 content::InputEventAckState result_; | 92 content::InputEventAckState result_; |
| 93 | 93 |
| 94 DISALLOW_COPY_AND_ASSIGN(TestInputHandlerManager); | 94 DISALLOW_COPY_AND_ASSIGN(TestInputHandlerManager); |
| 95 }; | 95 }; |
| 96 | 96 |
| 97 void TestInputHandlerManager::ClearHandleInputEventOverride() { | 97 void TestInputHandlerManager::ClearHandleInputEventOverride() { |
| 98 override_result_ = false; | 98 override_result_ = false; |
| 99 } | 99 } |
| 100 | 100 |
| 101 void TestInputHandlerManager::SetHandleInputEventResult( | 101 void TestInputHandlerManager::SetHandleInputEventResult( |
| 102 content::InputEventAckState result) { | 102 content::InputEventAckState result) { |
| 103 override_result_ = true; | 103 override_result_ = true; |
| 104 result_ = result; | 104 result_ = result; |
| 105 } | 105 } |
| 106 | 106 |
| 107 content::InputEventAckState TestInputHandlerManager::HandleInputEvent( | 107 void TestInputHandlerManager::HandleInputEvent( |
| 108 int routing_id, | 108 int routing_id, |
| 109 const blink::WebInputEvent* input_event, | 109 ui::ScopedWebInputEvent input_event, |
| 110 ui::LatencyInfo* latency_info) { | 110 const ui::LatencyInfo& latency_info, |
| 111 if (override_result_) | 111 const InputEventAckStateCallback& callback) { |
| 112 return result_; | 112 if (override_result_) { |
| 113 return content::InputHandlerManager::HandleInputEvent(routing_id, input_event, | 113 callback.Run(result_, std::move(input_event), latency_info, nullptr); |
| 114 latency_info); | 114 return; |
| 115 } |
| 116 content::InputHandlerManager::HandleInputEvent( |
| 117 routing_id, std::move(input_event), latency_info, callback); |
| 115 } | 118 } |
| 116 | 119 |
| 117 // Empty implementation of InputHandlerManagerClient. | 120 // Empty implementation of InputHandlerManagerClient. |
| 118 class TestInputHandlerManagerClient | 121 class TestInputHandlerManagerClient |
| 119 : public content::InputHandlerManagerClient { | 122 : public content::InputHandlerManagerClient { |
| 120 public: | 123 public: |
| 121 TestInputHandlerManagerClient() {} | 124 TestInputHandlerManagerClient() {} |
| 122 ~TestInputHandlerManagerClient() override{}; | 125 ~TestInputHandlerManagerClient() override{}; |
| 123 | 126 |
| 124 // content::InputHandlerManagerClient: | 127 // content::InputHandlerManagerClient: |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 | 418 |
| 416 VerifyAndRunQueues(true, true); | 419 VerifyAndRunQueues(true, true); |
| 417 | 420 |
| 418 // Only the most recent ack was called. | 421 // Only the most recent ack was called. |
| 419 EXPECT_FALSE(test_callback1->called()); | 422 EXPECT_FALSE(test_callback1->called()); |
| 420 EXPECT_TRUE(test_callback2->called()); | 423 EXPECT_TRUE(test_callback2->called()); |
| 421 EXPECT_EQ(EventResult::HANDLED, test_callback2->result()); | 424 EXPECT_EQ(EventResult::HANDLED, test_callback2->result()); |
| 422 } | 425 } |
| 423 | 426 |
| 424 // Tests that when an input handler consumes the event, that | 427 // Tests that when an input handler consumes the event, that |
| 425 // CompositorMusConnection does not consume the ack, nor calls it. | 428 // CompositorMusConnection will consume the ack, but call as UNHANDLED. |
| 426 TEST_F(CompositorMusConnectionTest, InputHandlerConsumes) { | 429 TEST_F(CompositorMusConnectionTest, InputHandlerConsumes) { |
| 427 input_handler_manager()->SetHandleInputEventResult( | 430 input_handler_manager()->SetHandleInputEventResult( |
| 428 InputEventAckState::INPUT_EVENT_ACK_STATE_CONSUMED); | 431 InputEventAckState::INPUT_EVENT_ACK_STATE_CONSUMED); |
| 429 ui::TestWindow test_window; | 432 ui::TestWindow test_window; |
| 430 std::unique_ptr<ui::Event> event(GenerateKeyEvent()); | 433 std::unique_ptr<ui::Event> event(GenerateKeyEvent()); |
| 431 scoped_refptr<TestCallback> test_callback(new TestCallback); | 434 scoped_refptr<TestCallback> test_callback(new TestCallback); |
| 432 std::unique_ptr<base::Callback<void(EventResult)>> ack_callback( | 435 std::unique_ptr<base::Callback<void(EventResult)>> ack_callback( |
| 433 new base::Callback<void(EventResult)>( | 436 new base::Callback<void(EventResult)>( |
| 434 base::Bind(&::TestCallback::ResultCallback, test_callback))); | 437 base::Bind(&::TestCallback::ResultCallback, test_callback))); |
| 435 | 438 |
| 436 OnWindowInputEvent(&test_window, *event.get(), &ack_callback); | 439 OnWindowInputEvent(&test_window, *event.get(), &ack_callback); |
| 437 | 440 |
| 438 EXPECT_TRUE(ack_callback.get()); | 441 EXPECT_FALSE(ack_callback.get()); |
| 439 VerifyAndRunQueues(false, false); | 442 VerifyAndRunQueues(false, false); |
| 440 EXPECT_FALSE(test_callback->called()); | 443 EXPECT_TRUE(test_callback->called()); |
| 444 EXPECT_EQ(EventResult::UNHANDLED, test_callback->result()); |
| 441 } | 445 } |
| 442 | 446 |
| 443 // Tests that when the renderer will not ack an event, that | 447 // Tests that when the renderer will not ack an event, that |
| 444 // CompositorMusConnection does not consume the ack, nor calls it. | 448 // CompositorMusConnection will consume the ack, but call as UNHANDLED. |
| 445 TEST_F(CompositorMusConnectionTest, RendererWillNotSendAck) { | 449 TEST_F(CompositorMusConnectionTest, RendererWillNotSendAck) { |
| 446 ui::TestWindow test_window; | 450 ui::TestWindow test_window; |
| 447 ui::PointerEvent event( | 451 ui::PointerEvent event( |
| 448 ui::ET_POINTER_DOWN, gfx::Point(), gfx::Point(), ui::EF_NONE, 0, 0, | 452 ui::ET_POINTER_DOWN, gfx::Point(), gfx::Point(), ui::EF_NONE, 0, 0, |
| 449 ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_MOUSE), | 453 ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_MOUSE), |
| 450 ui::EventTimeForNow()); | 454 ui::EventTimeForNow()); |
| 451 | 455 |
| 452 scoped_refptr<TestCallback> test_callback(new TestCallback); | 456 scoped_refptr<TestCallback> test_callback(new TestCallback); |
| 453 std::unique_ptr<base::Callback<void(EventResult)>> ack_callback( | 457 std::unique_ptr<base::Callback<void(EventResult)>> ack_callback( |
| 454 new base::Callback<void(EventResult)>( | 458 new base::Callback<void(EventResult)>( |
| 455 base::Bind(&::TestCallback::ResultCallback, test_callback))); | 459 base::Bind(&::TestCallback::ResultCallback, test_callback))); |
| 456 | 460 |
| 457 OnWindowInputEvent(&test_window, event, &ack_callback); | 461 OnWindowInputEvent(&test_window, event, &ack_callback); |
| 458 EXPECT_TRUE(ack_callback.get()); | 462 EXPECT_FALSE(ack_callback.get()); |
| 459 | 463 |
| 460 VerifyAndRunQueues(true, false); | 464 VerifyAndRunQueues(true, false); |
| 461 EXPECT_FALSE(test_callback->called()); | 465 EXPECT_TRUE(test_callback->called()); |
| 466 EXPECT_EQ(EventResult::UNHANDLED, test_callback->result()); |
| 462 } | 467 } |
| 463 | 468 |
| 464 // Tests that when a touch event id provided, that CompositorMusConnection | 469 // Tests that when a touch event id provided, that CompositorMusConnection |
| 465 // consumes the ack. | 470 // consumes the ack. |
| 466 TEST_F(CompositorMusConnectionTest, TouchEventConsumed) { | 471 TEST_F(CompositorMusConnectionTest, TouchEventConsumed) { |
| 467 TestRenderWidgetInputHandler* input_handler = render_widget_input_handler(); | 472 TestRenderWidgetInputHandler* input_handler = render_widget_input_handler(); |
| 468 input_handler->set_delegate(connection()); | 473 input_handler->set_delegate(connection()); |
| 469 input_handler->set_state(InputEventAckState::INPUT_EVENT_ACK_STATE_CONSUMED); | 474 input_handler->set_state(InputEventAckState::INPUT_EVENT_ACK_STATE_CONSUMED); |
| 470 | 475 |
| 471 ui::TestWindow test_window; | 476 ui::TestWindow test_window; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 485 EXPECT_FALSE(ack_callback.get()); | 490 EXPECT_FALSE(ack_callback.get()); |
| 486 | 491 |
| 487 VerifyAndRunQueues(true, true); | 492 VerifyAndRunQueues(true, true); |
| 488 | 493 |
| 489 // The ack callback should have been called | 494 // The ack callback should have been called |
| 490 EXPECT_TRUE(test_callback->called()); | 495 EXPECT_TRUE(test_callback->called()); |
| 491 EXPECT_EQ(EventResult::HANDLED, test_callback->result()); | 496 EXPECT_EQ(EventResult::HANDLED, test_callback->result()); |
| 492 } | 497 } |
| 493 | 498 |
| 494 } // namespace content | 499 } // namespace content |
| OLD | NEW |