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

Unified Diff: chrome/browser/extensions/isolated_app_browsertest.cc

Issue 8677026: Update process sharing rules for hosted and isolated apps. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698