| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include <new> | 7 #include <new> |
| 8 #include <tuple> | 8 #include <tuple> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/bind.h" | 12 #include "base/bind.h" |
| 13 #include "base/macros.h" | 13 #include "base/macros.h" |
| 14 #include "base/run_loop.h" | 14 #include "base/run_loop.h" |
| 15 #include "base/threading/thread_task_runner_handle.h" | 15 #include "base/threading/thread_task_runner_handle.h" |
| 16 #include "build/build_config.h" | 16 #include "build/build_config.h" |
| 17 #include "content/common/input/synthetic_web_input_event_builders.h" | 17 #include "content/common/input/synthetic_web_input_event_builders.h" |
| 18 #include "content/common/input_messages.h" | 18 #include "content/common/input_messages.h" |
| 19 #include "content/common/view_messages.h" | 19 #include "content/common/view_messages.h" |
| 20 #include "content/renderer/input/input_event_filter.h" | 20 #include "content/renderer/input/input_event_filter.h" |
| 21 #include "content/renderer/input/input_handler_manager.h" |
| 21 #include "ipc/ipc_listener.h" | 22 #include "ipc/ipc_listener.h" |
| 22 #include "ipc/ipc_test_sink.h" | 23 #include "ipc/ipc_test_sink.h" |
| 23 #include "ipc/message_filter.h" | 24 #include "ipc/message_filter.h" |
| 24 #include "testing/gtest/include/gtest/gtest.h" | 25 #include "testing/gtest/include/gtest/gtest.h" |
| 25 #include "ui/events/blink/web_input_event_traits.h" | 26 #include "ui/events/blink/web_input_event_traits.h" |
| 26 | 27 |
| 27 using blink::WebInputEvent; | 28 using blink::WebInputEvent; |
| 28 using blink::WebMouseEvent; | 29 using blink::WebMouseEvent; |
| 29 using blink::WebMouseWheelEvent; | 30 using blink::WebMouseWheelEvent; |
| 30 using blink::WebTouchEvent; | 31 using blink::WebTouchEvent; |
| 31 | 32 |
| 32 namespace content { | 33 namespace content { |
| 33 namespace { | 34 namespace { |
| 34 | 35 |
| 35 const int kTestRoutingID = 13; | 36 const int kTestRoutingID = 13; |
| 36 | 37 |
| 37 class InputEventRecorder { | 38 class InputEventRecorder : public content::InputHandlerManager { |
| 38 public: | 39 public: |
| 39 InputEventRecorder() | 40 InputEventRecorder(InputEventFilter* filter) |
| 40 : filter_(NULL), | 41 : InputHandlerManager(nullptr, filter, nullptr, nullptr), |
| 41 handle_events_(false), | 42 handle_events_(false), |
| 42 send_to_widget_(false), | 43 send_to_widget_(false), |
| 43 passive_(false) {} | 44 passive_(false) {} |
| 44 | 45 |
| 45 void set_filter(InputEventFilter* filter) { filter_ = filter; } | 46 ~InputEventRecorder() override {} |
| 47 |
| 46 void set_handle_events(bool value) { handle_events_ = value; } | 48 void set_handle_events(bool value) { handle_events_ = value; } |
| 47 void set_send_to_widget(bool value) { send_to_widget_ = value; } | 49 void set_send_to_widget(bool value) { send_to_widget_ = value; } |
| 48 void set_passive(bool value) { passive_ = value; } | 50 void set_passive(bool value) { passive_ = value; } |
| 49 | 51 |
| 50 size_t record_count() const { return records_.size(); } | 52 size_t record_count() const { return records_.size(); } |
| 51 | 53 |
| 52 const WebInputEvent* record_at(size_t i) const { | 54 const WebInputEvent* record_at(size_t i) const { |
| 53 const Record& record = records_[i]; | 55 const Record& record = records_[i]; |
| 54 return reinterpret_cast<const WebInputEvent*>(&record.event_data[0]); | 56 return reinterpret_cast<const WebInputEvent*>(&record.event_data[0]); |
| 55 } | 57 } |
| 56 | 58 |
| 57 void Clear() { | 59 void Clear() { |
| 58 records_.clear(); | 60 records_.clear(); |
| 59 } | 61 } |
| 60 | 62 |
| 61 InputEventAckState HandleInputEvent(int routing_id, | 63 InputEventAckState HandleInputEvent(int routing_id, |
| 62 const WebInputEvent* event, | 64 const WebInputEvent* event, |
| 63 ui::LatencyInfo* latency_info) { | 65 ui::LatencyInfo* latency_info) override { |
| 64 DCHECK_EQ(kTestRoutingID, routing_id); | 66 DCHECK_EQ(kTestRoutingID, routing_id); |
| 65 records_.push_back(Record(event)); | 67 records_.push_back(Record(event)); |
| 66 if (handle_events_) { | 68 if (handle_events_) { |
| 67 return INPUT_EVENT_ACK_STATE_CONSUMED; | 69 return INPUT_EVENT_ACK_STATE_CONSUMED; |
| 68 } else if (send_to_widget_) { | 70 } else if (send_to_widget_) { |
| 69 if (passive_) | 71 if (passive_) |
| 70 return INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING; | 72 return INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING; |
| 71 else | 73 else |
| 72 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; | 74 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
| 73 } else { | 75 } else { |
| 74 return INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS; | 76 return INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS; |
| 75 } | 77 } |
| 76 } | 78 } |
| 77 | 79 |
| 78 private: | 80 private: |
| 79 struct Record { | 81 struct Record { |
| 80 Record(const WebInputEvent* event) { | 82 Record(const WebInputEvent* event) { |
| 81 const char* ptr = reinterpret_cast<const char*>(event); | 83 const char* ptr = reinterpret_cast<const char*>(event); |
| 82 event_data.assign(ptr, ptr + event->size); | 84 event_data.assign(ptr, ptr + event->size); |
| 83 } | 85 } |
| 84 std::vector<char> event_data; | 86 std::vector<char> event_data; |
| 85 }; | 87 }; |
| 86 | 88 |
| 87 InputEventFilter* filter_; | |
| 88 bool handle_events_; | 89 bool handle_events_; |
| 89 bool send_to_widget_; | 90 bool send_to_widget_; |
| 90 bool passive_; | 91 bool passive_; |
| 91 std::vector<Record> records_; | 92 std::vector<Record> records_; |
| 92 }; | 93 }; |
| 93 | 94 |
| 94 class IPCMessageRecorder : public IPC::Listener { | 95 class IPCMessageRecorder : public IPC::Listener { |
| 95 public: | 96 public: |
| 96 bool OnMessageReceived(const IPC::Message& message) override { | 97 bool OnMessageReceived(const IPC::Message& message) override { |
| 97 messages_.push_back(message); | 98 messages_.push_back(message); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 | 139 |
| 139 } // namespace | 140 } // namespace |
| 140 | 141 |
| 141 class InputEventFilterTest : public testing::Test { | 142 class InputEventFilterTest : public testing::Test { |
| 142 public: | 143 public: |
| 143 void SetUp() override { | 144 void SetUp() override { |
| 144 filter_ = new InputEventFilter( | 145 filter_ = new InputEventFilter( |
| 145 base::Bind(base::IgnoreResult(&IPCMessageRecorder::OnMessageReceived), | 146 base::Bind(base::IgnoreResult(&IPCMessageRecorder::OnMessageReceived), |
| 146 base::Unretained(&message_recorder_)), | 147 base::Unretained(&message_recorder_)), |
| 147 base::ThreadTaskRunnerHandle::Get(), message_loop_.task_runner()); | 148 base::ThreadTaskRunnerHandle::Get(), message_loop_.task_runner()); |
| 148 filter_->SetBoundHandler(base::Bind(&InputEventRecorder::HandleInputEvent, | 149 event_recorder_ = base::MakeUnique<InputEventRecorder>(filter_.get()); |
| 149 base::Unretained(&event_recorder_))); | 150 filter_->SetInputHandlerManager(event_recorder_.get()); |
| 150 | |
| 151 event_recorder_.set_filter(filter_.get()); | |
| 152 | |
| 153 filter_->OnFilterAdded(&ipc_sink_); | 151 filter_->OnFilterAdded(&ipc_sink_); |
| 154 } | 152 } |
| 155 | 153 |
| 156 protected: | 154 protected: |
| 157 base::MessageLoop message_loop_; | 155 base::MessageLoop message_loop_; |
| 158 | 156 |
| 159 // Used to record IPCs sent by the filter to the RenderWidgetHost. | 157 // Used to record IPCs sent by the filter to the RenderWidgetHost. |
| 160 IPC::TestSink ipc_sink_; | 158 IPC::TestSink ipc_sink_; |
| 161 | 159 |
| 162 // Used to record IPCs forwarded by the filter to the main thread. | 160 // Used to record IPCs forwarded by the filter to the main thread. |
| 163 IPCMessageRecorder message_recorder_; | 161 IPCMessageRecorder message_recorder_; |
| 164 | 162 |
| 163 scoped_refptr<InputEventFilter> filter_; |
| 164 |
| 165 // Used to record WebInputEvents delivered to the handler. | 165 // Used to record WebInputEvents delivered to the handler. |
| 166 InputEventRecorder event_recorder_; | 166 std::unique_ptr<InputEventRecorder> event_recorder_; |
| 167 | |
| 168 scoped_refptr<InputEventFilter> filter_; | |
| 169 }; | 167 }; |
| 170 | 168 |
| 171 TEST_F(InputEventFilterTest, Basic) { | 169 TEST_F(InputEventFilterTest, Basic) { |
| 172 WebMouseEvent kEvents[3] = { | 170 WebMouseEvent kEvents[3] = { |
| 173 SyntheticWebMouseEventBuilder::Build(WebMouseEvent::MouseMove, 10, 10, 0), | 171 SyntheticWebMouseEventBuilder::Build(WebMouseEvent::MouseMove, 10, 10, 0), |
| 174 SyntheticWebMouseEventBuilder::Build(WebMouseEvent::MouseMove, 20, 20, 0), | 172 SyntheticWebMouseEventBuilder::Build(WebMouseEvent::MouseMove, 20, 20, 0), |
| 175 SyntheticWebMouseEventBuilder::Build(WebMouseEvent::MouseMove, 30, 30, 0) | 173 SyntheticWebMouseEventBuilder::Build(WebMouseEvent::MouseMove, 30, 30, 0) |
| 176 }; | 174 }; |
| 177 | 175 |
| 178 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); | 176 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); |
| 179 EXPECT_EQ(0U, ipc_sink_.message_count()); | 177 EXPECT_EQ(0U, ipc_sink_.message_count()); |
| 180 EXPECT_EQ(0U, event_recorder_.record_count()); | 178 EXPECT_EQ(0U, event_recorder_->record_count()); |
| 181 EXPECT_EQ(0U, message_recorder_.message_count()); | 179 EXPECT_EQ(0U, message_recorder_.message_count()); |
| 182 | 180 |
| 183 filter_->RegisterRoutingID(kTestRoutingID); | 181 filter_->RegisterRoutingID(kTestRoutingID); |
| 184 | 182 |
| 185 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); | 183 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); |
| 186 ASSERT_EQ(arraysize(kEvents), ipc_sink_.message_count()); | 184 ASSERT_EQ(arraysize(kEvents), ipc_sink_.message_count()); |
| 187 ASSERT_EQ(arraysize(kEvents), event_recorder_.record_count()); | 185 ASSERT_EQ(arraysize(kEvents), event_recorder_->record_count()); |
| 188 EXPECT_EQ(0U, message_recorder_.message_count()); | 186 EXPECT_EQ(0U, message_recorder_.message_count()); |
| 189 | 187 |
| 190 for (size_t i = 0; i < arraysize(kEvents); ++i) { | 188 for (size_t i = 0; i < arraysize(kEvents); ++i) { |
| 191 const IPC::Message* message = ipc_sink_.GetMessageAt(i); | 189 const IPC::Message* message = ipc_sink_.GetMessageAt(i); |
| 192 EXPECT_EQ(kTestRoutingID, message->routing_id()); | 190 EXPECT_EQ(kTestRoutingID, message->routing_id()); |
| 193 EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type()); | 191 EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type()); |
| 194 | 192 |
| 195 InputHostMsg_HandleInputEvent_ACK::Param params; | 193 InputHostMsg_HandleInputEvent_ACK::Param params; |
| 196 EXPECT_TRUE(InputHostMsg_HandleInputEvent_ACK::Read(message, ¶ms)); | 194 EXPECT_TRUE(InputHostMsg_HandleInputEvent_ACK::Read(message, ¶ms)); |
| 197 WebInputEvent::Type event_type = std::get<0>(params).type; | 195 WebInputEvent::Type event_type = std::get<0>(params).type; |
| 198 InputEventAckState ack_result = std::get<0>(params).state; | 196 InputEventAckState ack_result = std::get<0>(params).state; |
| 199 | 197 |
| 200 EXPECT_EQ(kEvents[i].type, event_type); | 198 EXPECT_EQ(kEvents[i].type, event_type); |
| 201 EXPECT_EQ(ack_result, INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 199 EXPECT_EQ(ack_result, INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
| 202 | 200 |
| 203 const WebInputEvent* event = event_recorder_.record_at(i); | 201 const WebInputEvent* event = event_recorder_->record_at(i); |
| 204 ASSERT_TRUE(event); | 202 ASSERT_TRUE(event); |
| 205 | 203 |
| 206 EXPECT_EQ(kEvents[i].size, event->size); | 204 EXPECT_EQ(kEvents[i].size, event->size); |
| 207 EXPECT_TRUE(memcmp(&kEvents[i], event, event->size) == 0); | 205 EXPECT_TRUE(memcmp(&kEvents[i], event, event->size) == 0); |
| 208 } | 206 } |
| 209 | 207 |
| 210 event_recorder_.set_send_to_widget(true); | 208 event_recorder_->set_send_to_widget(true); |
| 211 | 209 |
| 212 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); | 210 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); |
| 213 EXPECT_EQ(arraysize(kEvents), ipc_sink_.message_count()); | 211 EXPECT_EQ(arraysize(kEvents), ipc_sink_.message_count()); |
| 214 EXPECT_EQ(2 * arraysize(kEvents), event_recorder_.record_count()); | 212 EXPECT_EQ(2 * arraysize(kEvents), event_recorder_->record_count()); |
| 215 EXPECT_EQ(1u, message_recorder_.message_count()); | 213 EXPECT_EQ(1u, message_recorder_.message_count()); |
| 216 | 214 |
| 217 { | 215 { |
| 218 const IPC::Message& message = message_recorder_.message_at(0); | 216 const IPC::Message& message = message_recorder_.message_at(0); |
| 219 | 217 |
| 220 ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type()); | 218 ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type()); |
| 221 InputMsg_HandleInputEvent::Param params; | 219 InputMsg_HandleInputEvent::Param params; |
| 222 EXPECT_TRUE(InputMsg_HandleInputEvent::Read(&message, ¶ms)); | 220 EXPECT_TRUE(InputMsg_HandleInputEvent::Read(&message, ¶ms)); |
| 223 const WebInputEvent* event = std::get<0>(params); | 221 const WebInputEvent* event = std::get<0>(params); |
| 224 | 222 |
| 225 EXPECT_EQ(kEvents[2].size, event->size); | 223 EXPECT_EQ(kEvents[2].size, event->size); |
| 226 EXPECT_TRUE(memcmp(&kEvents[2], event, event->size) == 0); | 224 EXPECT_TRUE(memcmp(&kEvents[2], event, event->size) == 0); |
| 227 } | 225 } |
| 228 | 226 |
| 229 // Now reset everything, and test that DidHandleInputEvent is called. | 227 // Now reset everything, and test that DidHandleInputEvent is called. |
| 230 | 228 |
| 231 ipc_sink_.ClearMessages(); | 229 ipc_sink_.ClearMessages(); |
| 232 event_recorder_.Clear(); | 230 event_recorder_->Clear(); |
| 233 message_recorder_.Clear(); | 231 message_recorder_.Clear(); |
| 234 | 232 |
| 235 event_recorder_.set_handle_events(true); | 233 event_recorder_->set_handle_events(true); |
| 236 | 234 |
| 237 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); | 235 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); |
| 238 EXPECT_EQ(arraysize(kEvents), ipc_sink_.message_count()); | 236 EXPECT_EQ(arraysize(kEvents), ipc_sink_.message_count()); |
| 239 EXPECT_EQ(arraysize(kEvents), event_recorder_.record_count()); | 237 EXPECT_EQ(arraysize(kEvents), event_recorder_->record_count()); |
| 240 EXPECT_EQ(0U, message_recorder_.message_count()); | 238 EXPECT_EQ(0U, message_recorder_.message_count()); |
| 241 | 239 |
| 242 for (size_t i = 0; i < arraysize(kEvents); ++i) { | 240 for (size_t i = 0; i < arraysize(kEvents); ++i) { |
| 243 const IPC::Message* message = ipc_sink_.GetMessageAt(i); | 241 const IPC::Message* message = ipc_sink_.GetMessageAt(i); |
| 244 EXPECT_EQ(kTestRoutingID, message->routing_id()); | 242 EXPECT_EQ(kTestRoutingID, message->routing_id()); |
| 245 EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type()); | 243 EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type()); |
| 246 | 244 |
| 247 InputHostMsg_HandleInputEvent_ACK::Param params; | 245 InputHostMsg_HandleInputEvent_ACK::Param params; |
| 248 EXPECT_TRUE(InputHostMsg_HandleInputEvent_ACK::Read(message, ¶ms)); | 246 EXPECT_TRUE(InputHostMsg_HandleInputEvent_ACK::Read(message, ¶ms)); |
| 249 WebInputEvent::Type event_type = std::get<0>(params).type; | 247 WebInputEvent::Type event_type = std::get<0>(params).type; |
| 250 InputEventAckState ack_result = std::get<0>(params).state; | 248 InputEventAckState ack_result = std::get<0>(params).state; |
| 251 EXPECT_EQ(kEvents[i].type, event_type); | 249 EXPECT_EQ(kEvents[i].type, event_type); |
| 252 EXPECT_EQ(ack_result, INPUT_EVENT_ACK_STATE_CONSUMED); | 250 EXPECT_EQ(ack_result, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 253 } | 251 } |
| 254 | 252 |
| 255 filter_->OnFilterRemoved(); | 253 filter_->OnFilterRemoved(); |
| 256 } | 254 } |
| 257 | 255 |
| 258 TEST_F(InputEventFilterTest, PreserveRelativeOrder) { | 256 TEST_F(InputEventFilterTest, PreserveRelativeOrder) { |
| 259 filter_->RegisterRoutingID(kTestRoutingID); | 257 filter_->RegisterRoutingID(kTestRoutingID); |
| 260 event_recorder_.set_send_to_widget(true); | 258 event_recorder_->set_send_to_widget(true); |
| 261 | |
| 262 | 259 |
| 263 WebMouseEvent mouse_down = | 260 WebMouseEvent mouse_down = |
| 264 SyntheticWebMouseEventBuilder::Build(WebMouseEvent::MouseDown); | 261 SyntheticWebMouseEventBuilder::Build(WebMouseEvent::MouseDown); |
| 265 WebMouseEvent mouse_up = | 262 WebMouseEvent mouse_up = |
| 266 SyntheticWebMouseEventBuilder::Build(WebMouseEvent::MouseUp); | 263 SyntheticWebMouseEventBuilder::Build(WebMouseEvent::MouseUp); |
| 267 | 264 |
| 268 std::vector<IPC::Message> messages; | 265 std::vector<IPC::Message> messages; |
| 269 messages.push_back(InputMsg_HandleInputEvent( | 266 messages.push_back(InputMsg_HandleInputEvent( |
| 270 kTestRoutingID, &mouse_down, ui::LatencyInfo(), | 267 kTestRoutingID, &mouse_down, ui::LatencyInfo(), |
| 271 ui::WebInputEventTraits::ShouldBlockEventStream(mouse_down) | 268 ui::WebInputEventTraits::ShouldBlockEventStream(mouse_down) |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 | 310 |
| 314 TEST_F(InputEventFilterTest, NonBlockingWheel) { | 311 TEST_F(InputEventFilterTest, NonBlockingWheel) { |
| 315 WebMouseWheelEvent kEvents[4] = { | 312 WebMouseWheelEvent kEvents[4] = { |
| 316 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 1, false), | 313 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 1, false), |
| 317 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false), | 314 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false), |
| 318 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), | 315 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), |
| 319 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), | 316 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), |
| 320 }; | 317 }; |
| 321 | 318 |
| 322 filter_->RegisterRoutingID(kTestRoutingID); | 319 filter_->RegisterRoutingID(kTestRoutingID); |
| 323 event_recorder_.set_send_to_widget(true); | 320 event_recorder_->set_send_to_widget(true); |
| 324 event_recorder_.set_passive(true); | 321 event_recorder_->set_passive(true); |
| 325 | 322 |
| 326 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); | 323 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); |
| 327 EXPECT_EQ(arraysize(kEvents), event_recorder_.record_count()); | 324 EXPECT_EQ(arraysize(kEvents), event_recorder_->record_count()); |
| 328 ASSERT_EQ(4u, ipc_sink_.message_count()); | 325 ASSERT_EQ(4u, ipc_sink_.message_count()); |
| 329 | 326 |
| 330 // All events are handled, one is coalesced. | 327 // All events are handled, one is coalesced. |
| 331 EXPECT_EQ(3u, message_recorder_.message_count()); | 328 EXPECT_EQ(3u, message_recorder_.message_count()); |
| 332 | 329 |
| 333 // First two messages should be identical. | 330 // First two messages should be identical. |
| 334 for (size_t i = 0; i < 2; ++i) { | 331 for (size_t i = 0; i < 2; ++i) { |
| 335 const IPC::Message& message = message_recorder_.message_at(i); | 332 const IPC::Message& message = message_recorder_.message_at(i); |
| 336 | 333 |
| 337 ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type()); | 334 ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type()); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 kEvents[0].PressPoint(10, 10); | 371 kEvents[0].PressPoint(10, 10); |
| 375 kEvents[1].PressPoint(10, 10); | 372 kEvents[1].PressPoint(10, 10); |
| 376 kEvents[1].modifiers = 1; | 373 kEvents[1].modifiers = 1; |
| 377 kEvents[1].MovePoint(0, 20, 20); | 374 kEvents[1].MovePoint(0, 20, 20); |
| 378 kEvents[2].PressPoint(10, 10); | 375 kEvents[2].PressPoint(10, 10); |
| 379 kEvents[2].MovePoint(0, 30, 30); | 376 kEvents[2].MovePoint(0, 30, 30); |
| 380 kEvents[3].PressPoint(10, 10); | 377 kEvents[3].PressPoint(10, 10); |
| 381 kEvents[3].MovePoint(0, 35, 35); | 378 kEvents[3].MovePoint(0, 35, 35); |
| 382 | 379 |
| 383 filter_->RegisterRoutingID(kTestRoutingID); | 380 filter_->RegisterRoutingID(kTestRoutingID); |
| 384 event_recorder_.set_send_to_widget(true); | 381 event_recorder_->set_send_to_widget(true); |
| 385 event_recorder_.set_passive(true); | 382 event_recorder_->set_passive(true); |
| 386 | 383 |
| 387 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); | 384 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); |
| 388 EXPECT_EQ(arraysize(kEvents), event_recorder_.record_count()); | 385 EXPECT_EQ(arraysize(kEvents), event_recorder_->record_count()); |
| 389 ASSERT_EQ(4u, ipc_sink_.message_count()); | 386 ASSERT_EQ(4u, ipc_sink_.message_count()); |
| 390 | 387 |
| 391 // All events are handled and one set was coalesced. | 388 // All events are handled and one set was coalesced. |
| 392 EXPECT_EQ(3u, message_recorder_.message_count()); | 389 EXPECT_EQ(3u, message_recorder_.message_count()); |
| 393 | 390 |
| 394 // First two messages should be identical. | 391 // First two messages should be identical. |
| 395 for (size_t i = 0; i < 2; ++i) { | 392 for (size_t i = 0; i < 2; ++i) { |
| 396 const IPC::Message& message = message_recorder_.message_at(i); | 393 const IPC::Message& message = message_recorder_.message_at(i); |
| 397 | 394 |
| 398 ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type()); | 395 ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 | 428 |
| 432 TEST_F(InputEventFilterTest, IntermingledNonBlockingTouch) { | 429 TEST_F(InputEventFilterTest, IntermingledNonBlockingTouch) { |
| 433 SyntheticWebTouchEvent kEvents[2]; | 430 SyntheticWebTouchEvent kEvents[2]; |
| 434 kEvents[0].PressPoint(10, 10); | 431 kEvents[0].PressPoint(10, 10); |
| 435 kEvents[1].PressPoint(10, 10); | 432 kEvents[1].PressPoint(10, 10); |
| 436 kEvents[1].ReleasePoint(0); | 433 kEvents[1].ReleasePoint(0); |
| 437 SyntheticWebTouchEvent kBlockingEvents[1]; | 434 SyntheticWebTouchEvent kBlockingEvents[1]; |
| 438 kBlockingEvents[0].PressPoint(10, 10); | 435 kBlockingEvents[0].PressPoint(10, 10); |
| 439 | 436 |
| 440 filter_->RegisterRoutingID(kTestRoutingID); | 437 filter_->RegisterRoutingID(kTestRoutingID); |
| 441 event_recorder_.set_send_to_widget(true); | 438 event_recorder_->set_send_to_widget(true); |
| 442 event_recorder_.set_passive(true); | 439 event_recorder_->set_passive(true); |
| 443 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); | 440 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); |
| 444 EXPECT_EQ(arraysize(kEvents), event_recorder_.record_count()); | 441 EXPECT_EQ(arraysize(kEvents), event_recorder_->record_count()); |
| 445 | 442 |
| 446 event_recorder_.set_passive(false); | 443 event_recorder_->set_passive(false); |
| 447 AddEventsToFilter(filter_.get(), kBlockingEvents, arraysize(kBlockingEvents)); | 444 AddEventsToFilter(filter_.get(), kBlockingEvents, arraysize(kBlockingEvents)); |
| 448 EXPECT_EQ(arraysize(kEvents) + arraysize(kBlockingEvents), | 445 EXPECT_EQ(arraysize(kEvents) + arraysize(kBlockingEvents), |
| 449 event_recorder_.record_count()); | 446 event_recorder_->record_count()); |
| 450 ASSERT_EQ(3u, event_recorder_.record_count()); | 447 ASSERT_EQ(3u, event_recorder_->record_count()); |
| 451 EXPECT_EQ(3u, message_recorder_.message_count()); | 448 EXPECT_EQ(3u, message_recorder_.message_count()); |
| 452 | 449 |
| 453 { | 450 { |
| 454 const IPC::Message& message = message_recorder_.message_at(0); | 451 const IPC::Message& message = message_recorder_.message_at(0); |
| 455 ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type()); | 452 ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type()); |
| 456 InputMsg_HandleInputEvent::Param params; | 453 InputMsg_HandleInputEvent::Param params; |
| 457 EXPECT_TRUE(InputMsg_HandleInputEvent::Read(&message, ¶ms)); | 454 EXPECT_TRUE(InputMsg_HandleInputEvent::Read(&message, ¶ms)); |
| 458 const WebInputEvent* event = std::get<0>(params); | 455 const WebInputEvent* event = std::get<0>(params); |
| 459 InputEventDispatchType dispatch_type = std::get<2>(params); | 456 InputEventDispatchType dispatch_type = std::get<2>(params); |
| 460 | 457 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 490 const WebInputEvent* event = std::get<0>(params); | 487 const WebInputEvent* event = std::get<0>(params); |
| 491 InputEventDispatchType dispatch_type = std::get<2>(params); | 488 InputEventDispatchType dispatch_type = std::get<2>(params); |
| 492 | 489 |
| 493 EXPECT_EQ(kBlockingEvents[0].size, event->size); | 490 EXPECT_EQ(kBlockingEvents[0].size, event->size); |
| 494 EXPECT_TRUE(memcmp(&kBlockingEvents[0], event, event->size) == 0); | 491 EXPECT_TRUE(memcmp(&kBlockingEvents[0], event, event->size) == 0); |
| 495 EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_BLOCKING, dispatch_type); | 492 EXPECT_EQ(InputEventDispatchType::DISPATCH_TYPE_BLOCKING, dispatch_type); |
| 496 } | 493 } |
| 497 } | 494 } |
| 498 | 495 |
| 499 } // namespace content | 496 } // namespace content |
| OLD | NEW |