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

Side by Side Diff: content/renderer/input/input_event_filter_unittest.cc

Issue 2166703003: Implement Main Thread RAF Aligned Input (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master_main_thread_queue
Patch Set: Clean prototype up Created 4 years, 3 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
OLDNEW
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
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, &params)); 194 EXPECT_TRUE(InputHostMsg_HandleInputEvent_ACK::Read(message, &params));
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, &params)); 220 EXPECT_TRUE(InputMsg_HandleInputEvent::Read(&message, &params));
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, &params)); 246 EXPECT_TRUE(InputHostMsg_HandleInputEvent_ACK::Read(message, &params));
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
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
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
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, &params)); 454 EXPECT_TRUE(InputMsg_HandleInputEvent::Read(&message, &params));
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698