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

Side by Side Diff: chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc

Issue 2885773002: Revert of Notify paint for each frame (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/test/data/page_load_metrics/empty_iframe.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/feature_list.h" 6 #include "base/feature_list.h"
7 #include "base/files/scoped_temp_dir.h" 7 #include "base/files/scoped_temp_dir.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/test/histogram_tester.h" 9 #include "base/test/histogram_tester.h"
10 #include "base/threading/thread_restrictions.h" 10 #include "base/threading/thread_restrictions.h"
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 } 183 }
184 184
185 std::unique_ptr<base::RunLoop> run_loop_; 185 std::unique_ptr<base::RunLoop> run_loop_;
186 186
187 TimingFieldBitSet child_frame_expected_fields_; 187 TimingFieldBitSet child_frame_expected_fields_;
188 TimingFieldBitSet main_frame_expected_fields_; 188 TimingFieldBitSet main_frame_expected_fields_;
189 189
190 TimingFieldBitSet observed_main_frame_fields_; 190 TimingFieldBitSet observed_main_frame_fields_;
191 }; 191 };
192 192
193 // Due to crbug/705315, paints in subframes are associated with the main frame,
194 // unless the subframe is cross-origin and Chrome is running with out of process
195 // cross-origin subframes. As a result, some tests wait for different behavior
196 // to be observed depending on which mode we are in. TODO(crbug/705315): remove
197 // this method once the bug is addressed.
198 static bool AreCrossOriginSubFramesOutOfProcess() {
199 return base::CommandLine::ForCurrentProcess()->HasSwitch(
200 switches::kSitePerProcess) ||
201 base::FeatureList::IsEnabled(features::kTopDocumentIsolation);
202 }
203
193 using TimingField = PageLoadMetricsWaiter::TimingField; 204 using TimingField = PageLoadMetricsWaiter::TimingField;
194 205
195 } // namespace 206 } // namespace
196 207
197 class PageLoadMetricsBrowserTest : public InProcessBrowserTest { 208 class PageLoadMetricsBrowserTest : public InProcessBrowserTest {
198 public: 209 public:
199 PageLoadMetricsBrowserTest() {} 210 PageLoadMetricsBrowserTest() {}
200 ~PageLoadMetricsBrowserTest() override {} 211 ~PageLoadMetricsBrowserTest() override {}
201 212
202 protected: 213 protected:
203 // Force navigation to a new page, so the currently tracked page load runs its 214 // Force navigation to a new page, so the currently tracked page load runs its
204 // OnComplete callback. You should prefer to use PageLoadMetricsWaiter, and 215 // OnComplete callback. You should prefer to use PageLoadMetricsWaiter, and
205 // only use NavigateToUntrackedUrl for cases where the waiter isn't 216 // only use NavigateToUntrackedUrl for cases where the waiter isn't
206 // sufficient. 217 // sufficient.
207 void NavigateToUntrackedUrl() { 218 void NavigateToUntrackedUrl() {
208 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); 219 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL));
209 } 220 }
210 221
222 // TODO(crbug/705315): remove this method once the bug is addressed.
223 void SetUpOnMainThread() override {
224 InProcessBrowserTest::SetUpOnMainThread();
225 host_resolver()->AddRule("a.com", "127.0.0.1");
226 host_resolver()->AddRule("b.com", "127.0.0.1");
227 host_resolver()->AddRule("c.com", "127.0.0.1");
228 content::SetupCrossSiteRedirector(embedded_test_server());
229 }
230
211 bool NoPageLoadMetricsRecorded() { 231 bool NoPageLoadMetricsRecorded() {
212 // Determine whether any 'public' page load metrics are recorded. We exclude 232 // Determine whether any 'public' page load metrics are recorded. We exclude
213 // 'internal' metrics as these may be recorded for debugging purposes. 233 // 'internal' metrics as these may be recorded for debugging purposes.
214 size_t total_pageload_histograms = 234 size_t total_pageload_histograms =
215 histogram_tester_.GetTotalCountsForPrefix("PageLoad.").size(); 235 histogram_tester_.GetTotalCountsForPrefix("PageLoad.").size();
216 size_t total_internal_histograms = 236 size_t total_internal_histograms =
217 histogram_tester_.GetTotalCountsForPrefix("PageLoad.Internal.").size(); 237 histogram_tester_.GetTotalCountsForPrefix("PageLoad.Internal.").size();
218 DCHECK_GE(total_pageload_histograms, total_internal_histograms); 238 DCHECK_GE(total_pageload_histograms, total_internal_histograms);
219 return total_pageload_histograms - total_internal_histograms == 0; 239 return total_pageload_histograms - total_internal_histograms == 0;
220 } 240 }
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 302 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
283 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 303 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
284 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 304 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
285 0); 305 0);
286 } 306 }
287 307
288 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 308 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
289 NoPaintForEmptyDocumentInChildFrame) { 309 NoPaintForEmptyDocumentInChildFrame) {
290 ASSERT_TRUE(embedded_test_server()->Start()); 310 ASSERT_TRUE(embedded_test_server()->Start());
291 311
292 GURL a_url( 312 // TODO(crbug/705315): remove the a.com domain once the bug is addressed.
293 embedded_test_server()->GetURL("/page_load_metrics/empty_iframe.html")); 313 GURL a_url(embedded_test_server()->GetURL(
314 "a.com", "/page_load_metrics/empty_iframe.html"));
294 315
295 auto waiter = CreatePageLoadMetricsWaiter(); 316 auto waiter = CreatePageLoadMetricsWaiter();
296 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 317 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT);
297 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 318 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
298 waiter->AddSubFrameExpectation(TimingField::FIRST_LAYOUT); 319 waiter->AddSubFrameExpectation(TimingField::FIRST_LAYOUT);
299 waiter->AddSubFrameExpectation(TimingField::LOAD_EVENT); 320 waiter->AddSubFrameExpectation(TimingField::LOAD_EVENT);
300 ui_test_utils::NavigateToURL(browser(), a_url); 321 ui_test_utils::NavigateToURL(browser(), a_url);
301 waiter->Wait(); 322 waiter->Wait();
302 EXPECT_FALSE(waiter->DidObserveInMainFrame(TimingField::FIRST_PAINT)); 323 EXPECT_FALSE(waiter->DidObserveInMainFrame(TimingField::FIRST_PAINT));
303 324
304 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 325 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
305 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 326 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
306 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 327 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
307 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 328 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
308 0); 329 0);
309 } 330 }
310 331
311 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInChildFrame) { 332 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInChildFrame) {
312 ASSERT_TRUE(embedded_test_server()->Start()); 333 ASSERT_TRUE(embedded_test_server()->Start());
313 334
314 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframe.html")); 335 // TODO(crbug/705315): remove the a.com domain once the bug is addressed.
336 GURL a_url(embedded_test_server()->GetURL("a.com",
337 "/page_load_metrics/iframe.html"));
315 auto waiter = CreatePageLoadMetricsWaiter(); 338 auto waiter = CreatePageLoadMetricsWaiter();
316 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 339 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT);
317 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 340 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
318 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT); 341 // TODO(crbug/705315): Once the bug is fixed, remove the else case and make
319 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 342 // the if case the default behavior.
343 if (AreCrossOriginSubFramesOutOfProcess()) {
344 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT);
345 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
346 } else {
347 waiter->AddMainFrameExpectation(TimingField::FIRST_PAINT);
348 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
349 }
320 ui_test_utils::NavigateToURL(browser(), a_url); 350 ui_test_utils::NavigateToURL(browser(), a_url);
321 waiter->Wait(); 351 waiter->Wait();
322 352
323 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 353 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
324 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 354 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
325 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); 355 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1);
326 } 356 }
327 357
328 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInMultipleChildFrames) { 358 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInMultipleChildFrames) {
329 ASSERT_TRUE(embedded_test_server()->Start()); 359 ASSERT_TRUE(embedded_test_server()->Start());
330 360
331 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframes.html")); 361 // TODO(crbug/705315): remove the a.com domain once the bug is addressed.
362 GURL a_url(embedded_test_server()->GetURL("a.com",
363 "/page_load_metrics/iframes.html"));
332 364
333 auto waiter = CreatePageLoadMetricsWaiter(); 365 auto waiter = CreatePageLoadMetricsWaiter();
334 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 366 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT);
335 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 367 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
336 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT); 368 // TODO(crbug/705315): Once the bug is fixed, remove the else case and make
337 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 369 // the if case the default behavior.
370 if (AreCrossOriginSubFramesOutOfProcess()) {
371 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT);
372 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
373 } else {
374 waiter->AddMainFrameExpectation(TimingField::FIRST_PAINT);
375 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
376 }
338 ui_test_utils::NavigateToURL(browser(), a_url); 377 ui_test_utils::NavigateToURL(browser(), a_url);
339 waiter->Wait(); 378 waiter->Wait();
340 379
341 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 380 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
342 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 381 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
343 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); 382 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1);
344 } 383 }
345 384
346 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInMainAndChildFrame) { 385 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInMainAndChildFrame) {
347 ASSERT_TRUE(embedded_test_server()->Start()); 386 ASSERT_TRUE(embedded_test_server()->Start());
348 387
388 // TODO(crbug/705315): remove the a.com domain once the bug is addressed.
349 GURL a_url(embedded_test_server()->GetURL( 389 GURL a_url(embedded_test_server()->GetURL(
350 "/page_load_metrics/main_frame_with_iframe.html")); 390 "a.com", "/page_load_metrics/main_frame_with_iframe.html"));
351 391
352 auto waiter = CreatePageLoadMetricsWaiter(); 392 auto waiter = CreatePageLoadMetricsWaiter();
353 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 393 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT);
354 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 394 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
355 waiter->AddMainFrameExpectation(TimingField::FIRST_PAINT); 395 waiter->AddMainFrameExpectation(TimingField::FIRST_PAINT);
356 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 396 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
357 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT); 397 // TODO(crbug/705315): Once the bug is fixed, make the if case the default
358 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 398 // behavior.
399 if (AreCrossOriginSubFramesOutOfProcess()) {
400 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT);
401 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
402 }
359 ui_test_utils::NavigateToURL(browser(), a_url); 403 ui_test_utils::NavigateToURL(browser(), a_url);
360 waiter->Wait(); 404 waiter->Wait();
361 405
362 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 406 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
363 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 407 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
364 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); 408 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1);
365 } 409 }
366 410
367 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameDocumentNavigation) { 411 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameDocumentNavigation) {
368 ASSERT_TRUE(embedded_test_server()->Start()); 412 ASSERT_TRUE(embedded_test_server()->Start());
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 // Payload histograms are only logged when a page load terminates, so force 990 // Payload histograms are only logged when a page load terminates, so force
947 // navigation to another page. 991 // navigation to another page.
948 NavigateToUntrackedUrl(); 992 NavigateToUntrackedUrl();
949 993
950 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); 994 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1);
951 995
952 // Verify that there is a single sample recorded in the 10kB bucket (the size 996 // Verify that there is a single sample recorded in the 10kB bucket (the size
953 // of the main HTML response). 997 // of the main HTML response).
954 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1); 998 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1);
955 } 999 }
OLDNEW
« no previous file with comments | « no previous file | chrome/test/data/page_load_metrics/empty_iframe.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698