Index: chrome/browser/extensions/isolated_app_browsertest.cc |
diff --git a/chrome/browser/extensions/isolated_app_browsertest.cc b/chrome/browser/extensions/isolated_app_browsertest.cc |
index 431aa7a84c53b0c908b17da9e335fceb68efa2f4..8b575eafaf4d4084ccd7649c637946a68667adc0 100644 |
--- a/chrome/browser/extensions/isolated_app_browsertest.cc |
+++ b/chrome/browser/extensions/isolated_app_browsertest.cc |
@@ -177,6 +177,8 @@ IN_PROC_BROWSER_TEST_F(IsolatedAppTest, ProcessOverflow) { |
ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("isolated_apps/app1"))); |
ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("isolated_apps/app2"))); |
ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("hosted_app"))); |
+ ASSERT_TRUE( |
+ LoadExtension(test_data_dir_.AppendASCII("api_test/app_process"))); |
// The app under test acts on URLs whose host is "localhost", |
// so the URLs we navigate to must have host "localhost". |
@@ -187,7 +189,13 @@ IN_PROC_BROWSER_TEST_F(IsolatedAppTest, ProcessOverflow) { |
replace_host.SetHostStr(host_str); |
base_url = base_url.ReplaceComponents(replace_host); |
- // Create a tab for each type of renderer that might exist. |
+ // Load an extension before adding tabs. |
+ const Extension* extension1 = LoadExtension( |
+ test_data_dir_.AppendASCII("api_test/browser_action/basics")); |
+ ASSERT_TRUE(extension1); |
+ GURL extension1_url = extension1->url(); |
+ |
+ // Create multiple tabs for each type of renderer that might exist. |
ui_test_utils::NavigateToURLWithDisposition( |
browser(), base_url.Resolve("isolated_apps/app1/main.html"), |
CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
@@ -200,32 +208,90 @@ IN_PROC_BROWSER_TEST_F(IsolatedAppTest, ProcessOverflow) { |
ui_test_utils::NavigateToURLWithDisposition( |
browser(), base_url.Resolve("test_file.html"), |
NEW_FOREGROUND_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
+ |
ui_test_utils::NavigateToURLWithDisposition( |
browser(), base_url.Resolve("isolated_apps/app2/main.html"), |
NEW_FOREGROUND_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
+ ui_test_utils::NavigateToURLWithDisposition( |
+ browser(), GURL(chrome::kTestNewTabURL), |
+ NEW_FOREGROUND_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
+ ui_test_utils::NavigateToURLWithDisposition( |
+ browser(), base_url.Resolve("api_test/app_process/path1/empty.html"), |
+ NEW_FOREGROUND_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
+ ui_test_utils::NavigateToURLWithDisposition( |
+ browser(), base_url.Resolve("test_file_with_body.html"), |
+ NEW_FOREGROUND_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
- ASSERT_EQ(5, browser()->tab_count()); |
+ // Load another copy of isolated app 1. |
+ ui_test_utils::NavigateToURLWithDisposition( |
+ browser(), base_url.Resolve("isolated_apps/app1/main.html"), |
+ NEW_FOREGROUND_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
+ |
+ // Load another extension. |
+ const Extension* extension2 = LoadExtension( |
+ test_data_dir_.AppendASCII("api_test/browser_action/close_background")); |
+ ASSERT_TRUE(extension2); |
+ GURL extension2_url = extension2->url(); |
+ |
+ // Get tab processes. |
+ ASSERT_EQ(9, browser()->tab_count()); |
content::RenderProcessHost* isolated1_host = |
browser()->GetTabContentsAt(0)->GetRenderProcessHost(); |
- content::RenderProcessHost* ntp_host = |
+ content::RenderProcessHost* ntp1_host = |
browser()->GetTabContentsAt(1)->GetRenderProcessHost(); |
- content::RenderProcessHost* normal_extension_host = |
+ content::RenderProcessHost* hosted1_host = |
browser()->GetTabContentsAt(2)->GetRenderProcessHost(); |
- content::RenderProcessHost* web_host = |
+ content::RenderProcessHost* web1_host = |
browser()->GetTabContentsAt(3)->GetRenderProcessHost(); |
+ |
content::RenderProcessHost* isolated2_host = |
browser()->GetTabContentsAt(4)->GetRenderProcessHost(); |
+ content::RenderProcessHost* ntp2_host = |
+ browser()->GetTabContentsAt(5)->GetRenderProcessHost(); |
+ content::RenderProcessHost* hosted2_host = |
+ browser()->GetTabContentsAt(6)->GetRenderProcessHost(); |
+ content::RenderProcessHost* web2_host = |
+ browser()->GetTabContentsAt(7)->GetRenderProcessHost(); |
+ |
+ content::RenderProcessHost* second_isolated1_host = |
+ browser()->GetTabContentsAt(8)->GetRenderProcessHost(); |
+ |
+ // Get extension processes. |
+ ExtensionProcessManager* process_manager = |
+ browser()->GetProfile()->GetExtensionProcessManager(); |
+ content::RenderProcessHost* extension1_host = |
+ process_manager->GetSiteInstanceForURL(extension1_url)->GetProcess(); |
+ content::RenderProcessHost* extension2_host = |
+ process_manager->GetSiteInstanceForURL(extension2_url)->GetProcess(); |
+ |
+ // An isolated app only shares with other instances of itself, not other |
+ // isolated apps or anything else. |
+ EXPECT_EQ(isolated1_host, second_isolated1_host); |
+ EXPECT_NE(isolated1_host, isolated2_host); |
+ EXPECT_NE(isolated1_host, ntp1_host); |
+ EXPECT_NE(isolated1_host, hosted1_host); |
+ EXPECT_NE(isolated1_host, web1_host); |
+ EXPECT_NE(isolated1_host, extension1_host); |
+ EXPECT_NE(isolated2_host, ntp1_host); |
+ EXPECT_NE(isolated2_host, hosted1_host); |
+ EXPECT_NE(isolated2_host, web1_host); |
+ EXPECT_NE(isolated2_host, extension1_host); |
+ |
+ // Everything else is clannish. WebUI only shares with other WebUI. |
+ EXPECT_EQ(ntp1_host, ntp2_host); |
+ EXPECT_NE(ntp1_host, hosted1_host); |
+ EXPECT_NE(ntp1_host, web1_host); |
+ EXPECT_NE(ntp1_host, extension1_host); |
+ |
+ // Hosted apps only share with each other. |
+ EXPECT_EQ(hosted1_host, hosted2_host); |
+ EXPECT_NE(hosted1_host, web1_host); |
+ EXPECT_NE(hosted1_host, extension1_host); |
+ |
+ // Web pages only share with each other. |
+ EXPECT_EQ(web1_host, web2_host); |
+ EXPECT_NE(web1_host, extension1_host); |
- // Isolated apps shared with each other, but no one else. They're clannish |
- // like that. |
- ASSERT_EQ(isolated1_host, isolated2_host); |
- ASSERT_NE(isolated1_host, ntp_host); |
- ASSERT_NE(isolated1_host, normal_extension_host); |
- ASSERT_NE(isolated1_host, web_host); |
- |
- // And cause we're here, make sure everyone else is also clannish. This could |
- // technially go in another test, but not worth the extra setup overhead. |
- ASSERT_NE(web_host, ntp_host); |
- ASSERT_NE(web_host, normal_extension_host); |
- ASSERT_NE(normal_extension_host, ntp_host); |
+ // Extensions only share with each other. |
+ EXPECT_EQ(extension1_host, extension2_host); |
} |