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

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

Issue 2948323002: [PageLoadMetrics] Remove legacy IPC from Page Load Metrics. (Closed)
Patch Set: Clean up OWNERS Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
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"
7 #include "base/files/scoped_temp_dir.h" 6 #include "base/files/scoped_temp_dir.h"
8 #include "base/logging.h" 7 #include "base/logging.h"
9 #include "base/macros.h" 8 #include "base/macros.h"
10 #include "base/memory/weak_ptr.h" 9 #include "base/memory/weak_ptr.h"
11 #include "base/run_loop.h" 10 #include "base/run_loop.h"
12 #include "base/test/histogram_tester.h" 11 #include "base/test/histogram_tester.h"
13 #include "base/test/scoped_feature_list.h"
14 #include "base/threading/thread_restrictions.h" 12 #include "base/threading/thread_restrictions.h"
15 #include "base/time/time.h" 13 #include "base/time/time.h"
16 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" 14 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
17 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h" 15 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h"
18 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h" 16 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h"
19 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h" 17 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h"
20 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load _metrics_observer.h" 18 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load _metrics_observer.h"
21 #include "chrome/browser/page_load_metrics/page_load_tracker.h" 19 #include "chrome/browser/page_load_metrics/page_load_tracker.h"
22 #include "chrome/browser/prerender/prerender_histograms.h" 20 #include "chrome/browser/prerender/prerender_histograms.h"
23 #include "chrome/browser/prerender/prerender_origin.h" 21 #include "chrome/browser/prerender/prerender_origin.h"
(...skipping 17 matching lines...) Expand all
41 #include "net/base/net_errors.h" 39 #include "net/base/net_errors.h"
42 #include "net/dns/mock_host_resolver.h" 40 #include "net/dns/mock_host_resolver.h"
43 #include "net/http/failing_http_transaction_factory.h" 41 #include "net/http/failing_http_transaction_factory.h"
44 #include "net/http/http_cache.h" 42 #include "net/http/http_cache.h"
45 #include "net/test/embedded_test_server/embedded_test_server.h" 43 #include "net/test/embedded_test_server/embedded_test_server.h"
46 #include "net/test/url_request/url_request_failed_job.h" 44 #include "net/test/url_request/url_request_failed_job.h"
47 #include "net/url_request/url_request_context.h" 45 #include "net/url_request/url_request_context.h"
48 #include "net/url_request/url_request_context_getter.h" 46 #include "net/url_request/url_request_context_getter.h"
49 47
50 namespace { 48 namespace {
51 using IPCType =
52 page_load_metrics::MetricsWebContentsObserver::TestingObserver::IPCType;
53 49
54 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { 50 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) {
55 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 51 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
56 net::HttpCache* cache( 52 net::HttpCache* cache(
57 getter->GetURLRequestContext()->http_transaction_factory()->GetCache()); 53 getter->GetURLRequestContext()->http_transaction_factory()->GetCache());
58 DCHECK(cache); 54 DCHECK(cache);
59 std::unique_ptr<net::FailingHttpTransactionFactory> factory = 55 std::unique_ptr<net::FailingHttpTransactionFactory> factory =
60 base::MakeUnique<net::FailingHttpTransactionFactory>(cache->GetSession(), 56 base::MakeUnique<net::FailingHttpTransactionFactory>(cache->GetSession(),
61 net::ERR_FAILED); 57 net::ERR_FAILED);
62 // Throw away old version; since this is a browser test, there is no 58 // Throw away old version; since this is a browser test, there is no
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 // expectation as well 95 // expectation as well
100 if (IsPageLevelField(field)) 96 if (IsPageLevelField(field))
101 page_expected_fields_.Set(field); 97 page_expected_fields_.Set(field);
102 } 98 }
103 99
104 // Whether the given TimingField was observed in the page. 100 // Whether the given TimingField was observed in the page.
105 bool DidObserveInPage(TimingField field) { 101 bool DidObserveInPage(TimingField field) {
106 return observed_page_fields_.IsSet(field); 102 return observed_page_fields_.IsSet(field);
107 } 103 }
108 104
109 // Waits for a TimingUpdated IPC that matches the fields set by 105 // Waits for a OnTimingUpdated call that matches the fields set by
110 // |AddPageExpectation| and |AddSubFrameExpectation|. All matching fields 106 // |AddPageExpectation| and |AddSubFrameExpectation|. All matching fields
111 // must be set in a TimingUpdated IPC for it to end this wait. 107 // must be set in a OnTimingUpdated call for it to end this wait.
112 void Wait() { 108 void Wait() {
113 if (expectations_satisfied()) 109 if (expectations_satisfied())
114 return; 110 return;
115 111
116 run_loop_ = base::MakeUnique<base::RunLoop>(); 112 run_loop_ = base::MakeUnique<base::RunLoop>();
117 run_loop_->Run(); 113 run_loop_->Run();
118 run_loop_ = nullptr; 114 run_loop_ = nullptr;
119 115
120 EXPECT_TRUE(expectations_satisfied()); 116 EXPECT_TRUE(expectations_satisfied());
121 } 117 }
122 118
123 void OnTimingUpdate(bool is_subframe, 119 void OnTimingUpdated(bool is_subframe,
124 const page_load_metrics::mojom::PageLoadTiming& timing, 120 const page_load_metrics::mojom::PageLoadTiming& timing,
125 const page_load_metrics::PageLoadExtraInfo& extra_info) { 121 const page_load_metrics::PageLoadExtraInfo& extra_info) {
126 if (expectations_satisfied()) 122 if (expectations_satisfied())
127 return; 123 return;
128 124
129 const page_load_metrics::mojom::PageLoadMetadata& metadata = 125 const page_load_metrics::mojom::PageLoadMetadata& metadata =
130 is_subframe ? extra_info.subframe_metadata 126 is_subframe ? extra_info.subframe_metadata
131 : extra_info.main_frame_metadata; 127 : extra_info.main_frame_metadata;
132 TimingFieldBitSet matched_bits = GetMatchedBits(timing, metadata); 128 TimingFieldBitSet matched_bits = GetMatchedBits(timing, metadata);
133 if (is_subframe) { 129 if (is_subframe) {
134 subframe_expected_fields_.ClearMatching(matched_bits); 130 subframe_expected_fields_.ClearMatching(matched_bits);
135 } else { 131 } else {
(...skipping 14 matching lines...) Expand all
150 // We use a WeakPtr to the PageLoadMetricsWaiter because |waiter| can be 146 // We use a WeakPtr to the PageLoadMetricsWaiter because |waiter| can be
151 // destroyed before this WaiterMetricsObserver. 147 // destroyed before this WaiterMetricsObserver.
152 explicit WaiterMetricsObserver(base::WeakPtr<PageLoadMetricsWaiter> waiter) 148 explicit WaiterMetricsObserver(base::WeakPtr<PageLoadMetricsWaiter> waiter)
153 : waiter_(waiter) {} 149 : waiter_(waiter) {}
154 150
155 void OnTimingUpdate( 151 void OnTimingUpdate(
156 bool is_subframe, 152 bool is_subframe,
157 const page_load_metrics::mojom::PageLoadTiming& timing, 153 const page_load_metrics::mojom::PageLoadTiming& timing,
158 const page_load_metrics::PageLoadExtraInfo& extra_info) override { 154 const page_load_metrics::PageLoadExtraInfo& extra_info) override {
159 if (waiter_) 155 if (waiter_)
160 waiter_->OnTimingUpdate(is_subframe, timing, extra_info); 156 waiter_->OnTimingUpdated(is_subframe, timing, extra_info);
161 } 157 }
162 158
163 private: 159 private:
164 const base::WeakPtr<PageLoadMetricsWaiter> waiter_; 160 const base::WeakPtr<PageLoadMetricsWaiter> waiter_;
165 }; 161 };
166 162
167 // Manages a bitset of TimingFields. 163 // Manages a bitset of TimingFields.
168 class TimingFieldBitSet { 164 class TimingFieldBitSet {
169 public: 165 public:
170 TimingFieldBitSet() {} 166 TimingFieldBitSet() {}
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 243
248 TimingFieldBitSet observed_page_fields_; 244 TimingFieldBitSet observed_page_fields_;
249 245
250 bool did_add_observer_ = false; 246 bool did_add_observer_ = false;
251 247
252 base::WeakPtrFactory<PageLoadMetricsWaiter> weak_factory_; 248 base::WeakPtrFactory<PageLoadMetricsWaiter> weak_factory_;
253 }; 249 };
254 250
255 using TimingField = PageLoadMetricsWaiter::TimingField; 251 using TimingField = PageLoadMetricsWaiter::TimingField;
256 252
257 class IPCTypeVerifier
258 : public page_load_metrics::MetricsWebContentsObserver::TestingObserver {
259 public:
260 explicit IPCTypeVerifier(content::WebContents* web_contents)
261 : TestingObserver(web_contents) {}
262
263 ~IPCTypeVerifier() override { AssertValidUpdateState(); }
264
265 void ExpectNoTimingUpdates() { expect_updates_ = false; }
266
267 void DidReceiveTimingUpdate(IPCType type) override {
268 ++num_updates_;
269 const bool is_mojo_enabled =
270 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication);
271 switch (type) {
272 case IPCType::LEGACY:
273 ASSERT_FALSE(is_mojo_enabled);
274 break;
275 case IPCType::MOJO:
276 ASSERT_TRUE(is_mojo_enabled);
277 break;
278 default:
dcheng 2017/06/25 07:44:46 For future reference, it's best to omit the defaul
279 FAIL() << "Unknown IPCType";
280 break;
281 }
282 }
283
284 private:
285 void AssertValidUpdateState() {
286 ASSERT_EQ(expect_updates_, num_updates_ > 0);
287 }
288
289 bool expect_updates_ = true;
290 int num_updates_ = 0;
291 };
292
293 } // namespace 253 } // namespace
294 254
295 class PageLoadMetricsBrowserTest : public InProcessBrowserTest, 255 class PageLoadMetricsBrowserTest : public InProcessBrowserTest {
296 public testing::WithParamInterface<IPCType> {
297 public: 256 public:
298 PageLoadMetricsBrowserTest() {} 257 PageLoadMetricsBrowserTest() {}
299 ~PageLoadMetricsBrowserTest() override {} 258 ~PageLoadMetricsBrowserTest() override {}
300 259
301 protected: 260 protected:
302 void SetUpCommandLine(base::CommandLine* command_line) override {
303 InProcessBrowserTest::SetUpCommandLine(command_line);
304
305 // We need to set the feature state before the render process is created,
306 // in order for it to inherit the feature state from the browser process.
307 // SetUp() runs too early, and SetUpOnMainThread() runs too late.
308 const IPCType ipc_type = GetParam();
309 switch (ipc_type) {
310 case IPCType::LEGACY:
311 scoped_feature_list_.InitAndDisableFeature(
312 features::kPageLoadMetricsMojofication);
313 break;
314 case IPCType::MOJO:
315 scoped_feature_list_.InitAndEnableFeature(
316 features::kPageLoadMetricsMojofication);
317 break;
318 default:
319 CHECK(false) << "Unknown IPCType.";
320 break;
321 }
322 }
323
324 void SetUpOnMainThread() override {
325 InProcessBrowserTest::SetUpOnMainThread();
326
327 content::WebContents* web_contents =
328 browser()->tab_strip_model()->GetActiveWebContents();
329 ipc_type_verifier_ = base::MakeUnique<IPCTypeVerifier>(web_contents);
330 }
331
332 // Force navigation to a new page, so the currently tracked page load runs its 261 // Force navigation to a new page, so the currently tracked page load runs its
333 // OnComplete callback. You should prefer to use PageLoadMetricsWaiter, and 262 // OnComplete callback. You should prefer to use PageLoadMetricsWaiter, and
334 // only use NavigateToUntrackedUrl for cases where the waiter isn't 263 // only use NavigateToUntrackedUrl for cases where the waiter isn't
335 // sufficient. 264 // sufficient.
336 void NavigateToUntrackedUrl() { 265 void NavigateToUntrackedUrl() {
337 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); 266 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL));
338 } 267 }
339 268
340 bool NoPageLoadMetricsRecorded() { 269 bool NoPageLoadMetricsRecorded() {
341 // Determine whether any 'public' page load metrics are recorded. We exclude 270 // Determine whether any 'public' page load metrics are recorded. We exclude
342 // 'internal' metrics as these may be recorded for debugging purposes. 271 // 'internal' metrics as these may be recorded for debugging purposes.
343 size_t total_pageload_histograms = 272 size_t total_pageload_histograms =
344 histogram_tester_.GetTotalCountsForPrefix("PageLoad.").size(); 273 histogram_tester_.GetTotalCountsForPrefix("PageLoad.").size();
345 size_t total_internal_histograms = 274 size_t total_internal_histograms =
346 histogram_tester_.GetTotalCountsForPrefix("PageLoad.Internal.").size(); 275 histogram_tester_.GetTotalCountsForPrefix("PageLoad.Internal.").size();
347 DCHECK_GE(total_pageload_histograms, total_internal_histograms); 276 DCHECK_GE(total_pageload_histograms, total_internal_histograms);
348 return total_pageload_histograms - total_internal_histograms == 0; 277 return total_pageload_histograms - total_internal_histograms == 0;
349 } 278 }
350 279
351 std::unique_ptr<PageLoadMetricsWaiter> CreatePageLoadMetricsWaiter() { 280 std::unique_ptr<PageLoadMetricsWaiter> CreatePageLoadMetricsWaiter() {
352 content::WebContents* web_contents = 281 content::WebContents* web_contents =
353 browser()->tab_strip_model()->GetActiveWebContents(); 282 browser()->tab_strip_model()->GetActiveWebContents();
354 return base::MakeUnique<PageLoadMetricsWaiter>(web_contents); 283 return base::MakeUnique<PageLoadMetricsWaiter>(web_contents);
355 } 284 }
356 285
357 void ExpectNoTimingUpdates() { ipc_type_verifier_->ExpectNoTimingUpdates(); }
358
359 base::test::ScopedFeatureList scoped_feature_list_;
360 base::HistogramTester histogram_tester_; 286 base::HistogramTester histogram_tester_;
361 std::unique_ptr<IPCTypeVerifier> ipc_type_verifier_;
362 287
363 private: 288 private:
364 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest); 289 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest);
365 }; 290 };
366 291
367 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoNavigation) { 292 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoNavigation) {
368 ExpectNoTimingUpdates();
369 ASSERT_TRUE(embedded_test_server()->Start()); 293 ASSERT_TRUE(embedded_test_server()->Start());
370 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 294 EXPECT_TRUE(NoPageLoadMetricsRecorded());
371 } 295 }
372 296
373 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NewPage) { 297 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) {
374 ASSERT_TRUE(embedded_test_server()->Start()); 298 ASSERT_TRUE(embedded_test_server()->Start());
375 299
376 auto waiter = CreatePageLoadMetricsWaiter(); 300 auto waiter = CreatePageLoadMetricsWaiter();
377 waiter->AddPageExpectation(TimingField::FIRST_PAINT); 301 waiter->AddPageExpectation(TimingField::FIRST_PAINT);
378 ui_test_utils::NavigateToURL(browser(), 302 ui_test_utils::NavigateToURL(browser(),
379 embedded_test_server()->GetURL("/title1.html")); 303 embedded_test_server()->GetURL("/title1.html"));
380 waiter->Wait(); 304 waiter->Wait();
381 305
382 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 306 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
383 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 307 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
(...skipping 10 matching lines...) Expand all
394 NavigateToUntrackedUrl(); 318 NavigateToUntrackedUrl();
395 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); 319 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1);
396 histogram_tester_.ExpectTotalCount( 320 histogram_tester_.ExpectTotalCount(
397 internal::kHistogramPageTimingForegroundDuration, 1); 321 internal::kHistogramPageTimingForegroundDuration, 1);
398 322
399 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics 323 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics
400 // have been recorded. 324 // have been recorded.
401 EXPECT_FALSE(NoPageLoadMetricsRecorded()); 325 EXPECT_FALSE(NoPageLoadMetricsRecorded());
402 } 326 }
403 327
404 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NewPageInNewForegroundTab) { 328 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPageInNewForegroundTab) {
405 ASSERT_TRUE(embedded_test_server()->Start()); 329 ASSERT_TRUE(embedded_test_server()->Start());
406 330
407 // The IPCTypeVerifier watches for IPCs in the main web contents. This test
408 // navigates in a new web contents, so we need to indicate that we expect no
409 // timing updates in the main web contents.
410 ExpectNoTimingUpdates();
411
412 chrome::NavigateParams params(browser(), 331 chrome::NavigateParams params(browser(),
413 embedded_test_server()->GetURL("/title1.html"), 332 embedded_test_server()->GetURL("/title1.html"),
414 ui::PAGE_TRANSITION_LINK); 333 ui::PAGE_TRANSITION_LINK);
415 params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; 334 params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB;
416 chrome::Navigate(&params); 335 chrome::Navigate(&params);
417 auto waiter = base::MakeUnique<PageLoadMetricsWaiter>(params.target_contents); 336 auto waiter = base::MakeUnique<PageLoadMetricsWaiter>(params.target_contents);
418 waiter->AddPageExpectation(TimingField::LOAD_EVENT); 337 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
419 waiter->Wait(); 338 waiter->Wait();
420 339
421 // Due to crbug.com/725347, with browser side navigation enabled, navigations 340 // Due to crbug.com/725347, with browser side navigation enabled, navigations
422 // in new tabs were recorded as starting in the background. Here we verify 341 // in new tabs were recorded as starting in the background. Here we verify
423 // that navigations initiated in a new tab are recorded as happening in the 342 // that navigations initiated in a new tab are recorded as happening in the
424 // foreground. 343 // foreground.
425 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 344 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
426 histogram_tester_.ExpectTotalCount(internal::kBackgroundHistogramLoad, 0); 345 histogram_tester_.ExpectTotalCount(internal::kBackgroundHistogramLoad, 0);
427 } 346 }
428 347
429 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoPaintForEmptyDocument) { 348 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPaintForEmptyDocument) {
430 ASSERT_TRUE(embedded_test_server()->Start()); 349 ASSERT_TRUE(embedded_test_server()->Start());
431 350
432 auto waiter = CreatePageLoadMetricsWaiter(); 351 auto waiter = CreatePageLoadMetricsWaiter();
433 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT); 352 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
434 waiter->AddPageExpectation(TimingField::LOAD_EVENT); 353 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
435 ui_test_utils::NavigateToURL(browser(), 354 ui_test_utils::NavigateToURL(browser(),
436 embedded_test_server()->GetURL("/empty.html")); 355 embedded_test_server()->GetURL("/empty.html"));
437 waiter->Wait(); 356 waiter->Wait();
438 EXPECT_FALSE(waiter->DidObserveInPage(TimingField::FIRST_PAINT)); 357 EXPECT_FALSE(waiter->DidObserveInPage(TimingField::FIRST_PAINT));
439 358
440 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 359 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
441 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 360 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
442 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 361 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
443 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 362 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
444 0); 363 0);
445 } 364 }
446 365
447 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, 366 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
448 NoPaintForEmptyDocumentInChildFrame) { 367 NoPaintForEmptyDocumentInChildFrame) {
449 ASSERT_TRUE(embedded_test_server()->Start()); 368 ASSERT_TRUE(embedded_test_server()->Start());
450 369
451 GURL a_url( 370 GURL a_url(
452 embedded_test_server()->GetURL("/page_load_metrics/empty_iframe.html")); 371 embedded_test_server()->GetURL("/page_load_metrics/empty_iframe.html"));
453 372
454 auto waiter = CreatePageLoadMetricsWaiter(); 373 auto waiter = CreatePageLoadMetricsWaiter();
455 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT); 374 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
456 waiter->AddPageExpectation(TimingField::LOAD_EVENT); 375 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
457 waiter->AddSubFrameExpectation(TimingField::FIRST_LAYOUT); 376 waiter->AddSubFrameExpectation(TimingField::FIRST_LAYOUT);
458 waiter->AddSubFrameExpectation(TimingField::LOAD_EVENT); 377 waiter->AddSubFrameExpectation(TimingField::LOAD_EVENT);
459 ui_test_utils::NavigateToURL(browser(), a_url); 378 ui_test_utils::NavigateToURL(browser(), a_url);
460 waiter->Wait(); 379 waiter->Wait();
461 EXPECT_FALSE(waiter->DidObserveInPage(TimingField::FIRST_PAINT)); 380 EXPECT_FALSE(waiter->DidObserveInPage(TimingField::FIRST_PAINT));
462 381
463 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 382 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
464 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 383 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
465 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 384 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
466 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 385 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
467 0); 386 0);
468 } 387 }
469 388
470 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PaintInChildFrame) { 389 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInChildFrame) {
471 ASSERT_TRUE(embedded_test_server()->Start()); 390 ASSERT_TRUE(embedded_test_server()->Start());
472 391
473 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframe.html")); 392 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframe.html"));
474 auto waiter = CreatePageLoadMetricsWaiter(); 393 auto waiter = CreatePageLoadMetricsWaiter();
475 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT); 394 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
476 waiter->AddPageExpectation(TimingField::LOAD_EVENT); 395 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
477 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT); 396 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT);
478 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 397 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
479 ui_test_utils::NavigateToURL(browser(), a_url); 398 ui_test_utils::NavigateToURL(browser(), a_url);
480 waiter->Wait(); 399 waiter->Wait();
481 400
482 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 401 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
483 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 402 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
484 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); 403 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1);
485 } 404 }
486 405
487 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PaintInMultipleChildFrames) { 406 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInMultipleChildFrames) {
488 ASSERT_TRUE(embedded_test_server()->Start()); 407 ASSERT_TRUE(embedded_test_server()->Start());
489 408
490 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframes.html")); 409 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframes.html"));
491 410
492 auto waiter = CreatePageLoadMetricsWaiter(); 411 auto waiter = CreatePageLoadMetricsWaiter();
493 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT); 412 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
494 waiter->AddPageExpectation(TimingField::LOAD_EVENT); 413 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
495 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT); 414 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT);
496 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 415 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
497 ui_test_utils::NavigateToURL(browser(), a_url); 416 ui_test_utils::NavigateToURL(browser(), a_url);
498 waiter->Wait(); 417 waiter->Wait();
499 418
500 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 419 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
501 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 420 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
502 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); 421 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1);
503 } 422 }
504 423
505 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PaintInMainAndChildFrame) { 424 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInMainAndChildFrame) {
506 ASSERT_TRUE(embedded_test_server()->Start()); 425 ASSERT_TRUE(embedded_test_server()->Start());
507 426
508 GURL a_url(embedded_test_server()->GetURL( 427 GURL a_url(embedded_test_server()->GetURL(
509 "/page_load_metrics/main_frame_with_iframe.html")); 428 "/page_load_metrics/main_frame_with_iframe.html"));
510 429
511 auto waiter = CreatePageLoadMetricsWaiter(); 430 auto waiter = CreatePageLoadMetricsWaiter();
512 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT); 431 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
513 waiter->AddPageExpectation(TimingField::LOAD_EVENT); 432 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
514 waiter->AddPageExpectation(TimingField::FIRST_PAINT); 433 waiter->AddPageExpectation(TimingField::FIRST_PAINT);
515 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 434 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
516 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT); 435 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT);
517 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 436 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
518 ui_test_utils::NavigateToURL(browser(), a_url); 437 ui_test_utils::NavigateToURL(browser(), a_url);
519 waiter->Wait(); 438 waiter->Wait();
520 439
521 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 440 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
522 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 441 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
523 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); 442 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1);
524 } 443 }
525 444
526 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, SameDocumentNavigation) { 445 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameDocumentNavigation) {
527 ASSERT_TRUE(embedded_test_server()->Start()); 446 ASSERT_TRUE(embedded_test_server()->Start());
528 447
529 auto waiter = CreatePageLoadMetricsWaiter(); 448 auto waiter = CreatePageLoadMetricsWaiter();
530 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT); 449 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
531 waiter->AddPageExpectation(TimingField::LOAD_EVENT); 450 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
532 ui_test_utils::NavigateToURL(browser(), 451 ui_test_utils::NavigateToURL(browser(),
533 embedded_test_server()->GetURL("/title1.html")); 452 embedded_test_server()->GetURL("/title1.html"));
534 waiter->Wait(); 453 waiter->Wait();
535 454
536 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 455 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
537 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 456 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
538 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 457 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
539 458
540 // Perform a same-document navigation. No additional metrics should be logged. 459 // Perform a same-document navigation. No additional metrics should be logged.
541 ui_test_utils::NavigateToURL( 460 ui_test_utils::NavigateToURL(
542 browser(), embedded_test_server()->GetURL("/title1.html#hash")); 461 browser(), embedded_test_server()->GetURL("/title1.html#hash"));
543 NavigateToUntrackedUrl(); 462 NavigateToUntrackedUrl();
544 463
545 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 464 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
546 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 465 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
547 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 466 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
548 } 467 }
549 468
550 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, SameUrlNavigation) { 469 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameUrlNavigation) {
551 ASSERT_TRUE(embedded_test_server()->Start()); 470 ASSERT_TRUE(embedded_test_server()->Start());
552 471
553 auto waiter = CreatePageLoadMetricsWaiter(); 472 auto waiter = CreatePageLoadMetricsWaiter();
554 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT); 473 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
555 waiter->AddPageExpectation(TimingField::LOAD_EVENT); 474 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
556 ui_test_utils::NavigateToURL(browser(), 475 ui_test_utils::NavigateToURL(browser(),
557 embedded_test_server()->GetURL("/title1.html")); 476 embedded_test_server()->GetURL("/title1.html"));
558 waiter->Wait(); 477 waiter->Wait();
559 478
560 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 479 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
561 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 480 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
562 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 481 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
563 482
564 waiter = CreatePageLoadMetricsWaiter(); 483 waiter = CreatePageLoadMetricsWaiter();
565 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT); 484 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
566 waiter->AddPageExpectation(TimingField::LOAD_EVENT); 485 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
567 ui_test_utils::NavigateToURL(browser(), 486 ui_test_utils::NavigateToURL(browser(),
568 embedded_test_server()->GetURL("/title1.html")); 487 embedded_test_server()->GetURL("/title1.html"));
569 waiter->Wait(); 488 waiter->Wait();
570 489
571 // We expect one histogram sample for each navigation to title1.html. 490 // We expect one histogram sample for each navigation to title1.html.
572 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2); 491 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2);
573 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2); 492 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2);
574 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2); 493 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2);
575 } 494 }
576 495
577 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NonHtmlMainResource) { 496 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHtmlMainResource) {
578 ASSERT_TRUE(embedded_test_server()->Start()); 497 ASSERT_TRUE(embedded_test_server()->Start());
579 498
580 ui_test_utils::NavigateToURL(browser(), 499 ui_test_utils::NavigateToURL(browser(),
581 embedded_test_server()->GetURL("/circle.svg")); 500 embedded_test_server()->GetURL("/circle.svg"));
582 NavigateToUntrackedUrl(); 501 NavigateToUntrackedUrl();
583 ExpectNoTimingUpdates();
584 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 502 EXPECT_TRUE(NoPageLoadMetricsRecorded());
585 } 503 }
586 504
587 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NonHttpOrHttpsUrl) { 505 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHttpOrHttpsUrl) {
588 ASSERT_TRUE(embedded_test_server()->Start()); 506 ASSERT_TRUE(embedded_test_server()->Start());
589 507
590 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL)); 508 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL));
591 NavigateToUntrackedUrl(); 509 NavigateToUntrackedUrl();
592 ExpectNoTimingUpdates();
593 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 510 EXPECT_TRUE(NoPageLoadMetricsRecorded());
594 } 511 }
595 512
596 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, HttpErrorPage) { 513 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, HttpErrorPage) {
597 ASSERT_TRUE(embedded_test_server()->Start()); 514 ASSERT_TRUE(embedded_test_server()->Start());
598 515
599 ui_test_utils::NavigateToURL( 516 ui_test_utils::NavigateToURL(
600 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html")); 517 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html"));
601 NavigateToUntrackedUrl(); 518 NavigateToUntrackedUrl();
602 ExpectNoTimingUpdates();
603 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 519 EXPECT_TRUE(NoPageLoadMetricsRecorded());
604 } 520 }
605 521
606 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, ChromeErrorPage) { 522 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, ChromeErrorPage) {
607 ASSERT_TRUE(embedded_test_server()->Start()); 523 ASSERT_TRUE(embedded_test_server()->Start());
608 524
609 // Configure the network stack to fail all attempted loads with a network 525 // Configure the network stack to fail all attempted loads with a network
610 // error, which will cause Chrome to display an error page. 526 // error, which will cause Chrome to display an error page.
611 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = 527 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter =
612 browser()->profile()->GetRequestContext(); 528 browser()->profile()->GetRequestContext();
613 content::BrowserThread::PostTask( 529 content::BrowserThread::PostTask(
614 content::BrowserThread::IO, FROM_HERE, 530 content::BrowserThread::IO, FROM_HERE,
615 base::BindOnce(&FailAllNetworkTransactions, 531 base::BindOnce(&FailAllNetworkTransactions,
616 base::RetainedRef(url_request_context_getter))); 532 base::RetainedRef(url_request_context_getter)));
617 533
618 ui_test_utils::NavigateToURL(browser(), 534 ui_test_utils::NavigateToURL(browser(),
619 embedded_test_server()->GetURL("/title1.html")); 535 embedded_test_server()->GetURL("/title1.html"));
620 NavigateToUntrackedUrl(); 536 NavigateToUntrackedUrl();
621 ExpectNoTimingUpdates();
622 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 537 EXPECT_TRUE(NoPageLoadMetricsRecorded());
623 } 538 }
624 539
625 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, Ignore204Pages) { 540 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, Ignore204Pages) {
626 ASSERT_TRUE(embedded_test_server()->Start()); 541 ASSERT_TRUE(embedded_test_server()->Start());
627 542
628 ui_test_utils::NavigateToURL(browser(), 543 ui_test_utils::NavigateToURL(browser(),
629 embedded_test_server()->GetURL("/page204.html")); 544 embedded_test_server()->GetURL("/page204.html"));
630 NavigateToUntrackedUrl(); 545 NavigateToUntrackedUrl();
631 ExpectNoTimingUpdates();
632 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 546 EXPECT_TRUE(NoPageLoadMetricsRecorded());
633 } 547 }
634 548
635 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, IgnoreDownloads) { 549 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, IgnoreDownloads) {
636 ASSERT_TRUE(embedded_test_server()->Start()); 550 ASSERT_TRUE(embedded_test_server()->Start());
637 551
638 base::ThreadRestrictions::ScopedAllowIO allow_io; 552 base::ThreadRestrictions::ScopedAllowIO allow_io;
639 base::ScopedTempDir downloads_directory; 553 base::ScopedTempDir downloads_directory;
640 ASSERT_TRUE(downloads_directory.CreateUniqueTempDir()); 554 ASSERT_TRUE(downloads_directory.CreateUniqueTempDir());
641 browser()->profile()->GetPrefs()->SetFilePath( 555 browser()->profile()->GetPrefs()->SetFilePath(
642 prefs::kDownloadDefaultDirectory, downloads_directory.GetPath()); 556 prefs::kDownloadDefaultDirectory, downloads_directory.GetPath());
643 content::DownloadTestObserverTerminal downloads_observer( 557 content::DownloadTestObserverTerminal downloads_observer(
644 content::BrowserContext::GetDownloadManager(browser()->profile()), 558 content::BrowserContext::GetDownloadManager(browser()->profile()),
645 1, // == wait_count (only waiting for "download-test3.gif"). 559 1, // == wait_count (only waiting for "download-test3.gif").
646 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); 560 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
647 561
648 ui_test_utils::NavigateToURL( 562 ui_test_utils::NavigateToURL(
649 browser(), embedded_test_server()->GetURL("/download-test3.gif")); 563 browser(), embedded_test_server()->GetURL("/download-test3.gif"));
650 downloads_observer.WaitForFinished(); 564 downloads_observer.WaitForFinished();
651 565
652 NavigateToUntrackedUrl(); 566 NavigateToUntrackedUrl();
653 ExpectNoTimingUpdates();
654 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 567 EXPECT_TRUE(NoPageLoadMetricsRecorded());
655 } 568 }
656 569
657 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PreloadDocumentWrite) { 570 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) {
658 ASSERT_TRUE(embedded_test_server()->Start()); 571 ASSERT_TRUE(embedded_test_server()->Start());
659 572
660 auto waiter = CreatePageLoadMetricsWaiter(); 573 auto waiter = CreatePageLoadMetricsWaiter();
661 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 574 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
662 575
663 ui_test_utils::NavigateToURL( 576 ui_test_utils::NavigateToURL(
664 browser(), embedded_test_server()->GetURL( 577 browser(), embedded_test_server()->GetURL(
665 "/page_load_metrics/document_write_external_script.html")); 578 "/page_load_metrics/document_write_external_script.html"));
666 waiter->Wait(); 579 waiter->Wait();
667 580
668 histogram_tester_.ExpectTotalCount( 581 histogram_tester_.ExpectTotalCount(
669 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); 582 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1);
670 } 583 }
671 584
672 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) { 585 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) {
673 ASSERT_TRUE(embedded_test_server()->Start()); 586 ASSERT_TRUE(embedded_test_server()->Start());
674 587
675 auto waiter = CreatePageLoadMetricsWaiter(); 588 auto waiter = CreatePageLoadMetricsWaiter();
676 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 589 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
677 ui_test_utils::NavigateToURL( 590 ui_test_utils::NavigateToURL(
678 browser(), embedded_test_server()->GetURL( 591 browser(), embedded_test_server()->GetURL(
679 "/page_load_metrics/document_write_no_script.html")); 592 "/page_load_metrics/document_write_no_script.html"));
680 waiter->Wait(); 593 waiter->Wait();
681 594
682 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 595 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
683 1); 596 1);
684 histogram_tester_.ExpectTotalCount( 597 histogram_tester_.ExpectTotalCount(
685 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 598 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
686 } 599 }
687 600
688 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoDocumentWrite) { 601 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWrite) {
689 ASSERT_TRUE(embedded_test_server()->Start()); 602 ASSERT_TRUE(embedded_test_server()->Start());
690 603
691 auto waiter = CreatePageLoadMetricsWaiter(); 604 auto waiter = CreatePageLoadMetricsWaiter();
692 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 605 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
693 606
694 ui_test_utils::NavigateToURL(browser(), 607 ui_test_utils::NavigateToURL(browser(),
695 embedded_test_server()->GetURL("/title1.html")); 608 embedded_test_server()->GetURL("/title1.html"));
696 waiter->Wait(); 609 waiter->Wait();
697 610
698 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 611 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
699 1); 612 1);
700 histogram_tester_.ExpectTotalCount( 613 histogram_tester_.ExpectTotalCount(
701 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 614 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
702 histogram_tester_.ExpectTotalCount( 615 histogram_tester_.ExpectTotalCount(
703 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 616 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
704 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 617 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
705 } 618 }
706 619
707 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteBlock) { 620 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteBlock) {
708 ASSERT_TRUE(embedded_test_server()->Start()); 621 ASSERT_TRUE(embedded_test_server()->Start());
709 622
710 auto waiter = CreatePageLoadMetricsWaiter(); 623 auto waiter = CreatePageLoadMetricsWaiter();
711 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 624 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
712 625
713 ui_test_utils::NavigateToURL( 626 ui_test_utils::NavigateToURL(
714 browser(), embedded_test_server()->GetURL( 627 browser(), embedded_test_server()->GetURL(
715 "/page_load_metrics/document_write_script_block.html")); 628 "/page_load_metrics/document_write_script_block.html"));
716 waiter->Wait(); 629 waiter->Wait();
717 630
718 histogram_tester_.ExpectTotalCount( 631 histogram_tester_.ExpectTotalCount(
719 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 632 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
720 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); 633 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1);
721 } 634 }
722 635
723 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteReload) { 636 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteReload) {
724 ASSERT_TRUE(embedded_test_server()->Start()); 637 ASSERT_TRUE(embedded_test_server()->Start());
725 638
726 auto waiter = CreatePageLoadMetricsWaiter(); 639 auto waiter = CreatePageLoadMetricsWaiter();
727 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 640 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
728 ui_test_utils::NavigateToURL( 641 ui_test_utils::NavigateToURL(
729 browser(), embedded_test_server()->GetURL( 642 browser(), embedded_test_server()->GetURL(
730 "/page_load_metrics/document_write_script_block.html")); 643 "/page_load_metrics/document_write_script_block.html"));
731 waiter->Wait(); 644 waiter->Wait();
732 645
733 histogram_tester_.ExpectTotalCount( 646 histogram_tester_.ExpectTotalCount(
(...skipping 21 matching lines...) Expand all
755 waiter->Wait(); 668 waiter->Wait();
756 669
757 histogram_tester_.ExpectTotalCount( 670 histogram_tester_.ExpectTotalCount(
758 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 671 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
759 672
760 histogram_tester_.ExpectTotalCount( 673 histogram_tester_.ExpectTotalCount(
761 internal::kHistogramDocWriteBlockReloadCount, 2); 674 internal::kHistogramDocWriteBlockReloadCount, 2);
762 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); 675 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1);
763 } 676 }
764 677
765 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteAsync) { 678 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteAsync) {
766 ASSERT_TRUE(embedded_test_server()->Start()); 679 ASSERT_TRUE(embedded_test_server()->Start());
767 680
768 auto waiter = CreatePageLoadMetricsWaiter(); 681 auto waiter = CreatePageLoadMetricsWaiter();
769 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 682 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
770 ui_test_utils::NavigateToURL( 683 ui_test_utils::NavigateToURL(
771 browser(), embedded_test_server()->GetURL( 684 browser(), embedded_test_server()->GetURL(
772 "/page_load_metrics/document_write_async_script.html")); 685 "/page_load_metrics/document_write_async_script.html"));
773 waiter->Wait(); 686 waiter->Wait();
774 687
775 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 688 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
776 1); 689 1);
777 histogram_tester_.ExpectTotalCount( 690 histogram_tester_.ExpectTotalCount(
778 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 691 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
779 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 692 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
780 } 693 }
781 694
782 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteSameDomain) { 695 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteSameDomain) {
783 ASSERT_TRUE(embedded_test_server()->Start()); 696 ASSERT_TRUE(embedded_test_server()->Start());
784 697
785 auto waiter = CreatePageLoadMetricsWaiter(); 698 auto waiter = CreatePageLoadMetricsWaiter();
786 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 699 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
787 ui_test_utils::NavigateToURL( 700 ui_test_utils::NavigateToURL(
788 browser(), embedded_test_server()->GetURL( 701 browser(), embedded_test_server()->GetURL(
789 "/page_load_metrics/document_write_external_script.html")); 702 "/page_load_metrics/document_write_external_script.html"));
790 waiter->Wait(); 703 waiter->Wait();
791 704
792 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 705 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
793 1); 706 1);
794 histogram_tester_.ExpectTotalCount( 707 histogram_tester_.ExpectTotalCount(
795 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 708 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
796 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 709 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
797 } 710 }
798 711
799 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoDocumentWriteScript) { 712 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWriteScript) {
800 ASSERT_TRUE(embedded_test_server()->Start()); 713 ASSERT_TRUE(embedded_test_server()->Start());
801 714
802 auto waiter = CreatePageLoadMetricsWaiter(); 715 auto waiter = CreatePageLoadMetricsWaiter();
803 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 716 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
804 ui_test_utils::NavigateToURL( 717 ui_test_utils::NavigateToURL(
805 browser(), embedded_test_server()->GetURL( 718 browser(), embedded_test_server()->GetURL(
806 "/page_load_metrics/document_write_no_script.html")); 719 "/page_load_metrics/document_write_no_script.html"));
807 waiter->Wait(); 720 waiter->Wait();
808 721
809 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 722 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
810 1); 723 1);
811 histogram_tester_.ExpectTotalCount( 724 histogram_tester_.ExpectTotalCount(
812 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 725 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
813 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 726 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
814 } 727 }
815 728
816 // TODO(crbug.com/712935): Flaky on Linux dbg. 729 // TODO(crbug.com/712935): Flaky on Linux dbg.
817 #if defined(OS_LINUX) && !defined(NDEBUG) 730 #if defined(OS_LINUX) && !defined(NDEBUG)
818 #define MAYBE_BadXhtml DISABLED_BadXhtml 731 #define MAYBE_BadXhtml DISABLED_BadXhtml
819 #else 732 #else
820 #define MAYBE_BadXhtml BadXhtml 733 #define MAYBE_BadXhtml BadXhtml
821 #endif 734 #endif
822 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, MAYBE_BadXhtml) { 735 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, MAYBE_BadXhtml) {
823 ASSERT_TRUE(embedded_test_server()->Start()); 736 ASSERT_TRUE(embedded_test_server()->Start());
824 737
825 // When an XHTML page contains invalid XML, it causes a paint of the error 738 // When an XHTML page contains invalid XML, it causes a paint of the error
826 // message without a layout. Page load metrics currently treats this as an 739 // message without a layout. Page load metrics currently treats this as an
827 // error. Eventually, we'll fix this by special casing the handling of 740 // error. Eventually, we'll fix this by special casing the handling of
828 // documents with non-well-formed XML on the blink side. See crbug.com/627607 741 // documents with non-well-formed XML on the blink side. See crbug.com/627607
829 // for more. 742 // for more.
830 ui_test_utils::NavigateToURL( 743 ui_test_utils::NavigateToURL(
831 browser(), 744 browser(),
832 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml")); 745 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml"));
833 NavigateToUntrackedUrl(); 746 NavigateToUntrackedUrl();
834 747
835 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0); 748 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0);
836 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 749 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
837 750
838 histogram_tester_.ExpectBucketCount( 751 histogram_tester_.ExpectBucketCount(
839 page_load_metrics::internal::kErrorEvents, 752 page_load_metrics::internal::kErrorEvents,
840 page_load_metrics::ERR_BAD_TIMING_IPC_INVALID_TIMING, 1); 753 page_load_metrics::ERR_BAD_TIMING_IPC_INVALID_TIMING, 1);
841 754
842 histogram_tester_.ExpectTotalCount( 755 histogram_tester_.ExpectTotalCount(
843 page_load_metrics::internal::kPageLoadTimingStatus, 1); 756 page_load_metrics::internal::kPageLoadTimingStatus, 1);
844 histogram_tester_.ExpectBucketCount( 757 histogram_tester_.ExpectBucketCount(
845 page_load_metrics::internal::kPageLoadTimingStatus, 758 page_load_metrics::internal::kPageLoadTimingStatus,
846 page_load_metrics::internal::INVALID_ORDER_FIRST_LAYOUT_FIRST_PAINT, 1); 759 page_load_metrics::internal::INVALID_ORDER_FIRST_LAYOUT_FIRST_PAINT, 1);
847 } 760 }
848 761
849 // Test code that aborts provisional navigations. 762 // Test code that aborts provisional navigations.
850 // TODO(csharrison): Move these to unit tests once the navigation API in content 763 // TODO(csharrison): Move these to unit tests once the navigation API in content
851 // properly calls NavigationHandle/NavigationThrottle methods. 764 // properly calls NavigationHandle/NavigationThrottle methods.
852 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, AbortNewNavigation) { 765 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortNewNavigation) {
853 ASSERT_TRUE(embedded_test_server()->Start()); 766 ASSERT_TRUE(embedded_test_server()->Start());
854 767
855 GURL url(embedded_test_server()->GetURL("/title1.html")); 768 GURL url(embedded_test_server()->GetURL("/title1.html"));
856 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 769 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
857 content::TestNavigationManager manager( 770 content::TestNavigationManager manager(
858 browser()->tab_strip_model()->GetActiveWebContents(), url); 771 browser()->tab_strip_model()->GetActiveWebContents(), url);
859 772
860 chrome::Navigate(&params); 773 chrome::Navigate(&params);
861 EXPECT_TRUE(manager.WaitForRequestStart()); 774 EXPECT_TRUE(manager.WaitForRequestStart());
862 775
863 GURL url2(embedded_test_server()->GetURL("/title2.html")); 776 GURL url2(embedded_test_server()->GetURL("/title2.html"));
864 chrome::NavigateParams params2(browser(), url2, 777 chrome::NavigateParams params2(browser(), url2,
865 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR); 778 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR);
866 779
867 auto waiter = CreatePageLoadMetricsWaiter(); 780 auto waiter = CreatePageLoadMetricsWaiter();
868 waiter->AddPageExpectation(TimingField::LOAD_EVENT); 781 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
869 chrome::Navigate(&params2); 782 chrome::Navigate(&params2);
870 waiter->Wait(); 783 waiter->Wait();
871 784
872 histogram_tester_.ExpectTotalCount( 785 histogram_tester_.ExpectTotalCount(
873 internal::kHistogramAbortNewNavigationBeforeCommit, 1); 786 internal::kHistogramAbortNewNavigationBeforeCommit, 1);
874 } 787 }
875 788
876 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, AbortReload) { 789 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortReload) {
877 ASSERT_TRUE(embedded_test_server()->Start()); 790 ASSERT_TRUE(embedded_test_server()->Start());
878 791
879 GURL url(embedded_test_server()->GetURL("/title1.html")); 792 GURL url(embedded_test_server()->GetURL("/title1.html"));
880 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 793 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
881 content::TestNavigationManager manager( 794 content::TestNavigationManager manager(
882 browser()->tab_strip_model()->GetActiveWebContents(), url); 795 browser()->tab_strip_model()->GetActiveWebContents(), url);
883 796
884 chrome::Navigate(&params); 797 chrome::Navigate(&params);
885 EXPECT_TRUE(manager.WaitForRequestStart()); 798 EXPECT_TRUE(manager.WaitForRequestStart());
886 799
887 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD); 800 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD);
888 801
889 auto waiter = CreatePageLoadMetricsWaiter(); 802 auto waiter = CreatePageLoadMetricsWaiter();
890 waiter->AddPageExpectation(TimingField::LOAD_EVENT); 803 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
891 chrome::Navigate(&params2); 804 chrome::Navigate(&params2);
892 waiter->Wait(); 805 waiter->Wait();
893 806
894 histogram_tester_.ExpectTotalCount( 807 histogram_tester_.ExpectTotalCount(
895 internal::kHistogramAbortReloadBeforeCommit, 1); 808 internal::kHistogramAbortReloadBeforeCommit, 1);
896 } 809 }
897 810
898 // TODO(crbug.com/675061): Flaky on Win7 dbg. 811 // TODO(crbug.com/675061): Flaky on Win7 dbg.
899 #if defined(OS_WIN) 812 #if defined(OS_WIN)
900 #define MAYBE_AbortClose DISABLED_AbortClose 813 #define MAYBE_AbortClose DISABLED_AbortClose
901 #else 814 #else
902 #define MAYBE_AbortClose AbortClose 815 #define MAYBE_AbortClose AbortClose
903 #endif 816 #endif
904 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, MAYBE_AbortClose) { 817 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, MAYBE_AbortClose) {
905 ASSERT_TRUE(embedded_test_server()->Start()); 818 ASSERT_TRUE(embedded_test_server()->Start());
906 819
907 GURL url(embedded_test_server()->GetURL("/title1.html")); 820 GURL url(embedded_test_server()->GetURL("/title1.html"));
908 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 821 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
909 content::TestNavigationManager manager( 822 content::TestNavigationManager manager(
910 browser()->tab_strip_model()->GetActiveWebContents(), url); 823 browser()->tab_strip_model()->GetActiveWebContents(), url);
911 824
912 chrome::Navigate(&params); 825 chrome::Navigate(&params);
913 EXPECT_TRUE(manager.WaitForRequestStart()); 826 EXPECT_TRUE(manager.WaitForRequestStart());
914 827
915 browser()->tab_strip_model()->GetActiveWebContents()->Close(); 828 browser()->tab_strip_model()->GetActiveWebContents()->Close();
916 829
917 manager.WaitForNavigationFinished(); 830 manager.WaitForNavigationFinished();
918 831
919 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit, 832 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit,
920 1); 833 1);
921 ExpectNoTimingUpdates();
922 } 834 }
923 835
924 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, AbortMultiple) { 836 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortMultiple) {
925 ASSERT_TRUE(embedded_test_server()->Start()); 837 ASSERT_TRUE(embedded_test_server()->Start());
926 838
927 GURL url(embedded_test_server()->GetURL("/title1.html")); 839 GURL url(embedded_test_server()->GetURL("/title1.html"));
928 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 840 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
929 content::TestNavigationManager manager( 841 content::TestNavigationManager manager(
930 browser()->tab_strip_model()->GetActiveWebContents(), url); 842 browser()->tab_strip_model()->GetActiveWebContents(), url);
931 843
932 chrome::Navigate(&params); 844 chrome::Navigate(&params);
933 EXPECT_TRUE(manager.WaitForRequestStart()); 845 EXPECT_TRUE(manager.WaitForRequestStart());
934 846
(...skipping 13 matching lines...) Expand all
948 waiter->AddPageExpectation(TimingField::LOAD_EVENT); 860 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
949 chrome::Navigate(&params3); 861 chrome::Navigate(&params3);
950 waiter->Wait(); 862 waiter->Wait();
951 863
952 manager2.WaitForNavigationFinished(); 864 manager2.WaitForNavigationFinished();
953 865
954 histogram_tester_.ExpectTotalCount( 866 histogram_tester_.ExpectTotalCount(
955 internal::kHistogramAbortNewNavigationBeforeCommit, 2); 867 internal::kHistogramAbortNewNavigationBeforeCommit, 2);
956 } 868 }
957 869
958 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, 870 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
959 NoAbortMetricsOnClientRedirect) { 871 NoAbortMetricsOnClientRedirect) {
960 ASSERT_TRUE(embedded_test_server()->Start()); 872 ASSERT_TRUE(embedded_test_server()->Start());
961 873
962 GURL first_url(embedded_test_server()->GetURL("/title1.html")); 874 GURL first_url(embedded_test_server()->GetURL("/title1.html"));
963 ui_test_utils::NavigateToURL(browser(), first_url); 875 ui_test_utils::NavigateToURL(browser(), first_url);
964 876
965 GURL second_url(embedded_test_server()->GetURL("/title2.html")); 877 GURL second_url(embedded_test_server()->GetURL("/title2.html"));
966 chrome::NavigateParams params(browser(), second_url, 878 chrome::NavigateParams params(browser(), second_url,
967 ui::PAGE_TRANSITION_LINK); 879 ui::PAGE_TRANSITION_LINK);
968 content::TestNavigationManager manager( 880 content::TestNavigationManager manager(
(...skipping 10 matching lines...) Expand all
979 waiter->Wait(); 891 waiter->Wait();
980 } 892 }
981 893
982 manager.WaitForNavigationFinished(); 894 manager.WaitForNavigationFinished();
983 895
984 EXPECT_TRUE(histogram_tester_ 896 EXPECT_TRUE(histogram_tester_
985 .GetTotalCountsForPrefix("PageLoad.Experimental.AbortTiming.") 897 .GetTotalCountsForPrefix("PageLoad.Experimental.AbortTiming.")
986 .empty()); 898 .empty());
987 } 899 }
988 900
989 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, 901 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
990 FirstMeaningfulPaintRecorded) { 902 FirstMeaningfulPaintRecorded) {
991 ASSERT_TRUE(embedded_test_server()->Start()); 903 ASSERT_TRUE(embedded_test_server()->Start());
992 904
993 auto waiter = CreatePageLoadMetricsWaiter(); 905 auto waiter = CreatePageLoadMetricsWaiter();
994 waiter->AddPageExpectation(TimingField::FIRST_MEANINGFUL_PAINT); 906 waiter->AddPageExpectation(TimingField::FIRST_MEANINGFUL_PAINT);
995 ui_test_utils::NavigateToURL(browser(), 907 ui_test_utils::NavigateToURL(browser(),
996 embedded_test_server()->GetURL("/title1.html")); 908 embedded_test_server()->GetURL("/title1.html"));
997 waiter->Wait(); 909 waiter->Wait();
998 910
999 histogram_tester_.ExpectUniqueSample( 911 histogram_tester_.ExpectUniqueSample(
1000 internal::kHistogramFirstMeaningfulPaintStatus, 912 internal::kHistogramFirstMeaningfulPaintStatus,
1001 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1); 913 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1);
1002 histogram_tester_.ExpectTotalCount( 914 histogram_tester_.ExpectTotalCount(
1003 internal::kHistogramFirstMeaningfulPaint, 1); 915 internal::kHistogramFirstMeaningfulPaint, 1);
1004 histogram_tester_.ExpectTotalCount( 916 histogram_tester_.ExpectTotalCount(
1005 internal::kHistogramParseStartToFirstMeaningfulPaint, 1); 917 internal::kHistogramParseStartToFirstMeaningfulPaint, 1);
1006 } 918 }
1007 919
1008 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, 920 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
1009 FirstMeaningfulPaintNotRecorded) { 921 FirstMeaningfulPaintNotRecorded) {
1010 ASSERT_TRUE(embedded_test_server()->Start()); 922 ASSERT_TRUE(embedded_test_server()->Start());
1011 923
1012 auto waiter = CreatePageLoadMetricsWaiter(); 924 auto waiter = CreatePageLoadMetricsWaiter();
1013 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 925 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
1014 926
1015 ui_test_utils::NavigateToURL( 927 ui_test_utils::NavigateToURL(
1016 browser(), embedded_test_server()->GetURL( 928 browser(), embedded_test_server()->GetURL(
1017 "/page_load_metrics/page_with_active_connections.html")); 929 "/page_load_metrics/page_with_active_connections.html"));
1018 waiter->Wait(); 930 waiter->Wait();
1019 931
1020 // Navigate away before a FMP is reported. 932 // Navigate away before a FMP is reported.
1021 NavigateToUntrackedUrl(); 933 NavigateToUntrackedUrl();
1022 934
1023 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 935 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
1024 1); 936 1);
1025 histogram_tester_.ExpectUniqueSample( 937 histogram_tester_.ExpectUniqueSample(
1026 internal::kHistogramFirstMeaningfulPaintStatus, 938 internal::kHistogramFirstMeaningfulPaintStatus,
1027 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1); 939 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1);
1028 histogram_tester_.ExpectTotalCount( 940 histogram_tester_.ExpectTotalCount(
1029 internal::kHistogramFirstMeaningfulPaint, 0); 941 internal::kHistogramFirstMeaningfulPaint, 0);
1030 histogram_tester_.ExpectTotalCount( 942 histogram_tester_.ExpectTotalCount(
1031 internal::kHistogramParseStartToFirstMeaningfulPaint, 0); 943 internal::kHistogramParseStartToFirstMeaningfulPaint, 0);
1032 } 944 }
1033 945
1034 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, 946 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
1035 NoStatePrefetchObserverCacheable) { 947 NoStatePrefetchObserverCacheable) {
1036 ASSERT_TRUE(embedded_test_server()->Start()); 948 ASSERT_TRUE(embedded_test_server()->Start());
1037 949
1038 auto waiter = CreatePageLoadMetricsWaiter(); 950 auto waiter = CreatePageLoadMetricsWaiter();
1039 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 951 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
1040 952
1041 ui_test_utils::NavigateToURL(browser(), 953 ui_test_utils::NavigateToURL(browser(),
1042 embedded_test_server()->GetURL("/title1.html")); 954 embedded_test_server()->GetURL("/title1.html"));
1043 955
1044 waiter->Wait(); 956 waiter->Wait();
1045 957
1046 histogram_tester_.ExpectTotalCount( 958 histogram_tester_.ExpectTotalCount(
1047 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0); 959 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0);
1048 histogram_tester_.ExpectTotalCount( 960 histogram_tester_.ExpectTotalCount(
1049 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1); 961 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1);
1050 } 962 }
1051 963
1052 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, 964 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
1053 NoStatePrefetchObserverNoStore) { 965 NoStatePrefetchObserverNoStore) {
1054 ASSERT_TRUE(embedded_test_server()->Start()); 966 ASSERT_TRUE(embedded_test_server()->Start());
1055 967
1056 auto waiter = CreatePageLoadMetricsWaiter(); 968 auto waiter = CreatePageLoadMetricsWaiter();
1057 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 969 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
1058 970
1059 ui_test_utils::NavigateToURL(browser(), 971 ui_test_utils::NavigateToURL(browser(),
1060 embedded_test_server()->GetURL("/nostore.html")); 972 embedded_test_server()->GetURL("/nostore.html"));
1061 973
1062 waiter->Wait(); 974 waiter->Wait();
1063 975
1064 histogram_tester_.ExpectTotalCount( 976 histogram_tester_.ExpectTotalCount(
1065 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1); 977 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1);
1066 histogram_tester_.ExpectTotalCount( 978 histogram_tester_.ExpectTotalCount(
1067 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0); 979 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0);
1068 } 980 }
1069 981
1070 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, CSSTiming) { 982 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, CSSTiming) {
1071 ASSERT_TRUE(embedded_test_server()->Start()); 983 ASSERT_TRUE(embedded_test_server()->Start());
1072 984
1073 auto waiter = CreatePageLoadMetricsWaiter(); 985 auto waiter = CreatePageLoadMetricsWaiter();
1074 waiter->AddPageExpectation(TimingField::STYLE_UPDATE_BEFORE_FCP); 986 waiter->AddPageExpectation(TimingField::STYLE_UPDATE_BEFORE_FCP);
1075 987
1076 // Careful: Blink code clamps timestamps to 5us, so any CSS parsing we do here 988 // Careful: Blink code clamps timestamps to 5us, so any CSS parsing we do here
1077 // must take >> 5us, otherwise we'll log 0 for the value and it will remain 989 // must take >> 5us, otherwise we'll log 0 for the value and it will remain
1078 // unset here. 990 // unset here.
1079 ui_test_utils::NavigateToURL( 991 ui_test_utils::NavigateToURL(
1080 browser(), 992 browser(),
1081 embedded_test_server()->GetURL("/page_load_metrics/page_with_css.html")); 993 embedded_test_server()->GetURL("/page_load_metrics/page_with_css.html"));
1082 waiter->Wait(); 994 waiter->Wait();
1083 995
1084 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 996 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
1085 1); 997 1);
1086 histogram_tester_.ExpectTotalCount( 998 histogram_tester_.ExpectTotalCount(
1087 "PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint", 1); 999 "PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint", 1);
1088 histogram_tester_.ExpectTotalCount( 1000 histogram_tester_.ExpectTotalCount(
1089 "PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint", 1); 1001 "PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint", 1);
1090 histogram_tester_.ExpectTotalCount( 1002 histogram_tester_.ExpectTotalCount(
1091 "PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint", 1); 1003 "PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint", 1);
1092 } 1004 }
1093 1005
1094 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PayloadSize) { 1006 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PayloadSize) {
1095 ASSERT_TRUE(embedded_test_server()->Start()); 1007 ASSERT_TRUE(embedded_test_server()->Start());
1096 1008
1097 auto waiter = CreatePageLoadMetricsWaiter(); 1009 auto waiter = CreatePageLoadMetricsWaiter();
1098 waiter->AddPageExpectation(TimingField::LOAD_EVENT); 1010 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
1099 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL( 1011 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL(
1100 "/page_load_metrics/large.html")); 1012 "/page_load_metrics/large.html"));
1101 waiter->Wait(); 1013 waiter->Wait();
1102 1014
1103 // Payload histograms are only logged when a page load terminates, so force 1015 // Payload histograms are only logged when a page load terminates, so force
1104 // navigation to another page. 1016 // navigation to another page.
1105 NavigateToUntrackedUrl(); 1017 NavigateToUntrackedUrl();
1106 1018
1107 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); 1019 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1);
1108 1020
1109 // Verify that there is a single sample recorded in the 10kB bucket (the size 1021 // Verify that there is a single sample recorded in the 10kB bucket (the size
1110 // of the main HTML response). 1022 // of the main HTML response).
1111 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1); 1023 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1);
1112 } 1024 }
1113 1025
1114 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, 1026 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
1115 PayloadSizeIgnoresDownloads) { 1027 PayloadSizeIgnoresDownloads) {
1116 ASSERT_TRUE(embedded_test_server()->Start()); 1028 ASSERT_TRUE(embedded_test_server()->Start());
1117 1029
1118 bool prev_io_allowed = base::ThreadRestrictions::SetIOAllowed(true); 1030 bool prev_io_allowed = base::ThreadRestrictions::SetIOAllowed(true);
1119 { 1031 {
1120 base::ScopedTempDir downloads_directory; 1032 base::ScopedTempDir downloads_directory;
1121 ASSERT_TRUE(downloads_directory.CreateUniqueTempDir()); 1033 ASSERT_TRUE(downloads_directory.CreateUniqueTempDir());
1122 browser()->profile()->GetPrefs()->SetFilePath( 1034 browser()->profile()->GetPrefs()->SetFilePath(
1123 prefs::kDownloadDefaultDirectory, downloads_directory.GetPath()); 1035 prefs::kDownloadDefaultDirectory, downloads_directory.GetPath());
1124 content::DownloadTestObserverTerminal downloads_observer( 1036 content::DownloadTestObserverTerminal downloads_observer(
1125 content::BrowserContext::GetDownloadManager(browser()->profile()), 1037 content::BrowserContext::GetDownloadManager(browser()->profile()),
1126 1, // == wait_count (only waiting for "download-test1.lib"). 1038 1, // == wait_count (only waiting for "download-test1.lib").
1127 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); 1039 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
1128 1040
1129 ui_test_utils::NavigateToURL( 1041 ui_test_utils::NavigateToURL(
1130 browser(), embedded_test_server()->GetURL( 1042 browser(), embedded_test_server()->GetURL(
1131 "/page_load_metrics/download_anchor_click.html")); 1043 "/page_load_metrics/download_anchor_click.html"));
1132 downloads_observer.WaitForFinished(); 1044 downloads_observer.WaitForFinished();
1133 } 1045 }
1134 base::ThreadRestrictions::SetIOAllowed(prev_io_allowed); 1046 base::ThreadRestrictions::SetIOAllowed(prev_io_allowed);
1135 1047
1136 NavigateToUntrackedUrl(); 1048 NavigateToUntrackedUrl();
1137 1049
1138 histogram_tester_.ExpectUniqueSample(internal::kHistogramTotalBytes, 0, 1); 1050 histogram_tester_.ExpectUniqueSample(internal::kHistogramTotalBytes, 0, 1);
1139 } 1051 }
1140
1141 INSTANTIATE_TEST_CASE_P(
1142 /* no prefix */,
1143 PageLoadMetricsBrowserTest,
1144 testing::Values(IPCType::LEGACY, IPCType::MOJO));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698