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_.reset(new InputEventRecorder(filter_.get())); |
tdresser
2016/08/24 13:42:59
Sounds like folks are preferring event_recorder_ =
dtapuska
2016/08/24 17:10:06
done
| |
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 |