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

Unified Diff: content/browser/site_instance_unittest.cc

Issue 9147051: Don't swap processes for javascript: URLs. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fixed the unit test and restored the function to not be virtual. Created 8 years, 11 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
« content/browser/site_instance.h ('K') | « content/browser/site_instance.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/site_instance_unittest.cc
diff --git a/content/browser/site_instance_unittest.cc b/content/browser/site_instance_unittest.cc
index dcfcd3efbfb01f380891f7330c078f75f2a3c91c..43a8e1dbdb6689c5d3ff6964c22efcf77233d8df 100644
--- a/content/browser/site_instance_unittest.cc
+++ b/content/browser/site_instance_unittest.cc
@@ -119,25 +119,29 @@ class TestBrowsingInstance : public BrowsingInstance {
TestBrowsingInstance(content::BrowserContext* browser_context,
int* deleteCounter)
: BrowsingInstance(browser_context),
- use_process_per_site(false),
- deleteCounter_(deleteCounter) {
+ use_process_per_site_(false),
+ delete_counter_(deleteCounter) {
}
// Overrides BrowsingInstance::ShouldUseProcessPerSite so that we can test
// both alternatives without using command-line switches.
bool ShouldUseProcessPerSite(const GURL& url) {
- return use_process_per_site;
+ return use_process_per_site_;
}
- // Set by individual tests.
- bool use_process_per_site;
+ void SetProcessPerSite(bool use_process_per_site) {
+ use_process_per_site_ = use_process_per_site;
+ }
private:
- ~TestBrowsingInstance() {
- (*deleteCounter_)++;
+ virtual ~TestBrowsingInstance() {
+ (*delete_counter_)++;
}
- int* deleteCounter_;
+ // Set by individual tests.
+ bool use_process_per_site_;
+
+ int* delete_counter_;
};
class TestSiteInstance : public SiteInstance {
@@ -151,14 +155,24 @@ class TestSiteInstance : public SiteInstance {
return new TestSiteInstance(browsing_instance, siteDeleteCounter);
}
+ bool HasProcess() const OVERRIDE {
Charlie Reis 2012/01/13 18:37:46 We can't override this any more if it's not virtua
nasko 2012/01/13 20:54:49 Done.
+ return has_process_;
+ }
+
+ void SetHasProcess(bool process) {
+ has_process_ = process;
+ }
+
+
private:
TestSiteInstance(BrowsingInstance* browsing_instance, int* deleteCounter)
- : SiteInstance(browsing_instance), deleteCounter_(deleteCounter) {}
- ~TestSiteInstance() {
- (*deleteCounter_)++;
+ : SiteInstance(browsing_instance), delete_counter_(deleteCounter) {}
+ virtual ~TestSiteInstance() {
+ (*delete_counter_)++;
}
- int* deleteCounter_;
+ int* delete_counter_;
+ bool has_process_;
};
} // namespace
@@ -366,7 +380,7 @@ TEST_F(SiteInstanceTest, OneSiteInstancePerSite) {
int deleteCounter = 0;
TestBrowsingInstance* browsing_instance =
new TestBrowsingInstance(NULL, &deleteCounter);
- browsing_instance->use_process_per_site = false;
+ browsing_instance->SetProcessPerSite(false);
const GURL url_a1("http://www.google.com/1.html");
scoped_refptr<SiteInstance> site_instance_a1(
@@ -395,7 +409,7 @@ TEST_F(SiteInstanceTest, OneSiteInstancePerSite) {
// browser context) should return a different SiteInstance.
TestBrowsingInstance* browsing_instance2 =
new TestBrowsingInstance(NULL, &deleteCounter);
- browsing_instance2->use_process_per_site = false;
+ browsing_instance2->SetProcessPerSite(false);
// Ensure the new SiteInstance is ref counted so that it gets deleted.
scoped_refptr<SiteInstance> site_instance_a2_2(
browsing_instance2->GetSiteInstanceForURL(url_a2));
@@ -424,7 +438,7 @@ TEST_F(SiteInstanceTest, OneSiteInstancePerSiteInBrowserContext) {
int deleteCounter = 0;
TestBrowsingInstance* browsing_instance =
new TestBrowsingInstance(NULL, &deleteCounter);
- browsing_instance->use_process_per_site = true;
+ browsing_instance->SetProcessPerSite(true);
const GURL url_a1("http://www.google.com/1.html");
scoped_refptr<SiteInstance> site_instance_a1(
@@ -456,7 +470,7 @@ TEST_F(SiteInstanceTest, OneSiteInstancePerSiteInBrowserContext) {
// to make sure it gets deleted.
scoped_refptr<TestBrowsingInstance> browsing_instance2(
new TestBrowsingInstance(NULL, &deleteCounter));
- browsing_instance2->use_process_per_site = true;
+ browsing_instance2->SetProcessPerSite(true);
EXPECT_EQ(site_instance_a1.get(),
browsing_instance2->GetSiteInstanceForURL(url_a2));
@@ -465,7 +479,7 @@ TEST_F(SiteInstanceTest, OneSiteInstancePerSiteInBrowserContext) {
scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
TestBrowsingInstance* browsing_instance3 =
new TestBrowsingInstance(browser_context.get(), &deleteCounter);
- browsing_instance3->use_process_per_site = true;
+ browsing_instance3->SetProcessPerSite(true);
// Ensure the new SiteInstance is ref counted so that it gets deleted.
scoped_refptr<SiteInstance> site_instance_a2_3(
browsing_instance3->GetSiteInstanceForURL(url_a2));
@@ -546,3 +560,31 @@ TEST_F(SiteInstanceTest, ProcessSharingByType) {
STLDeleteContainerPointers(hosts.begin(), hosts.end());
}
+
+// Test to ensure that javascript URLs always run in the same process.
Charlie Reis 2012/01/13 18:37:46 Please update this comment as well.
nasko 2012/01/13 20:54:49 Done.
+TEST_F(SiteInstanceTest, HasWrongProcessForURL) {
+
+ scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
+ scoped_ptr<content::RenderProcessHost> host;
+ scoped_refptr<SiteInstance> instance(
+ SiteInstance::CreateSiteInstance(browser_context.get()));
+
+ EXPECT_FALSE(instance->has_site());
+ EXPECT_TRUE(instance->site().is_empty());
+
+ instance->SetSite(GURL("http://evernote.com/"));
+ EXPECT_TRUE(instance->has_site());
+
+ // Check prior to "assigning" a process to the instance, which is expected
+ // to return false due to not being attached to any process yet.
+ EXPECT_FALSE(instance->HasWrongProcessForURL(GURL("http://google.com")));
+
+ host.reset(instance->GetProcess());
Charlie Reis 2012/01/13 18:37:46 Wow, I'm impressed if this works. Do you know if
nasko 2012/01/13 20:54:49 Yes, it indeed spawns a new process.
+ EXPECT_TRUE(host.get() != NULL);
+ EXPECT_TRUE(instance->HasProcess());
+
+ EXPECT_FALSE(instance->HasWrongProcessForURL(GURL("http://evernote.com")));
+ EXPECT_FALSE(instance->HasWrongProcessForURL(
+ GURL("javascript:alert(document.location.href);")));
+
Charlie Reis 2012/01/13 18:37:46 Extra line can be deleted.
nasko 2012/01/13 20:54:49 Done.
+}
« content/browser/site_instance.h ('K') | « content/browser/site_instance.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698