1 // Copyright 2014 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.
5 #include "extensions/browser/guest_view/web_view/web_view_apitest.h"
7 #include "base/command_line.h"
8 #include "base/path_service.h"
9 #include "base/strings/string_util.h"
10 #include "base/strings/stringprintf.h"
11 #include "content/public/browser/render_process_host.h"
12 #include "content/public/common/content_switches.h"
13 #include "content/public/test/browser_test_utils.h"
14 #include "content/public/test/test_renderer_host.h"
15 #include "content/public/test/test_utils.h"
16 #include "extensions/browser/api/test/test_api.h"
17 #include "extensions/browser/app_window/app_window.h"
18 #include "extensions/browser/app_window/app_window_registry.h"
19 #include "extensions/browser/extension_host.h"
20 #include "extensions/browser/guest_view/guest_view_manager.h"
21 #include "extensions/browser/guest_view/guest_view_manager_factory.h"
22 #include "extensions/browser/guest_view/test_guest_view_manager.h"
23 #include "extensions/browser/process_manager.h"
24 #include "extensions/common/extension.h"
25 #include "extensions/common/extension_paths.h"
26 #include "extensions/shell/browser/shell_content_browser_client.h"
27 #include "extensions/shell/browser/shell_extension_system.h"
28 #include "extensions/shell/test/shell_test.h"
29 #include "extensions/test/extension_test_message_listener.h"
30 #include "net/base/filename_util.h"
31 #include "net/test/embedded_test_server/embedded_test_server.h"
32 #include "net/test/embedded_test_server/http_request.h"
33 #include "net/test/embedded_test_server/http_response.h"
34 #include "ui/gfx/switches.h"
38 const char kEmptyResponsePath[] = "/close-socket";
39 const char kRedirectResponsePath[] = "/server-redirect";
40 const char kRedirectResponseFullPath[] = "/guest_redirect.html";
41 const char kUserAgentRedirectResponsePath[] = "/detect-user-agent";
42 const char kTestDataDirectory[] = "testDataDirectory";
43 const char kTestServerPort[] = "testServer.port";
44 const char kTestWebSocketPort[] = "testWebSocketPort";
46 class EmptyHttpResponse : public net::test_server::HttpResponse {
48 std::string ToResponseString() const override { return std::string(); }
51 // Handles |request| by serving a redirect response if the |User-Agent| is
53 static scoped_ptr<net::test_server::HttpResponse> UserAgentResponseHandler(
54 const std::string& path,
55 const GURL& redirect_target,
56 const net::test_server::HttpRequest& request) {
57 if (!StartsWithASCII(path, request.relative_url, true))
58 return scoped_ptr<net::test_server::HttpResponse>();
60 std::map<std::string, std::string>::const_iterator it =
61 request.headers.find("User-Agent");
62 EXPECT_TRUE(it != request.headers.end());
63 if (!StartsWithASCII("foobar", it->second, true))
64 return scoped_ptr<net::test_server::HttpResponse>();
66 scoped_ptr<net::test_server::BasicHttpResponse> http_response(
67 new net::test_server::BasicHttpResponse);
68 http_response->set_code(net::HTTP_MOVED_PERMANENTLY);
69 http_response->AddCustomHeader("Location", redirect_target.spec());
70 return http_response.Pass();
73 class WebContentsHiddenObserver : public content::WebContentsObserver {
75 WebContentsHiddenObserver(content::WebContents* web_contents,
76 const base::Closure& hidden_callback)
77 : WebContentsObserver(web_contents),
78 hidden_callback_(hidden_callback),
79 hidden_observed_(false) {
82 // WebContentsObserver.
83 void WasHidden() override {
84 hidden_observed_ = true;
85 hidden_callback_.Run();
88 bool hidden_observed() { return hidden_observed_; }
91 base::Closure hidden_callback_;
92 bool hidden_observed_;
94 DISALLOW_COPY_AND_ASSIGN(WebContentsHiddenObserver);
97 // Handles |request| by serving a redirect response.
98 scoped_ptr<net::test_server::HttpResponse> RedirectResponseHandler(
99 const std::string& path,
100 const GURL& redirect_target,
101 const net::test_server::HttpRequest& request) {
102 if (!StartsWithASCII(path, request.relative_url, true))
103 return scoped_ptr<net::test_server::HttpResponse>();
105 scoped_ptr<net::test_server::BasicHttpResponse> http_response(
106 new net::test_server::BasicHttpResponse);
107 http_response->set_code(net::HTTP_MOVED_PERMANENTLY);
108 http_response->AddCustomHeader("Location", redirect_target.spec());
109 return http_response.Pass();
112 // Handles |request| by serving an empty response.
113 scoped_ptr<net::test_server::HttpResponse> EmptyResponseHandler(
114 const std::string& path,
115 const net::test_server::HttpRequest& request) {
116 if (StartsWithASCII(path, request.relative_url, true)) {
117 return scoped_ptr<net::test_server::HttpResponse>(new EmptyHttpResponse);
120 return scoped_ptr<net::test_server::HttpResponse>();
125 namespace extensions {
127 WebViewAPITest::WebViewAPITest() {
128 GuestViewManager::set_factory_for_testing(&factory_);
131 void WebViewAPITest::LaunchApp(const std::string& app_location) {
132 base::FilePath test_data_dir;
133 PathService::Get(DIR_TEST_DATA, &test_data_dir);
134 test_data_dir = test_data_dir.AppendASCII(app_location.c_str());
136 test_config_.SetString(kTestDataDirectory,
137 net::FilePathToFileURL(test_data_dir).spec());
139 embedded_test_server()->ServeFilesFromDirectory(test_data_dir);
141 const Extension* extension = extension_system_->LoadApp(test_data_dir);
142 ASSERT_TRUE(extension);
143 extension_system_->LaunchApp(extension->id());
145 ExtensionTestMessageListener launch_listener("LAUNCHED", false);
146 ASSERT_TRUE(launch_listener.WaitUntilSatisfied());
148 embedder_web_contents_ = GetFirstAppWindowWebContents();
151 content::WebContents* WebViewAPITest::GetFirstAppWindowWebContents() {
152 const AppWindowRegistry::AppWindowList& app_window_list =
153 AppWindowRegistry::Get(browser_context_)->app_windows();
154 DCHECK(app_window_list.size() == 1);
155 return (*app_window_list.begin())->web_contents();
158 void WebViewAPITest::RunTest(const std::string& test_name,
159 const std::string& app_location) {
160 LaunchApp(app_location);
162 ExtensionTestMessageListener done_listener("TEST_PASSED", false);
163 done_listener.set_failure_message("TEST_FAILED");
164 ASSERT_TRUE(content::ExecuteScript(
165 embedder_web_contents_,
166 base::StringPrintf("runTest('%s')", test_name.c_str())))
167 << "Unable to start test.";
168 ASSERT_TRUE(done_listener.WaitUntilSatisfied());
171 void WebViewAPITest::RunTestOnMainThreadLoop() {
172 AppShellTest::RunTestOnMainThreadLoop();
173 GetGuestViewManager()->WaitForAllGuestsDeleted();
176 void WebViewAPITest::SetUpCommandLine(base::CommandLine* command_line) {
177 AppShellTest::SetUpCommandLine(command_line);
178 command_line->AppendSwitchASCII(switches::kJavaScriptFlags, "--expose-gc");
181 void WebViewAPITest::SetUpOnMainThread() {
182 AppShellTest::SetUpOnMainThread();
184 TestGetConfigFunction::set_test_config_state(&test_config_);
185 base::FilePath test_data_dir;
186 test_config_.SetInteger(kTestWebSocketPort, 0);
189 void WebViewAPITest::StartTestServer() {
190 // For serving guest pages.
191 if (!embedded_test_server()->InitializeAndWaitUntilReady()) {
192 LOG(ERROR) << "Failed to start test server.";
196 test_config_.SetInteger(kTestServerPort, embedded_test_server()->port());
198 embedded_test_server()->RegisterRequestHandler(
199 base::Bind(&RedirectResponseHandler,
200 kRedirectResponsePath,
201 embedded_test_server()->GetURL(kRedirectResponseFullPath)));
203 embedded_test_server()->RegisterRequestHandler(
204 base::Bind(&EmptyResponseHandler, kEmptyResponsePath));
206 embedded_test_server()->RegisterRequestHandler(
208 &UserAgentResponseHandler,
209 kUserAgentRedirectResponsePath,
210 embedded_test_server()->GetURL(kRedirectResponseFullPath)));
213 void WebViewAPITest::StopTestServer() {
214 if (!embedded_test_server()->ShutdownAndWaitUntilComplete()) {
215 LOG(ERROR) << "Failed to shutdown test server.";
219 void WebViewAPITest::TearDownOnMainThread() {
220 TestGetConfigFunction::set_test_config_state(nullptr);
222 AppShellTest::TearDownOnMainThread();
225 void WebViewAPITest::SendMessageToEmbedder(const std::string& message) {
227 content::ExecuteScript(
228 GetEmbedderWebContents(),
229 base::StringPrintf("onAppCommand('%s');", message.c_str())));
232 content::WebContents* WebViewAPITest::GetEmbedderWebContents() {
233 if (!embedder_web_contents_)
234 embedder_web_contents_ = GetFirstAppWindowWebContents();
235 return embedder_web_contents_;
238 TestGuestViewManager* WebViewAPITest::GetGuestViewManager() {
239 return static_cast<TestGuestViewManager*>(
240 TestGuestViewManager::FromBrowserContext(
241 ShellContentBrowserClient::Get()->GetBrowserContext()));
244 void WebViewAPITest::SendMessageToGuestAndWait(
245 const std::string& message,
246 const std::string& wait_message) {
247 scoped_ptr<ExtensionTestMessageListener> listener;
248 if (!wait_message.empty())
249 listener.reset(new ExtensionTestMessageListener(wait_message, false));
252 content::ExecuteScript(
253 GetGuestWebContents(),
254 base::StringPrintf("onAppCommand('%s');", message.c_str())));
257 ASSERT_TRUE(listener->WaitUntilSatisfied());
260 void WebViewDPIAPITest::SetUp() {
261 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
262 command_line->AppendSwitchASCII(switches::kForceDeviceScaleFactor,
263 base::StringPrintf("%f", scale()));
264 WebViewAPITest::SetUp();
267 content::WebContents* WebViewAPITest::GetGuestWebContents() {
268 return GetGuestViewManager()->WaitForSingleGuestCreated();
271 // Occasionally hits NOTIMPLEMENTED on Linux. https://crbug.com/422998
272 #if defined(OS_LINUX)
273 #define MAYBE_AcceptTouchEvents DISABLED_AcceptTouchEvents
275 #define MAYBE_AcceptTouchEvents AcceptTouchEvents
277 IN_PROC_BROWSER_TEST_F(WebViewAPITest, MAYBE_AcceptTouchEvents) {
278 LaunchApp("web_view/accept_touch_events");
280 content::RenderViewHost* embedder_rvh =
281 GetEmbedderWebContents()->GetRenderViewHost();
283 bool embedder_has_touch_handler =
284 content::RenderViewHostTester::HasTouchEventHandler(embedder_rvh);
285 EXPECT_FALSE(embedder_has_touch_handler);
287 SendMessageToGuestAndWait("install-touch-handler", "installed-touch-handler");
289 // Note that we need to wait for the installed/registered touch handler to
290 // appear in browser process before querying |embedder_rvh|.
291 // In practice, since we do a roundrtip from browser process to guest and
292 // back, this is sufficient.
293 embedder_has_touch_handler =
294 content::RenderViewHostTester::HasTouchEventHandler(embedder_rvh);
295 EXPECT_TRUE(embedder_has_touch_handler);
297 SendMessageToGuestAndWait("uninstall-touch-handler",
298 "uninstalled-touch-handler");
299 // Same as the note above about waiting.
300 embedder_has_touch_handler =
301 content::RenderViewHostTester::HasTouchEventHandler(embedder_rvh);
302 EXPECT_FALSE(embedder_has_touch_handler);
305 // This test verifies that hiding the embedder also hides the guest.
306 IN_PROC_BROWSER_TEST_F(WebViewAPITest, EmbedderVisibilityChanged) {
307 LaunchApp("web_view/visibility_changed");
309 scoped_refptr<content::MessageLoopRunner> loop_runner(
310 new content::MessageLoopRunner);
311 WebContentsHiddenObserver observer(GetGuestWebContents(),
312 loop_runner->QuitClosure());
314 // Handled in web_view/visibility_changed/main.js
315 SendMessageToEmbedder("hide-embedder");
316 if (!observer.hidden_observed())
320 // Test for http://crbug.com/419611.
321 IN_PROC_BROWSER_TEST_F(WebViewAPITest, DisplayNoneSetSrc) {
322 LaunchApp("web_view/display_none_set_src");
323 // Navigate the guest while it's in "display: none" state.
324 SendMessageToEmbedder("navigate-guest");
325 GetGuestViewManager()->WaitForSingleGuestCreated();
327 // Now attempt to navigate the guest again.
328 SendMessageToEmbedder("navigate-guest");
330 ExtensionTestMessageListener test_passed_listener("WebViewTest.PASSED",
332 // Making the guest visible would trigger loadstop.
333 SendMessageToEmbedder("show-guest");
334 EXPECT_TRUE(test_passed_listener.WaitUntilSatisfied());
337 // This test verifies that hiding the guest triggers WebContents::WasHidden().
338 IN_PROC_BROWSER_TEST_F(WebViewAPITest, GuestVisibilityChanged) {
339 LaunchApp("web_view/visibility_changed");
341 scoped_refptr<content::MessageLoopRunner> loop_runner(
342 new content::MessageLoopRunner);
343 WebContentsHiddenObserver observer(GetGuestWebContents(),
344 loop_runner->QuitClosure());
346 // Handled in web_view/visibility_changed/main.js
347 SendMessageToEmbedder("hide-guest");
348 if (!observer.hidden_observed())
352 // This test ensures that closing app window on 'loadcommit' does not crash.
353 // The test launches an app with guest and closes the window on loadcommit. It
354 // then launches the app window again. The process is repeated 3 times.
355 // http://crbug.com/291278
357 #define MAYBE_CloseOnLoadcommit DISABLED_CloseOnLoadcommit
359 #define MAYBE_CloseOnLoadcommit CloseOnLoadcommit
361 IN_PROC_BROWSER_TEST_F(WebViewAPITest, MAYBE_CloseOnLoadcommit) {
362 LaunchApp("web_view/close_on_loadcommit");
363 ExtensionTestMessageListener test_done_listener("done-close-on-loadcommit",
365 ASSERT_TRUE(test_done_listener.WaitUntilSatisfied());
368 // This test verifies that reloading the embedder reloads the guest (and doest
370 IN_PROC_BROWSER_TEST_F(WebViewAPITest, ReloadEmbedder) {
371 // Just load a guest from other test, we do not want to add a separate
372 // app for this test.
373 LaunchApp("web_view/visibility_changed");
375 ExtensionTestMessageListener launched_again_listener("LAUNCHED", false);
376 embedder_web_contents_->GetController().Reload(false);
377 ASSERT_TRUE(launched_again_listener.WaitUntilSatisfied());
380 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAllowTransparencyAttribute) {
381 RunTest("testAllowTransparencyAttribute", "web_view/apitest");
384 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAPIMethodExistence) {
385 RunTest("testAPIMethodExistence", "web_view/apitest");
388 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAssignSrcAfterCrash) {
389 RunTest("testAssignSrcAfterCrash", "web_view/apitest");
392 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAutosizeAfterNavigation) {
393 RunTest("testAutosizeAfterNavigation", "web_view/apitest");
396 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAutosizeBeforeNavigation) {
397 RunTest("testAutosizeBeforeNavigation", "web_view/apitest");
400 IN_PROC_BROWSER_TEST_F(WebViewDPIAPITest, TestAutosizeBeforeNavigation) {
401 RunTest("testAutosizeBeforeNavigation", "web_view/apitest");
404 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAutosizeHeight) {
405 RunTest("testAutosizeHeight", "web_view/apitest");
408 IN_PROC_BROWSER_TEST_F(WebViewDPIAPITest, TestAutosizeHeight) {
409 RunTest("testAutosizeHeight", "web_view/apitest");
412 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAutosizeRemoveAttributes) {
413 RunTest("testAutosizeRemoveAttributes", "web_view/apitest");
416 IN_PROC_BROWSER_TEST_F(WebViewDPIAPITest, TestAutosizeRemoveAttributes) {
417 RunTest("testAutosizeRemoveAttributes", "web_view/apitest");
420 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAutosizeWithPartialAttributes) {
421 RunTest("testAutosizeWithPartialAttributes", "web_view/apitest");
424 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestCannotMutateEventName) {
425 RunTest("testCannotMutateEventName", "web_view/apitest");
428 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestChromeExtensionRelativePath) {
429 RunTest("testChromeExtensionRelativePath", "web_view/apitest");
432 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestChromeExtensionURL) {
433 RunTest("testChromeExtensionURL", "web_view/apitest");
436 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestContentLoadEvent) {
437 RunTest("testContentLoadEvent", "web_view/apitest");
440 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestDeclarativeWebRequestAPI) {
442 RunTest("testDeclarativeWebRequestAPI", "web_view/apitest");
446 IN_PROC_BROWSER_TEST_F(WebViewAPITest,
447 TestDeclarativeWebRequestAPISendMessage) {
449 RunTest("testDeclarativeWebRequestAPISendMessage", "web_view/apitest");
453 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestDestroyOnEventListener) {
454 RunTest("testDestroyOnEventListener", "web_view/apitest");
457 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestDialogAlert) {
458 RunTest("testDialogAlert", "web_view/dialog");
461 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestDialogConfirm) {
462 RunTest("testDialogConfirm", "web_view/dialog");
465 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestDialogConfirmCancel) {
466 RunTest("testDialogConfirmCancel", "web_view/dialog");
469 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestDialogConfirmDefaultCancel) {
470 RunTest("testDialogConfirmDefaultCancel", "web_view/dialog");
473 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestDialogConfirmDefaultGCCancel) {
474 RunTest("testDialogConfirmDefaultGCCancel", "web_view/dialog");
477 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestDialogPrompt) {
478 RunTest("testDialogPrompt", "web_view/dialog");
481 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestDisplayNoneWebviewLoad) {
482 RunTest("testDisplayNoneWebviewLoad", "web_view/apitest");
485 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestDisplayNoneWebviewRemoveChild) {
486 RunTest("testDisplayNoneWebviewRemoveChild", "web_view/apitest");
489 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestEventName) {
490 RunTest("testEventName", "web_view/apitest");
493 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestExecuteScript) {
494 RunTest("testExecuteScript", "web_view/apitest");
497 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestExecuteScriptFail) {
498 RunTest("testExecuteScriptFail", "web_view/apitest");
501 IN_PROC_BROWSER_TEST_F(WebViewAPITest,
502 TestExecuteScriptIsAbortedWhenWebViewSourceIsChanged) {
503 RunTest("testExecuteScriptIsAbortedWhenWebViewSourceIsChanged",
507 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestFindAPI) {
508 RunTest("testFindAPI", "web_view/apitest");
511 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestFindAPI_findupdate) {
512 RunTest("testFindAPI_findupdate", "web_view/apitest");
515 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestGetProcessId) {
516 RunTest("testGetProcessId", "web_view/apitest");
519 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestHiddenBeforeNavigation) {
520 RunTest("testHiddenBeforeNavigation", "web_view/apitest");
523 IN_PROC_BROWSER_TEST_F(WebViewAPITest,
524 TestInlineScriptFromAccessibleResources) {
525 RunTest("testInlineScriptFromAccessibleResources", "web_view/apitest");
528 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestInvalidChromeExtensionURL) {
529 RunTest("testInvalidChromeExtensionURL", "web_view/apitest");
532 IN_PROC_BROWSER_TEST_F(WebViewAPITest,
533 TestLoadAbortChromeExtensionURLWrongPartition) {
534 RunTest("testLoadAbortChromeExtensionURLWrongPartition", "web_view/apitest");
537 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestLoadAbortEmptyResponse) {
539 RunTest("testLoadAbortEmptyResponse", "web_view/apitest");
543 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestLoadAbortIllegalChromeURL) {
544 RunTest("testLoadAbortIllegalChromeURL", "web_view/apitest");
547 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestLoadAbortIllegalFileURL) {
548 RunTest("testLoadAbortIllegalFileURL", "web_view/apitest");
551 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestLoadAbortIllegalJavaScriptURL) {
552 RunTest("testLoadAbortIllegalJavaScriptURL", "web_view/apitest");
555 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestLoadAbortInvalidNavigation) {
556 RunTest("testLoadAbortInvalidNavigation", "web_view/apitest");
559 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestLoadAbortNonWebSafeScheme) {
560 RunTest("testLoadAbortNonWebSafeScheme", "web_view/apitest");
563 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestLoadProgressEvent) {
564 RunTest("testLoadProgressEvent", "web_view/apitest");
567 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestLoadStartLoadRedirect) {
569 RunTest("testLoadStartLoadRedirect", "web_view/apitest");
573 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestNavigateAfterResize) {
574 RunTest("testNavigateAfterResize", "web_view/apitest");
577 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestNavigationToExternalProtocol) {
578 RunTest("testNavigationToExternalProtocol", "web_view/apitest");
581 IN_PROC_BROWSER_TEST_F(WebViewAPITest,
582 TestNavOnConsecutiveSrcAttributeChanges) {
583 RunTest("testNavOnConsecutiveSrcAttributeChanges", "web_view/apitest");
586 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestNavOnSrcAttributeChange) {
587 RunTest("testNavOnSrcAttributeChange", "web_view/apitest");
590 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestNewWindow) {
592 RunTest("testNewWindow", "web_view/apitest");
596 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestNewWindowNoPreventDefault) {
598 RunTest("testNewWindowNoPreventDefault", "web_view/apitest");
602 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestNewWindowNoReferrerLink) {
604 RunTest("testNewWindowNoReferrerLink", "web_view/apitest");
608 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestNewWindowTwoListeners) {
610 RunTest("testNewWindowTwoListeners", "web_view/apitest");
614 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestOnEventProperty) {
615 RunTest("testOnEventProperties", "web_view/apitest");
618 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestPartitionChangeAfterNavigation) {
619 RunTest("testPartitionChangeAfterNavigation", "web_view/apitest");
622 IN_PROC_BROWSER_TEST_F(WebViewAPITest,
623 TestPartitionRemovalAfterNavigationFails) {
624 RunTest("testPartitionRemovalAfterNavigationFails", "web_view/apitest");
627 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestReassignSrcAttribute) {
628 RunTest("testReassignSrcAttribute", "web_view/apitest");
631 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestRemoveWebviewOnExit) {
634 // Launch the app and wait until it's ready to load a test.
635 LaunchApp("web_view/apitest");
637 GURL::Replacements replace_host;
638 std::string host_str("localhost"); // Must stay in scope with replace_host.
639 replace_host.SetHostStr(host_str);
641 // Run the test and wait until the guest WebContents is available and has
643 ExtensionTestMessageListener guest_loaded_listener("guest-loaded", false);
644 EXPECT_TRUE(content::ExecuteScript(embedder_web_contents_,
645 "runTest('testRemoveWebviewOnExit')"));
647 content::WebContents* guest_web_contents = GetGuestWebContents();
648 EXPECT_TRUE(guest_web_contents->GetRenderProcessHost()->IsIsolatedGuest());
649 ASSERT_TRUE(guest_loaded_listener.WaitUntilSatisfied());
651 content::WebContentsDestroyedWatcher destroyed_watcher(guest_web_contents);
653 // Tell the embedder to kill the guest.
654 EXPECT_TRUE(content::ExecuteScript(embedder_web_contents_,
655 "removeWebviewOnExitDoCrash()"));
657 // Wait until the guest WebContents is destroyed.
658 destroyed_watcher.Wait();
662 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestReload) {
663 RunTest("testReload", "web_view/apitest");
666 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestReloadAfterTerminate) {
667 RunTest("testReloadAfterTerminate", "web_view/apitest");
670 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestRemoveSrcAttribute) {
671 RunTest("testRemoveSrcAttribute", "web_view/apitest");
674 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestRemoveWebviewAfterNavigation) {
675 RunTest("testRemoveWebviewAfterNavigation", "web_view/apitest");
678 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestResizeWebviewResizesContent) {
679 RunTest("testResizeWebviewResizesContent", "web_view/apitest");
682 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestTerminateAfterExit) {
683 RunTest("testTerminateAfterExit", "web_view/apitest");
686 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestWebRequestAPI) {
688 RunTest("testWebRequestAPI", "web_view/apitest");
692 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestWebRequestAPIWithHeaders) {
694 RunTest("testWebRequestAPIWithHeaders", "web_view/apitest");
698 // Tests the existence of WebRequest API event objects on the request
699 // object, on the webview element, and hanging directly off webview.
700 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestWebRequestAPIExistence) {
701 RunTest("testWebRequestAPIExistence", "web_view/apitest");
704 IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestWebRequestAPIGoogleProperty) {
705 RunTest("testWebRequestAPIGoogleProperty", "web_view/apitest");
708 } // namespace extensions