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 "content/public/test/browser_test_utils.h" | 5 #include "content/public/test/browser_test_utils.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
10 #include "base/process/kill.h" | 10 #include "base/process/kill.h" |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 base::JSONReader reader(base::JSON_ALLOW_TRAILING_COMMAS); | 111 base::JSONReader reader(base::JSON_ALLOW_TRAILING_COMMAS); |
112 result->reset(reader.ReadToValue(json)); | 112 result->reset(reader.ReadToValue(json)); |
113 if (!result->get()) { | 113 if (!result->get()) { |
114 DLOG(ERROR) << reader.GetErrorMessage(); | 114 DLOG(ERROR) << reader.GetErrorMessage(); |
115 return false; | 115 return false; |
116 } | 116 } |
117 | 117 |
118 return true; | 118 return true; |
119 } | 119 } |
120 | 120 |
121 void BuildSimpleWebKeyEvent(WebKit::WebInputEvent::Type type, | 121 void BuildSimpleWebKeyEvent(blink::WebInputEvent::Type type, |
122 ui::KeyboardCode key_code, | 122 ui::KeyboardCode key_code, |
123 int native_key_code, | 123 int native_key_code, |
124 int modifiers, | 124 int modifiers, |
125 NativeWebKeyboardEvent* event) { | 125 NativeWebKeyboardEvent* event) { |
126 event->nativeKeyCode = native_key_code; | 126 event->nativeKeyCode = native_key_code; |
127 event->windowsKeyCode = key_code; | 127 event->windowsKeyCode = key_code; |
128 event->setKeyIdentifierFromWindowsKeyCode(); | 128 event->setKeyIdentifierFromWindowsKeyCode(); |
129 event->type = type; | 129 event->type = type; |
130 event->modifiers = modifiers; | 130 event->modifiers = modifiers; |
131 event->isSystemKey = false; | 131 event->isSystemKey = false; |
132 event->timeStampSeconds = base::Time::Now().ToDoubleT(); | 132 event->timeStampSeconds = base::Time::Now().ToDoubleT(); |
133 event->skip_in_browser = true; | 133 event->skip_in_browser = true; |
134 | 134 |
135 if (type == WebKit::WebInputEvent::Char || | 135 if (type == blink::WebInputEvent::Char || |
136 type == WebKit::WebInputEvent::RawKeyDown) { | 136 type == blink::WebInputEvent::RawKeyDown) { |
137 event->text[0] = key_code; | 137 event->text[0] = key_code; |
138 event->unmodifiedText[0] = key_code; | 138 event->unmodifiedText[0] = key_code; |
139 } | 139 } |
140 } | 140 } |
141 | 141 |
142 void InjectRawKeyEvent(WebContents* web_contents, | 142 void InjectRawKeyEvent(WebContents* web_contents, |
143 WebKit::WebInputEvent::Type type, | 143 blink::WebInputEvent::Type type, |
144 ui::KeyboardCode key_code, | 144 ui::KeyboardCode key_code, |
145 int native_key_code, | 145 int native_key_code, |
146 int modifiers) { | 146 int modifiers) { |
147 NativeWebKeyboardEvent event; | 147 NativeWebKeyboardEvent event; |
148 BuildSimpleWebKeyEvent(type, key_code, native_key_code, modifiers, &event); | 148 BuildSimpleWebKeyEvent(type, key_code, native_key_code, modifiers, &event); |
149 web_contents->GetRenderViewHost()->ForwardKeyboardEvent(event); | 149 web_contents->GetRenderViewHost()->ForwardKeyboardEvent(event); |
150 } | 150 } |
151 | 151 |
152 void GetCookiesCallback(std::string* cookies_out, | 152 void GetCookiesCallback(std::string* cookies_out, |
153 base::WaitableEvent* event, | 153 base::WaitableEvent* event, |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 RenderProcessHost* rph = web_contents->GetRenderProcessHost(); | 215 RenderProcessHost* rph = web_contents->GetRenderProcessHost(); |
216 WindowedNotificationObserver observer( | 216 WindowedNotificationObserver observer( |
217 NOTIFICATION_RENDERER_PROCESS_CLOSED, | 217 NOTIFICATION_RENDERER_PROCESS_CLOSED, |
218 Source<RenderProcessHost>(rph)); | 218 Source<RenderProcessHost>(rph)); |
219 base::KillProcess(rph->GetHandle(), 0, false); | 219 base::KillProcess(rph->GetHandle(), 0, false); |
220 observer.Wait(); | 220 observer.Wait(); |
221 } | 221 } |
222 | 222 |
223 void SimulateMouseClick(WebContents* web_contents, | 223 void SimulateMouseClick(WebContents* web_contents, |
224 int modifiers, | 224 int modifiers, |
225 WebKit::WebMouseEvent::Button button) { | 225 blink::WebMouseEvent::Button button) { |
226 int x = web_contents->GetView()->GetContainerSize().width() / 2; | 226 int x = web_contents->GetView()->GetContainerSize().width() / 2; |
227 int y = web_contents->GetView()->GetContainerSize().height() / 2; | 227 int y = web_contents->GetView()->GetContainerSize().height() / 2; |
228 SimulateMouseClickAt(web_contents, modifiers, button, gfx::Point(x, y)); | 228 SimulateMouseClickAt(web_contents, modifiers, button, gfx::Point(x, y)); |
229 } | 229 } |
230 | 230 |
231 void SimulateMouseClickAt(WebContents* web_contents, | 231 void SimulateMouseClickAt(WebContents* web_contents, |
232 int modifiers, | 232 int modifiers, |
233 WebKit::WebMouseEvent::Button button, | 233 blink::WebMouseEvent::Button button, |
234 const gfx::Point& point) { | 234 const gfx::Point& point) { |
235 WebKit::WebMouseEvent mouse_event; | 235 blink::WebMouseEvent mouse_event; |
236 mouse_event.type = WebKit::WebInputEvent::MouseDown; | 236 mouse_event.type = blink::WebInputEvent::MouseDown; |
237 mouse_event.button = button; | 237 mouse_event.button = button; |
238 mouse_event.x = point.x(); | 238 mouse_event.x = point.x(); |
239 mouse_event.y = point.y(); | 239 mouse_event.y = point.y(); |
240 mouse_event.modifiers = modifiers; | 240 mouse_event.modifiers = modifiers; |
241 // Mac needs globalX/globalY for events to plugins. | 241 // Mac needs globalX/globalY for events to plugins. |
242 gfx::Rect offset; | 242 gfx::Rect offset; |
243 web_contents->GetView()->GetContainerBounds(&offset); | 243 web_contents->GetView()->GetContainerBounds(&offset); |
244 mouse_event.globalX = point.x() + offset.x(); | 244 mouse_event.globalX = point.x() + offset.x(); |
245 mouse_event.globalY = point.y() + offset.y(); | 245 mouse_event.globalY = point.y() + offset.y(); |
246 mouse_event.clickCount = 1; | 246 mouse_event.clickCount = 1; |
247 web_contents->GetRenderViewHost()->ForwardMouseEvent(mouse_event); | 247 web_contents->GetRenderViewHost()->ForwardMouseEvent(mouse_event); |
248 mouse_event.type = WebKit::WebInputEvent::MouseUp; | 248 mouse_event.type = blink::WebInputEvent::MouseUp; |
249 web_contents->GetRenderViewHost()->ForwardMouseEvent(mouse_event); | 249 web_contents->GetRenderViewHost()->ForwardMouseEvent(mouse_event); |
250 } | 250 } |
251 | 251 |
252 void SimulateMouseEvent(WebContents* web_contents, | 252 void SimulateMouseEvent(WebContents* web_contents, |
253 WebKit::WebInputEvent::Type type, | 253 blink::WebInputEvent::Type type, |
254 const gfx::Point& point) { | 254 const gfx::Point& point) { |
255 WebKit::WebMouseEvent mouse_event; | 255 blink::WebMouseEvent mouse_event; |
256 mouse_event.type = type; | 256 mouse_event.type = type; |
257 mouse_event.x = point.x(); | 257 mouse_event.x = point.x(); |
258 mouse_event.y = point.y(); | 258 mouse_event.y = point.y(); |
259 web_contents->GetRenderViewHost()->ForwardMouseEvent(mouse_event); | 259 web_contents->GetRenderViewHost()->ForwardMouseEvent(mouse_event); |
260 } | 260 } |
261 | 261 |
262 void SimulateKeyPress(WebContents* web_contents, | 262 void SimulateKeyPress(WebContents* web_contents, |
263 ui::KeyboardCode key_code, | 263 ui::KeyboardCode key_code, |
264 bool control, | 264 bool control, |
265 bool shift, | 265 bool shift, |
(...skipping 11 matching lines...) Expand all Loading... |
277 bool alt, | 277 bool alt, |
278 bool command) { | 278 bool command) { |
279 ui::KeycodeConverter* key_converter = ui::KeycodeConverter::GetInstance(); | 279 ui::KeycodeConverter* key_converter = ui::KeycodeConverter::GetInstance(); |
280 int native_key_code = key_converter->CodeToNativeKeycode(code); | 280 int native_key_code = key_converter->CodeToNativeKeycode(code); |
281 | 281 |
282 int modifiers = 0; | 282 int modifiers = 0; |
283 | 283 |
284 // The order of these key down events shouldn't matter for our simulation. | 284 // The order of these key down events shouldn't matter for our simulation. |
285 // For our simulation we can use either the left keys or the right keys. | 285 // For our simulation we can use either the left keys or the right keys. |
286 if (control) { | 286 if (control) { |
287 modifiers |= WebKit::WebInputEvent::ControlKey; | 287 modifiers |= blink::WebInputEvent::ControlKey; |
288 InjectRawKeyEvent( | 288 InjectRawKeyEvent( |
289 web_contents, | 289 web_contents, |
290 WebKit::WebInputEvent::RawKeyDown, | 290 blink::WebInputEvent::RawKeyDown, |
291 ui::VKEY_CONTROL, | 291 ui::VKEY_CONTROL, |
292 key_converter->CodeToNativeKeycode("ControlLeft"), | 292 key_converter->CodeToNativeKeycode("ControlLeft"), |
293 modifiers); | 293 modifiers); |
294 } | 294 } |
295 | 295 |
296 if (shift) { | 296 if (shift) { |
297 modifiers |= WebKit::WebInputEvent::ShiftKey; | 297 modifiers |= blink::WebInputEvent::ShiftKey; |
298 InjectRawKeyEvent( | 298 InjectRawKeyEvent( |
299 web_contents, | 299 web_contents, |
300 WebKit::WebInputEvent::RawKeyDown, | 300 blink::WebInputEvent::RawKeyDown, |
301 ui::VKEY_SHIFT, | 301 ui::VKEY_SHIFT, |
302 key_converter->CodeToNativeKeycode("ShiftLeft"), | 302 key_converter->CodeToNativeKeycode("ShiftLeft"), |
303 modifiers); | 303 modifiers); |
304 } | 304 } |
305 | 305 |
306 if (alt) { | 306 if (alt) { |
307 modifiers |= WebKit::WebInputEvent::AltKey; | 307 modifiers |= blink::WebInputEvent::AltKey; |
308 InjectRawKeyEvent( | 308 InjectRawKeyEvent( |
309 web_contents, | 309 web_contents, |
310 WebKit::WebInputEvent::RawKeyDown, | 310 blink::WebInputEvent::RawKeyDown, |
311 ui::VKEY_MENU, | 311 ui::VKEY_MENU, |
312 key_converter->CodeToNativeKeycode("AltLeft"), | 312 key_converter->CodeToNativeKeycode("AltLeft"), |
313 modifiers); | 313 modifiers); |
314 } | 314 } |
315 | 315 |
316 if (command) { | 316 if (command) { |
317 modifiers |= WebKit::WebInputEvent::MetaKey; | 317 modifiers |= blink::WebInputEvent::MetaKey; |
318 InjectRawKeyEvent( | 318 InjectRawKeyEvent( |
319 web_contents, | 319 web_contents, |
320 WebKit::WebInputEvent::RawKeyDown, | 320 blink::WebInputEvent::RawKeyDown, |
321 ui::VKEY_COMMAND, | 321 ui::VKEY_COMMAND, |
322 key_converter->CodeToNativeKeycode("OSLeft"), | 322 key_converter->CodeToNativeKeycode("OSLeft"), |
323 modifiers); | 323 modifiers); |
324 } | 324 } |
325 | 325 |
326 InjectRawKeyEvent( | 326 InjectRawKeyEvent( |
327 web_contents, | 327 web_contents, |
328 WebKit::WebInputEvent::RawKeyDown, | 328 blink::WebInputEvent::RawKeyDown, |
329 key_code, | 329 key_code, |
330 native_key_code, | 330 native_key_code, |
331 modifiers); | 331 modifiers); |
332 | 332 |
333 InjectRawKeyEvent( | 333 InjectRawKeyEvent( |
334 web_contents, | 334 web_contents, |
335 WebKit::WebInputEvent::Char, | 335 blink::WebInputEvent::Char, |
336 key_code, | 336 key_code, |
337 native_key_code, | 337 native_key_code, |
338 modifiers); | 338 modifiers); |
339 | 339 |
340 InjectRawKeyEvent( | 340 InjectRawKeyEvent( |
341 web_contents, | 341 web_contents, |
342 WebKit::WebInputEvent::KeyUp, | 342 blink::WebInputEvent::KeyUp, |
343 key_code, | 343 key_code, |
344 native_key_code, | 344 native_key_code, |
345 modifiers); | 345 modifiers); |
346 | 346 |
347 // The order of these key releases shouldn't matter for our simulation. | 347 // The order of these key releases shouldn't matter for our simulation. |
348 if (control) { | 348 if (control) { |
349 modifiers &= ~WebKit::WebInputEvent::ControlKey; | 349 modifiers &= ~blink::WebInputEvent::ControlKey; |
350 InjectRawKeyEvent( | 350 InjectRawKeyEvent( |
351 web_contents, | 351 web_contents, |
352 WebKit::WebInputEvent::KeyUp, | 352 blink::WebInputEvent::KeyUp, |
353 ui::VKEY_CONTROL, | 353 ui::VKEY_CONTROL, |
354 key_converter->CodeToNativeKeycode("ControlLeft"), | 354 key_converter->CodeToNativeKeycode("ControlLeft"), |
355 modifiers); | 355 modifiers); |
356 } | 356 } |
357 | 357 |
358 if (shift) { | 358 if (shift) { |
359 modifiers &= ~WebKit::WebInputEvent::ShiftKey; | 359 modifiers &= ~blink::WebInputEvent::ShiftKey; |
360 InjectRawKeyEvent( | 360 InjectRawKeyEvent( |
361 web_contents, | 361 web_contents, |
362 WebKit::WebInputEvent::KeyUp, | 362 blink::WebInputEvent::KeyUp, |
363 ui::VKEY_SHIFT, | 363 ui::VKEY_SHIFT, |
364 key_converter->CodeToNativeKeycode("ShiftLeft"), | 364 key_converter->CodeToNativeKeycode("ShiftLeft"), |
365 modifiers); | 365 modifiers); |
366 } | 366 } |
367 | 367 |
368 if (alt) { | 368 if (alt) { |
369 modifiers &= ~WebKit::WebInputEvent::AltKey; | 369 modifiers &= ~blink::WebInputEvent::AltKey; |
370 InjectRawKeyEvent( | 370 InjectRawKeyEvent( |
371 web_contents, | 371 web_contents, |
372 WebKit::WebInputEvent::KeyUp, | 372 blink::WebInputEvent::KeyUp, |
373 ui::VKEY_MENU, | 373 ui::VKEY_MENU, |
374 key_converter->CodeToNativeKeycode("AltLeft"), | 374 key_converter->CodeToNativeKeycode("AltLeft"), |
375 modifiers); | 375 modifiers); |
376 } | 376 } |
377 | 377 |
378 if (command) { | 378 if (command) { |
379 modifiers &= ~WebKit::WebInputEvent::MetaKey; | 379 modifiers &= ~blink::WebInputEvent::MetaKey; |
380 InjectRawKeyEvent( | 380 InjectRawKeyEvent( |
381 web_contents, | 381 web_contents, |
382 WebKit::WebInputEvent::KeyUp, | 382 blink::WebInputEvent::KeyUp, |
383 ui::VKEY_COMMAND, | 383 ui::VKEY_COMMAND, |
384 key_converter->CodeToNativeKeycode("OSLeft"), | 384 key_converter->CodeToNativeKeycode("OSLeft"), |
385 modifiers); | 385 modifiers); |
386 } | 386 } |
387 | 387 |
388 ASSERT_EQ(modifiers, 0); | 388 ASSERT_EQ(modifiers, 0); |
389 } | 389 } |
390 | 390 |
391 namespace internal { | 391 namespace internal { |
392 | 392 |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
634 // The queue should not be empty, unless we were quit because of a timeout. | 634 // The queue should not be empty, unless we were quit because of a timeout. |
635 if (message_queue_.empty()) | 635 if (message_queue_.empty()) |
636 return false; | 636 return false; |
637 if (message) | 637 if (message) |
638 *message = message_queue_.front(); | 638 *message = message_queue_.front(); |
639 message_queue_.pop(); | 639 message_queue_.pop(); |
640 return true; | 640 return true; |
641 } | 641 } |
642 | 642 |
643 } // namespace content | 643 } // namespace content |
OLD | NEW |