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

Side by Side Diff: content/browser/site_instance_impl_unittest.cc

Issue 16267002: Re-fix http://crbug.com/87176, and add a test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Much shorter test Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/compiler_specific.h" 6 #include "base/compiler_specific.h"
7 #include "base/memory/scoped_vector.h" 7 #include "base/memory/scoped_vector.h"
8 #include "base/string16.h" 8 #include "base/string16.h"
9 #include "content/browser/browser_thread_impl.h" 9 #include "content/browser/browser_thread_impl.h"
10 #include "content/browser/browsing_instance.h" 10 #include "content/browser/browsing_instance.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 old_browser_client_ = SetBrowserClientForTesting(&browser_client_); 96 old_browser_client_ = SetBrowserClientForTesting(&browser_client_);
97 url_util::AddStandardScheme(kPrivilegedScheme); 97 url_util::AddStandardScheme(kPrivilegedScheme);
98 url_util::AddStandardScheme(chrome::kChromeUIScheme); 98 url_util::AddStandardScheme(chrome::kChromeUIScheme);
99 } 99 }
100 100
101 virtual void TearDown() { 101 virtual void TearDown() {
102 // Ensure that no RenderProcessHosts are left over after the tests. 102 // Ensure that no RenderProcessHosts are left over after the tests.
103 EXPECT_TRUE(RenderProcessHost::AllHostsIterator().IsAtEnd()); 103 EXPECT_TRUE(RenderProcessHost::AllHostsIterator().IsAtEnd());
104 104
105 SetBrowserClientForTesting(old_browser_client_); 105 SetBrowserClientForTesting(old_browser_client_);
106 SiteInstanceImpl::set_render_process_host_factory(NULL);
106 107
107 // http://crbug.com/143565 found SiteInstanceTest leaking an 108 // http://crbug.com/143565 found SiteInstanceTest leaking an
108 // AppCacheDatabase. This happens because some part of the test indirectly 109 // AppCacheDatabase. This happens because some part of the test indirectly
109 // calls StoragePartitionImplMap::PostCreateInitialization(), which posts 110 // calls StoragePartitionImplMap::PostCreateInitialization(), which posts
110 // a task to the IO thread to create the AppCacheDatabase. Since the 111 // a task to the IO thread to create the AppCacheDatabase. Since the
111 // message loop is not running, the AppCacheDatabase ends up getting 112 // message loop is not running, the AppCacheDatabase ends up getting
112 // created when DrainMessageLoops() gets called at the end of a test case. 113 // created when DrainMessageLoops() gets called at the end of a test case.
113 // Immediately after, the test case ends and the AppCacheDatabase gets 114 // Immediately after, the test case ends and the AppCacheDatabase gets
114 // scheduled for deletion. Here, call DrainMessageLoops() again so the 115 // scheduled for deletion. Here, call DrainMessageLoops() again so the
115 // AppCacheDatabase actually gets deleted. 116 // AppCacheDatabase actually gets deleted.
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 GURL("https://www.google.com"))); // not visited before 537 GURL("https://www.google.com"))); // not visited before
537 EXPECT_FALSE(browsing_instance3->HasSiteInstance( 538 EXPECT_FALSE(browsing_instance3->HasSiteInstance(
538 GURL("http://www.yahoo.com"))); // different BI, different context 539 GURL("http://www.yahoo.com"))); // different BI, different context
539 540
540 // browsing_instances will be deleted when their SiteInstances are deleted. 541 // browsing_instances will be deleted when their SiteInstances are deleted.
541 // The processes will be unregistered when the RPH scoped_ptrs go away. 542 // The processes will be unregistered when the RPH scoped_ptrs go away.
542 543
543 DrainMessageLoops(); 544 DrainMessageLoops();
544 } 545 }
545 546
546 static SiteInstanceImpl* CreateSiteInstance( 547 static SiteInstanceImpl* CreateSiteInstance(BrowserContext* browser_context,
547 BrowserContext* browser_context, 548 const GURL& url) {
548 RenderProcessHostFactory* factory, 549 return static_cast<SiteInstanceImpl*>(
549 const GURL& url) { 550 SiteInstance::CreateForURL(browser_context, url));
550 SiteInstanceImpl* instance =
551 reinterpret_cast<SiteInstanceImpl*>(
552 SiteInstance::CreateForURL(browser_context, url));
553 instance->set_render_process_host_factory(factory);
554 return instance;
555 } 551 }
556 552
557 // Test to ensure that pages that require certain privileges are grouped 553 // Test to ensure that pages that require certain privileges are grouped
558 // in processes with similar pages. 554 // in processes with similar pages.
559 TEST_F(SiteInstanceTest, ProcessSharingByType) { 555 TEST_F(SiteInstanceTest, ProcessSharingByType) {
560 MockRenderProcessHostFactory rph_factory; 556 MockRenderProcessHostFactory rph_factory;
557 SiteInstanceImpl::set_render_process_host_factory(&rph_factory);
561 ChildProcessSecurityPolicyImpl* policy = 558 ChildProcessSecurityPolicyImpl* policy =
562 ChildProcessSecurityPolicyImpl::GetInstance(); 559 ChildProcessSecurityPolicyImpl::GetInstance();
563 560
564 // Make a bunch of mock renderers so that we hit the limit. 561 // Make a bunch of mock renderers so that we hit the limit.
565 scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext()); 562 scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
566 ScopedVector<MockRenderProcessHost> hosts; 563 ScopedVector<MockRenderProcessHost> hosts;
567 for (size_t i = 0; i < kMaxRendererProcessCount; ++i) 564 for (size_t i = 0; i < kMaxRendererProcessCount; ++i)
568 hosts.push_back(new MockRenderProcessHost(browser_context.get())); 565 hosts.push_back(new MockRenderProcessHost(browser_context.get()));
569 566
570 // Create some extension instances and make sure they share a process. 567 // Create some extension instances and make sure they share a process.
571 scoped_refptr<SiteInstanceImpl> extension1_instance( 568 scoped_refptr<SiteInstanceImpl> extension1_instance(
572 CreateSiteInstance(browser_context.get(), &rph_factory, 569 CreateSiteInstance(browser_context.get(),
573 GURL(kPrivilegedScheme + std::string("://foo/bar")))); 570 GURL(kPrivilegedScheme + std::string("://foo/bar"))));
574 set_privileged_process_id(extension1_instance->GetProcess()->GetID()); 571 set_privileged_process_id(extension1_instance->GetProcess()->GetID());
575 572
576 scoped_refptr<SiteInstanceImpl> extension2_instance( 573 scoped_refptr<SiteInstanceImpl> extension2_instance(
577 CreateSiteInstance(browser_context.get(), &rph_factory, 574 CreateSiteInstance(browser_context.get(),
578 GURL(kPrivilegedScheme + std::string("://baz/bar")))); 575 GURL(kPrivilegedScheme + std::string("://baz/bar"))));
579 576
580 scoped_ptr<RenderProcessHost> extension_host( 577 scoped_ptr<RenderProcessHost> extension_host(
581 extension1_instance->GetProcess()); 578 extension1_instance->GetProcess());
582 EXPECT_EQ(extension1_instance->GetProcess(), 579 EXPECT_EQ(extension1_instance->GetProcess(),
583 extension2_instance->GetProcess()); 580 extension2_instance->GetProcess());
584 581
585 // Create some WebUI instances and make sure they share a process. 582 // Create some WebUI instances and make sure they share a process.
586 scoped_refptr<SiteInstanceImpl> webui1_instance(CreateSiteInstance( 583 scoped_refptr<SiteInstanceImpl> webui1_instance(CreateSiteInstance(
587 browser_context.get(), &rph_factory, 584 browser_context.get(),
588 GURL(chrome::kChromeUIScheme + std::string("://newtab")))); 585 GURL(chrome::kChromeUIScheme + std::string("://newtab"))));
589 policy->GrantWebUIBindings(webui1_instance->GetProcess()->GetID()); 586 policy->GrantWebUIBindings(webui1_instance->GetProcess()->GetID());
590 587
591 scoped_refptr<SiteInstanceImpl> webui2_instance(CreateSiteInstance( 588 scoped_refptr<SiteInstanceImpl> webui2_instance(CreateSiteInstance(
592 browser_context.get(), &rph_factory, 589 browser_context.get(),
593 GURL(chrome::kChromeUIScheme + std::string("://history")))); 590 GURL(chrome::kChromeUIScheme + std::string("://history"))));
594 591
595 scoped_ptr<RenderProcessHost> dom_host(webui1_instance->GetProcess()); 592 scoped_ptr<RenderProcessHost> dom_host(webui1_instance->GetProcess());
596 EXPECT_EQ(webui1_instance->GetProcess(), webui2_instance->GetProcess()); 593 EXPECT_EQ(webui1_instance->GetProcess(), webui2_instance->GetProcess());
597 594
598 // Make sure none of differing privilege processes are mixed. 595 // Make sure none of differing privilege processes are mixed.
599 EXPECT_NE(extension1_instance->GetProcess(), webui1_instance->GetProcess()); 596 EXPECT_NE(extension1_instance->GetProcess(), webui1_instance->GetProcess());
600 597
601 for (size_t i = 0; i < kMaxRendererProcessCount; ++i) { 598 for (size_t i = 0; i < kMaxRendererProcessCount; ++i) {
602 EXPECT_NE(extension1_instance->GetProcess(), hosts[i]); 599 EXPECT_NE(extension1_instance->GetProcess(), hosts[i]);
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 EXPECT_TRUE(instance->GetSiteURL().is_empty()); 751 EXPECT_TRUE(instance->GetSiteURL().is_empty());
755 host.reset(instance->GetProcess()); 752 host.reset(instance->GetProcess());
756 753
757 EXPECT_FALSE(RenderProcessHostImpl::GetProcessHostForSite( 754 EXPECT_FALSE(RenderProcessHostImpl::GetProcessHostForSite(
758 browser_context.get(), GURL())); 755 browser_context.get(), GURL()));
759 756
760 DrainMessageLoops(); 757 DrainMessageLoops();
761 } 758 }
762 759
763 } // namespace content 760 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698