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

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

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

Powered by Google App Engine
This is Rietveld 408576698