OLD | NEW |
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 <new> | 5 #include <new> |
6 #include <utility> | 6 #include <utility> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 } // namespace | 129 } // namespace |
130 | 130 |
131 class InputEventFilterTest : public testing::Test { | 131 class InputEventFilterTest : public testing::Test { |
132 public: | 132 public: |
133 virtual void SetUp() OVERRIDE { | 133 virtual void SetUp() OVERRIDE { |
134 filter_ = new InputEventFilter( | 134 filter_ = new InputEventFilter( |
135 &message_recorder_, | 135 &message_recorder_, |
136 message_loop_.message_loop_proxy(), | 136 message_loop_.message_loop_proxy(), |
137 base::Bind(&InputEventRecorder::HandleInputEvent, | 137 base::Bind(&InputEventRecorder::HandleInputEvent, |
138 base::Unretained(&event_recorder_))); | 138 base::Unretained(&event_recorder_))); |
139 event_recorder_.set_filter(filter_); | 139 event_recorder_.set_filter(filter_.get()); |
140 | 140 |
141 filter_->OnFilterAdded(&ipc_sink_); | 141 filter_->OnFilterAdded(&ipc_sink_); |
142 } | 142 } |
143 | 143 |
144 | 144 |
145 protected: | 145 protected: |
146 base::MessageLoop message_loop_; | 146 base::MessageLoop message_loop_; |
147 | 147 |
148 // Used to record IPCs sent by the filter to the RenderWidgetHost. | 148 // Used to record IPCs sent by the filter to the RenderWidgetHost. |
149 IPC::TestSink ipc_sink_; | 149 IPC::TestSink ipc_sink_; |
150 | 150 |
151 // Used to record IPCs forwarded by the filter to the main thread. | 151 // Used to record IPCs forwarded by the filter to the main thread. |
152 IPCMessageRecorder message_recorder_; | 152 IPCMessageRecorder message_recorder_; |
153 | 153 |
154 // Used to record WebInputEvents delivered to the handler. | 154 // Used to record WebInputEvents delivered to the handler. |
155 InputEventRecorder event_recorder_; | 155 InputEventRecorder event_recorder_; |
156 | 156 |
157 scoped_refptr<InputEventFilter> filter_; | 157 scoped_refptr<InputEventFilter> filter_; |
158 }; | 158 }; |
159 | 159 |
160 TEST_F(InputEventFilterTest, Basic) { | 160 TEST_F(InputEventFilterTest, Basic) { |
161 WebMouseEvent kEvents[3]; | 161 WebMouseEvent kEvents[3]; |
162 InitMouseEvent(&kEvents[0], WebInputEvent::MouseDown, 10, 10); | 162 InitMouseEvent(&kEvents[0], WebInputEvent::MouseDown, 10, 10); |
163 InitMouseEvent(&kEvents[1], WebInputEvent::MouseMove, 20, 20); | 163 InitMouseEvent(&kEvents[1], WebInputEvent::MouseMove, 20, 20); |
164 InitMouseEvent(&kEvents[2], WebInputEvent::MouseUp, 30, 30); | 164 InitMouseEvent(&kEvents[2], WebInputEvent::MouseUp, 30, 30); |
165 | 165 |
166 AddEventsToFilter(filter_, kEvents, arraysize(kEvents)); | 166 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); |
167 EXPECT_EQ(0U, ipc_sink_.message_count()); | 167 EXPECT_EQ(0U, ipc_sink_.message_count()); |
168 EXPECT_EQ(0U, event_recorder_.record_count()); | 168 EXPECT_EQ(0U, event_recorder_.record_count()); |
169 EXPECT_EQ(0U, message_recorder_.message_count()); | 169 EXPECT_EQ(0U, message_recorder_.message_count()); |
170 | 170 |
171 filter_->AddRoute(kTestRoutingID); | 171 filter_->AddRoute(kTestRoutingID); |
172 | 172 |
173 AddEventsToFilter(filter_, kEvents, arraysize(kEvents)); | 173 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); |
174 ASSERT_EQ(arraysize(kEvents), ipc_sink_.message_count()); | 174 ASSERT_EQ(arraysize(kEvents), ipc_sink_.message_count()); |
175 ASSERT_EQ(arraysize(kEvents), event_recorder_.record_count()); | 175 ASSERT_EQ(arraysize(kEvents), event_recorder_.record_count()); |
176 EXPECT_EQ(0U, message_recorder_.message_count()); | 176 EXPECT_EQ(0U, message_recorder_.message_count()); |
177 | 177 |
178 for (size_t i = 0; i < arraysize(kEvents); ++i) { | 178 for (size_t i = 0; i < arraysize(kEvents); ++i) { |
179 const IPC::Message* message = ipc_sink_.GetMessageAt(i); | 179 const IPC::Message* message = ipc_sink_.GetMessageAt(i); |
180 EXPECT_EQ(kTestRoutingID, message->routing_id()); | 180 EXPECT_EQ(kTestRoutingID, message->routing_id()); |
181 EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type()); | 181 EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type()); |
182 | 182 |
183 WebInputEvent::Type event_type = WebInputEvent::Undefined; | 183 WebInputEvent::Type event_type = WebInputEvent::Undefined; |
184 InputEventAckState ack_result = INPUT_EVENT_ACK_STATE_NOT_CONSUMED; | 184 InputEventAckState ack_result = INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
185 EXPECT_TRUE(InputHostMsg_HandleInputEvent_ACK::Read(message, | 185 EXPECT_TRUE(InputHostMsg_HandleInputEvent_ACK::Read(message, |
186 &event_type, | 186 &event_type, |
187 &ack_result)); | 187 &ack_result)); |
188 EXPECT_EQ(kEvents[i].type, event_type); | 188 EXPECT_EQ(kEvents[i].type, event_type); |
189 EXPECT_EQ(ack_result, INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 189 EXPECT_EQ(ack_result, INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
190 | 190 |
191 const WebInputEvent* event = event_recorder_.record_at(i); | 191 const WebInputEvent* event = event_recorder_.record_at(i); |
192 ASSERT_TRUE(event); | 192 ASSERT_TRUE(event); |
193 | 193 |
194 EXPECT_EQ(kEvents[i].size, event->size); | 194 EXPECT_EQ(kEvents[i].size, event->size); |
195 EXPECT_TRUE(memcmp(&kEvents[i], event, event->size) == 0); | 195 EXPECT_TRUE(memcmp(&kEvents[i], event, event->size) == 0); |
196 } | 196 } |
197 | 197 |
198 event_recorder_.set_send_to_widget(true); | 198 event_recorder_.set_send_to_widget(true); |
199 | 199 |
200 AddEventsToFilter(filter_, kEvents, arraysize(kEvents)); | 200 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); |
201 EXPECT_EQ(arraysize(kEvents), ipc_sink_.message_count()); | 201 EXPECT_EQ(arraysize(kEvents), ipc_sink_.message_count()); |
202 EXPECT_EQ(2 * arraysize(kEvents), event_recorder_.record_count()); | 202 EXPECT_EQ(2 * arraysize(kEvents), event_recorder_.record_count()); |
203 EXPECT_EQ(arraysize(kEvents), message_recorder_.message_count()); | 203 EXPECT_EQ(arraysize(kEvents), message_recorder_.message_count()); |
204 | 204 |
205 for (size_t i = 0; i < arraysize(kEvents); ++i) { | 205 for (size_t i = 0; i < arraysize(kEvents); ++i) { |
206 const IPC::Message& message = message_recorder_.message_at(i); | 206 const IPC::Message& message = message_recorder_.message_at(i); |
207 | 207 |
208 ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type()); | 208 ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type()); |
209 const WebInputEvent* event = InputEventFilter::CrackMessage(message); | 209 const WebInputEvent* event = InputEventFilter::CrackMessage(message); |
210 | 210 |
211 EXPECT_EQ(kEvents[i].size, event->size); | 211 EXPECT_EQ(kEvents[i].size, event->size); |
212 EXPECT_TRUE(memcmp(&kEvents[i], event, event->size) == 0); | 212 EXPECT_TRUE(memcmp(&kEvents[i], event, event->size) == 0); |
213 } | 213 } |
214 | 214 |
215 // Now reset everything, and test that DidHandleInputEvent is called. | 215 // Now reset everything, and test that DidHandleInputEvent is called. |
216 | 216 |
217 ipc_sink_.ClearMessages(); | 217 ipc_sink_.ClearMessages(); |
218 event_recorder_.Clear(); | 218 event_recorder_.Clear(); |
219 message_recorder_.Clear(); | 219 message_recorder_.Clear(); |
220 | 220 |
221 event_recorder_.set_handle_events(true); | 221 event_recorder_.set_handle_events(true); |
222 | 222 |
223 AddEventsToFilter(filter_, kEvents, arraysize(kEvents)); | 223 AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); |
224 EXPECT_EQ(arraysize(kEvents), ipc_sink_.message_count()); | 224 EXPECT_EQ(arraysize(kEvents), ipc_sink_.message_count()); |
225 EXPECT_EQ(arraysize(kEvents), event_recorder_.record_count()); | 225 EXPECT_EQ(arraysize(kEvents), event_recorder_.record_count()); |
226 EXPECT_EQ(0U, message_recorder_.message_count()); | 226 EXPECT_EQ(0U, message_recorder_.message_count()); |
227 | 227 |
228 for (size_t i = 0; i < arraysize(kEvents); ++i) { | 228 for (size_t i = 0; i < arraysize(kEvents); ++i) { |
229 const IPC::Message* message = ipc_sink_.GetMessageAt(i); | 229 const IPC::Message* message = ipc_sink_.GetMessageAt(i); |
230 EXPECT_EQ(kTestRoutingID, message->routing_id()); | 230 EXPECT_EQ(kTestRoutingID, message->routing_id()); |
231 EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type()); | 231 EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type()); |
232 | 232 |
233 WebInputEvent::Type event_type = WebInputEvent::Undefined; | 233 WebInputEvent::Type event_type = WebInputEvent::Undefined; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 messages.push_back(InputMsg_SelectAll(kTestRoutingID)); | 279 messages.push_back(InputMsg_SelectAll(kTestRoutingID)); |
280 messages.push_back(InputMsg_Unselect(kTestRoutingID)); | 280 messages.push_back(InputMsg_Unselect(kTestRoutingID)); |
281 messages.push_back(InputMsg_SelectRange(kTestRoutingID, | 281 messages.push_back(InputMsg_SelectRange(kTestRoutingID, |
282 gfx::Point(), gfx::Point())); | 282 gfx::Point(), gfx::Point())); |
283 messages.push_back(InputMsg_MoveCaret(kTestRoutingID, gfx::Point())); | 283 messages.push_back(InputMsg_MoveCaret(kTestRoutingID, gfx::Point())); |
284 | 284 |
285 messages.push_back(InputMsg_HandleInputEvent(kTestRoutingID, | 285 messages.push_back(InputMsg_HandleInputEvent(kTestRoutingID, |
286 &mouse_up, | 286 &mouse_up, |
287 ui::LatencyInfo(), | 287 ui::LatencyInfo(), |
288 false)); | 288 false)); |
289 AddMessagesToFilter(filter_, messages); | 289 AddMessagesToFilter(filter_.get(), messages); |
290 | 290 |
291 // We should have sent all messages back to the main thread and preserved | 291 // We should have sent all messages back to the main thread and preserved |
292 // their relative order. | 292 // their relative order. |
293 ASSERT_EQ(message_recorder_.message_count(), messages.size()); | 293 ASSERT_EQ(message_recorder_.message_count(), messages.size()); |
294 for (size_t i = 0; i < messages.size(); ++i) { | 294 for (size_t i = 0; i < messages.size(); ++i) { |
295 EXPECT_EQ(message_recorder_.message_at(i).type(), messages[i].type()) << i; | 295 EXPECT_EQ(message_recorder_.message_at(i).type(), messages[i].type()) << i; |
296 } | 296 } |
297 } | 297 } |
298 | 298 |
299 } // namespace content | 299 } // namespace content |
OLD | NEW |