| 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..bcf73a52aeb29f7196bf6f55c54c0a4a04b54d03 100644
|
| --- a/content/browser/site_instance_unittest.cc
|
| +++ b/content/browser/site_instance_unittest.cc
|
| @@ -117,48 +117,52 @@ class SiteInstanceTest : public testing::Test {
|
| class TestBrowsingInstance : public BrowsingInstance {
|
| public:
|
| TestBrowsingInstance(content::BrowserContext* browser_context,
|
| - int* deleteCounter)
|
| + int* delete_counter)
|
| : BrowsingInstance(browser_context),
|
| - use_process_per_site(false),
|
| - deleteCounter_(deleteCounter) {
|
| + use_process_per_site_(false),
|
| + delete_counter_(delete_counter) {
|
| }
|
|
|
| // 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 set_use_process_per_site(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 {
|
| public:
|
| static TestSiteInstance* CreateTestSiteInstance(
|
| content::BrowserContext* browser_context,
|
| - int* siteDeleteCounter,
|
| - int* browsingDeleteCounter) {
|
| + int* site_delete_counter,
|
| + int* browsing_delete_counter) {
|
| TestBrowsingInstance* browsing_instance =
|
| - new TestBrowsingInstance(browser_context, browsingDeleteCounter);
|
| - return new TestSiteInstance(browsing_instance, siteDeleteCounter);
|
| + new TestBrowsingInstance(browser_context, browsing_delete_counter);
|
| + return new TestSiteInstance(browsing_instance, site_delete_counter);
|
| }
|
|
|
| private:
|
| - TestSiteInstance(BrowsingInstance* browsing_instance, int* deleteCounter)
|
| - : SiteInstance(browsing_instance), deleteCounter_(deleteCounter) {}
|
| - ~TestSiteInstance() {
|
| - (*deleteCounter_)++;
|
| + TestSiteInstance(BrowsingInstance* browsing_instance, int* delete_counter)
|
| + : SiteInstance(browsing_instance), delete_counter_(delete_counter) {}
|
| + virtual ~TestSiteInstance() {
|
| + (*delete_counter_)++;
|
| }
|
|
|
| - int* deleteCounter_;
|
| + int* delete_counter_;
|
| };
|
|
|
| } // namespace
|
| @@ -169,15 +173,15 @@ TEST_F(SiteInstanceTest, SiteInstanceDestructor) {
|
| // one instead of the real one.
|
| MockRenderProcessHostFactory rph_factory;
|
| TestRenderViewHostFactory rvh_factory(&rph_factory);
|
| - int siteDeleteCounter = 0;
|
| - int browsingDeleteCounter = 0;
|
| + int site_delete_counter = 0;
|
| + int browsing_delete_counter = 0;
|
| const GURL url("test:foo");
|
|
|
| // Ensure that instances are deleted when their NavigationEntries are gone.
|
| TestSiteInstance* instance =
|
| - TestSiteInstance::CreateTestSiteInstance(NULL, &siteDeleteCounter,
|
| - &browsingDeleteCounter);
|
| - EXPECT_EQ(0, siteDeleteCounter);
|
| + TestSiteInstance::CreateTestSiteInstance(NULL, &site_delete_counter,
|
| + &browsing_delete_counter);
|
| + EXPECT_EQ(0, site_delete_counter);
|
|
|
| NavigationEntryImpl* e1 = new NavigationEntryImpl(
|
| instance, 0, url, content::Referrer(), string16(),
|
| @@ -185,7 +189,7 @@ TEST_F(SiteInstanceTest, SiteInstanceDestructor) {
|
|
|
| // Redundantly setting e1's SiteInstance shouldn't affect the ref count.
|
| e1->set_site_instance(instance);
|
| - EXPECT_EQ(0, siteDeleteCounter);
|
| + EXPECT_EQ(0, site_delete_counter);
|
|
|
| // Add a second reference
|
| NavigationEntryImpl* e2 = new NavigationEntryImpl(
|
| @@ -194,36 +198,36 @@ TEST_F(SiteInstanceTest, SiteInstanceDestructor) {
|
|
|
| // Now delete both entries and be sure the SiteInstance goes away.
|
| delete e1;
|
| - EXPECT_EQ(0, siteDeleteCounter);
|
| - EXPECT_EQ(0, browsingDeleteCounter);
|
| + EXPECT_EQ(0, site_delete_counter);
|
| + EXPECT_EQ(0, browsing_delete_counter);
|
| delete e2;
|
| - EXPECT_EQ(1, siteDeleteCounter);
|
| + EXPECT_EQ(1, site_delete_counter);
|
| // instance is now deleted
|
| - EXPECT_EQ(1, browsingDeleteCounter);
|
| + EXPECT_EQ(1, browsing_delete_counter);
|
| // browsing_instance is now deleted
|
|
|
| // Ensure that instances are deleted when their RenderViewHosts are gone.
|
| scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
|
| instance =
|
| TestSiteInstance::CreateTestSiteInstance(browser_context.get(),
|
| - &siteDeleteCounter,
|
| - &browsingDeleteCounter);
|
| + &site_delete_counter,
|
| + &browsing_delete_counter);
|
| {
|
| TabContents contents(browser_context.get(),
|
| instance,
|
| MSG_ROUTING_NONE,
|
| NULL,
|
| NULL);
|
| - EXPECT_EQ(1, siteDeleteCounter);
|
| - EXPECT_EQ(1, browsingDeleteCounter);
|
| + EXPECT_EQ(1, site_delete_counter);
|
| + EXPECT_EQ(1, browsing_delete_counter);
|
| }
|
|
|
| // Make sure that we flush any messages related to the above TabContents
|
| // destruction.
|
| MessageLoop::current()->RunAllPending();
|
|
|
| - EXPECT_EQ(2, siteDeleteCounter);
|
| - EXPECT_EQ(2, browsingDeleteCounter);
|
| + EXPECT_EQ(2, site_delete_counter);
|
| + EXPECT_EQ(2, browsing_delete_counter);
|
| // contents is now deleted, along with instance and browsing_instance
|
| }
|
|
|
| @@ -231,17 +235,17 @@ TEST_F(SiteInstanceTest, SiteInstanceDestructor) {
|
| // SiteInstances can be changed afterwards. Also tests that the ref counts are
|
| // updated properly after the change.
|
| TEST_F(SiteInstanceTest, CloneNavigationEntry) {
|
| - int siteDeleteCounter1 = 0;
|
| - int siteDeleteCounter2 = 0;
|
| - int browsingDeleteCounter = 0;
|
| + int site_delete_counter1 = 0;
|
| + int site_delete_counter2 = 0;
|
| + int browsing_delete_counter = 0;
|
| const GURL url("test:foo");
|
|
|
| SiteInstance* instance1 =
|
| - TestSiteInstance::CreateTestSiteInstance(NULL, &siteDeleteCounter1,
|
| - &browsingDeleteCounter);
|
| + TestSiteInstance::CreateTestSiteInstance(NULL, &site_delete_counter1,
|
| + &browsing_delete_counter);
|
| SiteInstance* instance2 =
|
| - TestSiteInstance::CreateTestSiteInstance(NULL, &siteDeleteCounter2,
|
| - &browsingDeleteCounter);
|
| + TestSiteInstance::CreateTestSiteInstance(NULL, &site_delete_counter2,
|
| + &browsing_delete_counter);
|
|
|
| NavigationEntryImpl* e1 = new NavigationEntryImpl(
|
| instance1, 0, url, content::Referrer(), string16(),
|
| @@ -255,16 +259,16 @@ TEST_F(SiteInstanceTest, CloneNavigationEntry) {
|
| // The first SiteInstance should go away after deleting e1, since e2 should
|
| // no longer be referencing it.
|
| delete e1;
|
| - EXPECT_EQ(1, siteDeleteCounter1);
|
| - EXPECT_EQ(0, siteDeleteCounter2);
|
| + EXPECT_EQ(1, site_delete_counter1);
|
| + EXPECT_EQ(0, site_delete_counter2);
|
|
|
| // The second SiteInstance should go away after deleting e2.
|
| delete e2;
|
| - EXPECT_EQ(1, siteDeleteCounter1);
|
| - EXPECT_EQ(1, siteDeleteCounter2);
|
| + EXPECT_EQ(1, site_delete_counter1);
|
| + EXPECT_EQ(1, site_delete_counter2);
|
|
|
| // Both BrowsingInstances are also now deleted
|
| - EXPECT_EQ(2, browsingDeleteCounter);
|
| + EXPECT_EQ(2, browsing_delete_counter);
|
| }
|
|
|
| // Test to ensure GetProcess returns and creates processes correctly.
|
| @@ -363,10 +367,10 @@ TEST_F(SiteInstanceTest, IsSameWebSite) {
|
| // Test to ensure that there is only one SiteInstance per site in a given
|
| // BrowsingInstance, when process-per-site is not in use.
|
| TEST_F(SiteInstanceTest, OneSiteInstancePerSite) {
|
| - int deleteCounter = 0;
|
| + int delete_counter = 0;
|
| TestBrowsingInstance* browsing_instance =
|
| - new TestBrowsingInstance(NULL, &deleteCounter);
|
| - browsing_instance->use_process_per_site = false;
|
| + new TestBrowsingInstance(NULL, &delete_counter);
|
| + browsing_instance->set_use_process_per_site(false);
|
|
|
| const GURL url_a1("http://www.google.com/1.html");
|
| scoped_refptr<SiteInstance> site_instance_a1(
|
| @@ -394,8 +398,8 @@ TEST_F(SiteInstanceTest, OneSiteInstancePerSite) {
|
| // A visit to the original site in a new BrowsingInstance (same or different
|
| // browser context) should return a different SiteInstance.
|
| TestBrowsingInstance* browsing_instance2 =
|
| - new TestBrowsingInstance(NULL, &deleteCounter);
|
| - browsing_instance2->use_process_per_site = false;
|
| + new TestBrowsingInstance(NULL, &delete_counter);
|
| + browsing_instance2->set_use_process_per_site(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));
|
| @@ -421,10 +425,10 @@ TEST_F(SiteInstanceTest, OneSiteInstancePerSite) {
|
| // Test to ensure that there is only one SiteInstance per site for an entire
|
| // BrowserContext, if process-per-site is in use.
|
| TEST_F(SiteInstanceTest, OneSiteInstancePerSiteInBrowserContext) {
|
| - int deleteCounter = 0;
|
| + int delete_counter = 0;
|
| TestBrowsingInstance* browsing_instance =
|
| - new TestBrowsingInstance(NULL, &deleteCounter);
|
| - browsing_instance->use_process_per_site = true;
|
| + new TestBrowsingInstance(NULL, &delete_counter);
|
| + browsing_instance->set_use_process_per_site(true);
|
|
|
| const GURL url_a1("http://www.google.com/1.html");
|
| scoped_refptr<SiteInstance> site_instance_a1(
|
| @@ -455,8 +459,8 @@ TEST_F(SiteInstanceTest, OneSiteInstancePerSiteInBrowserContext) {
|
| // it won't be deleted by its children. Thus, we'll keep a ref count to it
|
| // to make sure it gets deleted.
|
| scoped_refptr<TestBrowsingInstance> browsing_instance2(
|
| - new TestBrowsingInstance(NULL, &deleteCounter));
|
| - browsing_instance2->use_process_per_site = true;
|
| + new TestBrowsingInstance(NULL, &delete_counter));
|
| + browsing_instance2->set_use_process_per_site(true);
|
| EXPECT_EQ(site_instance_a1.get(),
|
| browsing_instance2->GetSiteInstanceForURL(url_a2));
|
|
|
| @@ -464,8 +468,8 @@ TEST_F(SiteInstanceTest, OneSiteInstancePerSiteInBrowserContext) {
|
| // context) should return a different SiteInstance.
|
| scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
|
| TestBrowsingInstance* browsing_instance3 =
|
| - new TestBrowsingInstance(browser_context.get(), &deleteCounter);
|
| - browsing_instance3->use_process_per_site = true;
|
| + new TestBrowsingInstance(browser_context.get(), &delete_counter);
|
| + browsing_instance3->set_use_process_per_site(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));
|
| @@ -529,7 +533,7 @@ TEST_F(SiteInstanceTest, ProcessSharingByType) {
|
| GURL(chrome::kChromeUIScheme + std::string("://newtab"))));
|
| policy->GrantWebUIBindings(webui1_instance->GetProcess()->GetID());
|
|
|
| - scoped_refptr<SiteInstance> webui2_instance( CreateSiteInstance(&rph_factory,
|
| + scoped_refptr<SiteInstance> webui2_instance(CreateSiteInstance(&rph_factory,
|
| GURL(chrome::kChromeUIScheme + std::string("://history"))));
|
|
|
| scoped_ptr<content::RenderProcessHost> dom_host(
|
| @@ -546,3 +550,34 @@ TEST_F(SiteInstanceTest, ProcessSharingByType) {
|
|
|
| STLDeleteContainerPointers(hosts.begin(), hosts.end());
|
| }
|
| +
|
| +// Test to ensure that HasWrongProcessForURL behaves properly for different
|
| +// types of URLs.
|
| +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")));
|
| +
|
| + // The call to GetProcess actually creates a new real process, which works
|
| + // fine, but might be a cause for problems in different contexts.
|
| + host.reset(instance->GetProcess());
|
| + 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);")));
|
| +
|
| + EXPECT_TRUE(instance->HasWrongProcessForURL(GURL("chrome://settings")));
|
| +}
|
|
|