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

Unified Diff: chrome/browser/ui/extensions/hosted_app_browsertest.cc

Issue 2831683002: Introduce support for origins that require process isolation. (Closed)
Patch Set: Charlie's comments (round 3) Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/browser/browser_main_loop.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/extensions/hosted_app_browsertest.cc
diff --git a/chrome/browser/ui/extensions/hosted_app_browsertest.cc b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
index 12792d2357778d477c5245aebcf5d0bc78b2f495..15ae43e01347c820136d9ae475ebbda6ef102714 100644
--- a/chrome/browser/ui/extensions/hosted_app_browsertest.cc
+++ b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
@@ -22,6 +22,7 @@
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_features.h"
+#include "content/public/common/content_switches.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/test_utils.h"
#include "extensions/browser/extension_registry.h"
@@ -400,3 +401,78 @@ IN_PROC_BROWSER_TEST_F(HostedAppVsTdiTest, ProcessAllocation) {
// |diff_dir| and/or |same_site|).
}
}
+
+class HostedAppWithIsolatedOriginsTest : public HostedAppTest {
+ public:
+ HostedAppWithIsolatedOriginsTest() {}
+ ~HostedAppWithIsolatedOriginsTest() override {}
+
+ void SetUpCommandLine(base::CommandLine* command_line) override {
+ ASSERT_TRUE(embedded_test_server()->InitializeAndListen());
+ std::string origin_list =
+ embedded_test_server()->GetURL("isolated.foo.com", "/").spec();
+ command_line->AppendSwitchASCII(switches::kIsolateOrigins, origin_list);
+ }
+
+ void SetUpOnMainThread() override {
+ HostedAppTest::SetUpOnMainThread();
+ host_resolver()->AddRule("*", "127.0.0.1");
+ embedded_test_server()->StartAcceptingConnections();
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(HostedAppWithIsolatedOriginsTest);
+};
+
+// Verify that when navigating to an isolated origin which is also part of
+// a hosted app's web extent, the isolated origin takes precedence for
+// SiteInstance determination and still ends up in a dedicated process.
+IN_PROC_BROWSER_TEST_F(HostedAppWithIsolatedOriginsTest,
+ IsolatedOriginTakesPrecedence) {
+ // Launch a hosted app which covers an isolated origin in its web extent.
+ GURL url = embedded_test_server()->GetURL("app.foo.com", "/iframe.html");
+ extensions::TestExtensionDir test_app_dir;
+ test_app_dir.WriteManifest(base::StringPrintf(
+ R"( { "name": "Hosted App vs IsolatedOrigins Test",
+ "version": "1",
+ "manifest_version": 2,
+ "app": {
+ "launch": {
+ "web_url": "%s"
+ },
+ "urls": ["*://app.foo.com", "*://isolated.foo.com/"]
+ }
+ } )",
+ url.spec().c_str()));
+ SetupApp(test_app_dir.UnpackedPath(), false);
+
+ content::WebContents* app_contents =
+ app_browser_->tab_strip_model()->GetActiveWebContents();
+ content::WaitForLoadStop(app_contents);
+
+ content::RenderFrameHost* app = app_contents->GetMainFrame();
+
+ // A subframe on an app for an isolated origin should be kicked out to its
+ // own process.
+ GURL isolated_url =
+ embedded_test_server()->GetURL("isolated.foo.com", "/title1.html");
+ EXPECT_TRUE(NavigateIframeToURL(app_contents, "test", isolated_url));
+
+ content::RenderFrameHost* app_subframe = content::ChildFrameAt(app, 0);
+ EXPECT_EQ(isolated_url, app_subframe->GetLastCommittedURL());
+ EXPECT_TRUE(app_subframe->IsCrossProcessSubframe());
+ EXPECT_NE(app->GetSiteInstance(), app_subframe->GetSiteInstance());
+ EXPECT_EQ(isolated_url.GetOrigin(),
+ app_subframe->GetSiteInstance()->GetSiteURL());
+
+ // Navigating a regular tab to an isolated origin which is also part of an
+ // app's web extent should use the isolated origin's SiteInstance and not the
+ // app's.
+ ui_test_utils::NavigateToURL(browser(), isolated_url);
+ content::WebContents* web_contents =
+ browser()->tab_strip_model()->GetActiveWebContents();
+ EXPECT_EQ(isolated_url.GetOrigin(),
+ web_contents->GetMainFrame()->GetSiteInstance()->GetSiteURL());
+ EXPECT_NE(web_contents->GetMainFrame()->GetSiteInstance(),
+ app->GetSiteInstance());
+}
« no previous file with comments | « no previous file | content/browser/browser_main_loop.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698