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

Side by Side Diff: chrome/browser/renderer_host/test/site_instance_unittest.cc

Issue 6575009: Move files out of chrome\browser\renderer_host\test alongside their source. ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 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
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/stl_util-inl.h"
6 #include "base/string16.h"
7 #include "chrome/browser/browsing_instance.h"
8 #include "chrome/browser/child_process_security_policy.h"
9 #include "chrome/browser/renderer_host/browser_render_process_host.h"
10 #include "chrome/browser/renderer_host/site_instance.h"
11 #include "chrome/browser/renderer_host/render_view_host.h"
12 #include "chrome/browser/renderer_host/test/test_render_view_host.h"
13 #include "chrome/browser/tab_contents/navigation_entry.h"
14 #include "chrome/browser/tab_contents/tab_contents.h"
15 #include "chrome/common/chrome_constants.h"
16 #include "chrome/common/url_constants.h"
17 #include "chrome/common/render_messages.h"
18 #include "chrome/test/testing_profile.h"
19 #include "testing/gtest/include/gtest/gtest.h"
20
21 class SiteInstanceTest : public testing::Test {
22 private:
23 MessageLoopForUI message_loop_;
24 };
25
26 namespace {
27
28 class TestBrowsingInstance : public BrowsingInstance {
29 public:
30 TestBrowsingInstance(Profile* profile, int* deleteCounter)
31 : BrowsingInstance(profile),
32 use_process_per_site(false),
33 deleteCounter_(deleteCounter) {
34 }
35
36 // Overrides BrowsingInstance::ShouldUseProcessPerSite so that we can test
37 // both alternatives without using command-line switches.
38 bool ShouldUseProcessPerSite(const GURL& url) {
39 return use_process_per_site;
40 }
41
42 // Set by individual tests.
43 bool use_process_per_site;
44
45 private:
46 ~TestBrowsingInstance() {
47 (*deleteCounter_)++;
48 }
49
50 int* deleteCounter_;
51 };
52
53
54 class TestSiteInstance : public SiteInstance {
55 public:
56 static TestSiteInstance* CreateTestSiteInstance(Profile* profile,
57 int* siteDeleteCounter,
58 int* browsingDeleteCounter) {
59 TestBrowsingInstance* browsing_instance =
60 new TestBrowsingInstance(profile, browsingDeleteCounter);
61 return new TestSiteInstance(browsing_instance, siteDeleteCounter);
62 }
63
64 private:
65 TestSiteInstance(BrowsingInstance* browsing_instance, int* deleteCounter)
66 : SiteInstance(browsing_instance), deleteCounter_(deleteCounter) {}
67 ~TestSiteInstance() {
68 (*deleteCounter_)++;
69 }
70
71 int* deleteCounter_;
72 };
73
74 } // namespace
75
76 // Test to ensure no memory leaks for SiteInstance objects.
77 TEST_F(SiteInstanceTest, SiteInstanceDestructor) {
78 // The existence of these factories will cause TabContents to create our test
79 // one instead of the real one.
80 MockRenderProcessHostFactory rph_factory;
81 TestRenderViewHostFactory rvh_factory(&rph_factory);
82 int siteDeleteCounter = 0;
83 int browsingDeleteCounter = 0;
84 const GURL url("test:foo");
85
86 // Ensure that instances are deleted when their NavigationEntries are gone.
87 TestSiteInstance* instance =
88 TestSiteInstance::CreateTestSiteInstance(NULL, &siteDeleteCounter,
89 &browsingDeleteCounter);
90 EXPECT_EQ(0, siteDeleteCounter);
91
92 NavigationEntry* e1 = new NavigationEntry(instance, 0, url, GURL(),
93 string16(),
94 PageTransition::LINK);
95
96 // Redundantly setting e1's SiteInstance shouldn't affect the ref count.
97 e1->set_site_instance(instance);
98 EXPECT_EQ(0, siteDeleteCounter);
99
100 // Add a second reference
101 NavigationEntry* e2 = new NavigationEntry(instance, 0, url,
102 GURL(), string16(),
103 PageTransition::LINK);
104
105 // Now delete both entries and be sure the SiteInstance goes away.
106 delete e1;
107 EXPECT_EQ(0, siteDeleteCounter);
108 EXPECT_EQ(0, browsingDeleteCounter);
109 delete e2;
110 EXPECT_EQ(1, siteDeleteCounter);
111 // instance is now deleted
112 EXPECT_EQ(1, browsingDeleteCounter);
113 // browsing_instance is now deleted
114
115 // Ensure that instances are deleted when their RenderViewHosts are gone.
116 scoped_ptr<TestingProfile> profile(new TestingProfile());
117 instance =
118 TestSiteInstance::CreateTestSiteInstance(profile.get(),
119 &siteDeleteCounter,
120 &browsingDeleteCounter);
121 {
122 TabContents contents(profile.get(), instance, MSG_ROUTING_NONE, NULL, NULL);
123 EXPECT_EQ(1, siteDeleteCounter);
124 EXPECT_EQ(1, browsingDeleteCounter);
125 }
126
127 // Make sure that we flush any messages related to the above TabContents
128 // destruction.
129 MessageLoop::current()->RunAllPending();
130
131 EXPECT_EQ(2, siteDeleteCounter);
132 EXPECT_EQ(2, browsingDeleteCounter);
133 // contents is now deleted, along with instance and browsing_instance
134 }
135
136 // Test that NavigationEntries with SiteInstances can be cloned, but that their
137 // SiteInstances can be changed afterwards. Also tests that the ref counts are
138 // updated properly after the change.
139 TEST_F(SiteInstanceTest, CloneNavigationEntry) {
140 int siteDeleteCounter1 = 0;
141 int siteDeleteCounter2 = 0;
142 int browsingDeleteCounter = 0;
143 const GURL url("test:foo");
144
145 SiteInstance* instance1 =
146 TestSiteInstance::CreateTestSiteInstance(NULL, &siteDeleteCounter1,
147 &browsingDeleteCounter);
148 SiteInstance* instance2 =
149 TestSiteInstance::CreateTestSiteInstance(NULL, &siteDeleteCounter2,
150 &browsingDeleteCounter);
151
152 NavigationEntry* e1 = new NavigationEntry(instance1, 0, url, GURL(),
153 string16(),
154 PageTransition::LINK);
155 // Clone the entry
156 NavigationEntry* e2 = new NavigationEntry(*e1);
157
158 // Should be able to change the SiteInstance of the cloned entry.
159 e2->set_site_instance(instance2);
160
161 // The first SiteInstance should go away after deleting e1, since e2 should
162 // no longer be referencing it.
163 delete e1;
164 EXPECT_EQ(1, siteDeleteCounter1);
165 EXPECT_EQ(0, siteDeleteCounter2);
166
167 // The second SiteInstance should go away after deleting e2.
168 delete e2;
169 EXPECT_EQ(1, siteDeleteCounter1);
170 EXPECT_EQ(1, siteDeleteCounter2);
171
172 // Both BrowsingInstances are also now deleted
173 EXPECT_EQ(2, browsingDeleteCounter);
174 }
175
176 // Test to ensure UpdateMaxPageID is working properly.
177 TEST_F(SiteInstanceTest, UpdateMaxPageID) {
178 scoped_refptr<SiteInstance> instance(SiteInstance::CreateSiteInstance(NULL));
179 EXPECT_EQ(-1, instance->max_page_id());
180
181 // Make sure max_page_id_ is monotonically increasing.
182 instance->UpdateMaxPageID(3);
183 instance->UpdateMaxPageID(1);
184 EXPECT_EQ(3, instance->max_page_id());
185 }
186
187 // Test to ensure GetProcess returns and creates processes correctly.
188 TEST_F(SiteInstanceTest, GetProcess) {
189 // Ensure that GetProcess returns a process.
190 scoped_ptr<TestingProfile> profile(new TestingProfile());
191 scoped_ptr<RenderProcessHost> host1;
192 scoped_refptr<SiteInstance> instance(
193 SiteInstance::CreateSiteInstance(profile.get()));
194 host1.reset(instance->GetProcess());
195 EXPECT_TRUE(host1.get() != NULL);
196
197 // Ensure that GetProcess creates a new process.
198 scoped_refptr<SiteInstance> instance2(
199 SiteInstance::CreateSiteInstance(profile.get()));
200 scoped_ptr<RenderProcessHost> host2(instance2->GetProcess());
201 EXPECT_TRUE(host2.get() != NULL);
202 EXPECT_NE(host1.get(), host2.get());
203 }
204
205 // Test to ensure SetSite and site() work properly.
206 TEST_F(SiteInstanceTest, SetSite) {
207 scoped_refptr<SiteInstance> instance(SiteInstance::CreateSiteInstance(NULL));
208 EXPECT_FALSE(instance->has_site());
209 EXPECT_TRUE(instance->site().is_empty());
210
211 instance->SetSite(GURL("http://www.google.com/index.html"));
212 EXPECT_EQ(GURL("http://google.com"), instance->site());
213
214 EXPECT_TRUE(instance->has_site());
215 }
216
217 // Test to ensure GetSiteForURL properly returns sites for URLs.
218 TEST_F(SiteInstanceTest, GetSiteForURL) {
219 // Pages are irrelevant.
220 GURL test_url = GURL("http://www.google.com/index.html");
221 EXPECT_EQ(GURL("http://google.com"),
222 SiteInstance::GetSiteForURL(NULL, test_url));
223
224 // Ports are irrlevant.
225 test_url = GURL("https://www.google.com:8080");
226 EXPECT_EQ(GURL("https://google.com"),
227 SiteInstance::GetSiteForURL(NULL, test_url));
228
229 // Javascript URLs have no site.
230 test_url = GURL("javascript:foo();");
231 EXPECT_EQ(GURL(), SiteInstance::GetSiteForURL(NULL, test_url));
232
233 test_url = GURL("http://foo/a.html");
234 EXPECT_EQ(GURL("http://foo"), SiteInstance::GetSiteForURL(NULL, test_url));
235
236 test_url = GURL("file:///C:/Downloads/");
237 EXPECT_EQ(GURL(), SiteInstance::GetSiteForURL(NULL, test_url));
238
239 // TODO(creis): Do we want to special case file URLs to ensure they have
240 // either no site or a special "file://" site? We currently return
241 // "file://home/" as the site, which seems broken.
242 // test_url = GURL("file://home/");
243 // EXPECT_EQ(GURL(), SiteInstance::GetSiteForURL(NULL, test_url));
244 }
245
246 // Test of distinguishing URLs from different sites. Most of this logic is
247 // tested in RegistryControlledDomainTest. This test focuses on URLs with
248 // different schemes or ports.
249 TEST_F(SiteInstanceTest, IsSameWebSite) {
250 GURL url_foo = GURL("http://foo/a.html");
251 GURL url_foo2 = GURL("http://foo/b.html");
252 GURL url_foo_https = GURL("https://foo/a.html");
253 GURL url_foo_port = GURL("http://foo:8080/a.html");
254 GURL url_javascript = GURL("javascript:alert(1);");
255 GURL url_crash = GURL(chrome::kAboutCrashURL);
256 GURL url_hang = GURL(chrome::kAboutHangURL);
257 GURL url_shorthang = GURL(chrome::kAboutShorthangURL);
258
259 // Same scheme and port -> same site.
260 EXPECT_TRUE(SiteInstance::IsSameWebSite(NULL, url_foo, url_foo2));
261
262 // Different scheme -> different site.
263 EXPECT_FALSE(SiteInstance::IsSameWebSite(NULL, url_foo, url_foo_https));
264
265 // Different port -> same site.
266 // (Changes to document.domain make renderer ignore the port.)
267 EXPECT_TRUE(SiteInstance::IsSameWebSite(NULL, url_foo, url_foo_port));
268
269 // JavaScript links should be considered same site for anything.
270 EXPECT_TRUE(SiteInstance::IsSameWebSite(NULL, url_javascript, url_foo));
271 EXPECT_TRUE(SiteInstance::IsSameWebSite(NULL, url_javascript, url_foo_https));
272 EXPECT_TRUE(SiteInstance::IsSameWebSite(NULL, url_javascript, url_foo_port));
273
274 // The crash/hang URLs should also be treated as same site. (Bug 1143809.)
275 EXPECT_TRUE(SiteInstance::IsSameWebSite(NULL, url_crash, url_foo));
276 EXPECT_TRUE(SiteInstance::IsSameWebSite(NULL, url_hang, url_foo));
277 EXPECT_TRUE(SiteInstance::IsSameWebSite(NULL, url_shorthang, url_foo));
278 }
279
280 // Test to ensure that there is only one SiteInstance per site in a given
281 // BrowsingInstance, when process-per-site is not in use.
282 TEST_F(SiteInstanceTest, OneSiteInstancePerSite) {
283 int deleteCounter = 0;
284 TestBrowsingInstance* browsing_instance =
285 new TestBrowsingInstance(NULL, &deleteCounter);
286 browsing_instance->use_process_per_site = false;
287
288 const GURL url_a1("http://www.google.com/1.html");
289 scoped_refptr<SiteInstance> site_instance_a1(
290 browsing_instance->GetSiteInstanceForURL(url_a1));
291 EXPECT_TRUE(site_instance_a1.get() != NULL);
292
293 // A separate site should create a separate SiteInstance.
294 const GURL url_b1("http://www.yahoo.com/");
295 scoped_refptr<SiteInstance> site_instance_b1(
296 browsing_instance->GetSiteInstanceForURL(url_b1));
297 EXPECT_NE(site_instance_a1.get(), site_instance_b1.get());
298
299 // Getting the new SiteInstance from the BrowsingInstance and from another
300 // SiteInstance in the BrowsingInstance should give the same result.
301 EXPECT_EQ(site_instance_b1.get(),
302 site_instance_a1->GetRelatedSiteInstance(url_b1));
303
304 // A second visit to the original site should return the same SiteInstance.
305 const GURL url_a2("http://www.google.com/2.html");
306 EXPECT_EQ(site_instance_a1.get(),
307 browsing_instance->GetSiteInstanceForURL(url_a2));
308 EXPECT_EQ(site_instance_a1.get(),
309 site_instance_a1->GetRelatedSiteInstance(url_a2));
310
311 // A visit to the original site in a new BrowsingInstance (same or different
312 // profile) should return a different SiteInstance.
313 TestBrowsingInstance* browsing_instance2 =
314 new TestBrowsingInstance(NULL, &deleteCounter);
315 browsing_instance2->use_process_per_site = false;
316 // Ensure the new SiteInstance is ref counted so that it gets deleted.
317 scoped_refptr<SiteInstance> site_instance_a2_2(
318 browsing_instance2->GetSiteInstanceForURL(url_a2));
319 EXPECT_NE(site_instance_a1.get(), site_instance_a2_2.get());
320
321 // Should be able to see that we do have SiteInstances.
322 EXPECT_TRUE(browsing_instance->HasSiteInstance(
323 GURL("http://mail.google.com")));
324 EXPECT_TRUE(browsing_instance2->HasSiteInstance(
325 GURL("http://mail.google.com")));
326 EXPECT_TRUE(browsing_instance->HasSiteInstance(
327 GURL("http://mail.yahoo.com")));
328
329 // Should be able to see that we don't have SiteInstances.
330 EXPECT_FALSE(browsing_instance->HasSiteInstance(
331 GURL("https://www.google.com")));
332 EXPECT_FALSE(browsing_instance2->HasSiteInstance(
333 GURL("http://www.yahoo.com")));
334
335 // browsing_instances will be deleted when their SiteInstances are deleted
336 }
337
338 // Test to ensure that there is only one SiteInstance per site for an entire
339 // Profile, if process-per-site is in use.
340 TEST_F(SiteInstanceTest, OneSiteInstancePerSiteInProfile) {
341 int deleteCounter = 0;
342 TestBrowsingInstance* browsing_instance =
343 new TestBrowsingInstance(NULL, &deleteCounter);
344 browsing_instance->use_process_per_site = true;
345
346 const GURL url_a1("http://www.google.com/1.html");
347 scoped_refptr<SiteInstance> site_instance_a1(
348 browsing_instance->GetSiteInstanceForURL(url_a1));
349 EXPECT_TRUE(site_instance_a1.get() != NULL);
350
351 // A separate site should create a separate SiteInstance.
352 const GURL url_b1("http://www.yahoo.com/");
353 scoped_refptr<SiteInstance> site_instance_b1(
354 browsing_instance->GetSiteInstanceForURL(url_b1));
355 EXPECT_NE(site_instance_a1.get(), site_instance_b1.get());
356
357 // Getting the new SiteInstance from the BrowsingInstance and from another
358 // SiteInstance in the BrowsingInstance should give the same result.
359 EXPECT_EQ(site_instance_b1.get(),
360 site_instance_a1->GetRelatedSiteInstance(url_b1));
361
362 // A second visit to the original site should return the same SiteInstance.
363 const GURL url_a2("http://www.google.com/2.html");
364 EXPECT_EQ(site_instance_a1.get(),
365 browsing_instance->GetSiteInstanceForURL(url_a2));
366 EXPECT_EQ(site_instance_a1.get(),
367 site_instance_a1->GetRelatedSiteInstance(url_a2));
368
369 // A visit to the original site in a new BrowsingInstance (same profile)
370 // should also return the same SiteInstance.
371 // This BrowsingInstance doesn't get its own SiteInstance within the test, so
372 // it won't be deleted by its children. Thus, we'll keep a ref count to it
373 // to make sure it gets deleted.
374 scoped_refptr<TestBrowsingInstance> browsing_instance2(
375 new TestBrowsingInstance(NULL, &deleteCounter));
376 browsing_instance2->use_process_per_site = true;
377 EXPECT_EQ(site_instance_a1.get(),
378 browsing_instance2->GetSiteInstanceForURL(url_a2));
379
380 // A visit to the original site in a new BrowsingInstance (different profile)
381 // should return a different SiteInstance.
382 scoped_ptr<TestingProfile> profile(new TestingProfile());
383 TestBrowsingInstance* browsing_instance3 =
384 new TestBrowsingInstance(profile.get(), &deleteCounter);
385 browsing_instance3->use_process_per_site = true;
386 // Ensure the new SiteInstance is ref counted so that it gets deleted.
387 scoped_refptr<SiteInstance> site_instance_a2_3(
388 browsing_instance3->GetSiteInstanceForURL(url_a2));
389 EXPECT_NE(site_instance_a1.get(), site_instance_a2_3.get());
390
391 // Should be able to see that we do have SiteInstances.
392 EXPECT_TRUE(browsing_instance->HasSiteInstance(
393 GURL("http://mail.google.com"))); // visited before
394 EXPECT_TRUE(browsing_instance2->HasSiteInstance(
395 GURL("http://mail.google.com"))); // visited before
396 EXPECT_TRUE(browsing_instance->HasSiteInstance(
397 GURL("http://mail.yahoo.com"))); // visited before
398 EXPECT_TRUE(browsing_instance2->HasSiteInstance(
399 GURL("http://www.yahoo.com"))); // different BI, but same profile
400
401 // Should be able to see that we don't have SiteInstances.
402 EXPECT_FALSE(browsing_instance->HasSiteInstance(
403 GURL("https://www.google.com"))); // not visited before
404 EXPECT_FALSE(browsing_instance3->HasSiteInstance(
405 GURL("http://www.yahoo.com"))); // different BI, different profile
406
407 // browsing_instances will be deleted when their SiteInstances are deleted
408 }
409
410 static SiteInstance* CreateSiteInstance(RenderProcessHostFactory* factory,
411 const GURL& url) {
412 SiteInstance* instance = SiteInstance::CreateSiteInstanceForURL(NULL, url);
413 instance->set_render_process_host_factory(factory);
414 return instance;
415 }
416
417 // Test to ensure that pages that require certain privileges are grouped
418 // in processes with similar pages.
419 TEST_F(SiteInstanceTest, ProcessSharingByType) {
420 MockRenderProcessHostFactory rph_factory;
421 ChildProcessSecurityPolicy* policy =
422 ChildProcessSecurityPolicy::GetInstance();
423
424 // Make a bunch of mock renderers so that we hit the limit.
425 std::vector<MockRenderProcessHost*> hosts;
426 for (size_t i = 0; i < chrome::kMaxRendererProcessCount; ++i)
427 hosts.push_back(new MockRenderProcessHost(NULL));
428
429 // Create some extension instances and make sure they share a process.
430 scoped_refptr<SiteInstance> extension1_instance(
431 CreateSiteInstance(&rph_factory, GURL("chrome-extension://foo/bar")));
432 policy->GrantExtensionBindings(extension1_instance->GetProcess()->id());
433
434 scoped_refptr<SiteInstance> extension2_instance(
435 CreateSiteInstance(&rph_factory, GURL("chrome-extension://baz/bar")));
436
437 scoped_ptr<RenderProcessHost> extension_host(
438 extension1_instance->GetProcess());
439 EXPECT_EQ(extension1_instance->GetProcess(),
440 extension2_instance->GetProcess());
441
442 // Create some WebUI instances and make sure they share a process.
443 scoped_refptr<SiteInstance> dom1_instance(
444 CreateSiteInstance(&rph_factory, GURL("chrome://newtab")));
445 policy->GrantWebUIBindings(dom1_instance->GetProcess()->id());
446
447 scoped_refptr<SiteInstance> dom2_instance(
448 CreateSiteInstance(&rph_factory, GURL("chrome://history")));
449
450 scoped_ptr<RenderProcessHost> dom_host(dom1_instance->GetProcess());
451 EXPECT_EQ(dom1_instance->GetProcess(), dom2_instance->GetProcess());
452
453 // Make sure none of differing privilege processes are mixed.
454 EXPECT_NE(extension1_instance->GetProcess(), dom1_instance->GetProcess());
455
456 for (size_t i = 0; i < chrome::kMaxRendererProcessCount; ++i) {
457 EXPECT_NE(extension1_instance->GetProcess(), hosts[i]);
458 EXPECT_NE(dom1_instance->GetProcess(), hosts[i]);
459 }
460
461 STLDeleteContainerPointers(hosts.begin(), hosts.end());
462 }
463
464 // Test to ensure that profiles that derive from each other share site
465 // information.
466 TEST_F(SiteInstanceTest, GetSiteInstanceMap) {
467 int deleteCounter = 0;
468
469 scoped_ptr<Profile> p1(new TestingProfile());
470 scoped_ptr<Profile> p2(new TestingProfile());
471 scoped_ptr<Profile> p3(new DerivedTestingProfile(p1.get()));
472
473 // In this test, instances 1 and 2 will be deleted automatically when the
474 // SiteInstance objects they return are deleted. However, instance 3 never
475 // returns any SitesIntance objects in this test, so will not be automatically
476 // deleted. It must be deleted manually.
477 TestBrowsingInstance* instance1(new TestBrowsingInstance(p1.get(),
478 &deleteCounter));
479 TestBrowsingInstance* instance2(new TestBrowsingInstance(p2.get(),
480 &deleteCounter));
481 scoped_refptr<TestBrowsingInstance> instance3(
482 new TestBrowsingInstance(p3.get(), &deleteCounter));
483
484 instance1->use_process_per_site = true;
485 instance2->use_process_per_site = true;
486 instance3->use_process_per_site = true;
487
488 // The same profile with the same site.
489 scoped_refptr<SiteInstance> s1a(instance1->GetSiteInstanceForURL(
490 GURL("chrome-extension://baz/bar")));
491 scoped_refptr<SiteInstance> s1b(instance1->GetSiteInstanceForURL(
492 GURL("chrome-extension://baz/bar")));
493 EXPECT_EQ(s1a, s1b);
494
495 // The same profile with different sites.
496 scoped_refptr<SiteInstance> s2a(instance1->GetSiteInstanceForURL(
497 GURL("chrome-extension://baz/bar")));
498 scoped_refptr<SiteInstance> s2b(instance1->GetSiteInstanceForURL(
499 GURL("chrome-extension://foo/boo")));
500 EXPECT_NE(s2a, s2b);
501
502 // The different profiles with the same site.
503 scoped_refptr<SiteInstance> s3a(instance1->GetSiteInstanceForURL(
504 GURL("chrome-extension://baz/bar")));
505 scoped_refptr<SiteInstance> s3b(instance2->GetSiteInstanceForURL(
506 GURL("chrome-extension://baz/bar")));
507 EXPECT_NE(s3a, s3b);
508
509 // The different profiles with different sites.
510 scoped_refptr<SiteInstance> s4a(instance1->GetSiteInstanceForURL(
511 GURL("chrome-extension://baz/bar")));
512 scoped_refptr<SiteInstance> s4b(instance2->GetSiteInstanceForURL(
513 GURL("chrome-extension://foo/boo")));
514 EXPECT_NE(s4a, s4b);
515
516 // The derived profiles with the same site.
517 scoped_refptr<SiteInstance> s5a(instance1->GetSiteInstanceForURL(
518 GURL("chrome-extension://baz/bar")));
519 scoped_refptr<SiteInstance> s5b(instance3->GetSiteInstanceForURL(
520 GURL("chrome-extension://baz/bar")));
521 EXPECT_EQ(s5a, s5b);
522
523 // The derived profiles with the different sites.
524 scoped_refptr<SiteInstance> s6a(instance1->GetSiteInstanceForURL(
525 GURL("chrome-extension://baz/bar")));
526 scoped_refptr<SiteInstance> s6b(instance3->GetSiteInstanceForURL(
527 GURL("chrome-extension://foo/boo")));
528 EXPECT_NE(s6a, s6b);
529 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698