Index: chrome/browser/extensions/app_process_apitest.cc |
diff --git a/chrome/browser/extensions/app_process_apitest.cc b/chrome/browser/extensions/app_process_apitest.cc |
index 7467c04881925c1976e9c832c6bf8a1e6e9ac039..381fd49b38441dadfe591550f1c8c1742e3f819a 100644 |
--- a/chrome/browser/extensions/app_process_apitest.cc |
+++ b/chrome/browser/extensions/app_process_apitest.cc |
@@ -189,3 +189,53 @@ IN_PROC_BROWSER_TEST_F(AppApiTest, AppProcessRedirectBack) { |
EXPECT_EQ(host->process(), |
browser()->GetTabContentsAt(2)->render_view_host()->process()); |
} |
+ |
+// Ensure that reloading a URL after installing or uninstalling it as an app |
+// correctly swaps the process. (http://crbug.com/80621) |
+IN_PROC_BROWSER_TEST_F(AppApiTest, ReloadIntoAppProcess) { |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kDisablePopupBlocking); |
+ |
+ host_resolver()->AddRule("*", "127.0.0.1"); |
+ ASSERT_TRUE(test_server()->Start()); |
+ |
+ // The app under test acts on URLs whose host is "localhost", |
+ // so the URLs we navigate to must have host "localhost". |
+ GURL::Replacements replace_host; |
+ std::string host_str("localhost"); // must stay in scope with replace_host |
+ replace_host.SetHostStr(host_str); |
+ GURL base_url = test_server()->GetURL( |
+ "files/extensions/api_test/app_process/"); |
+ base_url = base_url.ReplaceComponents(replace_host); |
+ |
+ // Load an app URL before loading the app. |
+ ui_test_utils::NavigateToURL(browser(), base_url.Resolve("path1/empty.html")); |
+ TabContents* contents = browser()->GetTabContentsAt(0); |
+ EXPECT_FALSE(contents->render_view_host()->process()->is_extension_process()); |
+ |
+ // Load app and reload page. |
+ const Extension* app = |
+ LoadExtension(test_data_dir_.AppendASCII("app_process")); |
+ ASSERT_TRUE(app); |
+ ui_test_utils::NavigateToURL(browser(), base_url.Resolve("path1/empty.html")); |
+ EXPECT_TRUE(contents->render_view_host()->process()->is_extension_process()); |
+ |
+ // Disable app and reload page. |
+ DisableExtension(app->id()); |
+ ui_test_utils::NavigateToURL(browser(), base_url.Resolve("path1/empty.html")); |
+ EXPECT_FALSE(contents->render_view_host()->process()->is_extension_process()); |
+ |
+ // Enable app and reload via JavaScript. |
+ EnableExtension(app->id()); |
+ ASSERT_TRUE(ui_test_utils::ExecuteJavaScript(contents->render_view_host(), |
+ L"", L"location.reload();")); |
+ ui_test_utils::WaitForNavigation(&contents->controller()); |
+ EXPECT_TRUE(contents->render_view_host()->process()->is_extension_process()); |
+ |
+ // Disable app and reload via JavaScript. |
+ DisableExtension(app->id()); |
+ ASSERT_TRUE(ui_test_utils::ExecuteJavaScript(contents->render_view_host(), |
+ L"", L"location.reload();")); |
+ ui_test_utils::WaitForNavigation(&contents->controller()); |
+ EXPECT_FALSE(contents->render_view_host()->process()->is_extension_process()); |
+} |