| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "chrome/browser/site_details.h" | 5 #include "chrome/browser/site_details.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 #include "net/test/embedded_test_server/embedded_test_server.h" | 39 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 40 #include "testing/gmock/include/gmock/gmock.h" | 40 #include "testing/gmock/include/gmock/gmock.h" |
| 41 #include "testing/gtest/include/gtest/gtest.h" | 41 #include "testing/gtest/include/gtest/gtest.h" |
| 42 | 42 |
| 43 using base::Bucket; | 43 using base::Bucket; |
| 44 using content::WebContents; | 44 using content::WebContents; |
| 45 using extensions::DictionaryBuilder; | 45 using extensions::DictionaryBuilder; |
| 46 using extensions::Extension; | 46 using extensions::Extension; |
| 47 using extensions::ListBuilder; | 47 using extensions::ListBuilder; |
| 48 using extensions::TestExtensionDir; | 48 using extensions::TestExtensionDir; |
| 49 using testing::ContainerEq; | |
| 50 using testing::ElementsAre; | 49 using testing::ElementsAre; |
| 50 using testing::PrintToString; |
| 51 | 51 |
| 52 namespace { | 52 namespace { |
| 53 | 53 |
| 54 class TestMemoryDetails : public MetricsMemoryDetails { | 54 class TestMemoryDetails : public MetricsMemoryDetails { |
| 55 public: | 55 public: |
| 56 TestMemoryDetails() | 56 TestMemoryDetails() |
| 57 : MetricsMemoryDetails(base::Bind(&base::DoNothing), nullptr) {} | 57 : MetricsMemoryDetails(base::Bind(&base::DoNothing), nullptr) {} |
| 58 | 58 |
| 59 void StartFetchAndWait() { | 59 void StartFetchAndWait() { |
| 60 uma_.reset(new base::HistogramTester()); | 60 uma_.reset(new base::HistogramTester()); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 90 MetricsMemoryDetails::OnDetailsAvailable(); | 90 MetricsMemoryDetails::OnDetailsAvailable(); |
| 91 // Exit the loop initiated by StartFetchAndWait(). | 91 // Exit the loop initiated by StartFetchAndWait(). |
| 92 base::MessageLoop::current()->QuitWhenIdle(); | 92 base::MessageLoop::current()->QuitWhenIdle(); |
| 93 } | 93 } |
| 94 | 94 |
| 95 scoped_ptr<base::HistogramTester> uma_; | 95 scoped_ptr<base::HistogramTester> uma_; |
| 96 | 96 |
| 97 DISALLOW_COPY_AND_ASSIGN(TestMemoryDetails); | 97 DISALLOW_COPY_AND_ASSIGN(TestMemoryDetails); |
| 98 }; | 98 }; |
| 99 | 99 |
| 100 IsolationScenarioType GetCurrentPolicy() { |
| 101 if (content::AreAllSitesIsolatedForTesting()) |
| 102 return ISOLATE_ALL_SITES; |
| 103 if (extensions::IsIsolateExtensionsEnabled()) |
| 104 return ISOLATE_EXTENSIONS; |
| 105 return ISOLATE_NOTHING; |
| 106 } |
| 107 |
| 108 // This matcher takes three other matchers as arguments, and applies one of them |
| 109 // depending on the current site isolation mode. The first applies if no site |
| 110 // isolation mode is active; the second applies under --isolate-extensions mode; |
| 111 // and the third applies under --site-per-process mode. |
| 112 MATCHER_P3(DependingOnPolicy, |
| 113 isolate_nothing, |
| 114 isolate_extensions, |
| 115 isolate_all_sites, |
| 116 GetCurrentPolicy() == ISOLATE_NOTHING |
| 117 ? std::string("(with oopifs disabled) ") + |
| 118 PrintToString(isolate_nothing) |
| 119 : GetCurrentPolicy() == ISOLATE_EXTENSIONS |
| 120 ? std::string("(under --isolate-extensions) ") + |
| 121 PrintToString(isolate_extensions) |
| 122 : std::string("(under --site-per-process) ") + |
| 123 PrintToString(isolate_all_sites)) { |
| 124 switch (GetCurrentPolicy()) { |
| 125 case ISOLATE_NOTHING: |
| 126 return ExplainMatchResult(isolate_nothing, arg, result_listener); |
| 127 case ISOLATE_EXTENSIONS: |
| 128 return ExplainMatchResult(isolate_extensions, arg, result_listener); |
| 129 case ISOLATE_ALL_SITES: |
| 130 return ExplainMatchResult(isolate_all_sites, arg, result_listener); |
| 131 default: |
| 132 return false; |
| 133 } |
| 134 } |
| 135 |
| 136 // Matcher for base::Bucket objects that allows bucket_min to be a matcher. |
| 137 MATCHER_P2(Sample, |
| 138 bucket_min, |
| 139 count, |
| 140 std::string("is a Bucket whose count is ") + PrintToString(count) + |
| 141 std::string(" and whose value is ") + |
| 142 PrintToString(bucket_min)) { |
| 143 return ExplainMatchResult(count, arg.count, result_listener) && |
| 144 ExplainMatchResult(bucket_min, arg.min, result_listener); |
| 145 } |
| 146 |
| 147 // Allow matchers to be pretty-printed when passed to PrintToString() for the |
| 148 // cases we care about. |
| 149 template <typename P1, typename P2, typename P3> |
| 150 void PrintTo(const DependingOnPolicyMatcherP3<P1, P2, P3>& matcher, |
| 151 std::ostream* os) { |
| 152 testing::Matcher<int> matcherCast = matcher; |
| 153 matcherCast.DescribeTo(os); |
| 154 } |
| 155 |
| 156 template <typename P1, typename P2> |
| 157 void PrintTo(const SampleMatcherP2<P1, P2>& matcher, std::ostream* os) { |
| 158 testing::Matcher<Bucket> matcherCast = matcher; |
| 159 matcherCast.DescribeTo(os); |
| 160 } |
| 161 |
| 162 // Matches a container of histogram samples, for the common case where the |
| 163 // histogram received just one sample. |
| 164 #define HasOneSample(x) ElementsAre(Sample(x, 1)) |
| 165 |
| 100 } // namespace | 166 } // namespace |
| 101 | 167 |
| 102 class SiteDetailsBrowserTest : public ExtensionBrowserTest { | 168 class SiteDetailsBrowserTest : public ExtensionBrowserTest, |
| 169 public testing::WithParamInterface<const char*> { |
| 103 public: | 170 public: |
| 104 SiteDetailsBrowserTest() {} | 171 SiteDetailsBrowserTest() {} |
| 105 ~SiteDetailsBrowserTest() override {} | 172 ~SiteDetailsBrowserTest() override {} |
| 106 | 173 |
| 174 void SetUpCommandLine(base::CommandLine* command_line) override { |
| 175 ExtensionBrowserTest::SetUpCommandLine(command_line); |
| 176 std::string switch_name = GetParam(); |
| 177 if (!switch_name.empty()) { |
| 178 command_line->AppendSwitch(switch_name); |
| 179 } |
| 180 } |
| 181 |
| 107 void SetUpOnMainThread() override { | 182 void SetUpOnMainThread() override { |
| 108 host_resolver()->AddRule("*", "127.0.0.1"); | 183 host_resolver()->AddRule("*", "127.0.0.1"); |
| 109 | 184 |
| 110 // Add content/test/data so we can use cross_site_iframe_factory.html | 185 // Add content/test/data so we can use cross_site_iframe_factory.html |
| 111 base::FilePath test_data_dir; | 186 base::FilePath test_data_dir; |
| 112 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &test_data_dir)); | 187 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &test_data_dir)); |
| 113 embedded_test_server()->ServeFilesFromDirectory( | 188 embedded_test_server()->ServeFilesFromDirectory( |
| 114 test_data_dir.AppendASCII("content/test/data/")); | 189 test_data_dir.AppendASCII("content/test/data/")); |
| 115 ASSERT_TRUE(embedded_test_server()->Start()); | 190 ASSERT_TRUE(embedded_test_server()->Start()); |
| 116 } | 191 } |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 } | 313 } |
| 239 | 314 |
| 240 return false; | 315 return false; |
| 241 } | 316 } |
| 242 | 317 |
| 243 private: | 318 private: |
| 244 ScopedVector<TestExtensionDir> temp_dirs_; | 319 ScopedVector<TestExtensionDir> temp_dirs_; |
| 245 DISALLOW_COPY_AND_ASSIGN(SiteDetailsBrowserTest); | 320 DISALLOW_COPY_AND_ASSIGN(SiteDetailsBrowserTest); |
| 246 }; | 321 }; |
| 247 | 322 |
| 248 MATCHER_P(EqualsIfExtensionsIsolated, expected, "") { | |
| 249 if (content::AreAllSitesIsolatedForTesting()) | |
| 250 return arg >= expected; | |
| 251 if (extensions::IsIsolateExtensionsEnabled()) | |
| 252 return arg == expected; | |
| 253 return true; | |
| 254 } | |
| 255 | |
| 256 MATCHER_P(EqualsIfSitePerProcess, expected, "") { | |
| 257 return !content::AreAllSitesIsolatedForTesting() || expected == arg; | |
| 258 } | |
| 259 | 323 |
| 260 // Test the accuracy of SiteDetails process estimation, in the presence of | 324 // Test the accuracy of SiteDetails process estimation, in the presence of |
| 261 // multiple iframes, navigation, multiple BrowsingInstances, and multiple tabs | 325 // multiple iframes, navigation, multiple BrowsingInstances, and multiple tabs |
| 262 // in the same BrowsingInstance. | 326 // in the same BrowsingInstance. |
| 263 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, ManyIframes) { | 327 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, ManyIframes) { |
| 264 // Page with 14 nested oopifs across 9 sites (a.com through i.com). | 328 // Page with 14 nested oopifs across 9 sites (a.com through i.com). |
| 265 // None of these are https. | 329 // None of these are https. |
| 266 GURL abcdefghi_url = embedded_test_server()->GetURL( | 330 GURL abcdefghi_url = embedded_test_server()->GetURL( |
| 267 "a.com", | 331 "a.com", |
| 268 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))"); | 332 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))"); |
| 269 ui_test_utils::NavigateToURL(browser(), abcdefghi_url); | 333 ui_test_utils::NavigateToURL(browser(), abcdefghi_url); |
| 270 | 334 |
| 271 // Get the metrics. | 335 // Get the metrics. |
| 272 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); | 336 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); |
| 273 details->StartFetchAndWait(); | 337 details->StartFetchAndWait(); |
| 274 | 338 |
| 275 EXPECT_EQ(1U, details->CountPageTitles()); | 339 EXPECT_EQ(1U, details->CountPageTitles()); |
| 276 EXPECT_THAT( | 340 EXPECT_THAT( |
| 277 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), | 341 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), |
| 278 ElementsAre(Bucket(1, 1))); | 342 HasOneSample(1)); |
| 279 EXPECT_THAT(details->uma()->GetAllSamples( | 343 EXPECT_THAT(details->uma()->GetAllSamples( |
| 280 "SiteIsolation.CurrentRendererProcessCount"), | 344 "SiteIsolation.CurrentRendererProcessCount"), |
| 281 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 345 HasOneSample(GetRenderProcessCount())); |
| 282 EXPECT_THAT(details->uma()->GetAllSamples( | 346 EXPECT_THAT(details->uma()->GetAllSamples( |
| 283 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 347 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 284 ElementsAre(Bucket(1, 1))); | 348 HasOneSample(1)); |
| 285 EXPECT_THAT(details->uma()->GetAllSamples( | 349 EXPECT_THAT(details->uma()->GetAllSamples( |
| 286 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), | 350 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), |
| 287 ElementsAre(Bucket(9, 1))); | 351 HasOneSample(9)); |
| 288 EXPECT_THAT(details->uma()->GetAllSamples( | 352 EXPECT_THAT(details->uma()->GetAllSamples( |
| 289 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), | 353 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), |
| 290 ElementsAre(Bucket(9, 1))); | 354 HasOneSample(9)); |
| 291 EXPECT_THAT(details->uma()->GetAllSamples( | 355 EXPECT_THAT(details->uma()->GetAllSamples( |
| 292 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), | 356 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), |
| 293 ElementsAre(Bucket(9, 1))); | 357 HasOneSample(9)); |
| 294 EXPECT_THAT(details->uma()->GetAllSamples( | 358 EXPECT_THAT(details->uma()->GetAllSamples( |
| 295 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), | 359 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), |
| 296 ElementsAre(Bucket(1, 1))); | 360 HasOneSample(1)); |
| 297 EXPECT_THAT(details->uma()->GetAllSamples( | 361 EXPECT_THAT(details->uma()->GetAllSamples( |
| 298 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), | 362 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), |
| 299 ElementsAre(Bucket(1, 1))); | 363 HasOneSample(1)); |
| 300 EXPECT_THAT(details->uma()->GetAllSamples( | 364 EXPECT_THAT(details->uma()->GetAllSamples( |
| 301 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), | 365 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), |
| 302 ElementsAre(Bucket(1, 1))); | 366 HasOneSample(1)); |
| 303 EXPECT_THAT(details->uma()->GetAllSamples( | 367 EXPECT_THAT(details->uma()->GetAllSamples( |
| 304 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 368 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 305 ElementsAre(Bucket(1, 1))); | 369 HasOneSample(1)); |
| 306 EXPECT_THAT(details->uma()->GetAllSamples( | 370 EXPECT_THAT(details->uma()->GetAllSamples( |
| 307 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 371 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 308 ElementsAre(Bucket(1, 1))); | 372 HasOneSample(1)); |
| 309 EXPECT_THAT(details->uma()->GetAllSamples( | 373 EXPECT_THAT(details->uma()->GetAllSamples( |
| 310 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 374 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 311 ElementsAre(Bucket(1, 1))); | 375 HasOneSample(1)); |
| 312 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1)); | 376 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 9)); |
| 313 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(9)); | |
| 314 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 377 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 315 EqualsIfExtensionsIsolated(0)); | 378 DependingOnPolicy(0, 0, 14)); |
| 316 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | |
| 317 EqualsIfSitePerProcess(14)); | |
| 318 | 379 |
| 319 // Navigate to a different, disjoint set of 7 sites. | 380 // Navigate to a different, disjoint set of 7 sites. |
| 320 GURL pqrstuv_url = embedded_test_server()->GetURL( | 381 GURL pqrstuv_url = embedded_test_server()->GetURL( |
| 321 "p.com", | 382 "p.com", |
| 322 "/cross_site_iframe_factory.html?p(q(r),r(s),s(t),t(q),u(u),v(p))"); | 383 "/cross_site_iframe_factory.html?p(q(r),r(s),s(t),t(q),u(u),v(p))"); |
| 323 ui_test_utils::NavigateToURL(browser(), pqrstuv_url); | 384 ui_test_utils::NavigateToURL(browser(), pqrstuv_url); |
| 324 | 385 |
| 325 details = new TestMemoryDetails(); | 386 details = new TestMemoryDetails(); |
| 326 details->StartFetchAndWait(); | 387 details->StartFetchAndWait(); |
| 327 | 388 |
| 328 EXPECT_EQ(1U, details->CountPageTitles()); | 389 EXPECT_EQ(1U, details->CountPageTitles()); |
| 329 EXPECT_THAT( | 390 EXPECT_THAT( |
| 330 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), | 391 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), |
| 331 ElementsAre(Bucket(1, 1))); | 392 HasOneSample(1)); |
| 332 EXPECT_THAT(details->uma()->GetAllSamples( | 393 EXPECT_THAT(details->uma()->GetAllSamples( |
| 333 "SiteIsolation.CurrentRendererProcessCount"), | 394 "SiteIsolation.CurrentRendererProcessCount"), |
| 334 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 395 HasOneSample(GetRenderProcessCount())); |
| 335 EXPECT_THAT(details->uma()->GetAllSamples( | 396 EXPECT_THAT(details->uma()->GetAllSamples( |
| 336 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 397 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 337 ElementsAre(Bucket(1, 1))); | 398 HasOneSample(1)); |
| 338 EXPECT_THAT(details->uma()->GetAllSamples( | 399 EXPECT_THAT(details->uma()->GetAllSamples( |
| 339 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), | 400 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), |
| 340 ElementsAre(Bucket(7, 1))); | 401 HasOneSample(7)); |
| 341 EXPECT_THAT(details->uma()->GetAllSamples( | 402 EXPECT_THAT(details->uma()->GetAllSamples( |
| 342 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), | 403 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), |
| 343 ElementsAre(Bucket(7, 1))); | 404 HasOneSample(7)); |
| 344 EXPECT_THAT(details->uma()->GetAllSamples( | 405 EXPECT_THAT(details->uma()->GetAllSamples( |
| 345 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), | 406 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), |
| 346 ElementsAre(Bucket(7, 1))); | 407 HasOneSample(7)); |
| 347 EXPECT_THAT(details->uma()->GetAllSamples( | 408 EXPECT_THAT(details->uma()->GetAllSamples( |
| 348 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), | 409 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), |
| 349 ElementsAre(Bucket(1, 1))); | 410 HasOneSample(1)); |
| 350 EXPECT_THAT(details->uma()->GetAllSamples( | 411 EXPECT_THAT(details->uma()->GetAllSamples( |
| 351 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), | 412 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), |
| 352 ElementsAre(Bucket(1, 1))); | 413 HasOneSample(1)); |
| 353 EXPECT_THAT(details->uma()->GetAllSamples( | 414 EXPECT_THAT(details->uma()->GetAllSamples( |
| 354 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), | 415 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), |
| 355 ElementsAre(Bucket(1, 1))); | 416 HasOneSample(1)); |
| 356 EXPECT_THAT(details->uma()->GetAllSamples( | 417 EXPECT_THAT(details->uma()->GetAllSamples( |
| 357 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 418 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 358 ElementsAre(Bucket(1, 1))); | 419 HasOneSample(1)); |
| 359 EXPECT_THAT(details->uma()->GetAllSamples( | 420 EXPECT_THAT(details->uma()->GetAllSamples( |
| 360 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 421 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 361 ElementsAre(Bucket(1, 1))); | 422 HasOneSample(1)); |
| 362 EXPECT_THAT(details->uma()->GetAllSamples( | 423 EXPECT_THAT(details->uma()->GetAllSamples( |
| 363 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 424 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 364 ElementsAre(Bucket(1, 1))); | 425 HasOneSample(1)); |
| 365 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1)); | 426 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 7)); |
| 366 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(7)); | |
| 367 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 427 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 368 EqualsIfExtensionsIsolated(0)); | 428 DependingOnPolicy(0, 0, 11)); |
| 369 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | |
| 370 EqualsIfSitePerProcess(11)); | |
| 371 | 429 |
| 372 // Open a second tab (different BrowsingInstance) with 4 sites (a through d). | 430 // Open a second tab (different BrowsingInstance) with 4 sites (a through d). |
| 373 GURL abcd_url = embedded_test_server()->GetURL( | 431 GURL abcd_url = embedded_test_server()->GetURL( |
| 374 "a.com", "/cross_site_iframe_factory.html?a(b(c(d())))"); | 432 "a.com", "/cross_site_iframe_factory.html?a(b(c(d())))"); |
| 375 AddTabAtIndex(1, abcd_url, ui::PAGE_TRANSITION_TYPED); | 433 AddTabAtIndex(1, abcd_url, ui::PAGE_TRANSITION_TYPED); |
| 376 | 434 |
| 377 details = new TestMemoryDetails(); | 435 details = new TestMemoryDetails(); |
| 378 details->StartFetchAndWait(); | 436 details->StartFetchAndWait(); |
| 379 | 437 |
| 380 EXPECT_EQ(2U, details->CountPageTitles()); | 438 EXPECT_EQ(2U, details->CountPageTitles()); |
| 381 EXPECT_THAT( | 439 EXPECT_THAT( |
| 382 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), | 440 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), |
| 383 ElementsAre(Bucket(2, 1))); | 441 HasOneSample(2)); |
| 384 EXPECT_THAT(details->uma()->GetAllSamples( | 442 EXPECT_THAT(details->uma()->GetAllSamples( |
| 385 "SiteIsolation.CurrentRendererProcessCount"), | 443 "SiteIsolation.CurrentRendererProcessCount"), |
| 386 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 444 HasOneSample(GetRenderProcessCount())); |
| 387 EXPECT_THAT(details->uma()->GetAllSamples( | 445 EXPECT_THAT(details->uma()->GetAllSamples( |
| 388 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 446 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 389 ElementsAre(Bucket(2, 1))); | 447 HasOneSample(2)); |
| 390 EXPECT_THAT(details->uma()->GetAllSamples( | 448 EXPECT_THAT(details->uma()->GetAllSamples( |
| 391 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), | 449 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), |
| 392 ElementsAre(Bucket(11, 1))); | 450 HasOneSample(11)); |
| 393 EXPECT_THAT(details->uma()->GetAllSamples( | 451 EXPECT_THAT(details->uma()->GetAllSamples( |
| 394 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), | 452 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), |
| 395 ElementsAre(Bucket(11, 1))); | 453 HasOneSample(11)); |
| 396 EXPECT_THAT(details->uma()->GetAllSamples( | 454 EXPECT_THAT(details->uma()->GetAllSamples( |
| 397 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), | 455 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), |
| 398 ElementsAre(Bucket(11, 1))); | 456 HasOneSample(11)); |
| 399 EXPECT_THAT(details->uma()->GetAllSamples( | 457 EXPECT_THAT(details->uma()->GetAllSamples( |
| 400 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), | 458 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), |
| 401 ElementsAre(Bucket(2, 1))); | 459 HasOneSample(2)); |
| 402 EXPECT_THAT(details->uma()->GetAllSamples( | 460 EXPECT_THAT(details->uma()->GetAllSamples( |
| 403 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), | 461 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), |
| 404 ElementsAre(Bucket(1, 1))); // TODO(nick): This should be 2. | 462 HasOneSample(1)); // TODO(nick): This should be 2. |
| 405 EXPECT_THAT(details->uma()->GetAllSamples( | 463 EXPECT_THAT(details->uma()->GetAllSamples( |
| 406 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), | 464 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), |
| 407 ElementsAre(Bucket(2, 1))); | 465 HasOneSample(2)); |
| 408 EXPECT_THAT(details->uma()->GetAllSamples( | 466 EXPECT_THAT(details->uma()->GetAllSamples( |
| 409 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 467 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 410 ElementsAre(Bucket(2, 1))); | 468 HasOneSample(2)); |
| 411 EXPECT_THAT(details->uma()->GetAllSamples( | 469 EXPECT_THAT(details->uma()->GetAllSamples( |
| 412 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 470 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 413 ElementsAre(Bucket(1, 1))); | 471 HasOneSample(1)); |
| 414 EXPECT_THAT(details->uma()->GetAllSamples( | 472 EXPECT_THAT(details->uma()->GetAllSamples( |
| 415 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 473 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 416 ElementsAre(Bucket(2, 1))); | 474 HasOneSample(2)); |
| 417 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(2)); | 475 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(2, 2, 11)); |
| 418 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(11)); | |
| 419 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 476 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 420 EqualsIfExtensionsIsolated(0)); | 477 DependingOnPolicy(0, 0, 14)); |
| 421 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | |
| 422 EqualsIfSitePerProcess(14)); | |
| 423 | 478 |
| 424 // Open a third tab (different BrowsingInstance) with the same 4 sites. | 479 // Open a third tab (different BrowsingInstance) with the same 4 sites. |
| 425 AddTabAtIndex(2, abcd_url, ui::PAGE_TRANSITION_TYPED); | 480 AddTabAtIndex(2, abcd_url, ui::PAGE_TRANSITION_TYPED); |
| 426 | 481 |
| 427 details = new TestMemoryDetails(); | 482 details = new TestMemoryDetails(); |
| 428 details->StartFetchAndWait(); | 483 details->StartFetchAndWait(); |
| 429 | 484 |
| 430 EXPECT_THAT( | 485 EXPECT_THAT( |
| 431 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), | 486 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), |
| 432 ElementsAre(Bucket(3, 1))); | 487 HasOneSample(3)); |
| 433 EXPECT_THAT(details->uma()->GetAllSamples( | 488 EXPECT_THAT(details->uma()->GetAllSamples( |
| 434 "SiteIsolation.CurrentRendererProcessCount"), | 489 "SiteIsolation.CurrentRendererProcessCount"), |
| 435 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 490 HasOneSample(GetRenderProcessCount())); |
| 436 EXPECT_THAT(details->uma()->GetAllSamples( | 491 EXPECT_THAT(details->uma()->GetAllSamples( |
| 437 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 492 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 438 ElementsAre(Bucket(3, 1))); | 493 HasOneSample(3)); |
| 439 // Could be 11 if subframe processes were reused across BrowsingInstances. | 494 // Could be 11 if subframe processes were reused across BrowsingInstances. |
| 440 EXPECT_THAT(details->uma()->GetAllSamples( | 495 EXPECT_THAT(details->uma()->GetAllSamples( |
| 441 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), | 496 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), |
| 442 ElementsAre(Bucket(15, 1))); | 497 HasOneSample(15)); |
| 443 EXPECT_THAT(details->uma()->GetAllSamples( | 498 EXPECT_THAT(details->uma()->GetAllSamples( |
| 444 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), | 499 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), |
| 445 ElementsAre(Bucket(11, 1))); | 500 HasOneSample(11)); |
| 446 EXPECT_THAT(details->uma()->GetAllSamples( | 501 EXPECT_THAT(details->uma()->GetAllSamples( |
| 447 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), | 502 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), |
| 448 ElementsAre(Bucket(15, 1))); | 503 HasOneSample(15)); |
| 449 EXPECT_THAT(details->uma()->GetAllSamples( | 504 EXPECT_THAT(details->uma()->GetAllSamples( |
| 450 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), | 505 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), |
| 451 ElementsAre(Bucket(3, 1))); | 506 HasOneSample(3)); |
| 452 EXPECT_THAT(details->uma()->GetAllSamples( | 507 EXPECT_THAT(details->uma()->GetAllSamples( |
| 453 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), | 508 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), |
| 454 ElementsAre(Bucket(1, 1))); // TODO(nick): This should be 3. | 509 HasOneSample(1)); // TODO(nick): This should be 3. |
| 455 EXPECT_THAT(details->uma()->GetAllSamples( | 510 EXPECT_THAT(details->uma()->GetAllSamples( |
| 456 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), | 511 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), |
| 457 ElementsAre(Bucket(3, 1))); | 512 HasOneSample(3)); |
| 458 EXPECT_THAT(details->uma()->GetAllSamples( | 513 EXPECT_THAT(details->uma()->GetAllSamples( |
| 459 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 514 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 460 ElementsAre(Bucket(3, 1))); | 515 HasOneSample(3)); |
| 461 EXPECT_THAT(details->uma()->GetAllSamples( | 516 EXPECT_THAT(details->uma()->GetAllSamples( |
| 462 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 517 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 463 ElementsAre(Bucket(1, 1))); | 518 HasOneSample(1)); |
| 464 EXPECT_THAT(details->uma()->GetAllSamples( | 519 EXPECT_THAT(details->uma()->GetAllSamples( |
| 465 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 520 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 466 ElementsAre(Bucket(3, 1))); | 521 HasOneSample(3)); |
| 467 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); | 522 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 15)); |
| 468 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(15)); | |
| 469 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 523 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 470 EqualsIfExtensionsIsolated(0)); | 524 DependingOnPolicy(0, 0, 17)); |
| 471 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | |
| 472 EqualsIfSitePerProcess(17)); | |
| 473 | 525 |
| 474 // From the third tab, window.open() a fourth tab in the same | 526 // From the third tab, window.open() a fourth tab in the same |
| 475 // BrowsingInstance, to a page using the same four sites "a-d" as third tab, | 527 // BrowsingInstance, to a page using the same four sites "a-d" as third tab, |
| 476 // plus an additional site "e". The estimated process counts should increase | 528 // plus an additional site "e". The estimated process counts should increase |
| 477 // by one (not five) from the previous scenario, as the new tab can reuse the | 529 // by one (not five) from the previous scenario, as the new tab can reuse the |
| 478 // four processes already in the BrowsingInstance. | 530 // four processes already in the BrowsingInstance. |
| 479 GURL dcbae_url = embedded_test_server()->GetURL( | 531 GURL dcbae_url = embedded_test_server()->GetURL( |
| 480 "a.com", "/cross_site_iframe_factory.html?d(c(b(a(e))))"); | 532 "a.com", "/cross_site_iframe_factory.html?d(c(b(a(e))))"); |
| 481 ui_test_utils::UrlLoadObserver load_complete( | 533 ui_test_utils::UrlLoadObserver load_complete( |
| 482 dcbae_url, content::NotificationService::AllSources()); | 534 dcbae_url, content::NotificationService::AllSources()); |
| 483 ASSERT_EQ(3, browser()->tab_strip_model()->count()); | 535 ASSERT_EQ(3, browser()->tab_strip_model()->count()); |
| 484 ASSERT_TRUE(content::ExecuteScript( | 536 ASSERT_TRUE(content::ExecuteScript( |
| 485 browser()->tab_strip_model()->GetActiveWebContents(), | 537 browser()->tab_strip_model()->GetActiveWebContents(), |
| 486 "window.open('" + dcbae_url.spec() + "');")); | 538 "window.open('" + dcbae_url.spec() + "');")); |
| 487 ASSERT_EQ(4, browser()->tab_strip_model()->count()); | 539 ASSERT_EQ(4, browser()->tab_strip_model()->count()); |
| 488 load_complete.Wait(); | 540 load_complete.Wait(); |
| 489 | 541 |
| 490 details = new TestMemoryDetails(); | 542 details = new TestMemoryDetails(); |
| 491 details->StartFetchAndWait(); | 543 details->StartFetchAndWait(); |
| 492 | 544 |
| 493 EXPECT_THAT( | 545 EXPECT_THAT( |
| 494 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), | 546 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), |
| 495 ElementsAre(Bucket(3, 1))); | 547 HasOneSample(3)); |
| 496 EXPECT_THAT(details->uma()->GetAllSamples( | 548 EXPECT_THAT(details->uma()->GetAllSamples( |
| 497 "SiteIsolation.CurrentRendererProcessCount"), | 549 "SiteIsolation.CurrentRendererProcessCount"), |
| 498 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 550 HasOneSample(GetRenderProcessCount())); |
| 499 EXPECT_THAT(details->uma()->GetAllSamples( | 551 EXPECT_THAT(details->uma()->GetAllSamples( |
| 500 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 552 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 501 ElementsAre(Bucket(3, 1))); | 553 HasOneSample(3)); |
| 502 // Could be 11 if subframe processes were reused across BrowsingInstances. | 554 // Could be 11 if subframe processes were reused across BrowsingInstances. |
| 503 EXPECT_THAT(details->uma()->GetAllSamples( | 555 EXPECT_THAT(details->uma()->GetAllSamples( |
| 504 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), | 556 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), |
| 505 ElementsAre(Bucket(16, 1))); | 557 HasOneSample(16)); |
| 506 EXPECT_THAT(details->uma()->GetAllSamples( | 558 EXPECT_THAT(details->uma()->GetAllSamples( |
| 507 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), | 559 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), |
| 508 ElementsAre(Bucket(12, 1))); | 560 HasOneSample(12)); |
| 509 EXPECT_THAT(details->uma()->GetAllSamples( | 561 EXPECT_THAT(details->uma()->GetAllSamples( |
| 510 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), | 562 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), |
| 511 ElementsAre(Bucket(16, 1))); | 563 HasOneSample(16)); |
| 512 EXPECT_THAT(details->uma()->GetAllSamples( | 564 EXPECT_THAT(details->uma()->GetAllSamples( |
| 513 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), | 565 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), |
| 514 ElementsAre(Bucket(3, 1))); | 566 HasOneSample(3)); |
| 515 EXPECT_THAT(details->uma()->GetAllSamples( | 567 EXPECT_THAT(details->uma()->GetAllSamples( |
| 516 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), | 568 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), |
| 517 ElementsAre(Bucket(1, 1))); // TODO(nick): This should be 3. | 569 HasOneSample(1)); // TODO(nick): This should be 3. |
| 518 EXPECT_THAT(details->uma()->GetAllSamples( | 570 EXPECT_THAT(details->uma()->GetAllSamples( |
| 519 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), | 571 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), |
| 520 ElementsAre(Bucket(3, 1))); | 572 HasOneSample(3)); |
| 521 EXPECT_THAT(details->uma()->GetAllSamples( | 573 EXPECT_THAT(details->uma()->GetAllSamples( |
| 522 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 574 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 523 ElementsAre(Bucket(3, 1))); | 575 HasOneSample(3)); |
| 524 EXPECT_THAT(details->uma()->GetAllSamples( | 576 EXPECT_THAT(details->uma()->GetAllSamples( |
| 525 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 577 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 526 ElementsAre(Bucket(1, 1))); | 578 HasOneSample(1)); |
| 527 EXPECT_THAT(details->uma()->GetAllSamples( | 579 EXPECT_THAT(details->uma()->GetAllSamples( |
| 528 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 580 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 529 ElementsAre(Bucket(3, 1))); | 581 HasOneSample(3)); |
| 530 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); | 582 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 16)); |
| 531 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(16)); | |
| 532 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 583 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 533 EqualsIfExtensionsIsolated(0)); | 584 DependingOnPolicy(0, 0, 21)); |
| 534 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | |
| 535 EqualsIfSitePerProcess(21)); | |
| 536 | 585 |
| 537 // This test doesn't navigate to any extensions URLs, so it should not be | 586 // This test doesn't navigate to any extensions URLs, so it should not be |
| 538 // in any of the field trial groups. | 587 // in any of the field trial groups. |
| 539 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive")); | 588 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive")); |
| 540 } | 589 } |
| 541 | 590 |
| 542 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) { | 591 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, IsolateExtensions) { |
| 543 // We start on "about:blank", which should be credited with a process in this | 592 // We start on "about:blank", which should be credited with a process in this |
| 544 // case. | 593 // case. |
| 545 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); | 594 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); |
| 546 details->StartFetchAndWait(); | 595 details->StartFetchAndWait(); |
| 547 EXPECT_THAT(details->uma()->GetAllSamples( | 596 EXPECT_THAT(details->uma()->GetAllSamples( |
| 548 "SiteIsolation.CurrentRendererProcessCount"), | 597 "SiteIsolation.CurrentRendererProcessCount"), |
| 549 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 598 HasOneSample(GetRenderProcessCount())); |
| 550 EXPECT_THAT(details->uma()->GetAllSamples( | 599 EXPECT_THAT(details->uma()->GetAllSamples( |
| 551 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 600 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 552 ElementsAre(Bucket(1, 1))); | 601 HasOneSample(1)); |
| 553 EXPECT_THAT(details->uma()->GetAllSamples( | 602 EXPECT_THAT(details->uma()->GetAllSamples( |
| 554 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 603 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 555 ElementsAre(Bucket(1, 1))); | 604 HasOneSample(1)); |
| 556 EXPECT_THAT(details->uma()->GetAllSamples( | 605 EXPECT_THAT(details->uma()->GetAllSamples( |
| 557 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 606 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 558 ElementsAre(Bucket(1, 1))); | 607 HasOneSample(1)); |
| 559 EXPECT_THAT(details->uma()->GetAllSamples( | 608 EXPECT_THAT(details->uma()->GetAllSamples( |
| 560 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 609 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 561 ElementsAre(Bucket(1, 1))); | 610 HasOneSample(1)); |
| 562 EXPECT_THAT(GetRenderProcessCount(), 1); | 611 EXPECT_THAT(GetRenderProcessCount(), 1); |
| 563 EXPECT_EQ(0, details->GetOutOfProcessIframeCount()); | 612 EXPECT_EQ(0, details->GetOutOfProcessIframeCount()); |
| 564 | 613 |
| 565 // Install one script-injecting extension with background page, and an | 614 // Install one script-injecting extension with background page, and an |
| 566 // extension with web accessible resources. | 615 // extension with web accessible resources. |
| 567 const Extension* extension1 = CreateExtension("Extension One", true); | 616 const Extension* extension1 = CreateExtension("Extension One", true); |
| 568 const Extension* extension2 = CreateExtension("Extension Two", false); | 617 const Extension* extension2 = CreateExtension("Extension Two", false); |
| 569 | 618 |
| 570 // Open two a.com tabs (with cross site http iframes). IsolateExtensions mode | 619 // Open two a.com tabs (with cross site http iframes). IsolateExtensions mode |
| 571 // should have no effect so far, since there are no frames straddling the | 620 // should have no effect so far, since there are no frames straddling the |
| 572 // extension/web boundary. | 621 // extension/web boundary. |
| 573 GURL tab1_url = embedded_test_server()->GetURL( | 622 GURL tab1_url = embedded_test_server()->GetURL( |
| 574 "a.com", "/cross_site_iframe_factory.html?a(b,c)"); | 623 "a.com", "/cross_site_iframe_factory.html?a(b,c)"); |
| 575 ui_test_utils::NavigateToURL(browser(), tab1_url); | 624 ui_test_utils::NavigateToURL(browser(), tab1_url); |
| 576 WebContents* tab1 = browser()->tab_strip_model()->GetWebContentsAt(0); | 625 WebContents* tab1 = browser()->tab_strip_model()->GetWebContentsAt(0); |
| 577 GURL tab2_url = embedded_test_server()->GetURL( | 626 GURL tab2_url = embedded_test_server()->GetURL( |
| 578 "a.com", "/cross_site_iframe_factory.html?a(d,e)"); | 627 "a.com", "/cross_site_iframe_factory.html?a(d,e)"); |
| 579 AddTabAtIndex(1, tab2_url, ui::PAGE_TRANSITION_TYPED); | 628 AddTabAtIndex(1, tab2_url, ui::PAGE_TRANSITION_TYPED); |
| 580 WebContents* tab2 = browser()->tab_strip_model()->GetWebContentsAt(1); | 629 WebContents* tab2 = browser()->tab_strip_model()->GetWebContentsAt(1); |
| 581 | 630 |
| 582 details = new TestMemoryDetails(); | 631 details = new TestMemoryDetails(); |
| 583 details->StartFetchAndWait(); | 632 details->StartFetchAndWait(); |
| 584 EXPECT_THAT(details->uma()->GetAllSamples( | 633 EXPECT_THAT(details->uma()->GetAllSamples( |
| 585 "SiteIsolation.CurrentRendererProcessCount"), | 634 "SiteIsolation.CurrentRendererProcessCount"), |
| 586 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 635 HasOneSample(GetRenderProcessCount())); |
| 587 EXPECT_THAT(details->uma()->GetAllSamples( | 636 EXPECT_THAT(details->uma()->GetAllSamples( |
| 588 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 637 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 589 ElementsAre(Bucket(3, 1))); | 638 HasOneSample(3)); |
| 590 EXPECT_THAT(details->uma()->GetAllSamples( | 639 EXPECT_THAT(details->uma()->GetAllSamples( |
| 591 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 640 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 592 ElementsAre(Bucket(3, 1))); | 641 HasOneSample(3)); |
| 593 EXPECT_THAT(details->uma()->GetAllSamples( | 642 EXPECT_THAT(details->uma()->GetAllSamples( |
| 594 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 643 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 595 ElementsAre(Bucket(2, 1))); | 644 HasOneSample(2)); |
| 596 EXPECT_THAT(details->uma()->GetAllSamples( | 645 EXPECT_THAT(details->uma()->GetAllSamples( |
| 597 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 646 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 598 ElementsAre(Bucket(3, 1))); | 647 HasOneSample(3)); |
| 599 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); | 648 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 7)); |
| 600 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 649 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 601 EqualsIfExtensionsIsolated(0)); | 650 DependingOnPolicy(0, 0, 4)); |
| 602 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4)); | |
| 603 | 651 |
| 604 // Test that "one process per extension" applies even when web content has an | 652 // Test that "one process per extension" applies even when web content has an |
| 605 // extension iframe. | 653 // extension iframe. |
| 606 | 654 |
| 607 // Tab1 navigates its first iframe to a resource of extension1. This shouldn't | 655 // Tab1 navigates its first iframe to a resource of extension1. This shouldn't |
| 608 // result in a new extension process (it should share with extension1's | 656 // result in a new extension process (it should share with extension1's |
| 609 // background page). | 657 // background page). |
| 610 content::NavigateIframeToURL( | 658 content::NavigateIframeToURL( |
| 611 tab1, "child-0", extension1->GetResourceURL("/blank_iframe.html")); | 659 tab1, "child-0", extension1->GetResourceURL("/blank_iframe.html")); |
| 612 details = new TestMemoryDetails(); | 660 details = new TestMemoryDetails(); |
| 613 details->StartFetchAndWait(); | 661 details->StartFetchAndWait(); |
| 614 EXPECT_THAT(details->uma()->GetAllSamples( | 662 EXPECT_THAT(details->uma()->GetAllSamples( |
| 615 "SiteIsolation.CurrentRendererProcessCount"), | 663 "SiteIsolation.CurrentRendererProcessCount"), |
| 616 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 664 HasOneSample(GetRenderProcessCount())); |
| 617 EXPECT_THAT(details->uma()->GetAllSamples( | 665 EXPECT_THAT(details->uma()->GetAllSamples( |
| 618 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 666 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 619 ElementsAre(Bucket(3, 1))); | 667 HasOneSample(3)); |
| 620 EXPECT_THAT(details->uma()->GetAllSamples( | 668 EXPECT_THAT(details->uma()->GetAllSamples( |
| 621 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 669 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 622 ElementsAre(Bucket(3, 1))); | 670 HasOneSample(3)); |
| 623 EXPECT_THAT(details->uma()->GetAllSamples( | 671 EXPECT_THAT(details->uma()->GetAllSamples( |
| 624 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 672 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 625 ElementsAre(Bucket(2, 1))); | 673 HasOneSample(2)); |
| 626 EXPECT_THAT(details->uma()->GetAllSamples( | 674 EXPECT_THAT(details->uma()->GetAllSamples( |
| 627 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 675 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 628 ElementsAre(Bucket(3, 1))); | 676 HasOneSample(3)); |
| 629 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); | 677 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 6)); |
| 630 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 678 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 631 EqualsIfExtensionsIsolated(1)); | 679 DependingOnPolicy(0, 1, 4)); |
| 632 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4)); | |
| 633 | 680 |
| 634 // Tab2 navigates its first iframe to a resource of extension1. This also | 681 // Tab2 navigates its first iframe to a resource of extension1. This also |
| 635 // shouldn't result in a new extension process (it should share with the | 682 // shouldn't result in a new extension process (it should share with the |
| 636 // background page and the other iframe). | 683 // background page and the other iframe). |
| 637 content::NavigateIframeToURL( | 684 content::NavigateIframeToURL( |
| 638 tab2, "child-0", extension1->GetResourceURL("/blank_iframe.html")); | 685 tab2, "child-0", extension1->GetResourceURL("/blank_iframe.html")); |
| 639 details = new TestMemoryDetails(); | 686 details = new TestMemoryDetails(); |
| 640 details->StartFetchAndWait(); | 687 details->StartFetchAndWait(); |
| 641 EXPECT_THAT(details->uma()->GetAllSamples( | 688 EXPECT_THAT(details->uma()->GetAllSamples( |
| 642 "SiteIsolation.CurrentRendererProcessCount"), | 689 "SiteIsolation.CurrentRendererProcessCount"), |
| 643 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 690 HasOneSample(GetRenderProcessCount())); |
| 644 EXPECT_THAT(details->uma()->GetAllSamples( | 691 EXPECT_THAT(details->uma()->GetAllSamples( |
| 645 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 692 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 646 ElementsAre(Bucket(3, 1))); | 693 HasOneSample(3)); |
| 647 EXPECT_THAT(details->uma()->GetAllSamples( | 694 EXPECT_THAT(details->uma()->GetAllSamples( |
| 648 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 695 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 649 ElementsAre(Bucket(3, 1))); | 696 HasOneSample(3)); |
| 650 EXPECT_THAT(details->uma()->GetAllSamples( | 697 EXPECT_THAT(details->uma()->GetAllSamples( |
| 651 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 698 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 652 ElementsAre(Bucket(2, 1))); | 699 HasOneSample(2)); |
| 653 EXPECT_THAT(details->uma()->GetAllSamples( | 700 EXPECT_THAT(details->uma()->GetAllSamples( |
| 654 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 701 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 655 ElementsAre(Bucket(3, 1))); | 702 HasOneSample(3)); |
| 656 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); | 703 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 5)); |
| 657 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 704 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 658 EqualsIfExtensionsIsolated(2)); | 705 DependingOnPolicy(0, 2, 4)); |
| 659 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4)); | |
| 660 | 706 |
| 661 // Tab1 navigates its second iframe to a resource of extension2. This SHOULD | 707 // Tab1 navigates its second iframe to a resource of extension2. This SHOULD |
| 662 // result in a new process since extension2 had no existing process. | 708 // result in a new process since extension2 had no existing process. |
| 663 content::NavigateIframeToURL( | 709 content::NavigateIframeToURL( |
| 664 tab1, "child-1", extension2->GetResourceURL("/blank_iframe.html")); | 710 tab1, "child-1", extension2->GetResourceURL("/blank_iframe.html")); |
| 665 details = new TestMemoryDetails(); | 711 details = new TestMemoryDetails(); |
| 666 details->StartFetchAndWait(); | 712 details->StartFetchAndWait(); |
| 667 EXPECT_THAT(details->uma()->GetAllSamples( | 713 EXPECT_THAT(details->uma()->GetAllSamples( |
| 668 "SiteIsolation.CurrentRendererProcessCount"), | 714 "SiteIsolation.CurrentRendererProcessCount"), |
| 669 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 715 HasOneSample(GetRenderProcessCount())); |
| 670 EXPECT_THAT(details->uma()->GetAllSamples( | 716 EXPECT_THAT(details->uma()->GetAllSamples( |
| 671 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 717 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 672 ElementsAre(Bucket(3, 1))); | 718 HasOneSample(3)); |
| 673 EXPECT_THAT(details->uma()->GetAllSamples( | 719 EXPECT_THAT(details->uma()->GetAllSamples( |
| 674 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 720 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 675 ElementsAre(Bucket(4, 1))); | 721 HasOneSample(4)); |
| 676 EXPECT_THAT(details->uma()->GetAllSamples( | 722 EXPECT_THAT(details->uma()->GetAllSamples( |
| 677 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 723 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 678 ElementsAre(Bucket(3, 1))); | 724 HasOneSample(3)); |
| 679 EXPECT_THAT(details->uma()->GetAllSamples( | 725 EXPECT_THAT(details->uma()->GetAllSamples( |
| 680 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 726 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 681 ElementsAre(Bucket(4, 1))); | 727 HasOneSample(4)); |
| 682 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(4)); | 728 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 4, 5)); |
| 683 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 729 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 684 EqualsIfExtensionsIsolated(3)); | 730 DependingOnPolicy(0, 3, 4)); |
| 685 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4)); | |
| 686 | 731 |
| 687 // Tab2 navigates its second iframe to a resource of extension2. This should | 732 // Tab2 navigates its second iframe to a resource of extension2. This should |
| 688 // share the existing extension2 process. | 733 // share the existing extension2 process. |
| 689 content::NavigateIframeToURL( | 734 content::NavigateIframeToURL( |
| 690 tab2, "child-1", extension2->GetResourceURL("/blank_iframe.html")); | 735 tab2, "child-1", extension2->GetResourceURL("/blank_iframe.html")); |
| 691 details = new TestMemoryDetails(); | 736 details = new TestMemoryDetails(); |
| 692 details->StartFetchAndWait(); | 737 details->StartFetchAndWait(); |
| 693 EXPECT_THAT(details->uma()->GetAllSamples( | 738 EXPECT_THAT(details->uma()->GetAllSamples( |
| 694 "SiteIsolation.CurrentRendererProcessCount"), | 739 "SiteIsolation.CurrentRendererProcessCount"), |
| 695 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 740 HasOneSample(GetRenderProcessCount())); |
| 696 EXPECT_THAT(details->uma()->GetAllSamples( | 741 EXPECT_THAT(details->uma()->GetAllSamples( |
| 697 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 742 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 698 ElementsAre(Bucket(3, 1))); | 743 HasOneSample(3)); |
| 699 EXPECT_THAT(details->uma()->GetAllSamples( | 744 EXPECT_THAT(details->uma()->GetAllSamples( |
| 700 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 745 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 701 ElementsAre(Bucket(4, 1))); | 746 HasOneSample(4)); |
| 702 EXPECT_THAT(details->uma()->GetAllSamples( | 747 EXPECT_THAT(details->uma()->GetAllSamples( |
| 703 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 748 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 704 ElementsAre(Bucket(3, 1))); | 749 HasOneSample(3)); |
| 705 EXPECT_THAT(details->uma()->GetAllSamples( | 750 EXPECT_THAT(details->uma()->GetAllSamples( |
| 706 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 751 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 707 ElementsAre(Bucket(4, 1))); | 752 HasOneSample(4)); |
| 708 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(4)); | 753 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 4, 4)); |
| 709 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 754 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 710 EqualsIfExtensionsIsolated(4)); | 755 DependingOnPolicy(0, 4, 4)); |
| 711 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4)); | |
| 712 | 756 |
| 713 // Install extension3 (identical config to extension2) | 757 // Install extension3 (identical config to extension2) |
| 714 const Extension* extension3 = CreateExtension("Extension Three", false); | 758 const Extension* extension3 = CreateExtension("Extension Three", false); |
| 715 | 759 |
| 716 // Navigate Tab2 to a top-level page from extension3. There are four processes | 760 // Navigate Tab2 to a top-level page from extension3. There are four processes |
| 717 // now: one for tab1's main frame, and one for each of the extensions: | 761 // now: one for tab1's main frame, and one for each of the extensions: |
| 718 // extension1 has a process because it has a background page; extension2 is | 762 // extension1 has a process because it has a background page; extension2 is |
| 719 // used as an iframe in tab1, and extension3 is the top-level frame in tab2. | 763 // used as an iframe in tab1, and extension3 is the top-level frame in tab2. |
| 720 ui_test_utils::NavigateToURL(browser(), | 764 ui_test_utils::NavigateToURL(browser(), |
| 721 extension3->GetResourceURL("blank_iframe.html")); | 765 extension3->GetResourceURL("blank_iframe.html")); |
| 722 details = new TestMemoryDetails(); | 766 details = new TestMemoryDetails(); |
| 723 details->StartFetchAndWait(); | 767 details->StartFetchAndWait(); |
| 724 EXPECT_THAT(details->uma()->GetAllSamples( | 768 EXPECT_THAT(details->uma()->GetAllSamples( |
| 725 "SiteIsolation.CurrentRendererProcessCount"), | 769 "SiteIsolation.CurrentRendererProcessCount"), |
| 726 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 770 HasOneSample(GetRenderProcessCount())); |
| 727 EXPECT_THAT(details->uma()->GetAllSamples( | 771 EXPECT_THAT(details->uma()->GetAllSamples( |
| 728 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 772 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 729 ElementsAre(Bucket(3, 1))); | 773 HasOneSample(3)); |
| 730 EXPECT_THAT(details->uma()->GetAllSamples( | 774 EXPECT_THAT(details->uma()->GetAllSamples( |
| 731 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 775 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 732 ElementsAre(Bucket(4, 1))); | 776 HasOneSample(4)); |
| 733 EXPECT_THAT(details->uma()->GetAllSamples( | 777 EXPECT_THAT(details->uma()->GetAllSamples( |
| 734 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 778 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 735 ElementsAre(Bucket(4, 1))); | 779 HasOneSample(4)); |
| 736 EXPECT_THAT(details->uma()->GetAllSamples( | 780 EXPECT_THAT(details->uma()->GetAllSamples( |
| 737 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 781 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 738 ElementsAre(Bucket(4, 1))); | 782 HasOneSample(4)); |
| 739 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(4)); | 783 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 4, 4)); |
| 740 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 784 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 741 EqualsIfExtensionsIsolated(2)); | 785 DependingOnPolicy(0, 2, 2)); |
| 742 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(2)); | |
| 743 | 786 |
| 744 // Navigate tab2 to a different extension3 page containing a web iframe. The | 787 // Navigate tab2 to a different extension3 page containing a web iframe. The |
| 745 // iframe should get its own process. The lower bound number indicates that, | 788 // iframe should get its own process. The lower bound number indicates that, |
| 746 // in theory, the iframe could share a process with tab1's main frame. | 789 // in theory, the iframe could share a process with tab1's main frame. |
| 747 ui_test_utils::NavigateToURL(browser(), | 790 ui_test_utils::NavigateToURL(browser(), |
| 748 extension3->GetResourceURL("http_iframe.html")); | 791 extension3->GetResourceURL("http_iframe.html")); |
| 749 details = new TestMemoryDetails(); | 792 details = new TestMemoryDetails(); |
| 750 details->StartFetchAndWait(); | 793 details->StartFetchAndWait(); |
| 751 EXPECT_THAT(details->uma()->GetAllSamples( | 794 EXPECT_THAT(details->uma()->GetAllSamples( |
| 752 "SiteIsolation.CurrentRendererProcessCount"), | 795 "SiteIsolation.CurrentRendererProcessCount"), |
| 753 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 796 HasOneSample(GetRenderProcessCount())); |
| 754 EXPECT_THAT(details->uma()->GetAllSamples( | 797 EXPECT_THAT(details->uma()->GetAllSamples( |
| 755 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 798 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 756 ElementsAre(Bucket(3, 1))); | 799 HasOneSample(3)); |
| 757 EXPECT_THAT(details->uma()->GetAllSamples( | 800 EXPECT_THAT(details->uma()->GetAllSamples( |
| 758 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 801 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 759 ElementsAre(Bucket(5, 1))); | 802 HasOneSample(5)); |
| 760 EXPECT_THAT(details->uma()->GetAllSamples( | 803 EXPECT_THAT(details->uma()->GetAllSamples( |
| 761 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 804 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 762 ElementsAre(Bucket(4, 1))); | 805 HasOneSample(4)); |
| 763 EXPECT_THAT(details->uma()->GetAllSamples( | 806 EXPECT_THAT(details->uma()->GetAllSamples( |
| 764 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 807 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 765 ElementsAre(Bucket(5, 1))); | 808 HasOneSample(5)); |
| 766 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(5)); | 809 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 5, 5)); |
| 767 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 810 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 768 EqualsIfExtensionsIsolated(3)); | 811 DependingOnPolicy(0, 3, 3)); |
| 769 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(3)); | |
| 770 | 812 |
| 771 // Navigate tab1 to an extension3 page with an extension3 iframe. There should | 813 // Navigate tab1 to an extension3 page with an extension3 iframe. There should |
| 772 // be three processes estimated by IsolateExtensions: one for extension3, one | 814 // be three processes estimated by IsolateExtensions: one for extension3, one |
| 773 // for extension1's background page, and one for the web iframe in tab2. | 815 // for extension1's background page, and one for the web iframe in tab2. |
| 774 browser()->tab_strip_model()->ActivateTabAt(0, true); | 816 browser()->tab_strip_model()->ActivateTabAt(0, true); |
| 775 ui_test_utils::NavigateToURL(browser(), | 817 ui_test_utils::NavigateToURL(browser(), |
| 776 extension3->GetResourceURL("blank_iframe.html")); | 818 extension3->GetResourceURL("blank_iframe.html")); |
| 777 details = new TestMemoryDetails(); | 819 details = new TestMemoryDetails(); |
| 778 details->StartFetchAndWait(); | 820 details->StartFetchAndWait(); |
| 779 EXPECT_THAT(details->uma()->GetAllSamples( | 821 EXPECT_THAT(details->uma()->GetAllSamples( |
| 780 "SiteIsolation.CurrentRendererProcessCount"), | 822 "SiteIsolation.CurrentRendererProcessCount"), |
| 781 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 823 HasOneSample(GetRenderProcessCount())); |
| 782 EXPECT_THAT(details->uma()->GetAllSamples( | 824 EXPECT_THAT(details->uma()->GetAllSamples( |
| 783 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 825 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 784 ElementsAre(Bucket(2, 1))); | 826 HasOneSample(2)); |
| 785 EXPECT_THAT(details->uma()->GetAllSamples( | 827 EXPECT_THAT(details->uma()->GetAllSamples( |
| 786 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 828 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 787 ElementsAre(Bucket(3, 1))); | 829 HasOneSample(3)); |
| 788 EXPECT_THAT(details->uma()->GetAllSamples( | 830 EXPECT_THAT(details->uma()->GetAllSamples( |
| 789 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 831 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 790 ElementsAre(Bucket(3, 1))); | 832 HasOneSample(3)); |
| 791 EXPECT_THAT(details->uma()->GetAllSamples( | 833 EXPECT_THAT(details->uma()->GetAllSamples( |
| 792 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 834 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 793 ElementsAre(Bucket(3, 1))); | 835 HasOneSample(3)); |
| 794 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); | 836 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(2, 3, 3)); |
| 795 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 837 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 796 EqualsIfExtensionsIsolated(1)); | 838 DependingOnPolicy(0, 1, 1)); |
| 797 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1)); | |
| 798 | 839 |
| 799 // Now navigate tab1 to an extension3 page with a web iframe. This could share | 840 // Now navigate tab1 to an extension3 page with a web iframe. This could share |
| 800 // a process with tab2's iframe (the LowerBound number), or it could get its | 841 // a process with tab2's iframe (the LowerBound number), or it could get its |
| 801 // own process (the Estimate number). | 842 // own process (the Estimate number). |
| 802 ui_test_utils::NavigateToURL(browser(), | 843 ui_test_utils::NavigateToURL(browser(), |
| 803 extension3->GetResourceURL("http_iframe.html")); | 844 extension3->GetResourceURL("http_iframe.html")); |
| 804 details = new TestMemoryDetails(); | 845 details = new TestMemoryDetails(); |
| 805 details->StartFetchAndWait(); | 846 details->StartFetchAndWait(); |
| 806 EXPECT_THAT(details->uma()->GetAllSamples( | 847 EXPECT_THAT(details->uma()->GetAllSamples( |
| 807 "SiteIsolation.CurrentRendererProcessCount"), | 848 "SiteIsolation.CurrentRendererProcessCount"), |
| 808 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 849 HasOneSample(GetRenderProcessCount())); |
| 809 EXPECT_THAT(details->uma()->GetAllSamples( | 850 EXPECT_THAT(details->uma()->GetAllSamples( |
| 810 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 851 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 811 ElementsAre(Bucket(2, 1))); | 852 HasOneSample(2)); |
| 812 EXPECT_THAT(details->uma()->GetAllSamples( | 853 EXPECT_THAT(details->uma()->GetAllSamples( |
| 813 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 854 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 814 ElementsAre(Bucket(4, 1))); | 855 HasOneSample(4)); |
| 815 EXPECT_THAT(details->uma()->GetAllSamples( | 856 EXPECT_THAT(details->uma()->GetAllSamples( |
| 816 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 857 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 817 ElementsAre(Bucket(3, 1))); | 858 HasOneSample(3)); |
| 818 EXPECT_THAT(details->uma()->GetAllSamples( | 859 EXPECT_THAT(details->uma()->GetAllSamples( |
| 819 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 860 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 820 ElementsAre(Bucket(4, 1))); | 861 HasOneSample(4)); |
| 821 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(4)); | 862 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(2, 4, 4)); |
| 822 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 863 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 823 EqualsIfExtensionsIsolated(2)); | 864 DependingOnPolicy(0, 2, 2)); |
| 824 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(2)); | |
| 825 | 865 |
| 826 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive")); | 866 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive")); |
| 827 } | 867 } |
| 828 | 868 |
| 829 // Exercises accounting in the case where an extension has two different-site | 869 // Exercises accounting in the case where an extension has two different-site |
| 830 // web iframes. | 870 // web iframes. |
| 831 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, ExtensionWithTwoWebIframes) { | 871 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, ExtensionWithTwoWebIframes) { |
| 832 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); | 872 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); |
| 833 details->StartFetchAndWait(); | 873 details->StartFetchAndWait(); |
| 834 | 874 |
| 835 // Install one script-injecting extension with background page, and an | 875 // Install one script-injecting extension with background page, and an |
| 836 // extension with web accessible resources. | 876 // extension with web accessible resources. |
| 837 const Extension* extension = CreateExtension("Test Extension", false); | 877 const Extension* extension = CreateExtension("Test Extension", false); |
| 838 | 878 |
| 839 ui_test_utils::NavigateToURL( | 879 ui_test_utils::NavigateToURL( |
| 840 browser(), extension->GetResourceURL("/two_http_iframes.html")); | 880 browser(), extension->GetResourceURL("/two_http_iframes.html")); |
| 841 | 881 |
| 842 details = new TestMemoryDetails(); | 882 details = new TestMemoryDetails(); |
| 843 details->StartFetchAndWait(); | 883 details->StartFetchAndWait(); |
| 844 EXPECT_THAT(details->uma()->GetAllSamples( | 884 EXPECT_THAT(details->uma()->GetAllSamples( |
| 845 "SiteIsolation.CurrentRendererProcessCount"), | 885 "SiteIsolation.CurrentRendererProcessCount"), |
| 846 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 886 HasOneSample(GetRenderProcessCount())); |
| 847 EXPECT_THAT(details->uma()->GetAllSamples( | 887 EXPECT_THAT(details->uma()->GetAllSamples( |
| 848 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 888 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 849 ElementsAre(Bucket(1, 1))); | 889 HasOneSample(1)); |
| 850 EXPECT_THAT(details->uma()->GetAllSamples( | 890 EXPECT_THAT(details->uma()->GetAllSamples( |
| 851 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 891 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 852 ElementsAre(Bucket(2, 1))); | 892 HasOneSample(2)); |
| 853 EXPECT_THAT(details->uma()->GetAllSamples( | 893 EXPECT_THAT(details->uma()->GetAllSamples( |
| 854 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 894 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 855 ElementsAre(Bucket(2, 1))); | 895 HasOneSample(2)); |
| 856 EXPECT_THAT(details->uma()->GetAllSamples( | 896 EXPECT_THAT(details->uma()->GetAllSamples( |
| 857 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 897 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 858 ElementsAre(Bucket(2, 1))); | 898 HasOneSample(2)); |
| 859 // TODO(nick): https://crbug.com/512560 Make the number below agree with the | 899 // TODO(nick): https://crbug.com/512560 Make the number below agree with the |
| 860 // estimates above, which assume consolidation of subframe processes. | 900 // estimates above, which assume consolidation of subframe processes. |
| 861 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); | 901 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 3, 3)); |
| 862 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 902 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 863 EqualsIfExtensionsIsolated(2)); | 903 DependingOnPolicy(0, 2, 2)); |
| 864 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(2)); | |
| 865 | 904 |
| 866 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive")); | 905 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive")); |
| 867 } | 906 } |
| 868 | 907 |
| 869 // Verifies that --isolate-extensions doesn't isolate hosted apps. | 908 // Verifies that --isolate-extensions doesn't isolate hosted apps. |
| 870 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensionsHostedApps) { | 909 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, IsolateExtensionsHostedApps) { |
| 871 GURL app_with_web_iframe_url = embedded_test_server()->GetURL( | 910 GURL app_with_web_iframe_url = embedded_test_server()->GetURL( |
| 872 "app.org", "/cross_site_iframe_factory.html?app.org(b.com)"); | 911 "app.org", "/cross_site_iframe_factory.html?app.org(b.com)"); |
| 873 GURL app_in_web_iframe_url = embedded_test_server()->GetURL( | 912 GURL app_in_web_iframe_url = embedded_test_server()->GetURL( |
| 874 "b.com", "/cross_site_iframe_factory.html?b.com(app.org)"); | 913 "b.com", "/cross_site_iframe_factory.html?b.com(app.org)"); |
| 875 | 914 |
| 876 // No hosted app is installed: app.org just behaves like a normal domain. | 915 // No hosted app is installed: app.org just behaves like a normal domain. |
| 877 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url); | 916 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url); |
| 878 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); | 917 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); |
| 879 details->StartFetchAndWait(); | 918 details->StartFetchAndWait(); |
| 880 EXPECT_THAT(details->uma()->GetAllSamples( | 919 EXPECT_THAT(details->uma()->GetAllSamples( |
| 881 "SiteIsolation.CurrentRendererProcessCount"), | 920 "SiteIsolation.CurrentRendererProcessCount"), |
| 882 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 921 HasOneSample(GetRenderProcessCount())); |
| 883 EXPECT_THAT(details->uma()->GetAllSamples( | 922 EXPECT_THAT(details->uma()->GetAllSamples( |
| 884 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 923 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 885 ElementsAre(Bucket(1, 1))); | 924 HasOneSample(1)); |
| 886 EXPECT_THAT(details->uma()->GetAllSamples( | 925 EXPECT_THAT(details->uma()->GetAllSamples( |
| 887 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 926 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 888 ElementsAre(Bucket(1, 1))); | 927 HasOneSample(1)); |
| 889 EXPECT_THAT(details->uma()->GetAllSamples( | 928 EXPECT_THAT(details->uma()->GetAllSamples( |
| 890 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 929 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 891 ElementsAre(Bucket(1, 1))); | 930 HasOneSample(1)); |
| 892 EXPECT_THAT(details->uma()->GetAllSamples( | 931 EXPECT_THAT(details->uma()->GetAllSamples( |
| 893 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 932 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 894 ElementsAre(Bucket(1, 1))); | 933 HasOneSample(1)); |
| 895 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1)); | 934 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); |
| 896 EXPECT_THAT(details->uma()->GetAllSamples( | 935 EXPECT_THAT(details->uma()->GetAllSamples( |
| 897 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), | 936 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), |
| 898 ElementsAre(Bucket(2, 1))); | 937 HasOneSample(2)); |
| 899 EXPECT_THAT(details->uma()->GetAllSamples( | 938 EXPECT_THAT(details->uma()->GetAllSamples( |
| 900 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), | 939 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), |
| 901 ElementsAre(Bucket(2, 1))); | 940 HasOneSample(2)); |
| 902 EXPECT_THAT(details->uma()->GetAllSamples( | 941 EXPECT_THAT(details->uma()->GetAllSamples( |
| 903 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), | 942 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), |
| 904 ElementsAre(Bucket(2, 1))); | 943 HasOneSample(2)); |
| 905 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(2)); | 944 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); |
| 906 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 945 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 907 EqualsIfExtensionsIsolated(0)); | 946 DependingOnPolicy(0, 0, 1)); |
| 908 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1)); | |
| 909 | 947 |
| 910 ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url); | 948 ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url); |
| 911 details = new TestMemoryDetails(); | 949 details = new TestMemoryDetails(); |
| 912 details->StartFetchAndWait(); | 950 details->StartFetchAndWait(); |
| 913 EXPECT_THAT(details->uma()->GetAllSamples( | 951 EXPECT_THAT(details->uma()->GetAllSamples( |
| 914 "SiteIsolation.CurrentRendererProcessCount"), | 952 "SiteIsolation.CurrentRendererProcessCount"), |
| 915 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 953 HasOneSample(GetRenderProcessCount())); |
| 916 EXPECT_THAT(details->uma()->GetAllSamples( | 954 EXPECT_THAT(details->uma()->GetAllSamples( |
| 917 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 955 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 918 ElementsAre(Bucket(1, 1))); | 956 HasOneSample(1)); |
| 919 EXPECT_THAT(details->uma()->GetAllSamples( | 957 EXPECT_THAT(details->uma()->GetAllSamples( |
| 920 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 958 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 921 ElementsAre(Bucket(1, 1))); | 959 HasOneSample(1)); |
| 922 EXPECT_THAT(details->uma()->GetAllSamples( | 960 EXPECT_THAT(details->uma()->GetAllSamples( |
| 923 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 961 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 924 ElementsAre(Bucket(1, 1))); | 962 HasOneSample(1)); |
| 925 EXPECT_THAT(details->uma()->GetAllSamples( | 963 EXPECT_THAT(details->uma()->GetAllSamples( |
| 926 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 964 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 927 ElementsAre(Bucket(1, 1))); | 965 HasOneSample(1)); |
| 928 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1)); | 966 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); |
| 929 EXPECT_THAT(details->uma()->GetAllSamples( | 967 EXPECT_THAT(details->uma()->GetAllSamples( |
| 930 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), | 968 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), |
| 931 ElementsAre(Bucket(2, 1))); | 969 HasOneSample(2)); |
| 932 EXPECT_THAT(details->uma()->GetAllSamples( | 970 EXPECT_THAT(details->uma()->GetAllSamples( |
| 933 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), | 971 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), |
| 934 ElementsAre(Bucket(2, 1))); | 972 HasOneSample(2)); |
| 935 EXPECT_THAT(details->uma()->GetAllSamples( | 973 EXPECT_THAT(details->uma()->GetAllSamples( |
| 936 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), | 974 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), |
| 937 ElementsAre(Bucket(2, 1))); | 975 HasOneSample(2)); |
| 938 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(2)); | 976 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); |
| 939 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 977 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 940 EqualsIfExtensionsIsolated(0)); | 978 DependingOnPolicy(0, 0, 1)); |
| 941 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1)); | |
| 942 | 979 |
| 943 // Now install app.org as a hosted app. | 980 // Now install app.org as a hosted app. |
| 944 CreateHostedApp("App", GURL("http://app.org")); | 981 CreateHostedApp("App", GURL("http://app.org")); |
| 945 | 982 |
| 946 // Reload the same two pages, and verify that the hosted app still is not | 983 // Reload the same two pages, and verify that the hosted app still is not |
| 947 // isolated by --isolate-extensions, but is isolated by --site-per-process. | 984 // isolated by --isolate-extensions, but is isolated by --site-per-process. |
| 948 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url); | 985 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url); |
| 949 details = new TestMemoryDetails(); | 986 details = new TestMemoryDetails(); |
| 950 details->StartFetchAndWait(); | 987 details->StartFetchAndWait(); |
| 951 EXPECT_THAT(details->uma()->GetAllSamples( | 988 EXPECT_THAT(details->uma()->GetAllSamples( |
| 952 "SiteIsolation.CurrentRendererProcessCount"), | 989 "SiteIsolation.CurrentRendererProcessCount"), |
| 953 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 990 HasOneSample(GetRenderProcessCount())); |
| 954 EXPECT_THAT(details->uma()->GetAllSamples( | 991 EXPECT_THAT(details->uma()->GetAllSamples( |
| 955 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 992 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 956 ElementsAre(Bucket(1, 1))); | 993 HasOneSample(1)); |
| 957 EXPECT_THAT(details->uma()->GetAllSamples( | 994 EXPECT_THAT(details->uma()->GetAllSamples( |
| 958 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 995 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 959 ElementsAre(Bucket(1, 1))); | 996 HasOneSample(1)); |
| 960 EXPECT_THAT(details->uma()->GetAllSamples( | 997 EXPECT_THAT(details->uma()->GetAllSamples( |
| 961 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 998 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 962 ElementsAre(Bucket(1, 1))); | 999 HasOneSample(1)); |
| 963 EXPECT_THAT(details->uma()->GetAllSamples( | 1000 EXPECT_THAT(details->uma()->GetAllSamples( |
| 964 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 1001 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 965 ElementsAre(Bucket(1, 1))); | 1002 HasOneSample(1)); |
| 966 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1)); | 1003 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); |
| 967 EXPECT_THAT(details->uma()->GetAllSamples( | 1004 EXPECT_THAT(details->uma()->GetAllSamples( |
| 968 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), | 1005 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), |
| 969 ElementsAre(Bucket(2, 1))); | 1006 HasOneSample(2)); |
| 970 EXPECT_THAT(details->uma()->GetAllSamples( | 1007 EXPECT_THAT(details->uma()->GetAllSamples( |
| 971 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), | 1008 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), |
| 972 ElementsAre(Bucket(2, 1))); | 1009 HasOneSample(2)); |
| 973 EXPECT_THAT(details->uma()->GetAllSamples( | 1010 EXPECT_THAT(details->uma()->GetAllSamples( |
| 974 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), | 1011 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), |
| 975 ElementsAre(Bucket(2, 1))); | 1012 HasOneSample(2)); |
| 976 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(2)); | 1013 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); |
| 977 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 1014 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 978 EqualsIfExtensionsIsolated(0)); | 1015 DependingOnPolicy(0, 0, 1)); |
| 979 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1)); | |
| 980 | 1016 |
| 981 ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url); | 1017 ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url); |
| 982 details = new TestMemoryDetails(); | 1018 details = new TestMemoryDetails(); |
| 983 details->StartFetchAndWait(); | 1019 details->StartFetchAndWait(); |
| 984 EXPECT_THAT(details->uma()->GetAllSamples( | 1020 EXPECT_THAT(details->uma()->GetAllSamples( |
| 985 "SiteIsolation.CurrentRendererProcessCount"), | 1021 "SiteIsolation.CurrentRendererProcessCount"), |
| 986 ElementsAre(Bucket(GetRenderProcessCount(), 1))); | 1022 HasOneSample(GetRenderProcessCount())); |
| 987 EXPECT_THAT(details->uma()->GetAllSamples( | 1023 EXPECT_THAT(details->uma()->GetAllSamples( |
| 988 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 1024 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
| 989 ElementsAre(Bucket(1, 1))); | 1025 HasOneSample(1)); |
| 990 EXPECT_THAT(details->uma()->GetAllSamples( | 1026 EXPECT_THAT(details->uma()->GetAllSamples( |
| 991 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), | 1027 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), |
| 992 ElementsAre(Bucket(1, 1))); | 1028 HasOneSample(1)); |
| 993 EXPECT_THAT(details->uma()->GetAllSamples( | 1029 EXPECT_THAT(details->uma()->GetAllSamples( |
| 994 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), | 1030 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), |
| 995 ElementsAre(Bucket(1, 1))); | 1031 HasOneSample(1)); |
| 996 EXPECT_THAT(details->uma()->GetAllSamples( | 1032 EXPECT_THAT(details->uma()->GetAllSamples( |
| 997 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), | 1033 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), |
| 998 ElementsAre(Bucket(1, 1))); | 1034 HasOneSample(1)); |
| 999 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1)); | 1035 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); |
| 1000 EXPECT_THAT(details->uma()->GetAllSamples( | 1036 EXPECT_THAT(details->uma()->GetAllSamples( |
| 1001 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), | 1037 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), |
| 1002 ElementsAre(Bucket(2, 1))); | 1038 HasOneSample(2)); |
| 1003 EXPECT_THAT(details->uma()->GetAllSamples( | 1039 EXPECT_THAT(details->uma()->GetAllSamples( |
| 1004 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), | 1040 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), |
| 1005 ElementsAre(Bucket(2, 1))); | 1041 HasOneSample(2)); |
| 1006 EXPECT_THAT(details->uma()->GetAllSamples( | 1042 EXPECT_THAT(details->uma()->GetAllSamples( |
| 1007 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), | 1043 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), |
| 1008 ElementsAre(Bucket(2, 1))); | 1044 HasOneSample(2)); |
| 1009 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(2)); | 1045 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); |
| 1010 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 1046 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
| 1011 EqualsIfExtensionsIsolated(0)); | 1047 DependingOnPolicy(0, 0, 1)); |
| 1012 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1)); | |
| 1013 | 1048 |
| 1014 // Since hosted apps are excluded from isolation, this test should not be | 1049 // Since hosted apps are excluded from isolation, this test should not be |
| 1015 // in any of the field trial groups. | 1050 // in any of the field trial groups. |
| 1016 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive")); | 1051 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive")); |
| 1017 } | 1052 } |
| 1018 | 1053 |
| 1019 // Verifies that the client is put in the appropriate field trial group. | 1054 // Verifies that the client is put in the appropriate field trial group. |
| 1020 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, VerifyFieldTrialGroup) { | 1055 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, VerifyFieldTrialGroup) { |
| 1021 const Extension* extension = CreateExtension("Extension", false); | 1056 const Extension* extension = CreateExtension("Extension", false); |
| 1022 GURL tab1_url = embedded_test_server()->GetURL( | 1057 GURL tab1_url = embedded_test_server()->GetURL( |
| 1023 "a.com", "/cross_site_iframe_factory.html?a(b,c)"); | 1058 "a.com", "/cross_site_iframe_factory.html?a(b,c)"); |
| 1024 ui_test_utils::NavigateToURL(browser(), tab1_url); | 1059 ui_test_utils::NavigateToURL(browser(), tab1_url); |
| 1025 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0); | 1060 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0); |
| 1026 | 1061 |
| 1027 // Tab navigates its second iframe to a page of the extension. | 1062 // Tab navigates its second iframe to a page of the extension. |
| 1028 content::NavigateIframeToURL(tab, "child-1", | 1063 content::NavigateIframeToURL(tab, "child-1", |
| 1029 extension->GetResourceURL("/blank_iframe.html")); | 1064 extension->GetResourceURL("/blank_iframe.html")); |
| 1030 | 1065 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1041 } | 1076 } |
| 1042 } else { | 1077 } else { |
| 1043 group = "Default"; | 1078 group = "Default"; |
| 1044 } | 1079 } |
| 1045 | 1080 |
| 1046 EXPECT_TRUE(IsInTrialGroup("SiteIsolationExtensionsActive", group)); | 1081 EXPECT_TRUE(IsInTrialGroup("SiteIsolationExtensionsActive", group)); |
| 1047 } | 1082 } |
| 1048 | 1083 |
| 1049 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is | 1084 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is |
| 1050 // correct when using tabs with web pages. | 1085 // correct when using tabs with web pages. |
| 1051 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, | 1086 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, |
| 1052 VerifySiteInstanceCountInBrowsingInstance) { | 1087 VerifySiteInstanceCountInBrowsingInstance) { |
| 1053 // Page with 14 nested oopifs across 9 sites (a.com through i.com). | 1088 // Page with 14 nested oopifs across 9 sites (a.com through i.com). |
| 1054 GURL abcdefghi_url = embedded_test_server()->GetURL( | 1089 GURL abcdefghi_url = embedded_test_server()->GetURL( |
| 1055 "a.com", | 1090 "a.com", |
| 1056 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))"); | 1091 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))"); |
| 1057 ui_test_utils::NavigateToURL(browser(), abcdefghi_url); | 1092 ui_test_utils::NavigateToURL(browser(), abcdefghi_url); |
| 1058 | 1093 |
| 1059 // Get the metrics. | 1094 // Get the metrics. |
| 1060 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); | 1095 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); |
| 1061 details->StartFetchAndWait(); | 1096 details->StartFetchAndWait(); |
| 1062 if (content::AreAllSitesIsolatedForTesting()) { | 1097 |
| 1063 EXPECT_THAT(details->uma()->GetAllSamples( | 1098 // Since there are no extensions involved, the results in the default case |
| 1064 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | 1099 // and extensions::IsIsolateExtensionsEnabled() are the same. |
| 1065 ElementsAre(Bucket(9, 1))); | 1100 EXPECT_THAT(details->uma()->GetAllSamples( |
| 1066 } else { | 1101 "SiteIsolation.SiteInstancesPerBrowsingInstance"), |
| 1067 // Since there are no extensions involved, the results in the default case | 1102 HasOneSample(DependingOnPolicy(1, 1, 9))); |
| 1068 // and extensions::IsIsolateExtensionsEnabled() are the same. | |
| 1069 EXPECT_THAT(details->uma()->GetAllSamples( | |
| 1070 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | |
| 1071 ElementsAre(Bucket(1, 1))); | |
| 1072 } | |
| 1073 | 1103 |
| 1074 // Open another tab through window.open(), which will be in the same | 1104 // Open another tab through window.open(), which will be in the same |
| 1075 // BrowsingInstance. | 1105 // BrowsingInstance. |
| 1076 GURL dcbae_url = embedded_test_server()->GetURL( | 1106 GURL dcbae_url = embedded_test_server()->GetURL( |
| 1077 "a.com", "/cross_site_iframe_factory.html?d(c(b(j(k))))"); | 1107 "a.com", "/cross_site_iframe_factory.html?d(c(b(j(k))))"); |
| 1078 ui_test_utils::UrlLoadObserver load_complete( | 1108 ui_test_utils::UrlLoadObserver load_complete( |
| 1079 dcbae_url, content::NotificationService::AllSources()); | 1109 dcbae_url, content::NotificationService::AllSources()); |
| 1080 ASSERT_EQ(1, browser()->tab_strip_model()->count()); | 1110 ASSERT_EQ(1, browser()->tab_strip_model()->count()); |
| 1081 ASSERT_TRUE(content::ExecuteScript( | 1111 ASSERT_TRUE(content::ExecuteScript( |
| 1082 browser()->tab_strip_model()->GetActiveWebContents(), | 1112 browser()->tab_strip_model()->GetActiveWebContents(), |
| 1083 "window.open('" + dcbae_url.spec() + "');")); | 1113 "window.open('" + dcbae_url.spec() + "');")); |
| 1084 ASSERT_EQ(2, browser()->tab_strip_model()->count()); | 1114 ASSERT_EQ(2, browser()->tab_strip_model()->count()); |
| 1085 load_complete.Wait(); | 1115 load_complete.Wait(); |
| 1086 | 1116 |
| 1087 details = new TestMemoryDetails(); | 1117 details = new TestMemoryDetails(); |
| 1088 details->StartFetchAndWait(); | 1118 details->StartFetchAndWait(); |
| 1089 if (content::AreAllSitesIsolatedForTesting()) { | 1119 EXPECT_THAT(details->uma()->GetAllSamples( |
| 1090 EXPECT_THAT(details->uma()->GetAllSamples( | 1120 "SiteIsolation.SiteInstancesPerBrowsingInstance"), |
| 1091 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | 1121 HasOneSample(DependingOnPolicy(1, 1, 11))); |
| 1092 ElementsAre(Bucket(11, 1))); | |
| 1093 } else { | |
| 1094 EXPECT_THAT(details->uma()->GetAllSamples( | |
| 1095 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | |
| 1096 ElementsAre(Bucket(1, 1))); | |
| 1097 } | |
| 1098 | 1122 |
| 1099 // Open a tab, which will be in a different BrowsingInstance. | 1123 // Open a tab, which will be in a different BrowsingInstance. |
| 1100 GURL abcd_url = embedded_test_server()->GetURL( | 1124 GURL abcd_url = embedded_test_server()->GetURL( |
| 1101 "a.com", "/cross_site_iframe_factory.html?a(b(c(d())))"); | 1125 "a.com", "/cross_site_iframe_factory.html?a(b(c(d())))"); |
| 1102 AddTabAtIndex(1, abcd_url, ui::PAGE_TRANSITION_TYPED); | 1126 AddTabAtIndex(1, abcd_url, ui::PAGE_TRANSITION_TYPED); |
| 1103 | 1127 |
| 1104 details = new TestMemoryDetails(); | 1128 details = new TestMemoryDetails(); |
| 1105 details->StartFetchAndWait(); | 1129 details->StartFetchAndWait(); |
| 1106 if (content::AreAllSitesIsolatedForTesting()) { | 1130 EXPECT_THAT( |
| 1107 EXPECT_THAT(details->uma()->GetAllSamples( | 1131 details->uma()->GetAllSamples( |
| 1108 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | 1132 "SiteIsolation.SiteInstancesPerBrowsingInstance"), |
| 1109 ElementsAre(Bucket(4, 1), Bucket(11, 1))); | 1133 DependingOnPolicy(ElementsAre(Sample(1, 2)), ElementsAre(Sample(1, 2)), |
| 1110 } else { | 1134 ElementsAre(Sample(4, 1), Sample(11, 1)))); |
| 1111 EXPECT_THAT(details->uma()->GetAllSamples( | |
| 1112 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | |
| 1113 ElementsAre(Bucket(1, 2))); | |
| 1114 } | |
| 1115 } | 1135 } |
| 1116 | 1136 |
| 1117 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is | 1137 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is |
| 1118 // correct when extensions and web pages are mixed together. | 1138 // correct when extensions and web pages are mixed together. |
| 1119 IN_PROC_BROWSER_TEST_F( | 1139 IN_PROC_BROWSER_TEST_P( |
| 1120 SiteDetailsBrowserTest, | 1140 SiteDetailsBrowserTest, |
| 1121 VerifySiteInstanceCountInBrowsingInstanceWithExtensions) { | 1141 VerifySiteInstanceCountInBrowsingInstanceWithExtensions) { |
| 1122 // Open two a.com tabs (with cross site http iframes). IsolateExtensions mode | 1142 // Open two a.com tabs (with cross site http iframes). IsolateExtensions mode |
| 1123 // should have no effect so far, since there are no frames straddling the | 1143 // should have no effect so far, since there are no frames straddling the |
| 1124 // extension/web boundary. | 1144 // extension/web boundary. |
| 1125 GURL tab_url = embedded_test_server()->GetURL( | 1145 GURL tab_url = embedded_test_server()->GetURL( |
| 1126 "a.com", "/cross_site_iframe_factory.html?a(b,c,d(e))"); | 1146 "a.com", "/cross_site_iframe_factory.html?a(b,c,d(e))"); |
| 1127 ui_test_utils::NavigateToURL(browser(), tab_url); | 1147 ui_test_utils::NavigateToURL(browser(), tab_url); |
| 1128 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0); | 1148 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0); |
| 1129 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); | 1149 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); |
| 1130 details->StartFetchAndWait(); | 1150 details->StartFetchAndWait(); |
| 1131 if (content::AreAllSitesIsolatedForTesting()) { | 1151 |
| 1132 EXPECT_THAT(details->uma()->GetAllSamples( | 1152 // Since there are no extensions loaded yet, the results in the default case |
| 1133 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | 1153 // and extensions::IsIsolateExtensionsEnabled() are the same. |
| 1134 ElementsAre(Bucket(5, 1))); | 1154 EXPECT_THAT(details->uma()->GetAllSamples( |
| 1135 } else { | 1155 "SiteIsolation.SiteInstancesPerBrowsingInstance"), |
| 1136 // Since there are no extensions loaded yet, the results in the default case | 1156 HasOneSample(DependingOnPolicy(1, 1, 5))); |
| 1137 // and extensions::IsIsolateExtensionsEnabled() are the same. | |
| 1138 EXPECT_THAT(details->uma()->GetAllSamples( | |
| 1139 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | |
| 1140 ElementsAre(Bucket(1, 1))); | |
| 1141 } | |
| 1142 | 1157 |
| 1143 // Load an extension without a background page, which will avoid creating a | 1158 // Load an extension without a background page, which will avoid creating a |
| 1144 // BrowsingInstance for it. | 1159 // BrowsingInstance for it. |
| 1145 const Extension* extension1 = CreateExtension("Extension One", false); | 1160 const Extension* extension1 = CreateExtension("Extension One", false); |
| 1146 | 1161 |
| 1147 // Navigate the tab's first iframe to a resource of the extension. The | 1162 // Navigate the tab's first iframe to a resource of the extension. The |
| 1148 // extension iframe will be put in the same BrowsingInstance as it is part | 1163 // extension iframe will be put in the same BrowsingInstance as it is part |
| 1149 // of the frame tree. | 1164 // of the frame tree. |
| 1150 content::NavigateIframeToURL( | 1165 content::NavigateIframeToURL( |
| 1151 tab, "child-0", extension1->GetResourceURL("/blank_iframe.html")); | 1166 tab, "child-0", extension1->GetResourceURL("/blank_iframe.html")); |
| 1152 details = new TestMemoryDetails(); | 1167 details = new TestMemoryDetails(); |
| 1153 details->StartFetchAndWait(); | 1168 details->StartFetchAndWait(); |
| 1154 if (content::AreAllSitesIsolatedForTesting()) { | 1169 EXPECT_THAT(details->uma()->GetAllSamples( |
| 1155 EXPECT_THAT(details->uma()->GetAllSamples( | 1170 "SiteIsolation.SiteInstancesPerBrowsingInstance"), |
| 1156 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | 1171 HasOneSample(DependingOnPolicy(1, 2, 5))); |
| 1157 ElementsAre(Bucket(5, 1))); | |
| 1158 } else if (extensions::IsIsolateExtensionsEnabled()) { | |
| 1159 EXPECT_THAT(details->uma()->GetAllSamples( | |
| 1160 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | |
| 1161 ElementsAre(Bucket(2, 1))); | |
| 1162 } else { | |
| 1163 EXPECT_THAT(details->uma()->GetAllSamples( | |
| 1164 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | |
| 1165 ElementsAre(Bucket(1, 1))); | |
| 1166 } | |
| 1167 | 1172 |
| 1168 // Now load an extension with a background page. This will result in a | 1173 // Now load an extension with a background page. This will result in a |
| 1169 // BrowsingInstance for the background page. | 1174 // BrowsingInstance for the background page. |
| 1170 const Extension* extension2 = CreateExtension("Extension One", true); | 1175 const Extension* extension2 = CreateExtension("Extension One", true); |
| 1171 details = new TestMemoryDetails(); | 1176 details = new TestMemoryDetails(); |
| 1172 details->StartFetchAndWait(); | 1177 details->StartFetchAndWait(); |
| 1173 if (content::AreAllSitesIsolatedForTesting()) { | 1178 EXPECT_THAT(details->uma()->GetAllSamples( |
| 1174 EXPECT_THAT(details->uma()->GetAllSamples( | 1179 "SiteIsolation.SiteInstancesPerBrowsingInstance"), |
| 1175 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | 1180 DependingOnPolicy(ElementsAre(Bucket(1, 2)), |
| 1176 ElementsAre(Bucket(1, 1), Bucket(5, 1))); | 1181 ElementsAre(Bucket(1, 1), Bucket(2, 1)), |
| 1177 } else if (extensions::IsIsolateExtensionsEnabled()) { | 1182 ElementsAre(Bucket(1, 1), Bucket(5, 1)))); |
| 1178 EXPECT_THAT(details->uma()->GetAllSamples( | |
| 1179 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | |
| 1180 ElementsAre(Bucket(1, 1), Bucket(2, 1))); | |
| 1181 } else { | |
| 1182 EXPECT_THAT(details->uma()->GetAllSamples( | |
| 1183 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | |
| 1184 ElementsAre(Bucket(1, 2))); | |
| 1185 } | |
| 1186 | 1183 |
| 1187 // Navigate the second iframe of the tab to the second extension. It should | 1184 // Navigate the second iframe of the tab to the second extension. It should |
| 1188 // stay in the same BrowsingInstance as the page. | 1185 // stay in the same BrowsingInstance as the page. |
| 1189 content::NavigateIframeToURL( | 1186 content::NavigateIframeToURL( |
| 1190 tab, "child-1", extension2->GetResourceURL("/blank_iframe.html")); | 1187 tab, "child-1", extension2->GetResourceURL("/blank_iframe.html")); |
| 1191 details = new TestMemoryDetails(); | 1188 details = new TestMemoryDetails(); |
| 1192 details->StartFetchAndWait(); | 1189 details->StartFetchAndWait(); |
| 1193 if (content::AreAllSitesIsolatedForTesting()) { | 1190 EXPECT_THAT(details->uma()->GetAllSamples( |
| 1194 EXPECT_THAT(details->uma()->GetAllSamples( | 1191 "SiteIsolation.SiteInstancesPerBrowsingInstance"), |
| 1195 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | 1192 DependingOnPolicy(ElementsAre(Bucket(1, 2)), |
| 1196 ElementsAre(Bucket(1, 1), Bucket(5, 1))); | 1193 ElementsAre(Bucket(1, 1), Bucket(3, 1)), |
| 1197 } else if (extensions::IsIsolateExtensionsEnabled()) { | 1194 ElementsAre(Bucket(1, 1), Bucket(5, 1)))); |
| 1198 EXPECT_THAT(details->uma()->GetAllSamples( | |
| 1199 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | |
| 1200 ElementsAre(Bucket(1, 1), Bucket(3, 1))); | |
| 1201 } else { | |
| 1202 EXPECT_THAT(details->uma()->GetAllSamples( | |
| 1203 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | |
| 1204 ElementsAre(Bucket(1, 2))); | |
| 1205 } | |
| 1206 } | 1195 } |
| 1196 |
| 1197 INSTANTIATE_TEST_CASE_P( |
| 1198 , |
| 1199 SiteDetailsBrowserTest, |
| 1200 testing::Values("", |
| 1201 extensions::switches::kIsolateExtensions, |
| 1202 switches::kSitePerProcess)); |
| OLD | NEW |