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

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

Issue 2823523003: [Page Load Metrics] PageLoadMetrics Mojofication. (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/test/histogram_tester.h" 9 #include "base/test/histogram_tester.h"
10 #include "base/test/scoped_feature_list.h"
10 #include "base/threading/thread_restrictions.h" 11 #include "base/threading/thread_restrictions.h"
11 #include "base/time/time.h" 12 #include "base/time/time.h"
12 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" 13 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
13 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h" 14 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h"
14 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h" 15 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h"
15 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h" 16 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h"
16 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load _metrics_observer.h" 17 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load _metrics_observer.h"
17 #include "chrome/browser/page_load_metrics/page_load_tracker.h" 18 #include "chrome/browser/page_load_metrics/page_load_tracker.h"
18 #include "chrome/browser/prerender/prerender_histograms.h" 19 #include "chrome/browser/prerender/prerender_histograms.h"
19 #include "chrome/browser/prerender/prerender_origin.h" 20 #include "chrome/browser/prerender/prerender_origin.h"
20 #include "chrome/browser/profiles/profile.h" 21 #include "chrome/browser/profiles/profile.h"
21 #include "chrome/browser/ui/browser.h" 22 #include "chrome/browser/ui/browser.h"
22 #include "chrome/browser/ui/browser_navigator_params.h" 23 #include "chrome/browser/ui/browser_navigator_params.h"
23 #include "chrome/browser/ui/tabs/tab_strip_model.h" 24 #include "chrome/browser/ui/tabs/tab_strip_model.h"
24 #include "chrome/common/page_load_metrics/page_load_metrics_messages.h" 25 #include "chrome/common/chrome_features.h"
25 #include "chrome/common/pref_names.h" 26 #include "chrome/common/pref_names.h"
26 #include "chrome/common/url_constants.h" 27 #include "chrome/common/url_constants.h"
27 #include "chrome/test/base/in_process_browser_test.h" 28 #include "chrome/test/base/in_process_browser_test.h"
28 #include "chrome/test/base/ui_test_utils.h" 29 #include "chrome/test/base/ui_test_utils.h"
29 #include "components/prefs/pref_service.h" 30 #include "components/prefs/pref_service.h"
30 #include "content/public/browser/browser_thread.h" 31 #include "content/public/browser/browser_thread.h"
31 #include "content/public/browser/render_process_host.h" 32 #include "content/public/browser/render_process_host.h"
32 #include "content/public/browser/render_view_host.h" 33 #include "content/public/browser/render_view_host.h"
33 #include "content/public/common/content_features.h" 34 #include "content/public/common/content_features.h"
34 #include "content/public/common/content_switches.h" 35 #include "content/public/common/content_switches.h"
35 #include "content/public/test/browser_test_utils.h" 36 #include "content/public/test/browser_test_utils.h"
36 #include "content/public/test/download_test_observer.h" 37 #include "content/public/test/download_test_observer.h"
37 #include "net/base/net_errors.h" 38 #include "net/base/net_errors.h"
38 #include "net/dns/mock_host_resolver.h" 39 #include "net/dns/mock_host_resolver.h"
39 #include "net/http/failing_http_transaction_factory.h" 40 #include "net/http/failing_http_transaction_factory.h"
40 #include "net/http/http_cache.h" 41 #include "net/http/http_cache.h"
41 #include "net/test/embedded_test_server/embedded_test_server.h" 42 #include "net/test/embedded_test_server/embedded_test_server.h"
42 #include "net/test/url_request/url_request_failed_job.h" 43 #include "net/test/url_request/url_request_failed_job.h"
43 #include "net/url_request/url_request_context.h" 44 #include "net/url_request/url_request_context.h"
44 #include "net/url_request/url_request_context_getter.h" 45 #include "net/url_request/url_request_context_getter.h"
45 46
46 namespace { 47 namespace {
48 using IPCType =
49 page_load_metrics::MetricsWebContentsObserver::TestingObserver::IPCType;
47 50
48 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { 51 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) {
49 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 52 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
50 net::HttpCache* cache( 53 net::HttpCache* cache(
51 getter->GetURLRequestContext()->http_transaction_factory()->GetCache()); 54 getter->GetURLRequestContext()->http_transaction_factory()->GetCache());
52 DCHECK(cache); 55 DCHECK(cache);
53 std::unique_ptr<net::FailingHttpTransactionFactory> factory = 56 std::unique_ptr<net::FailingHttpTransactionFactory> factory =
54 base::MakeUnique<net::FailingHttpTransactionFactory>(cache->GetSession(), 57 base::MakeUnique<net::FailingHttpTransactionFactory>(cache->GetSession(),
55 net::ERR_FAILED); 58 net::ERR_FAILED);
56 // Throw away old version; since this is a browser test, there is no 59 // Throw away old version; since this is a browser test, there is no
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 std::unique_ptr<base::RunLoop> run_loop_; 188 std::unique_ptr<base::RunLoop> run_loop_;
186 189
187 TimingFieldBitSet child_frame_expected_fields_; 190 TimingFieldBitSet child_frame_expected_fields_;
188 TimingFieldBitSet main_frame_expected_fields_; 191 TimingFieldBitSet main_frame_expected_fields_;
189 192
190 TimingFieldBitSet observed_main_frame_fields_; 193 TimingFieldBitSet observed_main_frame_fields_;
191 }; 194 };
192 195
193 using TimingField = PageLoadMetricsWaiter::TimingField; 196 using TimingField = PageLoadMetricsWaiter::TimingField;
194 197
198 class IPCTypeVerifier
199 : public page_load_metrics::MetricsWebContentsObserver::TestingObserver {
200 public:
201 explicit IPCTypeVerifier(content::WebContents* web_contents)
202 : TestingObserver(web_contents) {}
203
204 ~IPCTypeVerifier() override { AssertValidUpdateState(); }
205
206 void ExpectNoTimingUpdates() { expect_updates_ = false; }
207
208 void DidReceiveTimingUpdate(IPCType type) override {
209 ++num_updates_;
210 const bool is_mojo_enabled =
211 base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication);
212 switch (type) {
213 case IPCType::LEGACY:
214 ASSERT_FALSE(is_mojo_enabled);
215 break;
216 case IPCType::MOJO:
217 ASSERT_TRUE(is_mojo_enabled);
218 break;
219 default:
220 FAIL() << "Unknown IPCType";
221 break;
222 }
223 }
224
225 private:
226 void AssertValidUpdateState() {
227 ASSERT_EQ(expect_updates_, num_updates_ > 0);
228 }
229
230 bool expect_updates_ = true;
231 int num_updates_ = 0;
232 };
233
195 } // namespace 234 } // namespace
196 235
197 class PageLoadMetricsBrowserTest : public InProcessBrowserTest { 236 class PageLoadMetricsBrowserTest : public InProcessBrowserTest,
237 public testing::WithParamInterface<IPCType> {
198 public: 238 public:
199 PageLoadMetricsBrowserTest() {} 239 PageLoadMetricsBrowserTest() {}
200 ~PageLoadMetricsBrowserTest() override {} 240 ~PageLoadMetricsBrowserTest() override {}
201 241
202 protected: 242 protected:
243 void SetUpCommandLine(base::CommandLine* command_line) override {
244 InProcessBrowserTest::SetUpCommandLine(command_line);
245
246 // We need to set the feature state before the render process is created,
247 // in order for it to inherit the feature state from the browser process.
248 // SetUp() runs too early, and SetUpOnMainThread() runs too late.
249 const IPCType ipc_type = GetParam();
250 switch (ipc_type) {
251 case IPCType::LEGACY:
252 scoped_feature_list_.InitAndDisableFeature(
253 features::kPageLoadMetricsMojofication);
254 break;
255 case IPCType::MOJO:
256 scoped_feature_list_.InitAndEnableFeature(
257 features::kPageLoadMetricsMojofication);
258 break;
259 default:
260 CHECK(false) << "Unknown IPCType.";
261 break;
262 }
263 }
264
265 void SetUpOnMainThread() override {
266 InProcessBrowserTest::SetUpOnMainThread();
267
268 content::WebContents* web_contents =
269 browser()->tab_strip_model()->GetActiveWebContents();
270 ipc_type_verifier_ = base::MakeUnique<IPCTypeVerifier>(web_contents);
271 }
272
203 // Force navigation to a new page, so the currently tracked page load runs its 273 // Force navigation to a new page, so the currently tracked page load runs its
204 // OnComplete callback. You should prefer to use PageLoadMetricsWaiter, and 274 // OnComplete callback. You should prefer to use PageLoadMetricsWaiter, and
205 // only use NavigateToUntrackedUrl for cases where the waiter isn't 275 // only use NavigateToUntrackedUrl for cases where the waiter isn't
206 // sufficient. 276 // sufficient.
207 void NavigateToUntrackedUrl() { 277 void NavigateToUntrackedUrl() {
208 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); 278 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL));
209 } 279 }
210 280
211 bool NoPageLoadMetricsRecorded() { 281 bool NoPageLoadMetricsRecorded() {
212 // Determine whether any 'public' page load metrics are recorded. We exclude 282 // Determine whether any 'public' page load metrics are recorded. We exclude
213 // 'internal' metrics as these may be recorded for debugging purposes. 283 // 'internal' metrics as these may be recorded for debugging purposes.
214 size_t total_pageload_histograms = 284 size_t total_pageload_histograms =
215 histogram_tester_.GetTotalCountsForPrefix("PageLoad.").size(); 285 histogram_tester_.GetTotalCountsForPrefix("PageLoad.").size();
216 size_t total_internal_histograms = 286 size_t total_internal_histograms =
217 histogram_tester_.GetTotalCountsForPrefix("PageLoad.Internal.").size(); 287 histogram_tester_.GetTotalCountsForPrefix("PageLoad.Internal.").size();
218 DCHECK_GE(total_pageload_histograms, total_internal_histograms); 288 DCHECK_GE(total_pageload_histograms, total_internal_histograms);
219 return total_pageload_histograms - total_internal_histograms == 0; 289 return total_pageload_histograms - total_internal_histograms == 0;
220 } 290 }
221 291
222 std::unique_ptr<PageLoadMetricsWaiter> CreatePageLoadMetricsWaiter() { 292 std::unique_ptr<PageLoadMetricsWaiter> CreatePageLoadMetricsWaiter() {
223 content::WebContents* web_contents = 293 content::WebContents* web_contents =
224 browser()->tab_strip_model()->GetActiveWebContents(); 294 browser()->tab_strip_model()->GetActiveWebContents();
225 return base::MakeUnique<PageLoadMetricsWaiter>(web_contents); 295 return base::MakeUnique<PageLoadMetricsWaiter>(web_contents);
226 } 296 }
227 297
298 void ExpectNoTimingUpdates() { ipc_type_verifier_->ExpectNoTimingUpdates(); }
299
300 base::test::ScopedFeatureList scoped_feature_list_;
228 base::HistogramTester histogram_tester_; 301 base::HistogramTester histogram_tester_;
302 std::unique_ptr<IPCTypeVerifier> ipc_type_verifier_;
229 303
230 private: 304 private:
231 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest); 305 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest);
232 }; 306 };
233 307
234 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoNavigation) { 308 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoNavigation) {
309 ExpectNoTimingUpdates();
235 ASSERT_TRUE(embedded_test_server()->Start()); 310 ASSERT_TRUE(embedded_test_server()->Start());
236 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 311 EXPECT_TRUE(NoPageLoadMetricsRecorded());
237 } 312 }
238 313
239 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) { 314 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NewPage) {
240 ASSERT_TRUE(embedded_test_server()->Start()); 315 ASSERT_TRUE(embedded_test_server()->Start());
241 316
242 auto waiter = CreatePageLoadMetricsWaiter(); 317 auto waiter = CreatePageLoadMetricsWaiter();
243 waiter->AddMainFrameExpectation(TimingField::FIRST_PAINT); 318 waiter->AddMainFrameExpectation(TimingField::FIRST_PAINT);
244 ui_test_utils::NavigateToURL(browser(), 319 ui_test_utils::NavigateToURL(browser(),
245 embedded_test_server()->GetURL("/title1.html")); 320 embedded_test_server()->GetURL("/title1.html"));
246 waiter->Wait(); 321 waiter->Wait();
247 322
248 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 323 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
249 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 324 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
(...skipping 10 matching lines...) Expand all
260 NavigateToUntrackedUrl(); 335 NavigateToUntrackedUrl();
261 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); 336 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1);
262 histogram_tester_.ExpectTotalCount( 337 histogram_tester_.ExpectTotalCount(
263 internal::kHistogramPageTimingForegroundDuration, 1); 338 internal::kHistogramPageTimingForegroundDuration, 1);
264 339
265 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics 340 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics
266 // have been recorded. 341 // have been recorded.
267 EXPECT_FALSE(NoPageLoadMetricsRecorded()); 342 EXPECT_FALSE(NoPageLoadMetricsRecorded());
268 } 343 }
269 344
270 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPaintForEmptyDocument) { 345 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoPaintForEmptyDocument) {
271 ASSERT_TRUE(embedded_test_server()->Start()); 346 ASSERT_TRUE(embedded_test_server()->Start());
272 347
273 auto waiter = CreatePageLoadMetricsWaiter(); 348 auto waiter = CreatePageLoadMetricsWaiter();
274 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 349 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT);
275 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 350 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
276 ui_test_utils::NavigateToURL(browser(), 351 ui_test_utils::NavigateToURL(browser(),
277 embedded_test_server()->GetURL("/empty.html")); 352 embedded_test_server()->GetURL("/empty.html"));
278 waiter->Wait(); 353 waiter->Wait();
279 EXPECT_FALSE(waiter->DidObserveInMainFrame(TimingField::FIRST_PAINT)); 354 EXPECT_FALSE(waiter->DidObserveInMainFrame(TimingField::FIRST_PAINT));
280 355
281 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 356 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
282 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 357 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
283 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 358 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
284 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 359 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
285 0); 360 0);
286 } 361 }
287 362
288 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 363 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest,
289 NoPaintForEmptyDocumentInChildFrame) { 364 NoPaintForEmptyDocumentInChildFrame) {
290 ASSERT_TRUE(embedded_test_server()->Start()); 365 ASSERT_TRUE(embedded_test_server()->Start());
291 366
292 GURL a_url( 367 GURL a_url(
293 embedded_test_server()->GetURL("/page_load_metrics/empty_iframe.html")); 368 embedded_test_server()->GetURL("/page_load_metrics/empty_iframe.html"));
294 369
295 auto waiter = CreatePageLoadMetricsWaiter(); 370 auto waiter = CreatePageLoadMetricsWaiter();
296 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 371 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT);
297 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 372 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
298 waiter->AddSubFrameExpectation(TimingField::FIRST_LAYOUT); 373 waiter->AddSubFrameExpectation(TimingField::FIRST_LAYOUT);
299 waiter->AddSubFrameExpectation(TimingField::LOAD_EVENT); 374 waiter->AddSubFrameExpectation(TimingField::LOAD_EVENT);
300 ui_test_utils::NavigateToURL(browser(), a_url); 375 ui_test_utils::NavigateToURL(browser(), a_url);
301 waiter->Wait(); 376 waiter->Wait();
302 EXPECT_FALSE(waiter->DidObserveInMainFrame(TimingField::FIRST_PAINT)); 377 EXPECT_FALSE(waiter->DidObserveInMainFrame(TimingField::FIRST_PAINT));
303 378
304 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 379 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
305 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 380 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
306 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 381 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
307 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 382 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
308 0); 383 0);
309 } 384 }
310 385
311 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInChildFrame) { 386 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PaintInChildFrame) {
312 ASSERT_TRUE(embedded_test_server()->Start()); 387 ASSERT_TRUE(embedded_test_server()->Start());
313 388
314 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframe.html")); 389 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframe.html"));
315 auto waiter = CreatePageLoadMetricsWaiter(); 390 auto waiter = CreatePageLoadMetricsWaiter();
316 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 391 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT);
317 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 392 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
318 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT); 393 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT);
319 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 394 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
320 ui_test_utils::NavigateToURL(browser(), a_url); 395 ui_test_utils::NavigateToURL(browser(), a_url);
321 waiter->Wait(); 396 waiter->Wait();
322 397
323 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 398 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
324 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 399 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
325 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); 400 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1);
326 } 401 }
327 402
328 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInMultipleChildFrames) { 403 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PaintInMultipleChildFrames) {
329 ASSERT_TRUE(embedded_test_server()->Start()); 404 ASSERT_TRUE(embedded_test_server()->Start());
330 405
331 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframes.html")); 406 GURL a_url(embedded_test_server()->GetURL("/page_load_metrics/iframes.html"));
332 407
333 auto waiter = CreatePageLoadMetricsWaiter(); 408 auto waiter = CreatePageLoadMetricsWaiter();
334 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 409 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT);
335 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 410 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
336 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT); 411 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT);
337 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 412 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
338 ui_test_utils::NavigateToURL(browser(), a_url); 413 ui_test_utils::NavigateToURL(browser(), a_url);
339 waiter->Wait(); 414 waiter->Wait();
340 415
341 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 416 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
342 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 417 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
343 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); 418 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1);
344 } 419 }
345 420
346 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInMainAndChildFrame) { 421 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PaintInMainAndChildFrame) {
347 ASSERT_TRUE(embedded_test_server()->Start()); 422 ASSERT_TRUE(embedded_test_server()->Start());
348 423
349 GURL a_url(embedded_test_server()->GetURL( 424 GURL a_url(embedded_test_server()->GetURL(
350 "/page_load_metrics/main_frame_with_iframe.html")); 425 "/page_load_metrics/main_frame_with_iframe.html"));
351 426
352 auto waiter = CreatePageLoadMetricsWaiter(); 427 auto waiter = CreatePageLoadMetricsWaiter();
353 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 428 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT);
354 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 429 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
355 waiter->AddMainFrameExpectation(TimingField::FIRST_PAINT); 430 waiter->AddMainFrameExpectation(TimingField::FIRST_PAINT);
356 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 431 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
357 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT); 432 waiter->AddSubFrameExpectation(TimingField::FIRST_PAINT);
358 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 433 waiter->AddSubFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
359 ui_test_utils::NavigateToURL(browser(), a_url); 434 ui_test_utils::NavigateToURL(browser(), a_url);
360 waiter->Wait(); 435 waiter->Wait();
361 436
362 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 437 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
363 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 438 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
364 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); 439 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1);
365 } 440 }
366 441
367 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameDocumentNavigation) { 442 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, SameDocumentNavigation) {
368 ASSERT_TRUE(embedded_test_server()->Start()); 443 ASSERT_TRUE(embedded_test_server()->Start());
369 444
370 auto waiter = CreatePageLoadMetricsWaiter(); 445 auto waiter = CreatePageLoadMetricsWaiter();
371 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 446 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT);
372 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 447 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
373 ui_test_utils::NavigateToURL(browser(), 448 ui_test_utils::NavigateToURL(browser(),
374 embedded_test_server()->GetURL("/title1.html")); 449 embedded_test_server()->GetURL("/title1.html"));
375 waiter->Wait(); 450 waiter->Wait();
376 451
377 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 452 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
378 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 453 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
379 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 454 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
380 455
381 // Perform a same-document navigation. No additional metrics should be logged. 456 // Perform a same-document navigation. No additional metrics should be logged.
382 ui_test_utils::NavigateToURL( 457 ui_test_utils::NavigateToURL(
383 browser(), embedded_test_server()->GetURL("/title1.html#hash")); 458 browser(), embedded_test_server()->GetURL("/title1.html#hash"));
384 NavigateToUntrackedUrl(); 459 NavigateToUntrackedUrl();
385 460
386 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 461 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
387 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 462 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
388 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 463 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
389 } 464 }
390 465
391 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameUrlNavigation) { 466 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, SameUrlNavigation) {
392 ASSERT_TRUE(embedded_test_server()->Start()); 467 ASSERT_TRUE(embedded_test_server()->Start());
393 468
394 auto waiter = CreatePageLoadMetricsWaiter(); 469 auto waiter = CreatePageLoadMetricsWaiter();
395 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 470 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT);
396 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 471 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
397 ui_test_utils::NavigateToURL(browser(), 472 ui_test_utils::NavigateToURL(browser(),
398 embedded_test_server()->GetURL("/title1.html")); 473 embedded_test_server()->GetURL("/title1.html"));
399 waiter->Wait(); 474 waiter->Wait();
400 475
401 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 476 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
402 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 477 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
403 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 478 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
404 479
405 waiter = CreatePageLoadMetricsWaiter(); 480 waiter = CreatePageLoadMetricsWaiter();
406 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT); 481 waiter->AddMainFrameExpectation(TimingField::FIRST_LAYOUT);
407 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 482 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
408 ui_test_utils::NavigateToURL(browser(), 483 ui_test_utils::NavigateToURL(browser(),
409 embedded_test_server()->GetURL("/title1.html")); 484 embedded_test_server()->GetURL("/title1.html"));
410 waiter->Wait(); 485 waiter->Wait();
411 486
412 // We expect one histogram sample for each navigation to title1.html. 487 // We expect one histogram sample for each navigation to title1.html.
413 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2); 488 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2);
414 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2); 489 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2);
415 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2); 490 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2);
416 } 491 }
417 492
418 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHtmlMainResource) { 493 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NonHtmlMainResource) {
419 ASSERT_TRUE(embedded_test_server()->Start()); 494 ASSERT_TRUE(embedded_test_server()->Start());
420 495
421 ui_test_utils::NavigateToURL(browser(), 496 ui_test_utils::NavigateToURL(browser(),
422 embedded_test_server()->GetURL("/circle.svg")); 497 embedded_test_server()->GetURL("/circle.svg"));
423 NavigateToUntrackedUrl(); 498 NavigateToUntrackedUrl();
499 ExpectNoTimingUpdates();
424 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 500 EXPECT_TRUE(NoPageLoadMetricsRecorded());
425 } 501 }
426 502
427 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHttpOrHttpsUrl) { 503 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NonHttpOrHttpsUrl) {
428 ASSERT_TRUE(embedded_test_server()->Start()); 504 ASSERT_TRUE(embedded_test_server()->Start());
429 505
430 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL)); 506 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL));
431 NavigateToUntrackedUrl(); 507 NavigateToUntrackedUrl();
508 ExpectNoTimingUpdates();
432 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 509 EXPECT_TRUE(NoPageLoadMetricsRecorded());
433 } 510 }
434 511
435 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, HttpErrorPage) { 512 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, HttpErrorPage) {
436 ASSERT_TRUE(embedded_test_server()->Start()); 513 ASSERT_TRUE(embedded_test_server()->Start());
437 514
438 ui_test_utils::NavigateToURL( 515 ui_test_utils::NavigateToURL(
439 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html")); 516 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html"));
440 NavigateToUntrackedUrl(); 517 NavigateToUntrackedUrl();
518 ExpectNoTimingUpdates();
441 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 519 EXPECT_TRUE(NoPageLoadMetricsRecorded());
442 } 520 }
443 521
444 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, ChromeErrorPage) { 522 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, ChromeErrorPage) {
445 ASSERT_TRUE(embedded_test_server()->Start()); 523 ASSERT_TRUE(embedded_test_server()->Start());
446 524
447 // Configure the network stack to fail all attempted loads with a network 525 // Configure the network stack to fail all attempted loads with a network
448 // error, which will cause Chrome to display an error page. 526 // error, which will cause Chrome to display an error page.
449 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = 527 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter =
450 browser()->profile()->GetRequestContext(); 528 browser()->profile()->GetRequestContext();
451 content::BrowserThread::PostTask( 529 content::BrowserThread::PostTask(
452 content::BrowserThread::IO, FROM_HERE, 530 content::BrowserThread::IO, FROM_HERE,
453 base::BindOnce(&FailAllNetworkTransactions, 531 base::BindOnce(&FailAllNetworkTransactions,
454 base::RetainedRef(url_request_context_getter))); 532 base::RetainedRef(url_request_context_getter)));
455 533
456 ui_test_utils::NavigateToURL(browser(), 534 ui_test_utils::NavigateToURL(browser(),
457 embedded_test_server()->GetURL("/title1.html")); 535 embedded_test_server()->GetURL("/title1.html"));
458 NavigateToUntrackedUrl(); 536 NavigateToUntrackedUrl();
537 ExpectNoTimingUpdates();
459 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 538 EXPECT_TRUE(NoPageLoadMetricsRecorded());
460 } 539 }
461 540
462 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, Ignore204Pages) { 541 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, Ignore204Pages) {
463 ASSERT_TRUE(embedded_test_server()->Start()); 542 ASSERT_TRUE(embedded_test_server()->Start());
464 543
465 ui_test_utils::NavigateToURL(browser(), 544 ui_test_utils::NavigateToURL(browser(),
466 embedded_test_server()->GetURL("/page204.html")); 545 embedded_test_server()->GetURL("/page204.html"));
467 NavigateToUntrackedUrl(); 546 NavigateToUntrackedUrl();
547 ExpectNoTimingUpdates();
468 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 548 EXPECT_TRUE(NoPageLoadMetricsRecorded());
469 } 549 }
470 550
471 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, IgnoreDownloads) { 551 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, IgnoreDownloads) {
472 ASSERT_TRUE(embedded_test_server()->Start()); 552 ASSERT_TRUE(embedded_test_server()->Start());
473 553
474 base::ThreadRestrictions::ScopedAllowIO allow_io; 554 base::ThreadRestrictions::ScopedAllowIO allow_io;
475 base::ScopedTempDir downloads_directory; 555 base::ScopedTempDir downloads_directory;
476 ASSERT_TRUE(downloads_directory.CreateUniqueTempDir()); 556 ASSERT_TRUE(downloads_directory.CreateUniqueTempDir());
477 browser()->profile()->GetPrefs()->SetFilePath( 557 browser()->profile()->GetPrefs()->SetFilePath(
478 prefs::kDownloadDefaultDirectory, downloads_directory.GetPath()); 558 prefs::kDownloadDefaultDirectory, downloads_directory.GetPath());
479 content::DownloadTestObserverTerminal downloads_observer( 559 content::DownloadTestObserverTerminal downloads_observer(
480 content::BrowserContext::GetDownloadManager(browser()->profile()), 560 content::BrowserContext::GetDownloadManager(browser()->profile()),
481 1, // == wait_count (only waiting for "download-test3.gif"). 561 1, // == wait_count (only waiting for "download-test3.gif").
482 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); 562 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
483 563
484 ui_test_utils::NavigateToURL( 564 ui_test_utils::NavigateToURL(
485 browser(), embedded_test_server()->GetURL("/download-test3.gif")); 565 browser(), embedded_test_server()->GetURL("/download-test3.gif"));
486 downloads_observer.WaitForFinished(); 566 downloads_observer.WaitForFinished();
487 567
488 NavigateToUntrackedUrl(); 568 NavigateToUntrackedUrl();
569 ExpectNoTimingUpdates();
489 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 570 EXPECT_TRUE(NoPageLoadMetricsRecorded());
490 } 571 }
491 572
492 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) { 573 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PreloadDocumentWrite) {
493 ASSERT_TRUE(embedded_test_server()->Start()); 574 ASSERT_TRUE(embedded_test_server()->Start());
494 575
495 auto waiter = CreatePageLoadMetricsWaiter(); 576 auto waiter = CreatePageLoadMetricsWaiter();
496 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 577 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
497 578
498 ui_test_utils::NavigateToURL( 579 ui_test_utils::NavigateToURL(
499 browser(), embedded_test_server()->GetURL( 580 browser(), embedded_test_server()->GetURL(
500 "/page_load_metrics/document_write_external_script.html")); 581 "/page_load_metrics/document_write_external_script.html"));
501 waiter->Wait(); 582 waiter->Wait();
502 583
503 histogram_tester_.ExpectTotalCount( 584 histogram_tester_.ExpectTotalCount(
504 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); 585 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1);
505 } 586 }
506 587
507 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) { 588 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) {
508 ASSERT_TRUE(embedded_test_server()->Start()); 589 ASSERT_TRUE(embedded_test_server()->Start());
509 590
510 auto waiter = CreatePageLoadMetricsWaiter(); 591 auto waiter = CreatePageLoadMetricsWaiter();
511 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 592 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
512 ui_test_utils::NavigateToURL( 593 ui_test_utils::NavigateToURL(
513 browser(), embedded_test_server()->GetURL( 594 browser(), embedded_test_server()->GetURL(
514 "/page_load_metrics/document_write_no_script.html")); 595 "/page_load_metrics/document_write_no_script.html"));
515 waiter->Wait(); 596 waiter->Wait();
516 597
517 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 598 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
518 1); 599 1);
519 histogram_tester_.ExpectTotalCount( 600 histogram_tester_.ExpectTotalCount(
520 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 601 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
521 } 602 }
522 603
523 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWrite) { 604 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoDocumentWrite) {
524 ASSERT_TRUE(embedded_test_server()->Start()); 605 ASSERT_TRUE(embedded_test_server()->Start());
525 606
526 auto waiter = CreatePageLoadMetricsWaiter(); 607 auto waiter = CreatePageLoadMetricsWaiter();
527 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 608 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
528 609
529 ui_test_utils::NavigateToURL(browser(), 610 ui_test_utils::NavigateToURL(browser(),
530 embedded_test_server()->GetURL("/title1.html")); 611 embedded_test_server()->GetURL("/title1.html"));
531 waiter->Wait(); 612 waiter->Wait();
532 613
533 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 614 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
534 1); 615 1);
535 histogram_tester_.ExpectTotalCount( 616 histogram_tester_.ExpectTotalCount(
536 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 617 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
537 histogram_tester_.ExpectTotalCount( 618 histogram_tester_.ExpectTotalCount(
538 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 619 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
539 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 620 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
540 } 621 }
541 622
542 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteBlock) { 623 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteBlock) {
543 ASSERT_TRUE(embedded_test_server()->Start()); 624 ASSERT_TRUE(embedded_test_server()->Start());
544 625
545 auto waiter = CreatePageLoadMetricsWaiter(); 626 auto waiter = CreatePageLoadMetricsWaiter();
546 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 627 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
547 628
548 ui_test_utils::NavigateToURL( 629 ui_test_utils::NavigateToURL(
549 browser(), embedded_test_server()->GetURL( 630 browser(), embedded_test_server()->GetURL(
550 "/page_load_metrics/document_write_script_block.html")); 631 "/page_load_metrics/document_write_script_block.html"));
551 waiter->Wait(); 632 waiter->Wait();
552 633
553 histogram_tester_.ExpectTotalCount( 634 histogram_tester_.ExpectTotalCount(
554 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 635 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
555 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); 636 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1);
556 } 637 }
557 638
558 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteReload) { 639 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteReload) {
559 ASSERT_TRUE(embedded_test_server()->Start()); 640 ASSERT_TRUE(embedded_test_server()->Start());
560 641
561 auto waiter = CreatePageLoadMetricsWaiter(); 642 auto waiter = CreatePageLoadMetricsWaiter();
562 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 643 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
563 ui_test_utils::NavigateToURL( 644 ui_test_utils::NavigateToURL(
564 browser(), embedded_test_server()->GetURL( 645 browser(), embedded_test_server()->GetURL(
565 "/page_load_metrics/document_write_script_block.html")); 646 "/page_load_metrics/document_write_script_block.html"));
566 waiter->Wait(); 647 waiter->Wait();
567 648
568 histogram_tester_.ExpectTotalCount( 649 histogram_tester_.ExpectTotalCount(
(...skipping 23 matching lines...) Expand all
592 reload_waiter->Wait(); 673 reload_waiter->Wait();
593 674
594 histogram_tester_.ExpectTotalCount( 675 histogram_tester_.ExpectTotalCount(
595 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 676 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
596 677
597 histogram_tester_.ExpectTotalCount( 678 histogram_tester_.ExpectTotalCount(
598 internal::kHistogramDocWriteBlockReloadCount, 2); 679 internal::kHistogramDocWriteBlockReloadCount, 2);
599 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); 680 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1);
600 } 681 }
601 682
602 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteAsync) { 683 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteAsync) {
603 ASSERT_TRUE(embedded_test_server()->Start()); 684 ASSERT_TRUE(embedded_test_server()->Start());
604 685
605 auto waiter = CreatePageLoadMetricsWaiter(); 686 auto waiter = CreatePageLoadMetricsWaiter();
606 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 687 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
607 ui_test_utils::NavigateToURL( 688 ui_test_utils::NavigateToURL(
608 browser(), embedded_test_server()->GetURL( 689 browser(), embedded_test_server()->GetURL(
609 "/page_load_metrics/document_write_async_script.html")); 690 "/page_load_metrics/document_write_async_script.html"));
610 waiter->Wait(); 691 waiter->Wait();
611 692
612 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 693 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
613 1); 694 1);
614 histogram_tester_.ExpectTotalCount( 695 histogram_tester_.ExpectTotalCount(
615 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 696 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
616 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 697 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
617 } 698 }
618 699
619 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteSameDomain) { 700 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, DocumentWriteSameDomain) {
620 ASSERT_TRUE(embedded_test_server()->Start()); 701 ASSERT_TRUE(embedded_test_server()->Start());
621 702
622 auto waiter = CreatePageLoadMetricsWaiter(); 703 auto waiter = CreatePageLoadMetricsWaiter();
623 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 704 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
624 ui_test_utils::NavigateToURL( 705 ui_test_utils::NavigateToURL(
625 browser(), embedded_test_server()->GetURL( 706 browser(), embedded_test_server()->GetURL(
626 "/page_load_metrics/document_write_external_script.html")); 707 "/page_load_metrics/document_write_external_script.html"));
627 waiter->Wait(); 708 waiter->Wait();
628 709
629 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 710 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
630 1); 711 1);
631 histogram_tester_.ExpectTotalCount( 712 histogram_tester_.ExpectTotalCount(
632 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 713 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
633 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 714 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
634 } 715 }
635 716
636 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWriteScript) { 717 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, NoDocumentWriteScript) {
637 ASSERT_TRUE(embedded_test_server()->Start()); 718 ASSERT_TRUE(embedded_test_server()->Start());
638 719
639 auto waiter = CreatePageLoadMetricsWaiter(); 720 auto waiter = CreatePageLoadMetricsWaiter();
640 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 721 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
641 ui_test_utils::NavigateToURL( 722 ui_test_utils::NavigateToURL(
642 browser(), embedded_test_server()->GetURL( 723 browser(), embedded_test_server()->GetURL(
643 "/page_load_metrics/document_write_no_script.html")); 724 "/page_load_metrics/document_write_no_script.html"));
644 waiter->Wait(); 725 waiter->Wait();
645 726
646 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 727 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
647 1); 728 1);
648 histogram_tester_.ExpectTotalCount( 729 histogram_tester_.ExpectTotalCount(
649 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 730 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
650 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 731 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
651 } 732 }
652 733
653 // TODO(crbug.com/712935): Flaky on Linux dbg. 734 // TODO(crbug.com/712935): Flaky on Linux dbg.
654 #if defined(OS_LINUX) && !defined(NDEBUG) 735 #if defined(OS_LINUX) && !defined(NDEBUG)
655 #define MAYBE_BadXhtml DISABLED_BadXhtml 736 #define MAYBE_BadXhtml DISABLED_BadXhtml
656 #else 737 #else
657 #define MAYBE_BadXhtml BadXhtml 738 #define MAYBE_BadXhtml BadXhtml
658 #endif 739 #endif
659 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, MAYBE_BadXhtml) { 740 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, MAYBE_BadXhtml) {
660 ASSERT_TRUE(embedded_test_server()->Start()); 741 ASSERT_TRUE(embedded_test_server()->Start());
661 742
662 auto waiter = CreatePageLoadMetricsWaiter(); 743 auto waiter = CreatePageLoadMetricsWaiter();
663 waiter->AddMainFrameExpectation(TimingField::FIRST_PAINT); 744 waiter->AddMainFrameExpectation(TimingField::FIRST_PAINT);
664 745
665 // When an XHTML page contains invalid XML, it causes a paint of the error 746 // When an XHTML page contains invalid XML, it causes a paint of the error
666 // message without a layout. Page load metrics currently treats this as an 747 // message without a layout. Page load metrics currently treats this as an
667 // error. Eventually, we'll fix this by special casing the handling of 748 // error. Eventually, we'll fix this by special casing the handling of
668 // documents with non-well-formed XML on the blink side. See crbug.com/627607 749 // documents with non-well-formed XML on the blink side. See crbug.com/627607
669 // for more. 750 // for more.
(...skipping 14 matching lines...) Expand all
684 histogram_tester_.ExpectTotalCount( 765 histogram_tester_.ExpectTotalCount(
685 page_load_metrics::internal::kPageLoadTimingStatus, 1); 766 page_load_metrics::internal::kPageLoadTimingStatus, 1);
686 histogram_tester_.ExpectBucketCount( 767 histogram_tester_.ExpectBucketCount(
687 page_load_metrics::internal::kPageLoadTimingStatus, 768 page_load_metrics::internal::kPageLoadTimingStatus,
688 page_load_metrics::internal::INVALID_ORDER_FIRST_LAYOUT_FIRST_PAINT, 1); 769 page_load_metrics::internal::INVALID_ORDER_FIRST_LAYOUT_FIRST_PAINT, 1);
689 } 770 }
690 771
691 // Test code that aborts provisional navigations. 772 // Test code that aborts provisional navigations.
692 // TODO(csharrison): Move these to unit tests once the navigation API in content 773 // TODO(csharrison): Move these to unit tests once the navigation API in content
693 // properly calls NavigationHandle/NavigationThrottle methods. 774 // properly calls NavigationHandle/NavigationThrottle methods.
694 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortNewNavigation) { 775 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, AbortNewNavigation) {
695 ASSERT_TRUE(embedded_test_server()->Start()); 776 ASSERT_TRUE(embedded_test_server()->Start());
696 777
697 GURL url(embedded_test_server()->GetURL("/title1.html")); 778 GURL url(embedded_test_server()->GetURL("/title1.html"));
698 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 779 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
699 content::TestNavigationManager manager( 780 content::TestNavigationManager manager(
700 browser()->tab_strip_model()->GetActiveWebContents(), url); 781 browser()->tab_strip_model()->GetActiveWebContents(), url);
701 782
702 chrome::Navigate(&params); 783 chrome::Navigate(&params);
703 EXPECT_TRUE(manager.WaitForRequestStart()); 784 EXPECT_TRUE(manager.WaitForRequestStart());
704 785
705 GURL url2(embedded_test_server()->GetURL("/title2.html")); 786 GURL url2(embedded_test_server()->GetURL("/title2.html"));
706 chrome::NavigateParams params2(browser(), url2, 787 chrome::NavigateParams params2(browser(), url2,
707 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR); 788 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR);
708 789
709 auto waiter = CreatePageLoadMetricsWaiter(); 790 auto waiter = CreatePageLoadMetricsWaiter();
710 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 791 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
711 chrome::Navigate(&params2); 792 chrome::Navigate(&params2);
712 waiter->Wait(); 793 waiter->Wait();
713 794
714 histogram_tester_.ExpectTotalCount( 795 histogram_tester_.ExpectTotalCount(
715 internal::kHistogramAbortNewNavigationBeforeCommit, 1); 796 internal::kHistogramAbortNewNavigationBeforeCommit, 1);
716 } 797 }
717 798
718 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortReload) { 799 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, AbortReload) {
719 ASSERT_TRUE(embedded_test_server()->Start()); 800 ASSERT_TRUE(embedded_test_server()->Start());
720 801
721 GURL url(embedded_test_server()->GetURL("/title1.html")); 802 GURL url(embedded_test_server()->GetURL("/title1.html"));
722 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 803 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
723 content::TestNavigationManager manager( 804 content::TestNavigationManager manager(
724 browser()->tab_strip_model()->GetActiveWebContents(), url); 805 browser()->tab_strip_model()->GetActiveWebContents(), url);
725 806
726 chrome::Navigate(&params); 807 chrome::Navigate(&params);
727 EXPECT_TRUE(manager.WaitForRequestStart()); 808 EXPECT_TRUE(manager.WaitForRequestStart());
728 809
729 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD); 810 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD);
730 811
731 auto waiter = CreatePageLoadMetricsWaiter(); 812 auto waiter = CreatePageLoadMetricsWaiter();
732 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 813 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
733 chrome::Navigate(&params2); 814 chrome::Navigate(&params2);
734 waiter->Wait(); 815 waiter->Wait();
735 816
736 histogram_tester_.ExpectTotalCount( 817 histogram_tester_.ExpectTotalCount(
737 internal::kHistogramAbortReloadBeforeCommit, 1); 818 internal::kHistogramAbortReloadBeforeCommit, 1);
738 } 819 }
739 820
740 // TODO(crbug.com/675061): Flaky on Win7 dbg. 821 // TODO(crbug.com/675061): Flaky on Win7 dbg.
741 #if defined(OS_WIN) 822 #if defined(OS_WIN)
742 #define MAYBE_AbortClose DISABLED_AbortClose 823 #define MAYBE_AbortClose DISABLED_AbortClose
743 #else 824 #else
744 #define MAYBE_AbortClose AbortClose 825 #define MAYBE_AbortClose AbortClose
745 #endif 826 #endif
746 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, MAYBE_AbortClose) { 827 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, MAYBE_AbortClose) {
747 ASSERT_TRUE(embedded_test_server()->Start()); 828 ASSERT_TRUE(embedded_test_server()->Start());
748 829
749 GURL url(embedded_test_server()->GetURL("/title1.html")); 830 GURL url(embedded_test_server()->GetURL("/title1.html"));
750 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 831 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
751 content::TestNavigationManager manager( 832 content::TestNavigationManager manager(
752 browser()->tab_strip_model()->GetActiveWebContents(), url); 833 browser()->tab_strip_model()->GetActiveWebContents(), url);
753 834
754 chrome::Navigate(&params); 835 chrome::Navigate(&params);
755 EXPECT_TRUE(manager.WaitForRequestStart()); 836 EXPECT_TRUE(manager.WaitForRequestStart());
756 837
757 browser()->tab_strip_model()->GetActiveWebContents()->Close(); 838 browser()->tab_strip_model()->GetActiveWebContents()->Close();
758 839
759 manager.WaitForNavigationFinished(); 840 manager.WaitForNavigationFinished();
760 841
761 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit, 842 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit,
762 1); 843 1);
844 ExpectNoTimingUpdates();
763 } 845 }
764 846
765 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortMultiple) { 847 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, AbortMultiple) {
766 ASSERT_TRUE(embedded_test_server()->Start()); 848 ASSERT_TRUE(embedded_test_server()->Start());
767 849
768 GURL url(embedded_test_server()->GetURL("/title1.html")); 850 GURL url(embedded_test_server()->GetURL("/title1.html"));
769 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 851 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
770 content::TestNavigationManager manager( 852 content::TestNavigationManager manager(
771 browser()->tab_strip_model()->GetActiveWebContents(), url); 853 browser()->tab_strip_model()->GetActiveWebContents(), url);
772 854
773 chrome::Navigate(&params); 855 chrome::Navigate(&params);
774 EXPECT_TRUE(manager.WaitForRequestStart()); 856 EXPECT_TRUE(manager.WaitForRequestStart());
775 857
(...skipping 13 matching lines...) Expand all
789 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 871 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
790 chrome::Navigate(&params3); 872 chrome::Navigate(&params3);
791 waiter->Wait(); 873 waiter->Wait();
792 874
793 manager2.WaitForNavigationFinished(); 875 manager2.WaitForNavigationFinished();
794 876
795 histogram_tester_.ExpectTotalCount( 877 histogram_tester_.ExpectTotalCount(
796 internal::kHistogramAbortNewNavigationBeforeCommit, 2); 878 internal::kHistogramAbortNewNavigationBeforeCommit, 2);
797 } 879 }
798 880
799 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 881 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest,
800 NoAbortMetricsOnClientRedirect) { 882 NoAbortMetricsOnClientRedirect) {
801 ASSERT_TRUE(embedded_test_server()->Start()); 883 ASSERT_TRUE(embedded_test_server()->Start());
802 884
803 GURL first_url(embedded_test_server()->GetURL("/title1.html")); 885 GURL first_url(embedded_test_server()->GetURL("/title1.html"));
804 ui_test_utils::NavigateToURL(browser(), first_url); 886 ui_test_utils::NavigateToURL(browser(), first_url);
805 887
806 GURL second_url(embedded_test_server()->GetURL("/title2.html")); 888 GURL second_url(embedded_test_server()->GetURL("/title2.html"));
807 chrome::NavigateParams params(browser(), second_url, 889 chrome::NavigateParams params(browser(), second_url,
808 ui::PAGE_TRANSITION_LINK); 890 ui::PAGE_TRANSITION_LINK);
809 content::TestNavigationManager manager( 891 content::TestNavigationManager manager(
(...skipping 12 matching lines...) Expand all
822 waiter->Wait(); 904 waiter->Wait();
823 } 905 }
824 906
825 manager.WaitForNavigationFinished(); 907 manager.WaitForNavigationFinished();
826 908
827 EXPECT_TRUE(histogram_tester_ 909 EXPECT_TRUE(histogram_tester_
828 .GetTotalCountsForPrefix("PageLoad.Experimental.AbortTiming.") 910 .GetTotalCountsForPrefix("PageLoad.Experimental.AbortTiming.")
829 .empty()); 911 .empty());
830 } 912 }
831 913
832 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 914 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest,
833 FirstMeaningfulPaintRecorded) { 915 FirstMeaningfulPaintRecorded) {
834 ASSERT_TRUE(embedded_test_server()->Start()); 916 ASSERT_TRUE(embedded_test_server()->Start());
835 917
836 auto waiter = CreatePageLoadMetricsWaiter(); 918 auto waiter = CreatePageLoadMetricsWaiter();
837 waiter->AddMainFrameExpectation(TimingField::FIRST_MEANINGFUL_PAINT); 919 waiter->AddMainFrameExpectation(TimingField::FIRST_MEANINGFUL_PAINT);
838 ui_test_utils::NavigateToURL(browser(), 920 ui_test_utils::NavigateToURL(browser(),
839 embedded_test_server()->GetURL("/title1.html")); 921 embedded_test_server()->GetURL("/title1.html"));
840 waiter->Wait(); 922 waiter->Wait();
841 923
842 histogram_tester_.ExpectUniqueSample( 924 histogram_tester_.ExpectUniqueSample(
843 internal::kHistogramFirstMeaningfulPaintStatus, 925 internal::kHistogramFirstMeaningfulPaintStatus,
844 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1); 926 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1);
845 histogram_tester_.ExpectTotalCount( 927 histogram_tester_.ExpectTotalCount(
846 internal::kHistogramFirstMeaningfulPaint, 1); 928 internal::kHistogramFirstMeaningfulPaint, 1);
847 histogram_tester_.ExpectTotalCount( 929 histogram_tester_.ExpectTotalCount(
848 internal::kHistogramParseStartToFirstMeaningfulPaint, 1); 930 internal::kHistogramParseStartToFirstMeaningfulPaint, 1);
849 } 931 }
850 932
851 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 933 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest,
852 FirstMeaningfulPaintNotRecorded) { 934 FirstMeaningfulPaintNotRecorded) {
853 ASSERT_TRUE(embedded_test_server()->Start()); 935 ASSERT_TRUE(embedded_test_server()->Start());
854 936
855 auto waiter = CreatePageLoadMetricsWaiter(); 937 auto waiter = CreatePageLoadMetricsWaiter();
856 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 938 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
857 939
858 ui_test_utils::NavigateToURL( 940 ui_test_utils::NavigateToURL(
859 browser(), embedded_test_server()->GetURL( 941 browser(), embedded_test_server()->GetURL(
860 "/page_load_metrics/page_with_active_connections.html")); 942 "/page_load_metrics/page_with_active_connections.html"));
861 waiter->Wait(); 943 waiter->Wait();
862 944
863 // Navigate away before a FMP is reported. 945 // Navigate away before a FMP is reported.
864 NavigateToUntrackedUrl(); 946 NavigateToUntrackedUrl();
865 947
866 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 948 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
867 1); 949 1);
868 histogram_tester_.ExpectUniqueSample( 950 histogram_tester_.ExpectUniqueSample(
869 internal::kHistogramFirstMeaningfulPaintStatus, 951 internal::kHistogramFirstMeaningfulPaintStatus,
870 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1); 952 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1);
871 histogram_tester_.ExpectTotalCount( 953 histogram_tester_.ExpectTotalCount(
872 internal::kHistogramFirstMeaningfulPaint, 0); 954 internal::kHistogramFirstMeaningfulPaint, 0);
873 histogram_tester_.ExpectTotalCount( 955 histogram_tester_.ExpectTotalCount(
874 internal::kHistogramParseStartToFirstMeaningfulPaint, 0); 956 internal::kHistogramParseStartToFirstMeaningfulPaint, 0);
875 } 957 }
876 958
877 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 959 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest,
878 NoStatePrefetchObserverCacheable) { 960 NoStatePrefetchObserverCacheable) {
879 ASSERT_TRUE(embedded_test_server()->Start()); 961 ASSERT_TRUE(embedded_test_server()->Start());
880 962
881 auto waiter = CreatePageLoadMetricsWaiter(); 963 auto waiter = CreatePageLoadMetricsWaiter();
882 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 964 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
883 965
884 ui_test_utils::NavigateToURL(browser(), 966 ui_test_utils::NavigateToURL(browser(),
885 embedded_test_server()->GetURL("/title1.html")); 967 embedded_test_server()->GetURL("/title1.html"));
886 968
887 waiter->Wait(); 969 waiter->Wait();
888 970
889 histogram_tester_.ExpectTotalCount( 971 histogram_tester_.ExpectTotalCount(
890 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0); 972 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0);
891 histogram_tester_.ExpectTotalCount( 973 histogram_tester_.ExpectTotalCount(
892 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1); 974 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1);
893 } 975 }
894 976
895 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 977 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest,
896 NoStatePrefetchObserverNoStore) { 978 NoStatePrefetchObserverNoStore) {
897 ASSERT_TRUE(embedded_test_server()->Start()); 979 ASSERT_TRUE(embedded_test_server()->Start());
898 980
899 auto waiter = CreatePageLoadMetricsWaiter(); 981 auto waiter = CreatePageLoadMetricsWaiter();
900 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT); 982 waiter->AddMainFrameExpectation(TimingField::FIRST_CONTENTFUL_PAINT);
901 983
902 ui_test_utils::NavigateToURL(browser(), 984 ui_test_utils::NavigateToURL(browser(),
903 embedded_test_server()->GetURL("/nostore.html")); 985 embedded_test_server()->GetURL("/nostore.html"));
904 986
905 waiter->Wait(); 987 waiter->Wait();
906 988
907 histogram_tester_.ExpectTotalCount( 989 histogram_tester_.ExpectTotalCount(
908 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1); 990 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1);
909 histogram_tester_.ExpectTotalCount( 991 histogram_tester_.ExpectTotalCount(
910 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0); 992 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0);
911 } 993 }
912 994
913 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, CSSTiming) { 995 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, CSSTiming) {
914 ASSERT_TRUE(embedded_test_server()->Start()); 996 ASSERT_TRUE(embedded_test_server()->Start());
915 997
916 auto waiter = CreatePageLoadMetricsWaiter(); 998 auto waiter = CreatePageLoadMetricsWaiter();
917 waiter->AddMainFrameExpectation(TimingField::STYLE_UPDATE_BEFORE_FCP); 999 waiter->AddMainFrameExpectation(TimingField::STYLE_UPDATE_BEFORE_FCP);
918 1000
919 // Careful: Blink code clamps timestamps to 5us, so any CSS parsing we do here 1001 // Careful: Blink code clamps timestamps to 5us, so any CSS parsing we do here
920 // must take >> 5us, otherwise we'll log 0 for the value and it will remain 1002 // must take >> 5us, otherwise we'll log 0 for the value and it will remain
921 // unset here. 1003 // unset here.
922 ui_test_utils::NavigateToURL( 1004 ui_test_utils::NavigateToURL(
923 browser(), 1005 browser(),
924 embedded_test_server()->GetURL("/page_load_metrics/page_with_css.html")); 1006 embedded_test_server()->GetURL("/page_load_metrics/page_with_css.html"));
925 waiter->Wait(); 1007 waiter->Wait();
926 1008
927 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, 1009 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint,
928 1); 1010 1);
929 histogram_tester_.ExpectTotalCount( 1011 histogram_tester_.ExpectTotalCount(
930 "PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint", 1); 1012 "PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint", 1);
931 histogram_tester_.ExpectTotalCount( 1013 histogram_tester_.ExpectTotalCount(
932 "PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint", 1); 1014 "PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint", 1);
933 histogram_tester_.ExpectTotalCount( 1015 histogram_tester_.ExpectTotalCount(
934 "PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint", 1); 1016 "PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint", 1);
935 } 1017 }
936 1018
937 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PayloadSize) { 1019 IN_PROC_BROWSER_TEST_P(PageLoadMetricsBrowserTest, PayloadSize) {
938 ASSERT_TRUE(embedded_test_server()->Start()); 1020 ASSERT_TRUE(embedded_test_server()->Start());
939 1021
940 auto waiter = CreatePageLoadMetricsWaiter(); 1022 auto waiter = CreatePageLoadMetricsWaiter();
941 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT); 1023 waiter->AddMainFrameExpectation(TimingField::LOAD_EVENT);
942 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL( 1024 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL(
943 "/page_load_metrics/large.html")); 1025 "/page_load_metrics/large.html"));
944 waiter->Wait(); 1026 waiter->Wait();
945 1027
946 // Payload histograms are only logged when a page load terminates, so force 1028 // Payload histograms are only logged when a page load terminates, so force
947 // navigation to another page. 1029 // navigation to another page.
948 NavigateToUntrackedUrl(); 1030 NavigateToUntrackedUrl();
949 1031
950 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); 1032 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1);
951 1033
952 // Verify that there is a single sample recorded in the 10kB bucket (the size 1034 // Verify that there is a single sample recorded in the 10kB bucket (the size
953 // of the main HTML response). 1035 // of the main HTML response).
954 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1); 1036 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1);
955 } 1037 }
1038
1039 INSTANTIATE_TEST_CASE_P(
1040 /* no prefix */,
1041 PageLoadMetricsBrowserTest,
1042 testing::Values(IPCType::LEGACY, IPCType::MOJO));
OLDNEW
« no previous file with comments | « chrome/browser/page_load_metrics/metrics_web_contents_observer.cc ('k') | chrome/common/chrome_features.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698