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

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

Issue 1874893002: Convert //content/browser from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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
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 "content/browser/site_instance_impl.h"
6
5 #include <stddef.h> 7 #include <stddef.h>
6 8
7 #include "base/command_line.h" 9 #include "base/command_line.h"
8 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
11 #include "base/memory/ptr_util.h"
9 #include "base/memory/scoped_vector.h" 12 #include "base/memory/scoped_vector.h"
10 #include "base/strings/string16.h" 13 #include "base/strings/string16.h"
11 #include "content/browser/browser_thread_impl.h" 14 #include "content/browser/browser_thread_impl.h"
12 #include "content/browser/browsing_instance.h" 15 #include "content/browser/browsing_instance.h"
13 #include "content/browser/child_process_security_policy_impl.h" 16 #include "content/browser/child_process_security_policy_impl.h"
14 #include "content/browser/frame_host/navigation_entry_impl.h" 17 #include "content/browser/frame_host/navigation_entry_impl.h"
15 #include "content/browser/renderer_host/render_process_host_impl.h" 18 #include "content/browser/renderer_host/render_process_host_impl.h"
16 #include "content/browser/renderer_host/render_view_host_impl.h" 19 #include "content/browser/renderer_host/render_view_host_impl.h"
17 #include "content/browser/site_instance_impl.h"
18 #include "content/browser/web_contents/web_contents_impl.h" 20 #include "content/browser/web_contents/web_contents_impl.h"
19 #include "content/browser/webui/content_web_ui_controller_factory.h" 21 #include "content/browser/webui/content_web_ui_controller_factory.h"
20 #include "content/browser/webui/web_ui_controller_factory_registry.h" 22 #include "content/browser/webui/web_ui_controller_factory_registry.h"
21 #include "content/public/common/content_client.h" 23 #include "content/public/common/content_client.h"
22 #include "content/public/common/content_constants.h" 24 #include "content/public/common/content_constants.h"
23 #include "content/public/common/content_switches.h" 25 #include "content/public/common/content_switches.h"
24 #include "content/public/common/url_constants.h" 26 #include "content/public/common/url_constants.h"
25 #include "content/public/common/url_utils.h" 27 #include "content/public/common/url_utils.h"
26 #include "content/public/test/mock_render_process_host.h" 28 #include "content/public/test/mock_render_process_host.h"
27 #include "content/public/test/test_browser_context.h" 29 #include "content/public/test/test_browser_context.h"
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 delete e1; 186 delete e1;
185 EXPECT_EQ(0, browser_client()->GetAndClearSiteInstanceDeleteCount()); 187 EXPECT_EQ(0, browser_client()->GetAndClearSiteInstanceDeleteCount());
186 EXPECT_EQ(0, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); 188 EXPECT_EQ(0, browser_client()->GetAndClearBrowsingInstanceDeleteCount());
187 delete e2; 189 delete e2;
188 // instance is now deleted 190 // instance is now deleted
189 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount()); 191 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount());
190 EXPECT_EQ(1, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); 192 EXPECT_EQ(1, browser_client()->GetAndClearBrowsingInstanceDeleteCount());
191 // browsing_instance is now deleted 193 // browsing_instance is now deleted
192 194
193 // Ensure that instances are deleted when their RenderViewHosts are gone. 195 // Ensure that instances are deleted when their RenderViewHosts are gone.
194 scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext()); 196 std::unique_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
195 { 197 {
196 scoped_ptr<WebContentsImpl> web_contents(static_cast<WebContentsImpl*>( 198 std::unique_ptr<WebContentsImpl> web_contents(static_cast<WebContentsImpl*>(
197 WebContents::Create(WebContents::CreateParams( 199 WebContents::Create(WebContents::CreateParams(
198 browser_context.get(), 200 browser_context.get(),
199 SiteInstance::Create(browser_context.get()))))); 201 SiteInstance::Create(browser_context.get())))));
200 EXPECT_EQ(0, browser_client()->GetAndClearSiteInstanceDeleteCount()); 202 EXPECT_EQ(0, browser_client()->GetAndClearSiteInstanceDeleteCount());
201 EXPECT_EQ(0, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); 203 EXPECT_EQ(0, browser_client()->GetAndClearBrowsingInstanceDeleteCount());
202 } 204 }
203 205
204 // Make sure that we flush any messages related to the above WebContentsImpl 206 // Make sure that we flush any messages related to the above WebContentsImpl
205 // destruction. 207 // destruction.
206 DrainMessageLoops(); 208 DrainMessageLoops();
207 209
208 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount()); 210 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount());
209 EXPECT_EQ(1, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); 211 EXPECT_EQ(1, browser_client()->GetAndClearBrowsingInstanceDeleteCount());
210 // contents is now deleted, along with instance and browsing_instance 212 // contents is now deleted, along with instance and browsing_instance
211 } 213 }
212 214
213 // Test that NavigationEntries with SiteInstances can be cloned, but that their 215 // Test that NavigationEntries with SiteInstances can be cloned, but that their
214 // SiteInstances can be changed afterwards. Also tests that the ref counts are 216 // SiteInstances can be changed afterwards. Also tests that the ref counts are
215 // updated properly after the change. 217 // updated properly after the change.
216 TEST_F(SiteInstanceTest, CloneNavigationEntry) { 218 TEST_F(SiteInstanceTest, CloneNavigationEntry) {
217 const GURL url("test:foo"); 219 const GURL url("test:foo");
218 220
219 scoped_ptr<NavigationEntryImpl> e1 = make_scoped_ptr(new NavigationEntryImpl( 221 std::unique_ptr<NavigationEntryImpl> e1 =
220 SiteInstanceImpl::Create(nullptr), 0, url, Referrer(), base::string16(), 222 base::WrapUnique(new NavigationEntryImpl(
221 ui::PAGE_TRANSITION_LINK, false)); 223 SiteInstanceImpl::Create(nullptr), 0, url, Referrer(),
224 base::string16(), ui::PAGE_TRANSITION_LINK, false));
222 225
223 // Clone the entry. 226 // Clone the entry.
224 scoped_ptr<NavigationEntryImpl> e2 = e1->Clone(); 227 std::unique_ptr<NavigationEntryImpl> e2 = e1->Clone();
225 228
226 // Should be able to change the SiteInstance of the cloned entry. 229 // Should be able to change the SiteInstance of the cloned entry.
227 e2->set_site_instance(SiteInstanceImpl::Create(nullptr)); 230 e2->set_site_instance(SiteInstanceImpl::Create(nullptr));
228 231
229 EXPECT_EQ(0, browser_client()->GetAndClearSiteInstanceDeleteCount()); 232 EXPECT_EQ(0, browser_client()->GetAndClearSiteInstanceDeleteCount());
230 EXPECT_EQ(0, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); 233 EXPECT_EQ(0, browser_client()->GetAndClearBrowsingInstanceDeleteCount());
231 234
232 // The first SiteInstance and BrowsingInstance should go away after resetting 235 // The first SiteInstance and BrowsingInstance should go away after resetting
233 // e1, since e2 should no longer be referencing it. 236 // e1, since e2 should no longer be referencing it.
234 e1.reset(); 237 e1.reset();
235 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount()); 238 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount());
236 EXPECT_EQ(1, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); 239 EXPECT_EQ(1, browser_client()->GetAndClearBrowsingInstanceDeleteCount());
237 240
238 // The second SiteInstance should go away after resetting e2. 241 // The second SiteInstance should go away after resetting e2.
239 e2.reset(); 242 e2.reset();
240 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount()); 243 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount());
241 EXPECT_EQ(1, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); 244 EXPECT_EQ(1, browser_client()->GetAndClearBrowsingInstanceDeleteCount());
242 245
243 DrainMessageLoops(); 246 DrainMessageLoops();
244 } 247 }
245 248
246 // Test to ensure GetProcess returns and creates processes correctly. 249 // Test to ensure GetProcess returns and creates processes correctly.
247 TEST_F(SiteInstanceTest, GetProcess) { 250 TEST_F(SiteInstanceTest, GetProcess) {
248 // Ensure that GetProcess returns a process. 251 // Ensure that GetProcess returns a process.
249 scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext()); 252 std::unique_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
250 scoped_ptr<RenderProcessHost> host1; 253 std::unique_ptr<RenderProcessHost> host1;
251 scoped_refptr<SiteInstanceImpl> instance( 254 scoped_refptr<SiteInstanceImpl> instance(
252 SiteInstanceImpl::Create(browser_context.get())); 255 SiteInstanceImpl::Create(browser_context.get()));
253 host1.reset(instance->GetProcess()); 256 host1.reset(instance->GetProcess());
254 EXPECT_TRUE(host1.get() != nullptr); 257 EXPECT_TRUE(host1.get() != nullptr);
255 258
256 // Ensure that GetProcess creates a new process. 259 // Ensure that GetProcess creates a new process.
257 scoped_refptr<SiteInstanceImpl> instance2( 260 scoped_refptr<SiteInstanceImpl> instance2(
258 SiteInstanceImpl::Create(browser_context.get())); 261 SiteInstanceImpl::Create(browser_context.get()));
259 scoped_ptr<RenderProcessHost> host2(instance2->GetProcess()); 262 std::unique_ptr<RenderProcessHost> host2(instance2->GetProcess());
260 EXPECT_TRUE(host2.get() != nullptr); 263 EXPECT_TRUE(host2.get() != nullptr);
261 EXPECT_NE(host1.get(), host2.get()); 264 EXPECT_NE(host1.get(), host2.get());
262 265
263 DrainMessageLoops(); 266 DrainMessageLoops();
264 } 267 }
265 268
266 // Test to ensure SetSite and site() work properly. 269 // Test to ensure SetSite and site() work properly.
267 TEST_F(SiteInstanceTest, SetSite) { 270 TEST_F(SiteInstanceTest, SetSite) {
268 scoped_refptr<SiteInstanceImpl> instance(SiteInstanceImpl::Create(nullptr)); 271 scoped_refptr<SiteInstanceImpl> instance(SiteInstanceImpl::Create(nullptr));
269 EXPECT_FALSE(instance->HasSite()); 272 EXPECT_FALSE(instance->HasSite());
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, url_blank, url_foo_port)); 377 EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, url_blank, url_foo_port));
375 378
376 DrainMessageLoops(); 379 DrainMessageLoops();
377 } 380 }
378 381
379 // Test to ensure that there is only one SiteInstance per site in a given 382 // Test to ensure that there is only one SiteInstance per site in a given
380 // BrowsingInstance, when process-per-site is not in use. 383 // BrowsingInstance, when process-per-site is not in use.
381 TEST_F(SiteInstanceTest, OneSiteInstancePerSite) { 384 TEST_F(SiteInstanceTest, OneSiteInstancePerSite) {
382 ASSERT_FALSE(base::CommandLine::ForCurrentProcess()->HasSwitch( 385 ASSERT_FALSE(base::CommandLine::ForCurrentProcess()->HasSwitch(
383 switches::kProcessPerSite)); 386 switches::kProcessPerSite));
384 scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext()); 387 std::unique_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
385 BrowsingInstance* browsing_instance = 388 BrowsingInstance* browsing_instance =
386 new BrowsingInstance(browser_context.get()); 389 new BrowsingInstance(browser_context.get());
387 390
388 const GURL url_a1("http://www.google.com/1.html"); 391 const GURL url_a1("http://www.google.com/1.html");
389 scoped_refptr<SiteInstanceImpl> site_instance_a1( 392 scoped_refptr<SiteInstanceImpl> site_instance_a1(
390 browsing_instance->GetSiteInstanceForURL(url_a1)); 393 browsing_instance->GetSiteInstanceForURL(url_a1));
391 EXPECT_TRUE(site_instance_a1.get() != nullptr); 394 EXPECT_TRUE(site_instance_a1.get() != nullptr);
392 395
393 // A separate site should create a separate SiteInstance. 396 // A separate site should create a separate SiteInstance.
394 const GURL url_b1("http://www.yahoo.com/"); 397 const GURL url_b1("http://www.yahoo.com/");
(...skipping 21 matching lines...) Expand all
416 new BrowsingInstance(browser_context.get()); 419 new BrowsingInstance(browser_context.get());
417 // Ensure the new SiteInstance is ref counted so that it gets deleted. 420 // Ensure the new SiteInstance is ref counted so that it gets deleted.
418 scoped_refptr<SiteInstanceImpl> site_instance_a2_2( 421 scoped_refptr<SiteInstanceImpl> site_instance_a2_2(
419 browsing_instance2->GetSiteInstanceForURL(url_a2)); 422 browsing_instance2->GetSiteInstanceForURL(url_a2));
420 EXPECT_NE(site_instance_a1.get(), site_instance_a2_2.get()); 423 EXPECT_NE(site_instance_a1.get(), site_instance_a2_2.get());
421 EXPECT_FALSE( 424 EXPECT_FALSE(
422 site_instance_a1->IsRelatedSiteInstance(site_instance_a2_2.get())); 425 site_instance_a1->IsRelatedSiteInstance(site_instance_a2_2.get()));
423 426
424 // The two SiteInstances for http://google.com should not use the same process 427 // The two SiteInstances for http://google.com should not use the same process
425 // if process-per-site is not enabled. 428 // if process-per-site is not enabled.
426 scoped_ptr<RenderProcessHost> process_a1(site_instance_a1->GetProcess()); 429 std::unique_ptr<RenderProcessHost> process_a1(site_instance_a1->GetProcess());
427 scoped_ptr<RenderProcessHost> process_a2_2(site_instance_a2_2->GetProcess()); 430 std::unique_ptr<RenderProcessHost> process_a2_2(
431 site_instance_a2_2->GetProcess());
428 EXPECT_NE(process_a1.get(), process_a2_2.get()); 432 EXPECT_NE(process_a1.get(), process_a2_2.get());
429 433
430 // Should be able to see that we do have SiteInstances. 434 // Should be able to see that we do have SiteInstances.
431 EXPECT_TRUE(browsing_instance->HasSiteInstance( 435 EXPECT_TRUE(browsing_instance->HasSiteInstance(
432 GURL("http://mail.google.com"))); 436 GURL("http://mail.google.com")));
433 EXPECT_TRUE(browsing_instance2->HasSiteInstance( 437 EXPECT_TRUE(browsing_instance2->HasSiteInstance(
434 GURL("http://mail.google.com"))); 438 GURL("http://mail.google.com")));
435 EXPECT_TRUE(browsing_instance->HasSiteInstance( 439 EXPECT_TRUE(browsing_instance->HasSiteInstance(
436 GURL("http://mail.yahoo.com"))); 440 GURL("http://mail.yahoo.com")));
437 441
438 // Should be able to see that we don't have SiteInstances. 442 // Should be able to see that we don't have SiteInstances.
439 EXPECT_FALSE(browsing_instance->HasSiteInstance( 443 EXPECT_FALSE(browsing_instance->HasSiteInstance(
440 GURL("https://www.google.com"))); 444 GURL("https://www.google.com")));
441 EXPECT_FALSE(browsing_instance2->HasSiteInstance( 445 EXPECT_FALSE(browsing_instance2->HasSiteInstance(
442 GURL("http://www.yahoo.com"))); 446 GURL("http://www.yahoo.com")));
443 447
444 // browsing_instances will be deleted when their SiteInstances are deleted. 448 // browsing_instances will be deleted when their SiteInstances are deleted.
445 // The processes will be unregistered when the RPH scoped_ptrs go away. 449 // The processes will be unregistered when the RPH scoped_ptrs go away.
446 450
447 DrainMessageLoops(); 451 DrainMessageLoops();
448 } 452 }
449 453
450 // Test to ensure that there is only one RenderProcessHost per site for an 454 // Test to ensure that there is only one RenderProcessHost per site for an
451 // entire BrowserContext, if process-per-site is in use. 455 // entire BrowserContext, if process-per-site is in use.
452 TEST_F(SiteInstanceTest, OneSiteInstancePerSiteInBrowserContext) { 456 TEST_F(SiteInstanceTest, OneSiteInstancePerSiteInBrowserContext) {
453 base::CommandLine::ForCurrentProcess()->AppendSwitch( 457 base::CommandLine::ForCurrentProcess()->AppendSwitch(
454 switches::kProcessPerSite); 458 switches::kProcessPerSite);
455 scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext()); 459 std::unique_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
456 scoped_refptr<BrowsingInstance> browsing_instance = 460 scoped_refptr<BrowsingInstance> browsing_instance =
457 new BrowsingInstance(browser_context.get()); 461 new BrowsingInstance(browser_context.get());
458 462
459 const GURL url_a1("http://www.google.com/1.html"); 463 const GURL url_a1("http://www.google.com/1.html");
460 scoped_refptr<SiteInstanceImpl> site_instance_a1( 464 scoped_refptr<SiteInstanceImpl> site_instance_a1(
461 browsing_instance->GetSiteInstanceForURL(url_a1)); 465 browsing_instance->GetSiteInstanceForURL(url_a1));
462 EXPECT_TRUE(site_instance_a1.get() != nullptr); 466 EXPECT_TRUE(site_instance_a1.get() != nullptr);
463 scoped_ptr<RenderProcessHost> process_a1(site_instance_a1->GetProcess()); 467 std::unique_ptr<RenderProcessHost> process_a1(site_instance_a1->GetProcess());
464 468
465 // A separate site should create a separate SiteInstance. 469 // A separate site should create a separate SiteInstance.
466 const GURL url_b1("http://www.yahoo.com/"); 470 const GURL url_b1("http://www.yahoo.com/");
467 scoped_refptr<SiteInstanceImpl> site_instance_b1( 471 scoped_refptr<SiteInstanceImpl> site_instance_b1(
468 browsing_instance->GetSiteInstanceForURL(url_b1)); 472 browsing_instance->GetSiteInstanceForURL(url_b1));
469 EXPECT_NE(site_instance_a1.get(), site_instance_b1.get()); 473 EXPECT_NE(site_instance_a1.get(), site_instance_b1.get());
470 EXPECT_TRUE(site_instance_a1->IsRelatedSiteInstance(site_instance_b1.get())); 474 EXPECT_TRUE(site_instance_a1->IsRelatedSiteInstance(site_instance_b1.get()));
471 475
472 // Getting the new SiteInstance from the BrowsingInstance and from another 476 // Getting the new SiteInstance from the BrowsingInstance and from another
473 // SiteInstance in the BrowsingInstance should give the same result. 477 // SiteInstance in the BrowsingInstance should give the same result.
(...skipping 12 matching lines...) Expand all
486 BrowsingInstance* browsing_instance2 = 490 BrowsingInstance* browsing_instance2 =
487 new BrowsingInstance(browser_context.get()); 491 new BrowsingInstance(browser_context.get());
488 scoped_refptr<SiteInstanceImpl> site_instance_a1_2( 492 scoped_refptr<SiteInstanceImpl> site_instance_a1_2(
489 browsing_instance2->GetSiteInstanceForURL(url_a1)); 493 browsing_instance2->GetSiteInstanceForURL(url_a1));
490 EXPECT_TRUE(site_instance_a1.get() != nullptr); 494 EXPECT_TRUE(site_instance_a1.get() != nullptr);
491 EXPECT_NE(site_instance_a1.get(), site_instance_a1_2.get()); 495 EXPECT_NE(site_instance_a1.get(), site_instance_a1_2.get());
492 EXPECT_EQ(process_a1.get(), site_instance_a1_2->GetProcess()); 496 EXPECT_EQ(process_a1.get(), site_instance_a1_2->GetProcess());
493 497
494 // A visit to the original site in a new BrowsingInstance (different browser 498 // A visit to the original site in a new BrowsingInstance (different browser
495 // context) should return a different SiteInstance with a different process. 499 // context) should return a different SiteInstance with a different process.
496 scoped_ptr<TestBrowserContext> browser_context2(new TestBrowserContext()); 500 std::unique_ptr<TestBrowserContext> browser_context2(
501 new TestBrowserContext());
497 BrowsingInstance* browsing_instance3 = 502 BrowsingInstance* browsing_instance3 =
498 new BrowsingInstance(browser_context2.get()); 503 new BrowsingInstance(browser_context2.get());
499 scoped_refptr<SiteInstanceImpl> site_instance_a2_3( 504 scoped_refptr<SiteInstanceImpl> site_instance_a2_3(
500 browsing_instance3->GetSiteInstanceForURL(url_a2)); 505 browsing_instance3->GetSiteInstanceForURL(url_a2));
501 EXPECT_TRUE(site_instance_a2_3.get() != nullptr); 506 EXPECT_TRUE(site_instance_a2_3.get() != nullptr);
502 scoped_ptr<RenderProcessHost> process_a2_3(site_instance_a2_3->GetProcess()); 507 std::unique_ptr<RenderProcessHost> process_a2_3(
508 site_instance_a2_3->GetProcess());
503 EXPECT_NE(site_instance_a1.get(), site_instance_a2_3.get()); 509 EXPECT_NE(site_instance_a1.get(), site_instance_a2_3.get());
504 EXPECT_NE(process_a1.get(), process_a2_3.get()); 510 EXPECT_NE(process_a1.get(), process_a2_3.get());
505 511
506 // Should be able to see that we do have SiteInstances. 512 // Should be able to see that we do have SiteInstances.
507 EXPECT_TRUE(browsing_instance->HasSiteInstance( 513 EXPECT_TRUE(browsing_instance->HasSiteInstance(
508 GURL("http://mail.google.com"))); // visited before 514 GURL("http://mail.google.com"))); // visited before
509 EXPECT_TRUE(browsing_instance2->HasSiteInstance( 515 EXPECT_TRUE(browsing_instance2->HasSiteInstance(
510 GURL("http://mail.google.com"))); // visited before 516 GURL("http://mail.google.com"))); // visited before
511 EXPECT_TRUE(browsing_instance->HasSiteInstance( 517 EXPECT_TRUE(browsing_instance->HasSiteInstance(
512 GURL("http://mail.yahoo.com"))); // visited before 518 GURL("http://mail.yahoo.com"))); // visited before
(...skipping 28 matching lines...) Expand all
541 547
542 // On Android by default the number of renderer hosts is unlimited and process 548 // On Android by default the number of renderer hosts is unlimited and process
543 // sharing doesn't happen. We set the override so that the test can run 549 // sharing doesn't happen. We set the override so that the test can run
544 // everywhere. 550 // everywhere.
545 RenderProcessHost::SetMaxRendererProcessCount(kMaxRendererProcessCount); 551 RenderProcessHost::SetMaxRendererProcessCount(kMaxRendererProcessCount);
546 552
547 ChildProcessSecurityPolicyImpl* policy = 553 ChildProcessSecurityPolicyImpl* policy =
548 ChildProcessSecurityPolicyImpl::GetInstance(); 554 ChildProcessSecurityPolicyImpl::GetInstance();
549 555
550 // Make a bunch of mock renderers so that we hit the limit. 556 // Make a bunch of mock renderers so that we hit the limit.
551 scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext()); 557 std::unique_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
552 ScopedVector<MockRenderProcessHost> hosts; 558 ScopedVector<MockRenderProcessHost> hosts;
553 for (size_t i = 0; i < kMaxRendererProcessCount; ++i) 559 for (size_t i = 0; i < kMaxRendererProcessCount; ++i)
554 hosts.push_back(new MockRenderProcessHost(browser_context.get())); 560 hosts.push_back(new MockRenderProcessHost(browser_context.get()));
555 561
556 // Create some extension instances and make sure they share a process. 562 // Create some extension instances and make sure they share a process.
557 scoped_refptr<SiteInstanceImpl> extension1_instance( 563 scoped_refptr<SiteInstanceImpl> extension1_instance(
558 CreateSiteInstance(browser_context.get(), 564 CreateSiteInstance(browser_context.get(),
559 GURL(kPrivilegedScheme + std::string("://foo/bar")))); 565 GURL(kPrivilegedScheme + std::string("://foo/bar"))));
560 set_privileged_process_id(extension1_instance->GetProcess()->GetID()); 566 set_privileged_process_id(extension1_instance->GetProcess()->GetID());
561 567
562 scoped_refptr<SiteInstanceImpl> extension2_instance( 568 scoped_refptr<SiteInstanceImpl> extension2_instance(
563 CreateSiteInstance(browser_context.get(), 569 CreateSiteInstance(browser_context.get(),
564 GURL(kPrivilegedScheme + std::string("://baz/bar")))); 570 GURL(kPrivilegedScheme + std::string("://baz/bar"))));
565 571
566 scoped_ptr<RenderProcessHost> extension_host( 572 std::unique_ptr<RenderProcessHost> extension_host(
567 extension1_instance->GetProcess()); 573 extension1_instance->GetProcess());
568 EXPECT_EQ(extension1_instance->GetProcess(), 574 EXPECT_EQ(extension1_instance->GetProcess(),
569 extension2_instance->GetProcess()); 575 extension2_instance->GetProcess());
570 576
571 // Create some WebUI instances and make sure they share a process. 577 // Create some WebUI instances and make sure they share a process.
572 scoped_refptr<SiteInstanceImpl> webui1_instance(CreateSiteInstance( 578 scoped_refptr<SiteInstanceImpl> webui1_instance(CreateSiteInstance(
573 browser_context.get(), GURL(kChromeUIScheme + std::string("://gpu")))); 579 browser_context.get(), GURL(kChromeUIScheme + std::string("://gpu"))));
574 policy->GrantWebUIBindings(webui1_instance->GetProcess()->GetID()); 580 policy->GrantWebUIBindings(webui1_instance->GetProcess()->GetID());
575 581
576 scoped_refptr<SiteInstanceImpl> webui2_instance(CreateSiteInstance( 582 scoped_refptr<SiteInstanceImpl> webui2_instance(CreateSiteInstance(
577 browser_context.get(), 583 browser_context.get(),
578 GURL(kChromeUIScheme + std::string("://media-internals")))); 584 GURL(kChromeUIScheme + std::string("://media-internals"))));
579 585
580 scoped_ptr<RenderProcessHost> dom_host(webui1_instance->GetProcess()); 586 std::unique_ptr<RenderProcessHost> dom_host(webui1_instance->GetProcess());
581 EXPECT_EQ(webui1_instance->GetProcess(), webui2_instance->GetProcess()); 587 EXPECT_EQ(webui1_instance->GetProcess(), webui2_instance->GetProcess());
582 588
583 // Make sure none of differing privilege processes are mixed. 589 // Make sure none of differing privilege processes are mixed.
584 EXPECT_NE(extension1_instance->GetProcess(), webui1_instance->GetProcess()); 590 EXPECT_NE(extension1_instance->GetProcess(), webui1_instance->GetProcess());
585 591
586 for (size_t i = 0; i < kMaxRendererProcessCount; ++i) { 592 for (size_t i = 0; i < kMaxRendererProcessCount; ++i) {
587 EXPECT_NE(extension1_instance->GetProcess(), hosts[i]); 593 EXPECT_NE(extension1_instance->GetProcess(), hosts[i]);
588 EXPECT_NE(webui1_instance->GetProcess(), hosts[i]); 594 EXPECT_NE(webui1_instance->GetProcess(), hosts[i]);
589 } 595 }
590 596
591 DrainMessageLoops(); 597 DrainMessageLoops();
592 598
593 // Disable the process limit override. 599 // Disable the process limit override.
594 RenderProcessHost::SetMaxRendererProcessCount(0u); 600 RenderProcessHost::SetMaxRendererProcessCount(0u);
595 } 601 }
596 602
597 // Test to ensure that HasWrongProcessForURL behaves properly for different 603 // Test to ensure that HasWrongProcessForURL behaves properly for different
598 // types of URLs. 604 // types of URLs.
599 TEST_F(SiteInstanceTest, HasWrongProcessForURL) { 605 TEST_F(SiteInstanceTest, HasWrongProcessForURL) {
600 scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext()); 606 std::unique_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
601 scoped_ptr<RenderProcessHost> host; 607 std::unique_ptr<RenderProcessHost> host;
602 scoped_refptr<SiteInstanceImpl> instance( 608 scoped_refptr<SiteInstanceImpl> instance(
603 SiteInstanceImpl::Create(browser_context.get())); 609 SiteInstanceImpl::Create(browser_context.get()));
604 610
605 EXPECT_FALSE(instance->HasSite()); 611 EXPECT_FALSE(instance->HasSite());
606 EXPECT_TRUE(instance->GetSiteURL().is_empty()); 612 EXPECT_TRUE(instance->GetSiteURL().is_empty());
607 613
608 instance->SetSite(GURL("http://evernote.com/")); 614 instance->SetSite(GURL("http://evernote.com/"));
609 EXPECT_TRUE(instance->HasSite()); 615 EXPECT_TRUE(instance->HasSite());
610 616
611 // Check prior to "assigning" a process to the instance, which is expected 617 // Check prior to "assigning" a process to the instance, which is expected
(...skipping 10 matching lines...) Expand all
622 EXPECT_FALSE(instance->HasWrongProcessForURL( 628 EXPECT_FALSE(instance->HasWrongProcessForURL(
623 GURL("javascript:alert(document.location.href);"))); 629 GURL("javascript:alert(document.location.href);")));
624 630
625 EXPECT_TRUE(instance->HasWrongProcessForURL(GURL("chrome://gpu"))); 631 EXPECT_TRUE(instance->HasWrongProcessForURL(GURL("chrome://gpu")));
626 632
627 // Test that WebUI SiteInstances reject normal web URLs. 633 // Test that WebUI SiteInstances reject normal web URLs.
628 const GURL webui_url("chrome://gpu"); 634 const GURL webui_url("chrome://gpu");
629 scoped_refptr<SiteInstanceImpl> webui_instance( 635 scoped_refptr<SiteInstanceImpl> webui_instance(
630 SiteInstanceImpl::Create(browser_context.get())); 636 SiteInstanceImpl::Create(browser_context.get()));
631 webui_instance->SetSite(webui_url); 637 webui_instance->SetSite(webui_url);
632 scoped_ptr<RenderProcessHost> webui_host(webui_instance->GetProcess()); 638 std::unique_ptr<RenderProcessHost> webui_host(webui_instance->GetProcess());
633 639
634 // Simulate granting WebUI bindings for the process. 640 // Simulate granting WebUI bindings for the process.
635 ChildProcessSecurityPolicyImpl::GetInstance()->GrantWebUIBindings( 641 ChildProcessSecurityPolicyImpl::GetInstance()->GrantWebUIBindings(
636 webui_host->GetID()); 642 webui_host->GetID());
637 643
638 EXPECT_TRUE(webui_instance->HasProcess()); 644 EXPECT_TRUE(webui_instance->HasProcess());
639 EXPECT_FALSE(webui_instance->HasWrongProcessForURL(webui_url)); 645 EXPECT_FALSE(webui_instance->HasWrongProcessForURL(webui_url));
640 EXPECT_TRUE(webui_instance->HasWrongProcessForURL(GURL("http://google.com"))); 646 EXPECT_TRUE(webui_instance->HasWrongProcessForURL(GURL("http://google.com")));
641 EXPECT_TRUE(webui_instance->HasWrongProcessForURL(GURL("http://gpu"))); 647 EXPECT_TRUE(webui_instance->HasWrongProcessForURL(GURL("http://gpu")));
642 648
643 // WebUI uses process-per-site, so another instance will use the same process 649 // WebUI uses process-per-site, so another instance will use the same process
644 // even if we haven't called GetProcess yet. Make sure HasWrongProcessForURL 650 // even if we haven't called GetProcess yet. Make sure HasWrongProcessForURL
645 // doesn't crash (http://crbug.com/137070). 651 // doesn't crash (http://crbug.com/137070).
646 scoped_refptr<SiteInstanceImpl> webui_instance2( 652 scoped_refptr<SiteInstanceImpl> webui_instance2(
647 SiteInstanceImpl::Create(browser_context.get())); 653 SiteInstanceImpl::Create(browser_context.get()));
648 webui_instance2->SetSite(webui_url); 654 webui_instance2->SetSite(webui_url);
649 EXPECT_FALSE(webui_instance2->HasWrongProcessForURL(webui_url)); 655 EXPECT_FALSE(webui_instance2->HasWrongProcessForURL(webui_url));
650 EXPECT_TRUE( 656 EXPECT_TRUE(
651 webui_instance2->HasWrongProcessForURL(GURL("http://google.com"))); 657 webui_instance2->HasWrongProcessForURL(GURL("http://google.com")));
652 658
653 DrainMessageLoops(); 659 DrainMessageLoops();
654 } 660 }
655 661
656 // Test to ensure that HasWrongProcessForURL behaves properly even when 662 // Test to ensure that HasWrongProcessForURL behaves properly even when
657 // --site-per-process is used (http://crbug.com/160671). 663 // --site-per-process is used (http://crbug.com/160671).
658 TEST_F(SiteInstanceTest, HasWrongProcessForURLInSitePerProcess) { 664 TEST_F(SiteInstanceTest, HasWrongProcessForURLInSitePerProcess) {
659 IsolateAllSitesForTesting(base::CommandLine::ForCurrentProcess()); 665 IsolateAllSitesForTesting(base::CommandLine::ForCurrentProcess());
660 666
661 scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext()); 667 std::unique_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
662 scoped_ptr<RenderProcessHost> host; 668 std::unique_ptr<RenderProcessHost> host;
663 scoped_refptr<SiteInstanceImpl> instance( 669 scoped_refptr<SiteInstanceImpl> instance(
664 SiteInstanceImpl::Create(browser_context.get())); 670 SiteInstanceImpl::Create(browser_context.get()));
665 671
666 instance->SetSite(GURL("http://evernote.com/")); 672 instance->SetSite(GURL("http://evernote.com/"));
667 EXPECT_TRUE(instance->HasSite()); 673 EXPECT_TRUE(instance->HasSite());
668 674
669 // Check prior to "assigning" a process to the instance, which is expected 675 // Check prior to "assigning" a process to the instance, which is expected
670 // to return false due to not being attached to any process yet. 676 // to return false due to not being attached to any process yet.
671 EXPECT_FALSE(instance->HasWrongProcessForURL(GURL("http://google.com"))); 677 EXPECT_FALSE(instance->HasWrongProcessForURL(GURL("http://google.com")));
672 678
673 // The call to GetProcess actually creates a new real process, which works 679 // The call to GetProcess actually creates a new real process, which works
674 // fine, but might be a cause for problems in different contexts. 680 // fine, but might be a cause for problems in different contexts.
675 host.reset(instance->GetProcess()); 681 host.reset(instance->GetProcess());
676 EXPECT_TRUE(host.get() != nullptr); 682 EXPECT_TRUE(host.get() != nullptr);
677 EXPECT_TRUE(instance->HasProcess()); 683 EXPECT_TRUE(instance->HasProcess());
678 684
679 EXPECT_FALSE(instance->HasWrongProcessForURL(GURL("http://evernote.com"))); 685 EXPECT_FALSE(instance->HasWrongProcessForURL(GURL("http://evernote.com")));
680 EXPECT_FALSE(instance->HasWrongProcessForURL( 686 EXPECT_FALSE(instance->HasWrongProcessForURL(
681 GURL("javascript:alert(document.location.href);"))); 687 GURL("javascript:alert(document.location.href);")));
682 688
683 EXPECT_TRUE(instance->HasWrongProcessForURL(GURL("chrome://gpu"))); 689 EXPECT_TRUE(instance->HasWrongProcessForURL(GURL("chrome://gpu")));
684 690
685 DrainMessageLoops(); 691 DrainMessageLoops();
686 } 692 }
687 693
688 // Test that we do not reuse a process in process-per-site mode if it has the 694 // Test that we do not reuse a process in process-per-site mode if it has the
689 // wrong bindings for its URL. http://crbug.com/174059. 695 // wrong bindings for its URL. http://crbug.com/174059.
690 TEST_F(SiteInstanceTest, ProcessPerSiteWithWrongBindings) { 696 TEST_F(SiteInstanceTest, ProcessPerSiteWithWrongBindings) {
691 scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext()); 697 std::unique_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
692 scoped_ptr<RenderProcessHost> host; 698 std::unique_ptr<RenderProcessHost> host;
693 scoped_ptr<RenderProcessHost> host2; 699 std::unique_ptr<RenderProcessHost> host2;
694 scoped_refptr<SiteInstanceImpl> instance( 700 scoped_refptr<SiteInstanceImpl> instance(
695 SiteInstanceImpl::Create(browser_context.get())); 701 SiteInstanceImpl::Create(browser_context.get()));
696 702
697 EXPECT_FALSE(instance->HasSite()); 703 EXPECT_FALSE(instance->HasSite());
698 EXPECT_TRUE(instance->GetSiteURL().is_empty()); 704 EXPECT_TRUE(instance->GetSiteURL().is_empty());
699 705
700 // Simulate navigating to a WebUI URL in a process that does not have WebUI 706 // Simulate navigating to a WebUI URL in a process that does not have WebUI
701 // bindings. This already requires bypassing security checks. 707 // bindings. This already requires bypassing security checks.
702 const GURL webui_url("chrome://gpu"); 708 const GURL webui_url("chrome://gpu");
703 instance->SetSite(webui_url); 709 instance->SetSite(webui_url);
(...skipping 19 matching lines...) Expand all
723 EXPECT_NE(host.get(), host2.get()); 729 EXPECT_NE(host.get(), host2.get());
724 730
725 DrainMessageLoops(); 731 DrainMessageLoops();
726 } 732 }
727 733
728 // Test that we do not register processes with empty sites for process-per-site 734 // Test that we do not register processes with empty sites for process-per-site
729 // mode. 735 // mode.
730 TEST_F(SiteInstanceTest, NoProcessPerSiteForEmptySite) { 736 TEST_F(SiteInstanceTest, NoProcessPerSiteForEmptySite) {
731 base::CommandLine::ForCurrentProcess()->AppendSwitch( 737 base::CommandLine::ForCurrentProcess()->AppendSwitch(
732 switches::kProcessPerSite); 738 switches::kProcessPerSite);
733 scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext()); 739 std::unique_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
734 scoped_ptr<RenderProcessHost> host; 740 std::unique_ptr<RenderProcessHost> host;
735 scoped_refptr<SiteInstanceImpl> instance( 741 scoped_refptr<SiteInstanceImpl> instance(
736 SiteInstanceImpl::Create(browser_context.get())); 742 SiteInstanceImpl::Create(browser_context.get()));
737 743
738 instance->SetSite(GURL()); 744 instance->SetSite(GURL());
739 EXPECT_TRUE(instance->HasSite()); 745 EXPECT_TRUE(instance->HasSite());
740 EXPECT_TRUE(instance->GetSiteURL().is_empty()); 746 EXPECT_TRUE(instance->GetSiteURL().is_empty());
741 host.reset(instance->GetProcess()); 747 host.reset(instance->GetProcess());
742 748
743 EXPECT_FALSE(RenderProcessHostImpl::GetProcessHostForSite( 749 EXPECT_FALSE(RenderProcessHostImpl::GetProcessHostForSite(
744 browser_context.get(), GURL())); 750 browser_context.get(), GURL()));
745 751
746 DrainMessageLoops(); 752 DrainMessageLoops();
747 } 753 }
748 754
749 TEST_F(SiteInstanceTest, DefaultSubframeSiteInstance) { 755 TEST_F(SiteInstanceTest, DefaultSubframeSiteInstance) {
750 if (AreAllSitesIsolatedForTesting()) 756 if (AreAllSitesIsolatedForTesting())
751 return; // --top-document-isolation is not possible. 757 return; // --top-document-isolation is not possible.
752 758
753 base::CommandLine::ForCurrentProcess()->AppendSwitch( 759 base::CommandLine::ForCurrentProcess()->AppendSwitch(
754 switches::kTopDocumentIsolation); 760 switches::kTopDocumentIsolation);
755 761
756 scoped_ptr<TestBrowserContext> browser_context(new TestBrowserContext()); 762 std::unique_ptr<TestBrowserContext> browser_context(new TestBrowserContext());
757 scoped_refptr<SiteInstanceImpl> main_instance = 763 scoped_refptr<SiteInstanceImpl> main_instance =
758 SiteInstanceImpl::Create(browser_context.get()); 764 SiteInstanceImpl::Create(browser_context.get());
759 scoped_refptr<SiteInstanceImpl> subframe_instance = 765 scoped_refptr<SiteInstanceImpl> subframe_instance =
760 main_instance->GetDefaultSubframeSiteInstance(); 766 main_instance->GetDefaultSubframeSiteInstance();
761 int subframe_instance_id = subframe_instance->GetId(); 767 int subframe_instance_id = subframe_instance->GetId();
762 768
763 EXPECT_NE(main_instance, subframe_instance); 769 EXPECT_NE(main_instance, subframe_instance);
764 EXPECT_EQ(subframe_instance, main_instance->GetDefaultSubframeSiteInstance()); 770 EXPECT_EQ(subframe_instance, main_instance->GetDefaultSubframeSiteInstance());
765 EXPECT_FALSE(main_instance->is_default_subframe_site_instance()); 771 EXPECT_FALSE(main_instance->is_default_subframe_site_instance());
766 EXPECT_TRUE(subframe_instance->is_default_subframe_site_instance()); 772 EXPECT_TRUE(subframe_instance->is_default_subframe_site_instance());
(...skipping 22 matching lines...) Expand all
789 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount()); 795 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount());
790 EXPECT_EQ(0, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); 796 EXPECT_EQ(0, browser_client()->GetAndClearBrowsingInstanceDeleteCount());
791 797
792 // Free the subframe instance, which should free the browsing instance. 798 // Free the subframe instance, which should free the browsing instance.
793 subframe_instance = nullptr; 799 subframe_instance = nullptr;
794 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount()); 800 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount());
795 EXPECT_EQ(1, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); 801 EXPECT_EQ(1, browser_client()->GetAndClearBrowsingInstanceDeleteCount());
796 } 802 }
797 803
798 } // namespace content 804 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/shared_worker/shared_worker_service_impl_unittest.cc ('k') | content/browser/site_per_process_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698