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

Side by Side Diff: chrome/browser/extensions/web_view_interactive_browsertest.cc

Issue 23003004: Move apps tests from c/b/extensions to c/b/apps and refine DEPS. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Correct ordering in typi Created 7 years, 4 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "apps/shell_window.h"
6 #include "apps/shell_window_registry.h"
7 #include "base/strings/stringprintf.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/extensions/extension_test_message_listener.h"
10 #include "chrome/browser/extensions/platform_app_browsertest_util.h"
11 #include "chrome/test/base/interactive_test_utils.h"
12 #include "chrome/test/base/test_launcher_utils.h"
13 #include "chrome/test/base/ui_test_utils.h"
14 #include "content/public/browser/notification_service.h"
15 #include "content/public/browser/render_process_host.h"
16 #include "content/public/browser/render_view_host.h"
17 #include "content/public/browser/render_widget_host_view.h"
18 #include "content/public/browser/web_contents.h"
19 #include "content/public/browser/web_contents_view.h"
20 #include "content/public/common/content_switches.h"
21 #include "content/public/test/browser_test_utils.h"
22 #include "net/test/embedded_test_server/embedded_test_server.h"
23 #include "ui/base/keycodes/keyboard_codes.h"
24 #include "ui/base/test/ui_controls.h"
25
26 using apps::ShellWindow;
27
28 class WebViewInteractiveTest
29 : public extensions::PlatformAppBrowserTest {
30 public:
31 WebViewInteractiveTest()
32 : corner_(gfx::Point()),
33 mouse_click_result_(false),
34 first_click_(true) {}
35
36 void MoveMouseInsideWindowWithListener(gfx::Point point,
37 const std::string& message) {
38 ExtensionTestMessageListener move_listener(message, false);
39 ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
40 gfx::Point(corner_.x() + point.x(), corner_.y() + point.y())));
41 ASSERT_TRUE(move_listener.WaitUntilSatisfied());
42 }
43
44 void SendMouseClickWithListener(ui_controls::MouseButton button,
45 const std::string& message) {
46 ExtensionTestMessageListener listener(message, false);
47 SendMouseClick(button);
48 ASSERT_TRUE(listener.WaitUntilSatisfied());
49 }
50
51 void SendMouseClick(ui_controls::MouseButton button) {
52 SendMouseEvent(button, ui_controls::DOWN);
53 SendMouseEvent(button, ui_controls::UP);
54 }
55
56 void MoveMouseInsideWindow(const gfx::Point& point) {
57 ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
58 gfx::Point(corner_.x() + point.x(), corner_.y() + point.y())));
59 }
60
61 gfx::NativeWindow GetPlatformAppWindow() {
62 const apps::ShellWindowRegistry::ShellWindowList& shell_windows =
63 apps::ShellWindowRegistry::Get(
64 browser()->profile())->shell_windows();
65 return (*shell_windows.begin())->GetNativeWindow();
66 }
67
68 void SendKeyPressToPlatformApp(ui::KeyboardCode key) {
69 ASSERT_EQ(1U, GetShellWindowCount());
70 ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync(
71 GetPlatformAppWindow(), key, false, false, false, false));
72 }
73
74 void SendCopyKeyPressToPlatformApp() {
75 ASSERT_EQ(1U, GetShellWindowCount());
76 #if defined(OS_MACOSX)
77 // Send Cmd+C on MacOSX.
78 ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync(
79 GetPlatformAppWindow(), ui::VKEY_C, false, false, false, true));
80 #else
81 // Send Ctrl+C on Windows and Linux/ChromeOS.
82 ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync(
83 GetPlatformAppWindow(), ui::VKEY_C, true, false, false, false));
84 #endif
85 }
86
87 void SendStartOfLineKeyPressToPlatformApp() {
88 #if defined(OS_MACOSX)
89 // Send Cmd+Left on MacOSX.
90 ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync(
91 GetPlatformAppWindow(), ui::VKEY_LEFT, false, false, false, true));
92 #else
93 // Send Ctrl+Left on Windows and Linux/ChromeOS.
94 ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync(
95 GetPlatformAppWindow(), ui::VKEY_LEFT, true, false, false, false));
96 #endif
97 }
98
99 void SendBackShortcutToPlatformApp() {
100 #if defined(OS_MACOSX)
101 // Send Cmd+[ on MacOSX.
102 ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync(
103 GetPlatformAppWindow(), ui::VKEY_OEM_4, false, false, false, true));
104 #else
105 // Send browser back key on Linux/Windows.
106 ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync(
107 GetPlatformAppWindow(), ui::VKEY_BROWSER_BACK,
108 false, false, false, false));
109 #endif
110 }
111
112 void SendForwardShortcutToPlatformApp() {
113 #if defined(OS_MACOSX)
114 // Send Cmd+] on MacOSX.
115 ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync(
116 GetPlatformAppWindow(), ui::VKEY_OEM_6, false, false, false, true));
117 #else
118 // Send browser back key on Linux/Windows.
119 ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync(
120 GetPlatformAppWindow(), ui::VKEY_BROWSER_FORWARD,
121 false, false, false, false));
122 #endif
123 }
124
125 void SendMouseEvent(ui_controls::MouseButton button,
126 ui_controls::MouseButtonState state) {
127 if (first_click_) {
128 mouse_click_result_ = ui_test_utils::SendMouseEventsSync(button,
129 state);
130 first_click_ = false;
131 } else {
132 ASSERT_EQ(mouse_click_result_, ui_test_utils::SendMouseEventsSync(
133 button, state));
134 }
135 }
136
137 void TestHelper(const std::string& test_name,
138 const std::string& test_passed_msg,
139 const std::string& test_failed_msg,
140 const std::string& app_location) {
141 ASSERT_TRUE(StartEmbeddedTestServer()); // For serving guest pages.
142 ExtensionTestMessageListener launched_listener("Launched", false);
143 LoadAndLaunchPlatformApp(app_location.c_str());
144 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
145
146 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(
147 GetPlatformAppWindow()));
148
149 // Flush any pending events to make sure we start with a clean slate.
150 content::RunAllPendingInMessageLoop();
151
152 content::WebContents* embedder_web_contents =
153 GetFirstShellWindowWebContents();
154 ASSERT_TRUE(embedder_web_contents);
155
156 ExtensionTestMessageListener done_listener(test_passed_msg, false);
157 done_listener.AlsoListenForFailureMessage(test_failed_msg);
158 EXPECT_TRUE(content::ExecuteScript(
159 embedder_web_contents,
160 base::StringPrintf("runTest('%s')", test_name.c_str())));
161 ASSERT_TRUE(done_listener.WaitUntilSatisfied());
162 }
163
164 void SetupTest(const std::string& app_name,
165 const std::string& guest_url_spec) {
166 ASSERT_TRUE(StartEmbeddedTestServer());
167 GURL::Replacements replace_host;
168 std::string host_str("localhost"); // Must stay in scope with replace_host.
169 replace_host.SetHostStr(host_str);
170
171 GURL guest_url = embedded_test_server()->GetURL(guest_url_spec);
172 guest_url = guest_url.ReplaceComponents(replace_host);
173
174 ui_test_utils::UrlLoadObserver guest_observer(
175 guest_url, content::NotificationService::AllSources());
176
177 ExtensionTestMessageListener guest_connected_listener("connected", false);
178 LoadAndLaunchPlatformApp(app_name.c_str());
179
180 guest_observer.Wait();
181
182 // Wait until the guest process reports that it has established a message
183 // channel with the app.
184 ASSERT_TRUE(guest_connected_listener.WaitUntilSatisfied());
185 content::Source<content::NavigationController> source =
186 guest_observer.source();
187 EXPECT_TRUE(source->GetWebContents()->GetRenderProcessHost()->IsGuest());
188
189 guest_web_contents_ = source->GetWebContents();
190 embedder_web_contents_ = guest_web_contents_->GetEmbedderWebContents();
191
192 gfx::Rect offset;
193 embedder_web_contents_->GetView()->GetContainerBounds(&offset);
194 corner_ = gfx::Point(offset.x(), offset.y());
195
196 const testing::TestInfo* const test_info =
197 testing::UnitTest::GetInstance()->current_test_info();
198 const std::string& prefix = "DragDropWithinWebView";
199 if (!strncmp(test_info->name(), prefix.c_str(), prefix.size())) {
200 // In the drag drop test we add 20px padding to the page body because on
201 // windows if we get too close to the edge of the window the resize cursor
202 // appears and we start dragging the window edge.
203 corner_.Offset(20, 20);
204 }
205 }
206
207 content::WebContents* guest_web_contents() {
208 return guest_web_contents_;
209 }
210
211 content::WebContents* embedder_web_contents() {
212 return embedder_web_contents_;
213 }
214
215 gfx::Point corner() {
216 return corner_;
217 }
218
219 void SimulateRWHMouseClick(content::RenderWidgetHost* rwh, int x, int y) {
220 WebKit::WebMouseEvent mouse_event;
221 mouse_event.button = WebKit::WebMouseEvent::ButtonLeft;
222 mouse_event.x = mouse_event.windowX = x;
223 mouse_event.y = mouse_event.windowY = y;
224 mouse_event.modifiers = 0;
225
226 mouse_event.type = WebKit::WebInputEvent::MouseDown;
227 rwh->ForwardMouseEvent(mouse_event);
228 mouse_event.type = WebKit::WebInputEvent::MouseUp;
229 rwh->ForwardMouseEvent(mouse_event);
230 }
231
232 class PopupCreatedObserver {
233 public:
234 PopupCreatedObserver() : created_(false), last_render_widget_host_(NULL) {
235 created_callback_ = base::Bind(
236 &PopupCreatedObserver::CreatedCallback, base::Unretained(this));
237 content::RenderWidgetHost::AddCreatedCallback(created_callback_);
238 }
239 virtual ~PopupCreatedObserver() {
240 content::RenderWidgetHost::RemoveCreatedCallback(created_callback_);
241 }
242 void Reset() {
243 created_ = false;
244 }
245 void Start() {
246 if (created_)
247 return;
248 message_loop_ = new content::MessageLoopRunner;
249 message_loop_->Run();
250 }
251 content::RenderWidgetHost* last_render_widget_host() {
252 return last_render_widget_host_;
253 }
254
255 private:
256 void CreatedCallback(content::RenderWidgetHost* rwh) {
257 last_render_widget_host_ = rwh;
258 if (message_loop_.get())
259 message_loop_->Quit();
260 else
261 created_ = true;
262 }
263 content::RenderWidgetHost::CreatedCallback created_callback_;
264 scoped_refptr<content::MessageLoopRunner> message_loop_;
265 bool created_;
266 content::RenderWidgetHost* last_render_widget_host_;
267 };
268
269 void WaitForTitle(const char* title) {
270 string16 expected_title(ASCIIToUTF16(title));
271 string16 error_title(ASCIIToUTF16("FAILED"));
272 content::TitleWatcher title_watcher(guest_web_contents(), expected_title);
273 title_watcher.AlsoWaitForTitle(error_title);
274 ASSERT_EQ(expected_title, title_watcher.WaitAndGetTitle());
275 }
276
277 void PopupTestHelper(const gfx::Point& padding) {
278 PopupCreatedObserver popup_created_observer;
279 popup_created_observer.Reset();
280
281 content::SimulateKeyPress(
282 guest_web_contents(),
283 ui::VKEY_C, // C to autocomplete.
284 false, false, false, false);
285
286 WaitForTitle("PASSED1");
287
288 popup_created_observer.Start();
289
290 content::RenderWidgetHost* popup_rwh = NULL;
291 popup_rwh = popup_created_observer.last_render_widget_host();
292 // Popup must be present.
293 ASSERT_TRUE(popup_rwh);
294 ASSERT_TRUE(!popup_rwh->IsRenderView());
295 ASSERT_TRUE(popup_rwh->GetView());
296
297 string16 expected_title = ASCIIToUTF16("PASSED2");
298 string16 error_title = ASCIIToUTF16("FAILED");
299 content::TitleWatcher title_watcher(guest_web_contents(), expected_title);
300 title_watcher.AlsoWaitForTitle(error_title);
301 EXPECT_TRUE(content::ExecuteScript(guest_web_contents(),
302 "changeTitle();"));
303 ASSERT_EQ(expected_title, title_watcher.WaitAndGetTitle());
304
305 gfx::Rect popup_bounds = popup_rwh->GetView()->GetViewBounds();
306 // (2, 2) is expected to lie on the first datalist element.
307 SimulateRWHMouseClick(popup_rwh, 2, 2);
308
309 content::RenderViewHost* embedder_rvh =
310 GetFirstShellWindowWebContents()->GetRenderViewHost();
311 gfx::Rect embedder_bounds = embedder_rvh->GetView()->GetViewBounds();
312 gfx::Vector2d diff = popup_bounds.origin() - embedder_bounds.origin();
313 LOG(INFO) << "DIFF: x = " << diff.x() << ", y = " << diff.y();
314
315 const int left_spacing = 40 + padding.x(); // div.style.paddingLeft = 40px.
316 // div.style.paddingTop = 50px + (input box height = 26px).
317 const int top_spacing = 50 + 26 + padding.y();
318
319 // If the popup is placed within |threshold_px| of the expected position,
320 // then we consider the test as a pass.
321 const int threshold_px = 10;
322
323 EXPECT_LE(std::abs(diff.x() - left_spacing), threshold_px);
324 EXPECT_LE(std::abs(diff.y() - top_spacing), threshold_px);
325
326 WaitForTitle("PASSED3");
327 }
328
329 void DragTestStep1() {
330 // Move mouse to start of text.
331 MoveMouseInsideWindow(gfx::Point(45, 8));
332 SendMouseEvent(ui_controls::LEFT, ui_controls::DOWN);
333 MoveMouseInsideWindow(gfx::Point(76, 12));
334
335 // Now wait a bit before moving mouse to initiate drag/drop.
336 base::MessageLoop::current()->PostDelayedTask(
337 FROM_HERE,
338 base::Bind(&WebViewInteractiveTest::DragTestStep2,
339 base::Unretained(this)),
340 base::TimeDelta::FromMilliseconds(200));
341 }
342
343 void DragTestStep2() {
344 // Drag source over target.
345 MoveMouseInsideWindow(gfx::Point(76, 76));
346
347 // Create a second mouse over the source to trigger the drag over event.
348 MoveMouseInsideWindow(gfx::Point(76, 77));
349
350 // Release mouse to drop.
351 SendMouseEvent(ui_controls::LEFT, ui_controls::UP);
352 SendMouseClick(ui_controls::LEFT);
353
354 quit_closure_.Run();
355
356 // Note that following ExtensionTestMessageListener and ExecuteScript*
357 // call must be after we quit |quit_closure_|. Otherwise the class
358 // here won't be able to receive messages sent by chrome.test.sendMessage.
359 // This is because of the nature of drag and drop code (esp. the
360 // MessageLoop) in it.
361
362 // Now verify we got a drop and correct drop data.
363 ExtensionTestMessageListener drop_listener("guest-got-drop", false);
364 EXPECT_TRUE(content::ExecuteScript(guest_web_contents_,
365 "window.pingEmbedder()"));
366 EXPECT_TRUE(drop_listener.WaitUntilSatisfied());
367
368 std::string last_drop_data;
369 EXPECT_TRUE(content::ExecuteScriptAndExtractString(
370 embedder_web_contents_,
371 "window.domAutomationController.send(getLastDropData())",
372 &last_drop_data));
373 EXPECT_EQ(last_drop_data, "Drop me");
374 }
375
376 protected:
377 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
378 command_line->AppendSwitch(switches::kEnableBrowserPluginDragDrop);
379 extensions::PlatformAppBrowserTest::SetUpCommandLine(command_line);
380 }
381
382 content::WebContents* guest_web_contents_;
383 content::WebContents* embedder_web_contents_;
384 gfx::Point corner_;
385 bool mouse_click_result_;
386 bool first_click_;
387 // Only used in drag/drop test.
388 base::Closure quit_closure_;
389 };
390
391 // ui_test_utils::SendMouseMoveSync doesn't seem to work on OS_MACOSX, and
392 // likely won't work on many other platforms as well, so for now this test
393 // is for Windows and Linux only.
394 #if (defined(OS_WIN) || defined(OS_LINUX))
395
396 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, PointerLock) {
397 SetupTest("web_view/pointer_lock",
398 "/extensions/platform_apps/web_view/pointer_lock/guest.html");
399
400 // Move the mouse over the Lock Pointer button.
401 ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
402 gfx::Point(corner().x() + 75, corner().y() + 25)));
403
404 // Click the Lock Pointer button. The first two times the button is clicked
405 // the permission API will deny the request (intentional).
406 ExtensionTestMessageListener exception_listener("request exception", false);
407 SendMouseClickWithListener(ui_controls::LEFT, "lock error");
408 ASSERT_TRUE(exception_listener.WaitUntilSatisfied());
409 SendMouseClickWithListener(ui_controls::LEFT, "lock error");
410
411 // Click the Lock Pointer button, locking the mouse to lockTarget1.
412 SendMouseClickWithListener(ui_controls::LEFT, "locked");
413
414 // Attempt to move the mouse off of the lock target, and onto lockTarget2,
415 // (which would trigger a test failure).
416 ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
417 gfx::Point(corner().x() + 74, corner().y() + 74)));
418 MoveMouseInsideWindowWithListener(gfx::Point(75, 75), "mouse-move");
419
420 #if (defined(OS_WIN) && defined(USE_AURA))
421 // When the mouse is unlocked on win aura, sending a test mouse click clicks
422 // where the mouse moved to while locked. I was unable to figure out why, and
423 // since the issue only occurs with the test mouse events, just fix it with
424 // a simple workaround - moving the mouse back to where it should be.
425 // TODO(mthiesse): Fix Win Aura simulated mouse events while mouse locked.
426 MoveMouseInsideWindowWithListener(gfx::Point(75, 25), "mouse-move");
427 #endif
428
429 ExtensionTestMessageListener unlocked_listener("unlocked", false);
430 // Send a key press to unlock the mouse.
431 SendKeyPressToPlatformApp(ui::VKEY_ESCAPE);
432
433 // Wait for page to receive (successful) mouse unlock response.
434 ASSERT_TRUE(unlocked_listener.WaitUntilSatisfied());
435
436 // After the second lock, guest.js sends a message to main.js to remove the
437 // webview object. main.js then removes the div containing the webview, which
438 // should unlock, and leave the mouse over the mousemove-capture-container
439 // div. We then move the mouse over that div to ensure the mouse was properly
440 // unlocked and that the div receieves the message.
441 ExtensionTestMessageListener move_captured_listener("move-captured", false);
442 move_captured_listener.AlsoListenForFailureMessage("timeout");
443
444 // Mouse should already be over lock button (since we just unlocked), so send
445 // click to re-lock the mouse.
446 SendMouseClickWithListener(ui_controls::LEFT, "deleted");
447
448 // A mousemove event is triggered on the mousemove-capture-container element
449 // when we delete the webview container (since the mouse moves onto the
450 // element), but just in case, send an explicit mouse movement to be safe.
451 ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
452 gfx::Point(corner().x() + 50, corner().y() + 10)));
453
454 // Wait for page to receive second (successful) mouselock response.
455 bool success = move_captured_listener.WaitUntilSatisfied();
456 if (!success) {
457 fprintf(stderr, "TIMEOUT - retrying\n");
458 // About 1 in 40 tests fail to detect mouse moves at this point (why?).
459 // Sending a right click seems to fix this (why?).
460 ExtensionTestMessageListener move_listener2("move-captured", false);
461 SendMouseClick(ui_controls::RIGHT);
462 ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
463 gfx::Point(corner().x() + 51, corner().y() + 11)));
464 ASSERT_TRUE(move_listener2.WaitUntilSatisfied());
465 }
466 }
467
468 #endif // (defined(OS_WIN) || defined(OS_LINUX))
469
470 // Tests that setting focus on the <webview> sets focus on the guest.
471 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, DISABLED_Focus) {
472 ASSERT_TRUE(StartEmbeddedTestServer()); // For serving guest pages.
473 ASSERT_TRUE(RunPlatformAppTest("platform_apps/web_view/focus"))
474 << message_;
475 }
476
477 // Tests that guests receive edit commands and respond appropriately.
478 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, EditCommands) {
479 SetupTest("web_view/edit_commands",
480 "/extensions/platform_apps/web_view/edit_commands/guest.html");
481
482 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(
483 GetPlatformAppWindow()));
484
485 // Flush any pending events to make sure we start with a clean slate.
486 content::RunAllPendingInMessageLoop();
487
488 ExtensionTestMessageListener copy_listener("copy", false);
489 SendCopyKeyPressToPlatformApp();
490
491 // Wait for the guest to receive a 'copy' edit command.
492 ASSERT_TRUE(copy_listener.WaitUntilSatisfied());
493 }
494
495 // Tests that guests receive edit commands and respond appropriately.
496 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, EditCommandsNoMenu) {
497 SetupTest("web_view/edit_commands_no_menu",
498 "/extensions/platform_apps/web_view/edit_commands_no_menu/"
499 "guest.html");
500
501 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(
502 GetPlatformAppWindow()));
503
504 // Flush any pending events to make sure we start with a clean slate.
505 content::RunAllPendingInMessageLoop();
506
507 ExtensionTestMessageListener start_of_line_listener("StartOfLine", false);
508 SendStartOfLineKeyPressToPlatformApp();
509 // Wait for the guest to receive a 'copy' edit command.
510 ASSERT_TRUE(start_of_line_listener.WaitUntilSatisfied());
511 }
512
513 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest,
514 NewWindow_NewWindowNameTakesPrecedence) {
515 TestHelper("testNewWindowNameTakesPrecedence",
516 "DoneNewWindowTest.PASSED",
517 "DoneNewWindowTest.FAILED",
518 "web_view/newwindow");
519 }
520
521 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest,
522 NewWindow_WebViewNameTakesPrecedence) {
523 TestHelper("testWebViewNameTakesPrecedence",
524 "DoneNewWindowTest.PASSED",
525 "DoneNewWindowTest.FAILED",
526 "web_view/newwindow");
527 }
528
529 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, NewWindow_NoName) {
530 TestHelper("testNoName",
531 "DoneNewWindowTest.PASSED",
532 "DoneNewWindowTest.FAILED",
533 "web_view/newwindow");
534 }
535
536 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, NewWindow_Redirect) {
537 TestHelper("testNewWindowRedirect",
538 "DoneNewWindowTest.PASSED",
539 "DoneNewWindowTest.FAILED",
540 "web_view/newwindow");
541 }
542
543 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, NewWindow_Close) {
544 TestHelper("testNewWindowClose",
545 "DoneNewWindowTest.PASSED",
546 "DoneNewWindowTest.FAILED",
547 "web_view/newwindow");
548 }
549
550 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, NewWindow_ExecuteScript) {
551 TestHelper("testNewWindowExecuteScript",
552 "DoneNewWindowTest.PASSED",
553 "DoneNewWindowTest.FAILED",
554 "web_view/newwindow");
555 }
556
557 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, NewWindow_WebRequest) {
558 TestHelper("testNewWindowWebRequest",
559 "DoneNewWindowTest.PASSED",
560 "DoneNewWindowTest.FAILED",
561 "web_view/newwindow");
562 }
563
564 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, ExecuteCode) {
565 ASSERT_TRUE(StartEmbeddedTestServer()); // For serving guest pages.
566 ASSERT_TRUE(RunPlatformAppTestWithArg(
567 "platform_apps/web_view/common", "execute_code")) << message_;
568 }
569
570 // This test used the old Autofill UI, which has been removed.
571 // See crbug.com/259438
572 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, DISABLED_PopupPositioning) {
573 SetupTest(
574 "web_view/popup_positioning",
575 "/extensions/platform_apps/web_view/popup_positioning/guest.html");
576 ASSERT_TRUE(guest_web_contents());
577
578 PopupTestHelper(gfx::Point());
579
580 // moveTo a random location and run the steps again.
581 EXPECT_TRUE(content::ExecuteScript(embedder_web_contents(),
582 "window.moveTo(16, 20);"));
583 PopupTestHelper(gfx::Point());
584 }
585
586 // Tests that moving browser plugin (without resize/UpdateRects) correctly
587 // repositions popup.
588 // Started flakily failing after a Blink roll: http://crbug.com/245332
589 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, DISABLED_PopupPositioningMoved) {
590 SetupTest(
591 "web_view/popup_positioning_moved",
592 "/extensions/platform_apps/web_view/popup_positioning_moved"
593 "/guest.html");
594 ASSERT_TRUE(guest_web_contents());
595
596 PopupTestHelper(gfx::Point(20, 0));
597 }
598
599 // Drag and drop inside a webview is currently only enabled for linux and mac,
600 // but the tests don't work on anything except chromeos for now. This is because
601 // of simulating mouse drag code's dependency on platforms.
602 #if defined(OS_CHROMEOS)
603 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, DragDropWithinWebView) {
604 SetupTest(
605 "web_view/dnd_within_webview",
606 "/extensions/platform_apps/web_view/dnd_within_webview/guest.html");
607 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(GetPlatformAppWindow()));
608
609 // Flush any pending events to make sure we start with a clean slate.
610 content::RunAllPendingInMessageLoop();
611 base::RunLoop run_loop;
612 quit_closure_ = run_loop.QuitClosure();
613 base::MessageLoop::current()->PostTask(
614 FROM_HERE,
615 base::Bind(&WebViewInteractiveTest::DragTestStep1,
616 base::Unretained(this)));
617 run_loop.Run();
618 }
619 #endif // (defined(OS_CHROMEOS))
620
621 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, Navigation) {
622 TestHelper("testNavigation",
623 "DoneNavigationTest.PASSED",
624 "DoneNavigationTest.FAILED",
625 "web_view/navigation");
626 }
627
628 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, Navigation_BackForwardKeys) {
629 ASSERT_TRUE(StartEmbeddedTestServer()); // For serving guest pages.
630 ExtensionTestMessageListener launched_listener("Launched", false);
631 LoadAndLaunchPlatformApp("web_view/navigation");
632 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
633
634 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(
635 GetPlatformAppWindow()));
636 // Flush any pending events to make sure we start with a clean slate.
637 content::RunAllPendingInMessageLoop();
638
639 content::WebContents* embedder_web_contents =
640 GetFirstShellWindowWebContents();
641 ASSERT_TRUE(embedder_web_contents);
642
643 ExtensionTestMessageListener done_listener(
644 "DoneNavigationTest.PASSED", false);
645 done_listener.AlsoListenForFailureMessage("DoneNavigationTest.FAILED");
646 ExtensionTestMessageListener ready_back_key_listener(
647 "ReadyForBackKey", false);
648 ExtensionTestMessageListener ready_forward_key_listener(
649 "ReadyForForwardKey", false);
650
651 EXPECT_TRUE(content::ExecuteScript(
652 embedder_web_contents,
653 "runTest('testBackForwardKeys')"));
654
655 ASSERT_TRUE(ready_back_key_listener.WaitUntilSatisfied());
656 SendBackShortcutToPlatformApp();
657
658 ASSERT_TRUE(ready_forward_key_listener.WaitUntilSatisfied());
659 SendForwardShortcutToPlatformApp();
660
661 ASSERT_TRUE(done_listener.WaitUntilSatisfied());
662 }
663
664 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest,
665 PointerLock_PointerLockLostWithFocus) {
666 TestHelper("testPointerLockLostWithFocus",
667 "DonePointerLockTest.PASSED",
668 "DonePointerLockTest.FAILED",
669 "web_view/pointerlock");
670 }
671
OLDNEW
« no previous file with comments | « chrome/browser/extensions/web_view_browsertest.cc ('k') | chrome/browser/extensions/window_controls_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698