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

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

Issue 2903693004: Make PageLoadMetricsWaiter more resilient (Closed)
Patch Set: rebase 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
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/memory/weak_ptr.h"
9 #include "base/test/histogram_tester.h" 10 #include "base/test/histogram_tester.h"
10 #include "base/test/scoped_feature_list.h" 11 #include "base/test/scoped_feature_list.h"
11 #include "base/threading/thread_restrictions.h" 12 #include "base/threading/thread_restrictions.h"
12 #include "base/time/time.h" 13 #include "base/time/time.h"
13 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" 14 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
14 #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"
15 #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"
16 #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"
17 #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"
18 #include "chrome/browser/page_load_metrics/page_load_tracker.h" 19 #include "chrome/browser/page_load_metrics/page_load_tracker.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 FIRST_LAYOUT = 1 << 0, 71 FIRST_LAYOUT = 1 << 0,
71 FIRST_PAINT = 1 << 1, 72 FIRST_PAINT = 1 << 1,
72 FIRST_CONTENTFUL_PAINT = 1 << 2, 73 FIRST_CONTENTFUL_PAINT = 1 << 2,
73 FIRST_MEANINGFUL_PAINT = 1 << 3, 74 FIRST_MEANINGFUL_PAINT = 1 << 3,
74 STYLE_UPDATE_BEFORE_FCP = 1 << 4, 75 STYLE_UPDATE_BEFORE_FCP = 1 << 4,
75 DOCUMENT_WRITE_BLOCK_RELOAD = 1 << 5, 76 DOCUMENT_WRITE_BLOCK_RELOAD = 1 << 5,
76 LOAD_EVENT = 1 << 6 77 LOAD_EVENT = 1 << 6
77 }; 78 };
78 79
79 explicit PageLoadMetricsWaiter(content::WebContents* web_contents) 80 explicit PageLoadMetricsWaiter(content::WebContents* web_contents)
80 : TestingObserver(web_contents) {} 81 : TestingObserver(web_contents), weak_factory_(this) {}
81 82
82 ~PageLoadMetricsWaiter() override { DCHECK_EQ(nullptr, run_loop_.get()); } 83 ~PageLoadMetricsWaiter() override {
83 84 CHECK(did_add_observer_);
Charlie Harrison 2017/05/25 19:35:33 #include "base/logging"
Charlie Harrison 2017/05/25 19:35:34 Should we ASSERT instead of CHECK here?
Bryan McQuade 2017/05/25 19:54:05 added include ASSERT macros fail to compile in de
Charlie Harrison 2017/05/25 19:59:44 Weird... fine by me
84 // Add the given expectation to match on. 85 CHECK_EQ(nullptr, run_loop_.get());
85 void AddMainFrameExpectation(TimingField field) {
86 main_frame_expected_fields_.Set(field);
87 }
88 void AddSubFrameExpectation(TimingField field) {
89 child_frame_expected_fields_.Set(field);
90 } 86 }
91 87
92 // Whether the given TimingField was observed in the main frame. 88 // Add a page-level expectation.
93 bool DidObserveInMainFrame(TimingField field) { 89 void AddPageExpectation(TimingField field) {
94 return observed_main_frame_fields_.IsSet(field); 90 page_expected_fields_.Set(field);
91 }
92
93 // Add a subframe-level expectation.
94 void AddSubFrameExpectation(TimingField field) {
95 subframe_expected_fields_.Set(field);
96 // If the given field is also a page-level field, then add a page-level
97 // expectation as well
98 if (IsPageLevelField(field))
99 page_expected_fields_.Set(field);
100 }
101
102 // Whether the given TimingField was observed in the page.
103 bool DidObserveInPage(TimingField field) {
104 return observed_page_fields_.IsSet(field);
95 } 105 }
96 106
97 // Waits for a TimingUpdated IPC that matches the fields set by 107 // Waits for a TimingUpdated IPC that matches the fields set by
98 // |AddMainFrameExpectation| and |AddSubFrameExpectation|. All matching fields 108 // |AddPageExpectation| and |AddSubFrameExpectation|. All matching fields
99 // must be set in a TimingUpdated IPC for it to end this wait. 109 // must be set in a TimingUpdated IPC for it to end this wait.
100 void Wait() { 110 void Wait() {
101 if (expectations_satisfied()) 111 if (expectations_satisfied())
102 return; 112 return;
103 113
104 run_loop_.reset(new base::RunLoop()); 114 run_loop_.reset(new base::RunLoop());
Charlie Harrison 2017/05/25 19:35:34 nit: #include "base/run_loop" and use base::MakeUn
105 run_loop_->Run(); 115 run_loop_->Run();
106 run_loop_.reset(nullptr); 116 run_loop_.reset(nullptr);
107 117
108 EXPECT_TRUE(expectations_satisfied()); 118 EXPECT_TRUE(expectations_satisfied());
Bryan McQuade 2017/05/25 19:54:06 the codereview site is refusing to show me your co
109 } 119 }
110 120
121 void OnTimingUpdate(bool is_subframe,
122 const page_load_metrics::mojom::PageLoadTiming& timing,
123 const page_load_metrics::PageLoadExtraInfo& extra_info) {
124 if (expectations_satisfied())
125 return;
126
127 const page_load_metrics::mojom::PageLoadMetadata& metadata =
128 is_subframe ? extra_info.subframe_metadata
129 : extra_info.main_frame_metadata;
130 TimingFieldBitSet matched_bits = GetMatchedBits(timing, metadata);
131 if (is_subframe) {
132 subframe_expected_fields_.ClearMatching(matched_bits);
133 } else {
134 page_expected_fields_.ClearMatching(matched_bits);
135 observed_page_fields_.Merge(matched_bits);
136 }
137
138 if (expectations_satisfied() && run_loop_)
139 run_loop_->Quit();
140 }
141
111 private: 142 private:
143 // PageLoadMetricsObserver used by the PageLoadMetricsWaiter to observe
144 // metrics updates.
Charlie Harrison 2017/05/25 19:35:34 Can you explain why you need weak ptrs?
Bryan McQuade 2017/05/25 19:54:06 Done - added comment to constructor.
145 class WaiterMetricsObserver
146 : public page_load_metrics::PageLoadMetricsObserver {
147 public:
148 explicit WaiterMetricsObserver(base::WeakPtr<PageLoadMetricsWaiter> waiter)
149 : waiter_(waiter) {}
150
151 void OnTimingUpdate(
152 bool is_subframe,
153 const page_load_metrics::mojom::PageLoadTiming& timing,
154 const page_load_metrics::PageLoadExtraInfo& extra_info) override {
155 if (waiter_)
156 waiter_->OnTimingUpdate(is_subframe, timing, extra_info);
157 }
158
159 private:
160 const base::WeakPtr<PageLoadMetricsWaiter> waiter_;
161 };
162
112 // Manages a bitset of TimingFields. 163 // Manages a bitset of TimingFields.
113 class TimingFieldBitSet { 164 class TimingFieldBitSet {
114 public: 165 public:
115 TimingFieldBitSet() {} 166 TimingFieldBitSet() {}
116 167
117 // Returns whether this bitset has all bits unset. 168 // Returns whether this bitset has all bits unset.
118 bool Empty() const { return bitmask_ == 0; } 169 bool Empty() const { return bitmask_ == 0; }
119 170
120 // Returns whether this bitset has the given bit set. 171 // Returns whether this bitset has the given bit set.
121 bool IsSet(TimingField field) const { 172 bool IsSet(TimingField field) const {
122 return (bitmask_ & static_cast<int>(field)) != 0; 173 return (bitmask_ & static_cast<int>(field)) != 0;
123 } 174 }
124 175
125 // Sets the bit for the given |field|. 176 // Sets the bit for the given |field|.
126 void Set(TimingField field) { bitmask_ |= static_cast<int>(field); } 177 void Set(TimingField field) { bitmask_ |= static_cast<int>(field); }
127 178
128 // Merges bits set in |other| into this bitset. 179 // Merges bits set in |other| into this bitset.
129 void Merge(const TimingFieldBitSet& other) { bitmask_ |= other.bitmask_; } 180 void Merge(const TimingFieldBitSet& other) { bitmask_ |= other.bitmask_; }
130 181
131 // Clears all bits set in the |other| bitset. 182 // Clears all bits set in the |other| bitset.
132 void ClearMatching(const TimingFieldBitSet& other) { 183 void ClearMatching(const TimingFieldBitSet& other) {
133 bitmask_ &= ~other.bitmask_; 184 bitmask_ &= ~other.bitmask_;
134 } 185 }
135 186
136 private: 187 private:
137 int bitmask_ = 0; 188 int bitmask_ = 0;
138 }; 189 };
139 190
191 static bool IsPageLevelField(TimingField field) {
192 switch (field) {
193 case TimingField::FIRST_PAINT:
194 case TimingField::FIRST_CONTENTFUL_PAINT:
195 case TimingField::FIRST_MEANINGFUL_PAINT:
196 return true;
197 default:
198 return false;
199 }
200 }
201
140 static TimingFieldBitSet GetMatchedBits( 202 static TimingFieldBitSet GetMatchedBits(
141 const page_load_metrics::mojom::PageLoadTiming& timing, 203 const page_load_metrics::mojom::PageLoadTiming& timing,
142 const page_load_metrics::mojom::PageLoadMetadata& metadata) { 204 const page_load_metrics::mojom::PageLoadMetadata& metadata) {
143 TimingFieldBitSet matched_bits; 205 TimingFieldBitSet matched_bits;
144 if (timing.document_timing->first_layout) 206 if (timing.document_timing->first_layout)
145 matched_bits.Set(TimingField::FIRST_LAYOUT); 207 matched_bits.Set(TimingField::FIRST_LAYOUT);
146 if (timing.document_timing->load_event_start) 208 if (timing.document_timing->load_event_start)
147 matched_bits.Set(TimingField::LOAD_EVENT); 209 matched_bits.Set(TimingField::LOAD_EVENT);
148 if (timing.paint_timing->first_paint) 210 if (timing.paint_timing->first_paint)
149 matched_bits.Set(TimingField::FIRST_PAINT); 211 matched_bits.Set(TimingField::FIRST_PAINT);
150 if (timing.paint_timing->first_contentful_paint) 212 if (timing.paint_timing->first_contentful_paint)
151 matched_bits.Set(TimingField::FIRST_CONTENTFUL_PAINT); 213 matched_bits.Set(TimingField::FIRST_CONTENTFUL_PAINT);
152 if (timing.paint_timing->first_meaningful_paint) 214 if (timing.paint_timing->first_meaningful_paint)
153 matched_bits.Set(TimingField::FIRST_MEANINGFUL_PAINT); 215 matched_bits.Set(TimingField::FIRST_MEANINGFUL_PAINT);
154 if (timing.style_sheet_timing->update_style_duration_before_fcp) 216 if (timing.style_sheet_timing->update_style_duration_before_fcp)
155 matched_bits.Set(TimingField::STYLE_UPDATE_BEFORE_FCP); 217 matched_bits.Set(TimingField::STYLE_UPDATE_BEFORE_FCP);
156 if (metadata.behavior_flags & 218 if (metadata.behavior_flags &
157 blink::WebLoadingBehaviorFlag:: 219 blink::WebLoadingBehaviorFlag::
158 kWebLoadingBehaviorDocumentWriteBlockReload) 220 kWebLoadingBehaviorDocumentWriteBlockReload)
159 matched_bits.Set(TimingField::DOCUMENT_WRITE_BLOCK_RELOAD); 221 matched_bits.Set(TimingField::DOCUMENT_WRITE_BLOCK_RELOAD);
160 222
161 return matched_bits; 223 return matched_bits;
162 } 224 }
163 225
164 void OnTimingUpdated( 226 void OnCommit(page_load_metrics::PageLoadTracker* tracker) override {
165 bool is_main_frame, 227 // A PageLoadMetricsWaiter should only wait for events from a single page
166 const page_load_metrics::mojom::PageLoadTiming& timing, 228 // load.
167 const page_load_metrics::mojom::PageLoadMetadata& metadata) override { 229 ASSERT_FALSE(did_add_observer_);
168 if (expectations_satisfied()) 230 tracker->AddObserver(
169 return; 231 base::MakeUnique<WaiterMetricsObserver>(weak_factory_.GetWeakPtr()));
170 232 did_add_observer_ = true;
171 TimingFieldBitSet matched_bits = GetMatchedBits(timing, metadata);
172 if (is_main_frame) {
173 main_frame_expected_fields_.ClearMatching(matched_bits);
174 observed_main_frame_fields_.Merge(matched_bits);
175 } else {
176 child_frame_expected_fields_.ClearMatching(matched_bits);
177 }
178
179 if (expectations_satisfied() && run_loop_)
180 run_loop_->Quit();
181 } 233 }
182 234
183 bool expectations_satisfied() const { 235 bool expectations_satisfied() const {
184 return child_frame_expected_fields_.Empty() && 236 return subframe_expected_fields_.Empty() && page_expected_fields_.Empty();
185 main_frame_expected_fields_.Empty();
186 } 237 }
187 238
188 std::unique_ptr<base::RunLoop> run_loop_; 239 std::unique_ptr<base::RunLoop> run_loop_;
189 240
190 TimingFieldBitSet child_frame_expected_fields_; 241 TimingFieldBitSet page_expected_fields_;
191 TimingFieldBitSet main_frame_expected_fields_; 242 TimingFieldBitSet subframe_expected_fields_;
192 243
193 TimingFieldBitSet observed_main_frame_fields_; 244 TimingFieldBitSet observed_page_fields_;
245
246 bool did_add_observer_ = false;
247
248 base::WeakPtrFactory<PageLoadMetricsWaiter> weak_factory_;
194 }; 249 };
195 250
196 using TimingField = PageLoadMetricsWaiter::TimingField; 251 using TimingField = PageLoadMetricsWaiter::TimingField;
197 252
198 class IPCTypeVerifier 253 class IPCTypeVerifier
199 : public page_load_metrics::MetricsWebContentsObserver::TestingObserver { 254 : public page_load_metrics::MetricsWebContentsObserver::TestingObserver {
200 public: 255 public:
201 explicit IPCTypeVerifier(content::WebContents* web_contents) 256 explicit IPCTypeVerifier(content::WebContents* web_contents)
202 : TestingObserver(web_contents) {} 257 : TestingObserver(web_contents) {}
203 258
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoNavigation) { 363 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoNavigation) {
309 ExpectNoTimingUpdates(); 364 ExpectNoTimingUpdates();
310 ASSERT_TRUE(embedded_test_server()->Start()); 365 ASSERT_TRUE(embedded_test_server()->Start());
311 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 366 EXPECT_TRUE(NoPageLoadMetricsRecorded());
312 } 367 }
313 368
314 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NewPage) { 369 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NewPage) {
315 ASSERT_TRUE(embedded_test_server()->Start()); 370 ASSERT_TRUE(embedded_test_server()->Start());
316 371
317 auto waiter = CreatePageLoadMetricsWaiter(); 372 auto waiter = CreatePageLoadMetricsWaiter();
318 waiter->AddMainFrameExpectation(TimingField::FIRST_PAINT); 373 waiter->AddPageExpectation(TimingField::FIRST_PAINT);
319 ui_test_utils::NavigateToURL(browser(), 374 ui_test_utils::NavigateToURL(browser(),
320 embedded_test_server()->GetURL("/title1.html")); 375 embedded_test_server()->GetURL("/title1.html"));
321 waiter->Wait(); 376 waiter->Wait();
322 377
323 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 378 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
324 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 379 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
325 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 380 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
326 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); 381 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1);
327 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1); 382 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1);
328 histogram_tester_.ExpectTotalCount( 383 histogram_tester_.ExpectTotalCount(
(...skipping 10 matching lines...) Expand all
339 394
340 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics 395 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics
341 // have been recorded. 396 // have been recorded.
342 EXPECT_FALSE(NoPageLoadMetricsRecorded()); 397 EXPECT_FALSE(NoPageLoadMetricsRecorded());
343 } 398 }
344 399
345 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoPaintForEmptyDocument) { 400 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoPaintForEmptyDocument) {
346 ASSERT_TRUE(embedded_test_server()->Start()); 401 ASSERT_TRUE(embedded_test_server()->Start());
347 402
348 auto waiter = CreatePageLoadMetricsWaiter(); 403 auto waiter = CreatePageLoadMetricsWaiter();
349 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 404 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
350 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 405 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
351 ui_test_utils::NavigateToURL(browser(), 406 ui_test_utils::NavigateToURL(browser(),
352 embedded_test_server()->GetURL("/empty.html")); 407 embedded_test_server()->GetURL("/empty.html"));
353 waiter->Wait(); 408 waiter->Wait();
354 EXPECT_FALSE(waiter->DidObserveInMainFrame(TimingField::FIRST_PAINT)); 409 EXPECT_FALSE(waiter->DidObserveInPage(TimingField::FIRST_PAINT));
355 410
356 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 411 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
357 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 412 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
358 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 413 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
359 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 414 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
360 0); 415 0);
361 } 416 }
362 417
363 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, 418 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest,
364 NoPaintForEmptyDocumentInChildFrame) { 419 NoPaintForEmptyDocumentInChildFrame) {
365 ASSERT_TRUE(embedded_test_server()->Start()); 420 ASSERT_TRUE(embedded_test_server()->Start());
366 421
367 GURL a_url( 422 GURL a_url(
368 embedded_test_server()->GetURL("/page_load_metrics/empty_iframe.html")); 423 embedded_test_server()->GetURL("/page_load_metrics/empty_iframe.html"));
369 424
370 auto waiter = CreatePageLoadMetricsWaiter(); 425 auto waiter = CreatePageLoadMetricsWaiter();
371 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 426 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
372 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 427 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
373 waiter->AddSubFrameExpectation(TimingField::FIRST_LAYOUT); 428 waiter->AddSubFrameExpectation(TimingField::FIRST_LAYOUT);
374 waiter->AddSubFrameExpectation(TimingField::LOAD_EVENT); 429 waiter->AddSubFrameExpectation(TimingField::LOAD_EVENT);
375 ui_test_utils::NavigateToURL(browser(), a_url); 430 ui_test_utils::NavigateToURL(browser(), a_url);
376 waiter->Wait(); 431 waiter->Wait();
377 EXPECT_FALSE(waiter->DidObserveInMainFrame(TimingField::FIRST_PAINT)); 432 EXPECT_FALSE(waiter->DidObserveInPage(TimingField::FIRST_PAINT));
378 433
379 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 434 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
380 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 435 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
381 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 436 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
382 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 437 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
383 0); 438 0);
384 } 439 }
385 440
386 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PaintInChildFrame) { 441 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PaintInChildFrame) {
387 ASSERT_TRUE(embedded_test_server()->Start()); 442 ASSERT_TRUE(embedded_test_server()->Start());
388 443
389 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframe.html")); 444 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframe.html"));
390 auto waiter = CreatePageLoadMetricsWaiter(); 445 auto waiter = CreatePageLoadMetricsWaiter();
391 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 446 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
392 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 447 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
393 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT); 448 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT);
394 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 449 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
395 ui_test_utils::NavigateToURL(browser(), a_url); 450 ui_test_utils::NavigateToURL(browser(), a_url);
396 waiter->Wait(); 451 waiter->Wait();
397 452
398 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 453 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
399 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 454 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
400 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); 455 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1);
401 } 456 }
402 457
403 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PaintInMultipleChildFrames) { 458 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PaintInMultipleChildFrames) {
404 ASSERT_TRUE(embedded_test_server()->Start()); 459 ASSERT_TRUE(embedded_test_server()->Start());
405 460
406 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframes.html")); 461 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframes.html"));
407 462
408 auto waiter = CreatePageLoadMetricsWaiter(); 463 auto waiter = CreatePageLoadMetricsWaiter();
409 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 464 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
410 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 465 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
411 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT); 466 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT);
412 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 467 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
413 ui_test_utils::NavigateToURL(browser(), a_url); 468 ui_test_utils::NavigateToURL(browser(), a_url);
414 waiter->Wait(); 469 waiter->Wait();
415 470
416 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 471 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
417 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 472 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
418 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); 473 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1);
419 } 474 }
420 475
421 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PaintInMainAndChildFrame) { 476 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PaintInMainAndChildFrame) {
422 ASSERT_TRUE(embedded_test_server()->Start()); 477 ASSERT_TRUE(embedded_test_server()->Start());
423 478
424 GURL a_url(embedded_test_server()->GetURL( 479 GURL a_url(embedded_test_server()->GetURL(
425 "/page_load_metrics/main_frame_with_iframe.html")); 480 "/page_load_metrics/main_frame_with_iframe.html"));
426 481
427 auto waiter = CreatePageLoadMetricsWaiter(); 482 auto waiter = CreatePageLoadMetricsWaiter();
428 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 483 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
429 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 484 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
430 waiter->AddMainFrameExpectation(TimingField::FIRST_PAINT); 485 waiter->AddPageExpectation(TimingField::FIRST_PAINT);
431 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 486 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
432 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT); 487 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT);
433 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 488 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
434 ui_test_utils::NavigateToURL(browser(), a_url); 489 ui_test_utils::NavigateToURL(browser(), a_url);
435 waiter->Wait(); 490 waiter->Wait();
436 491
437 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 492 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
438 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 493 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
439 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); 494 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1);
440 } 495 }
441 496
442 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, SameDocumentNavigation) { 497 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, SameDocumentNavigation) {
443 ASSERT_TRUE(embedded_test_server()->Start()); 498 ASSERT_TRUE(embedded_test_server()->Start());
444 499
445 auto waiter = CreatePageLoadMetricsWaiter(); 500 auto waiter = CreatePageLoadMetricsWaiter();
446 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 501 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
447 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 502 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
448 ui_test_utils::NavigateToURL(browser(), 503 ui_test_utils::NavigateToURL(browser(),
449 embedded_test_server()->GetURL("/title1.html")); 504 embedded_test_server()->GetURL("/title1.html"));
450 waiter->Wait(); 505 waiter->Wait();
451 506
452 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 507 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
453 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 508 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
454 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 509 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
455 510
456 // Perform a same-document navigation. No additional metrics should be logged. 511 // Perform a same-document navigation. No additional metrics should be logged.
457 ui_test_utils::NavigateToURL( 512 ui_test_utils::NavigateToURL(
458 browser(), embedded_test_server()->GetURL("/title1.html#hash")); 513 browser(), embedded_test_server()->GetURL("/title1.html#hash"));
459 NavigateToUntrackedUrl(); 514 NavigateToUntrackedUrl();
460 515
461 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 516 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
462 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 517 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
463 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 518 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
464 } 519 }
465 520
466 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, SameUrlNavigation) { 521 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, SameUrlNavigation) {
467 ASSERT_TRUE(embedded_test_server()->Start()); 522 ASSERT_TRUE(embedded_test_server()->Start());
468 523
469 auto waiter = CreatePageLoadMetricsWaiter(); 524 auto waiter = CreatePageLoadMetricsWaiter();
470 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 525 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
471 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 526 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
472 ui_test_utils::NavigateToURL(browser(), 527 ui_test_utils::NavigateToURL(browser(),
473 embedded_test_server()->GetURL("/title1.html")); 528 embedded_test_server()->GetURL("/title1.html"));
474 waiter->Wait(); 529 waiter->Wait();
475 530
476 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 531 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
477 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 532 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
478 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 533 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
479 534
480 waiter = CreatePageLoadMetricsWaiter(); 535 waiter = CreatePageLoadMetricsWaiter();
481 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 536 waiter->AddPageExpectation(TimingField::FIRST_LAYOUT);
482 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 537 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
483 ui_test_utils::NavigateToURL(browser(), 538 ui_test_utils::NavigateToURL(browser(),
484 embedded_test_server()->GetURL("/title1.html")); 539 embedded_test_server()->GetURL("/title1.html"));
485 waiter->Wait(); 540 waiter->Wait();
486 541
487 // We expect one histogram sample for each navigation to title1.html. 542 // We expect one histogram sample for each navigation to title1.html.
488 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2); 543 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2);
489 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2); 544 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2);
490 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2); 545 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2);
491 } 546 }
492 547
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 622
568 NavigateToUntrackedUrl(); 623 NavigateToUntrackedUrl();
569 ExpectNoTimingUpdates(); 624 ExpectNoTimingUpdates();
570 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 625 EXPECT_TRUE(NoPageLoadMetricsRecorded());
571 } 626 }
572 627
573 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PreloadDocumentWrite) { 628 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PreloadDocumentWrite) {
574 ASSERT_TRUE(embedded_test_server()->Start()); 629 ASSERT_TRUE(embedded_test_server()->Start());
575 630
576 auto waiter = CreatePageLoadMetricsWaiter(); 631 auto waiter = CreatePageLoadMetricsWaiter();
577 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 632 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
578 633
579 ui_test_utils::NavigateToURL( 634 ui_test_utils::NavigateToURL(
580 browser(), embedded_test_server()->GetURL( 635 browser(), embedded_test_server()->GetURL(
581 "/page_load_metrics/document_write_external_script.html")); 636 "/page_load_metrics/document_write_external_script.html"));
582 waiter->Wait(); 637 waiter->Wait();
583 638
584 histogram_tester_.ExpectTotalCount( 639 histogram_tester_.ExpectTotalCount(
585 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); 640 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1);
586 } 641 }
587 642
588 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) { 643 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) {
589 ASSERT_TRUE(embedded_test_server()->Start()); 644 ASSERT_TRUE(embedded_test_server()->Start());
590 645
591 auto waiter = CreatePageLoadMetricsWaiter(); 646 auto waiter = CreatePageLoadMetricsWaiter();
592 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 647 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
593 ui_test_utils::NavigateToURL( 648 ui_test_utils::NavigateToURL(
594 browser(), embedded_test_server()->GetURL( 649 browser(), embedded_test_server()->GetURL(
595 "/page_load_metrics/document_write_no_script.html")); 650 "/page_load_metrics/document_write_no_script.html"));
596 waiter->Wait(); 651 waiter->Wait();
597 652
598 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 653 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
599 1); 654 1);
600 histogram_tester_.ExpectTotalCount( 655 histogram_tester_.ExpectTotalCount(
601 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 656 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
602 } 657 }
603 658
604 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoDocumentWrite) { 659 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoDocumentWrite) {
605 ASSERT_TRUE(embedded_test_server()->Start()); 660 ASSERT_TRUE(embedded_test_server()->Start());
606 661
607 auto waiter = CreatePageLoadMetricsWaiter(); 662 auto waiter = CreatePageLoadMetricsWaiter();
608 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 663 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
609 664
610 ui_test_utils::NavigateToURL(browser(), 665 ui_test_utils::NavigateToURL(browser(),
611 embedded_test_server()->GetURL("/title1.html")); 666 embedded_test_server()->GetURL("/title1.html"));
612 waiter->Wait(); 667 waiter->Wait();
613 668
614 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 669 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
615 1); 670 1);
616 histogram_tester_.ExpectTotalCount( 671 histogram_tester_.ExpectTotalCount(
617 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 672 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
618 histogram_tester_.ExpectTotalCount( 673 histogram_tester_.ExpectTotalCount(
619 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 674 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
620 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 675 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
621 } 676 }
622 677
623 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteBlock) { 678 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteBlock) {
624 ASSERT_TRUE(embedded_test_server()->Start()); 679 ASSERT_TRUE(embedded_test_server()->Start());
625 680
626 auto waiter = CreatePageLoadMetricsWaiter(); 681 auto waiter = CreatePageLoadMetricsWaiter();
627 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 682 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
628 683
629 ui_test_utils::NavigateToURL( 684 ui_test_utils::NavigateToURL(
630 browser(), embedded_test_server()->GetURL( 685 browser(), embedded_test_server()->GetURL(
631 "/page_load_metrics/document_write_script_block.html")); 686 "/page_load_metrics/document_write_script_block.html"));
632 waiter->Wait(); 687 waiter->Wait();
633 688
634 histogram_tester_.ExpectTotalCount( 689 histogram_tester_.ExpectTotalCount(
635 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 690 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
636 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); 691 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1);
637 } 692 }
638 693
639 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteReload) { 694 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteReload) {
640 ASSERT_TRUE(embedded_test_server()->Start()); 695 ASSERT_TRUE(embedded_test_server()->Start());
641 696
642 auto waiter = CreatePageLoadMetricsWaiter(); 697 auto waiter = CreatePageLoadMetricsWaiter();
643 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 698 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
644 ui_test_utils::NavigateToURL( 699 ui_test_utils::NavigateToURL(
645 browser(), embedded_test_server()->GetURL( 700 browser(), embedded_test_server()->GetURL(
646 "/page_load_metrics/document_write_script_block.html")); 701 "/page_load_metrics/document_write_script_block.html"));
647 waiter->Wait(); 702 waiter->Wait();
648 703
649 histogram_tester_.ExpectTotalCount( 704 histogram_tester_.ExpectTotalCount(
650 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 705 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
651 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); 706 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1);
652 707
653 // Reload should not log the histogram as the script is not blocked. 708 // Reload should not log the histogram as the script is not blocked.
654 auto reload_waiter = CreatePageLoadMetricsWaiter(); 709 waiter = CreatePageLoadMetricsWaiter();
655 reload_waiter->AddMainFrameExpectation( 710 waiter->AddPageExpectation(TimingField::DOCUMENT_WRITE_BLOCK_RELOAD);
656 TimingField::DOCUMENT_WRITE_BLOCK_RELOAD); 711 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
657 reload_waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
658 ui_test_utils::NavigateToURL( 712 ui_test_utils::NavigateToURL(
659 browser(), embedded_test_server()->GetURL( 713 browser(), embedded_test_server()->GetURL(
660 "/page_load_metrics/document_write_script_block.html")); 714 "/page_load_metrics/document_write_script_block.html"));
661 reload_waiter->Wait(); 715 waiter->Wait();
662 716
663 histogram_tester_.ExpectTotalCount( 717 histogram_tester_.ExpectTotalCount(
664 internal::kHistogramDocWriteBlockReloadCount, 1); 718 internal::kHistogramDocWriteBlockReloadCount, 1);
665 719
666 reload_waiter = CreatePageLoadMetricsWaiter(); 720 waiter = CreatePageLoadMetricsWaiter();
667 reload_waiter->AddMainFrameExpectation( 721 waiter->AddPageExpectation(TimingField::DOCUMENT_WRITE_BLOCK_RELOAD);
668 TimingField::DOCUMENT_WRITE_BLOCK_RELOAD); 722 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
669 reload_waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
670 ui_test_utils::NavigateToURL( 723 ui_test_utils::NavigateToURL(
671 browser(), embedded_test_server()->GetURL( 724 browser(), embedded_test_server()->GetURL(
672 "/page_load_metrics/document_write_script_block.html")); 725 "/page_load_metrics/document_write_script_block.html"));
673 reload_waiter->Wait(); 726 waiter->Wait();
674 727
675 histogram_tester_.ExpectTotalCount( 728 histogram_tester_.ExpectTotalCount(
676 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 729 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
677 730
678 histogram_tester_.ExpectTotalCount( 731 histogram_tester_.ExpectTotalCount(
679 internal::kHistogramDocWriteBlockReloadCount, 2); 732 internal::kHistogramDocWriteBlockReloadCount, 2);
680 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); 733 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1);
681 } 734 }
682 735
683 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteAsync) { 736 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteAsync) {
684 ASSERT_TRUE(embedded_test_server()->Start()); 737 ASSERT_TRUE(embedded_test_server()->Start());
685 738
686 auto waiter = CreatePageLoadMetricsWaiter(); 739 auto waiter = CreatePageLoadMetricsWaiter();
687 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 740 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
688 ui_test_utils::NavigateToURL( 741 ui_test_utils::NavigateToURL(
689 browser(), embedded_test_server()->GetURL( 742 browser(), embedded_test_server()->GetURL(
690 "/page_load_metrics/document_write_async_script.html")); 743 "/page_load_metrics/document_write_async_script.html"));
691 waiter->Wait(); 744 waiter->Wait();
692 745
693 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 746 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
694 1); 747 1);
695 histogram_tester_.ExpectTotalCount( 748 histogram_tester_.ExpectTotalCount(
696 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 749 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
697 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 750 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
698 } 751 }
699 752
700 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteSameDomain) { 753 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteSameDomain) {
701 ASSERT_TRUE(embedded_test_server()->Start()); 754 ASSERT_TRUE(embedded_test_server()->Start());
702 755
703 auto waiter = CreatePageLoadMetricsWaiter(); 756 auto waiter = CreatePageLoadMetricsWaiter();
704 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 757 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
705 ui_test_utils::NavigateToURL( 758 ui_test_utils::NavigateToURL(
706 browser(), embedded_test_server()->GetURL( 759 browser(), embedded_test_server()->GetURL(
707 "/page_load_metrics/document_write_external_script.html")); 760 "/page_load_metrics/document_write_external_script.html"));
708 waiter->Wait(); 761 waiter->Wait();
709 762
710 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 763 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
711 1); 764 1);
712 histogram_tester_.ExpectTotalCount( 765 histogram_tester_.ExpectTotalCount(
713 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 766 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
714 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 767 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
715 } 768 }
716 769
717 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoDocumentWriteScript) { 770 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoDocumentWriteScript) {
718 ASSERT_TRUE(embedded_test_server()->Start()); 771 ASSERT_TRUE(embedded_test_server()->Start());
719 772
720 auto waiter = CreatePageLoadMetricsWaiter(); 773 auto waiter = CreatePageLoadMetricsWaiter();
721 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 774 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
722 ui_test_utils::NavigateToURL( 775 ui_test_utils::NavigateToURL(
723 browser(), embedded_test_server()->GetURL( 776 browser(), embedded_test_server()->GetURL(
724 "/page_load_metrics/document_write_no_script.html")); 777 "/page_load_metrics/document_write_no_script.html"));
725 waiter->Wait(); 778 waiter->Wait();
726 779
727 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 780 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
728 1); 781 1);
729 histogram_tester_.ExpectTotalCount( 782 histogram_tester_.ExpectTotalCount(
730 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 783 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
731 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 784 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
732 } 785 }
733 786
734 // TODO(crbug.com/712935): Flaky on Linux dbg. 787 // TODO(crbug.com/712935): Flaky on Linux dbg.
735 #if defined(OS_LINUX) && !defined(NDEBUG) 788 #if defined(OS_LINUX) && !defined(NDEBUG)
736 #define MAYBE_BadXhtml DISABLED_BadXhtml 789 #define MAYBE_BadXhtml DISABLED_BadXhtml
737 #else 790 #else
738 #define MAYBE_BadXhtml BadXhtml 791 #define MAYBE_BadXhtml BadXhtml
739 #endif 792 #endif
740 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, MAYBE_BadXhtml) { 793 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, MAYBE_BadXhtml) {
741 ASSERT_TRUE(embedded_test_server()->Start()); 794 ASSERT_TRUE(embedded_test_server()->Start());
742 795
743 auto waiter = CreatePageLoadMetricsWaiter();
744 waiter->AddMainFrameExpectation(TimingField::FIRST_PAINT);
745
746 // When an XHTML page contains invalid XML, it causes a paint of the error 796 // When an XHTML page contains invalid XML, it causes a paint of the error
747 // message without a layout. Page load metrics currently treats this as an 797 // message without a layout. Page load metrics currently treats this as an
748 // error. Eventually, we'll fix this by special casing the handling of 798 // error. Eventually, we'll fix this by special casing the handling of
749 // documents with non-well-formed XML on the blink side. See crbug.com/627607 799 // documents with non-well-formed XML on the blink side. See crbug.com/627607
750 // for more. 800 // for more.
751 ui_test_utils::NavigateToURL( 801 ui_test_utils::NavigateToURL(
752 browser(), 802 browser(),
753 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml")); 803 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml"));
754 804 NavigateToUntrackedUrl();
755 waiter->Wait();
756 805
757 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0); 806 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0);
758 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 807 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
759 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents, 808
760 1);
761 histogram_tester_.ExpectBucketCount( 809 histogram_tester_.ExpectBucketCount(
762 page_load_metrics::internal::kErrorEvents, 810 page_load_metrics::internal::kErrorEvents,
763 page_load_metrics::ERR_BAD_TIMING_IPC_INVALID_TIMING, 1); 811 page_load_metrics::ERR_BAD_TIMING_IPC_INVALID_TIMING, 1);
764 812
765 histogram_tester_.ExpectTotalCount( 813 histogram_tester_.ExpectTotalCount(
766 page_load_metrics::internal::kPageLoadTimingStatus, 1); 814 page_load_metrics::internal::kPageLoadTimingStatus, 1);
767 histogram_tester_.ExpectBucketCount( 815 histogram_tester_.ExpectBucketCount(
768 page_load_metrics::internal::kPageLoadTimingStatus, 816 page_load_metrics::internal::kPageLoadTimingStatus,
769 page_load_metrics::internal::INVALID_ORDER_FIRST_LAYOUT_FIRST_PAINT, 1); 817 page_load_metrics::internal::INVALID_ORDER_FIRST_LAYOUT_FIRST_PAINT, 1);
770 } 818 }
(...skipping 10 matching lines...) Expand all
781 browser()->tab_strip_model()->GetActiveWebContents(), url); 829 browser()->tab_strip_model()->GetActiveWebContents(), url);
782 830
783 chrome::Navigate(&params); 831 chrome::Navigate(&params);
784 EXPECT_TRUE(manager.WaitForRequestStart()); 832 EXPECT_TRUE(manager.WaitForRequestStart());
785 833
786 GURL url2(embedded_test_server()->GetURL("/title2.html")); 834 GURL url2(embedded_test_server()->GetURL("/title2.html"));
787 chrome::NavigateParams params2(browser(), url2, 835 chrome::NavigateParams params2(browser(), url2,
788 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR); 836 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR);
789 837
790 auto waiter = CreatePageLoadMetricsWaiter(); 838 auto waiter = CreatePageLoadMetricsWaiter();
791 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 839 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
792 chrome::Navigate(&params2); 840 chrome::Navigate(&params2);
793 waiter->Wait(); 841 waiter->Wait();
794 842
795 histogram_tester_.ExpectTotalCount( 843 histogram_tester_.ExpectTotalCount(
796 internal::kHistogramAbortNewNavigationBeforeCommit, 1); 844 internal::kHistogramAbortNewNavigationBeforeCommit, 1);
797 } 845 }
798 846
799 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, AbortReload) { 847 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, AbortReload) {
800 ASSERT_TRUE(embedded_test_server()->Start()); 848 ASSERT_TRUE(embedded_test_server()->Start());
801 849
802 GURL url(embedded_test_server()->GetURL("/title1.html")); 850 GURL url(embedded_test_server()->GetURL("/title1.html"));
803 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 851 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
804 content::TestNavigationManager manager( 852 content::TestNavigationManager manager(
805 browser()->tab_strip_model()->GetActiveWebContents(), url); 853 browser()->tab_strip_model()->GetActiveWebContents(), url);
806 854
807 chrome::Navigate(&params); 855 chrome::Navigate(&params);
808 EXPECT_TRUE(manager.WaitForRequestStart()); 856 EXPECT_TRUE(manager.WaitForRequestStart());
809 857
810 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD); 858 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD);
811 859
812 auto waiter = CreatePageLoadMetricsWaiter(); 860 auto waiter = CreatePageLoadMetricsWaiter();
813 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 861 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
814 chrome::Navigate(&params2); 862 chrome::Navigate(&params2);
815 waiter->Wait(); 863 waiter->Wait();
816 864
817 histogram_tester_.ExpectTotalCount( 865 histogram_tester_.ExpectTotalCount(
818 internal::kHistogramAbortReloadBeforeCommit, 1); 866 internal::kHistogramAbortReloadBeforeCommit, 1);
819 } 867 }
820 868
821 // TODO(crbug.com/675061): Flaky on Win7 dbg. 869 // TODO(crbug.com/675061): Flaky on Win7 dbg.
822 #if defined(OS_WIN) 870 #if defined(OS_WIN)
823 #define MAYBE_AbortClose DISABLED_AbortClose 871 #define MAYBE_AbortClose DISABLED_AbortClose
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 browser()->tab_strip_model()->GetActiveWebContents(), url2); 909 browser()->tab_strip_model()->GetActiveWebContents(), url2);
862 chrome::Navigate(&params2); 910 chrome::Navigate(&params2);
863 911
864 EXPECT_TRUE(manager2.WaitForRequestStart()); 912 EXPECT_TRUE(manager2.WaitForRequestStart());
865 manager.WaitForNavigationFinished(); 913 manager.WaitForNavigationFinished();
866 914
867 GURL url3(embedded_test_server()->GetURL("/title3.html")); 915 GURL url3(embedded_test_server()->GetURL("/title3.html"));
868 chrome::NavigateParams params3(browser(), url3, ui::PAGE_TRANSITION_TYPED); 916 chrome::NavigateParams params3(browser(), url3, ui::PAGE_TRANSITION_TYPED);
869 917
870 auto waiter = CreatePageLoadMetricsWaiter(); 918 auto waiter = CreatePageLoadMetricsWaiter();
871 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 919 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
872 chrome::Navigate(&params3); 920 chrome::Navigate(&params3);
873 waiter->Wait(); 921 waiter->Wait();
874 922
875 manager2.WaitForNavigationFinished(); 923 manager2.WaitForNavigationFinished();
876 924
877 histogram_tester_.ExpectTotalCount( 925 histogram_tester_.ExpectTotalCount(
878 internal::kHistogramAbortNewNavigationBeforeCommit, 2); 926 internal::kHistogramAbortNewNavigationBeforeCommit, 2);
879 } 927 }
880 928
881 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, 929 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest,
882 NoAbortMetricsOnClientRedirect) { 930 NoAbortMetricsOnClientRedirect) {
883 ASSERT_TRUE(embedded_test_server()->Start()); 931 ASSERT_TRUE(embedded_test_server()->Start());
884 932
885 GURL first_url(embedded_test_server()->GetURL("/title1.html")); 933 GURL first_url(embedded_test_server()->GetURL("/title1.html"));
886 ui_test_utils::NavigateToURL(browser(), first_url); 934 ui_test_utils::NavigateToURL(browser(), first_url);
887 935
888 GURL second_url(embedded_test_server()->GetURL("/title2.html")); 936 GURL second_url(embedded_test_server()->GetURL("/title2.html"));
889 chrome::NavigateParams params(browser(), second_url, 937 chrome::NavigateParams params(browser(), second_url,
890 ui::PAGE_TRANSITION_LINK); 938 ui::PAGE_TRANSITION_LINK);
891 content::TestNavigationManager manager( 939 content::TestNavigationManager manager(
892 browser()->tab_strip_model()->GetActiveWebContents(), second_url); 940 browser()->tab_strip_model()->GetActiveWebContents(), second_url);
893 chrome::Navigate(&params); 941 chrome::Navigate(&params);
894 EXPECT_TRUE(manager.WaitForRequestStart()); 942 EXPECT_TRUE(manager.WaitForRequestStart());
895 943
896 { 944 {
897 auto waiter = CreatePageLoadMetricsWaiter(); 945 auto waiter = CreatePageLoadMetricsWaiter();
898 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 946 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
899 content::TestNavigationManager reload_manager(
900 browser()->tab_strip_model()->GetActiveWebContents(), first_url);
901 EXPECT_TRUE(content::ExecuteScript( 947 EXPECT_TRUE(content::ExecuteScript(
902 browser()->tab_strip_model()->GetActiveWebContents(), 948 browser()->tab_strip_model()->GetActiveWebContents(),
903 "window.location.reload();")); 949 "window.location.reload();"));
904 waiter->Wait(); 950 waiter->Wait();
905 } 951 }
906 952
907 manager.WaitForNavigationFinished(); 953 manager.WaitForNavigationFinished();
908 954
909 EXPECT_TRUE(histogram_tester_ 955 EXPECT_TRUE(histogram_tester_
910 .GetTotalCountsForPrefix("PageLoad.Experimental.AbortTiming.") 956 .GetTotalCountsForPrefix("PageLoad.Experimental.AbortTiming.")
911 .empty()); 957 .empty());
912 } 958 }
913 959
914 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, 960 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest,
915 FirstMeaningfulPaintRecorded) { 961 FirstMeaningfulPaintRecorded) {
916 ASSERT_TRUE(embedded_test_server()->Start()); 962 ASSERT_TRUE(embedded_test_server()->Start());
917 963
918 auto waiter = CreatePageLoadMetricsWaiter(); 964 auto waiter = CreatePageLoadMetricsWaiter();
919 waiter->AddMainFrameExpectation(TimingField::FIRST_MEANINGFUL_PAINT); 965 waiter->AddPageExpectation(TimingField::FIRST_MEANINGFUL_PAINT);
920 ui_test_utils::NavigateToURL(browser(), 966 ui_test_utils::NavigateToURL(browser(),
921 embedded_test_server()->GetURL("/title1.html")); 967 embedded_test_server()->GetURL("/title1.html"));
922 waiter->Wait(); 968 waiter->Wait();
923 969
924 histogram_tester_.ExpectUniqueSample( 970 histogram_tester_.ExpectUniqueSample(
925 internal::kHistogramFirstMeaningfulPaintStatus, 971 internal::kHistogramFirstMeaningfulPaintStatus,
926 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1); 972 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1);
927 histogram_tester_.ExpectTotalCount( 973 histogram_tester_.ExpectTotalCount(
928 internal::kHistogramFirstMeaningfulPaint, 1); 974 internal::kHistogramFirstMeaningfulPaint, 1);
929 histogram_tester_.ExpectTotalCount( 975 histogram_tester_.ExpectTotalCount(
930 internal::kHistogramParseStartToFirstMeaningfulPaint, 1); 976 internal::kHistogramParseStartToFirstMeaningfulPaint, 1);
931 } 977 }
932 978
933 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, 979 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest,
934 FirstMeaningfulPaintNotRecorded) { 980 FirstMeaningfulPaintNotRecorded) {
935 ASSERT_TRUE(embedded_test_server()->Start()); 981 ASSERT_TRUE(embedded_test_server()->Start());
936 982
937 auto waiter = CreatePageLoadMetricsWaiter(); 983 auto waiter = CreatePageLoadMetricsWaiter();
938 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 984 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
939 985
940 ui_test_utils::NavigateToURL( 986 ui_test_utils::NavigateToURL(
941 browser(), embedded_test_server()->GetURL( 987 browser(), embedded_test_server()->GetURL(
942 "/page_load_metrics/page_with_active_connections.html")); 988 "/page_load_metrics/page_with_active_connections.html"));
943 waiter->Wait(); 989 waiter->Wait();
944 990
945 // Navigate away before a FMP is reported. 991 // Navigate away before a FMP is reported.
946 NavigateToUntrackedUrl(); 992 NavigateToUntrackedUrl();
947 993
948 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 994 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
949 1); 995 1);
950 histogram_tester_.ExpectUniqueSample( 996 histogram_tester_.ExpectUniqueSample(
951 internal::kHistogramFirstMeaningfulPaintStatus, 997 internal::kHistogramFirstMeaningfulPaintStatus,
952 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1); 998 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1);
953 histogram_tester_.ExpectTotalCount( 999 histogram_tester_.ExpectTotalCount(
954 internal::kHistogramFirstMeaningfulPaint, 0); 1000 internal::kHistogramFirstMeaningfulPaint, 0);
955 histogram_tester_.ExpectTotalCount( 1001 histogram_tester_.ExpectTotalCount(
956 internal::kHistogramParseStartToFirstMeaningfulPaint, 0); 1002 internal::kHistogramParseStartToFirstMeaningfulPaint, 0);
957 } 1003 }
958 1004
959 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, 1005 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest,
960 NoStatePrefetchObserverCacheable) { 1006 NoStatePrefetchObserverCacheable) {
961 ASSERT_TRUE(embedded_test_server()->Start()); 1007 ASSERT_TRUE(embedded_test_server()->Start());
962 1008
963 auto waiter = CreatePageLoadMetricsWaiter(); 1009 auto waiter = CreatePageLoadMetricsWaiter();
964 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 1010 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
965 1011
966 ui_test_utils::NavigateToURL(browser(), 1012 ui_test_utils::NavigateToURL(browser(),
967 embedded_test_server()->GetURL("/title1.html")); 1013 embedded_test_server()->GetURL("/title1.html"));
968 1014
969 waiter->Wait(); 1015 waiter->Wait();
970 1016
971 histogram_tester_.ExpectTotalCount( 1017 histogram_tester_.ExpectTotalCount(
972 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0); 1018 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0);
973 histogram_tester_.ExpectTotalCount( 1019 histogram_tester_.ExpectTotalCount(
974 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1); 1020 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1);
975 } 1021 }
976 1022
977 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, 1023 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest,
978 NoStatePrefetchObserverNoStore) { 1024 NoStatePrefetchObserverNoStore) {
979 ASSERT_TRUE(embedded_test_server()->Start()); 1025 ASSERT_TRUE(embedded_test_server()->Start());
980 1026
981 auto waiter = CreatePageLoadMetricsWaiter(); 1027 auto waiter = CreatePageLoadMetricsWaiter();
982 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 1028 waiter->AddPageExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
983 1029
984 ui_test_utils::NavigateToURL(browser(), 1030 ui_test_utils::NavigateToURL(browser(),
985 embedded_test_server()->GetURL("/nostore.html")); 1031 embedded_test_server()->GetURL("/nostore.html"));
986 1032
987 waiter->Wait(); 1033 waiter->Wait();
988 1034
989 histogram_tester_.ExpectTotalCount( 1035 histogram_tester_.ExpectTotalCount(
990 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1); 1036 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1);
991 histogram_tester_.ExpectTotalCount( 1037 histogram_tester_.ExpectTotalCount(
992 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0); 1038 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0);
993 } 1039 }
994 1040
995 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, CSSTiming) { 1041 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, CSSTiming) {
996 ASSERT_TRUE(embedded_test_server()->Start()); 1042 ASSERT_TRUE(embedded_test_server()->Start());
997 1043
998 auto waiter = CreatePageLoadMetricsWaiter(); 1044 auto waiter = CreatePageLoadMetricsWaiter();
999 waiter->AddMainFrameExpectation(TimingField::STYLE_UPDATE_BEFORE_FCP); 1045 waiter->AddPageExpectation(TimingField::STYLE_UPDATE_BEFORE_FCP);
1000 1046
1001 // Careful: Blink code clamps timestamps to 5us, so any CSS parsing we do here 1047 // Careful: Blink code clamps timestamps to 5us, so any CSS parsing we do here
1002 // must take >> 5us, otherwise we'll log 0 for the value and it will remain 1048 // must take >> 5us, otherwise we'll log 0 for the value and it will remain
1003 // unset here. 1049 // unset here.
1004 ui_test_utils::NavigateToURL( 1050 ui_test_utils::NavigateToURL(
1005 browser(), 1051 browser(),
1006 embedded_test_server()->GetURL("/page_load_metrics/page_with_css.html")); 1052 embedded_test_server()->GetURL("/page_load_metrics/page_with_css.html"));
1007 waiter->Wait(); 1053 waiter->Wait();
1008 1054
1009 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 1055 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
1010 1); 1056 1);
1011 histogram_tester_.ExpectTotalCount( 1057 histogram_tester_.ExpectTotalCount(
1012 "PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint", 1); 1058 "PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint", 1);
1013 histogram_tester_.ExpectTotalCount( 1059 histogram_tester_.ExpectTotalCount(
1014 "PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint", 1); 1060 "PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint", 1);
1015 histogram_tester_.ExpectTotalCount( 1061 histogram_tester_.ExpectTotalCount(
1016 "PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint", 1); 1062 "PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint", 1);
1017 } 1063 }
1018 1064
1019 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PayloadSize) { 1065 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PayloadSize) {
1020 ASSERT_TRUE(embedded_test_server()->Start()); 1066 ASSERT_TRUE(embedded_test_server()->Start());
1021 1067
1022 auto waiter = CreatePageLoadMetricsWaiter(); 1068 auto waiter = CreatePageLoadMetricsWaiter();
1023 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 1069 waiter->AddPageExpectation(TimingField::LOAD_EVENT);
1024 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL( 1070 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL(
1025 "/page_load_metrics/large.html")); 1071 "/page_load_metrics/large.html"));
1026 waiter->Wait(); 1072 waiter->Wait();
1027 1073
1028 // Payload histograms are only logged when a page load terminates, so force 1074 // Payload histograms are only logged when a page load terminates, so force
1029 // navigation to another page. 1075 // navigation to another page.
1030 NavigateToUntrackedUrl(); 1076 NavigateToUntrackedUrl();
1031 1077
1032 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); 1078 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1);
1033 1079
1034 // Verify that there is a single sample recorded in the 10kB bucket (the size 1080 // Verify that there is a single sample recorded in the 10kB bucket (the size
1035 // of the main HTML response). 1081 // of the main HTML response).
1036 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1); 1082 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1);
1037 } 1083 }
1038 1084
1039 INSTANTIATE_TEST_CASE_P( 1085 INSTANTIATE_TEST_CASE_P(
1040 /* no prefix */, 1086 /* no prefix */,
1041 PageLoadMetricsBrowserTest, 1087 PageLoadMetricsBrowserTest,
1042 testing::Values(IPCType::LEGACY, IPCType::MOJO)); 1088 testing::Values(IPCType::LEGACY, IPCType::MOJO));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698