Chromium Code Reviews| Index: chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc |
| diff --git a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc |
| index 1b52ea8f37126e974d13ff08f527fb609c81d5e5..f46e4a841785ef4ac8abcb5227349b39c4cbc338 100644 |
| --- a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc |
| +++ b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc |
| @@ -2,6 +2,8 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| +#include "base/command_line.h" |
| +#include "base/feature_list.h" |
| #include "base/files/scoped_temp_dir.h" |
| #include "base/macros.h" |
| #include "base/test/histogram_tester.h" |
| @@ -28,8 +30,10 @@ |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/render_process_host.h" |
| #include "content/public/browser/render_view_host.h" |
| +#include "content/public/common/content_switches.h" |
| #include "content/public/test/browser_test_utils.h" |
| #include "content/public/test/download_test_observer.h" |
| +#include "net/dns/mock_host_resolver.h" |
| #include "net/http/failing_http_transaction_factory.h" |
| #include "net/http/http_cache.h" |
| #include "net/test/embedded_test_server/embedded_test_server.h" |
| @@ -45,9 +49,11 @@ class PageLoadMetricsWaiter |
| public: |
| // A bitvector to express which timing fields to match on. |
| enum ExpectedTimingFields { |
|
jkarlin
2017/05/10 16:55:28
enum class
Bryan McQuade
2017/05/10 18:06:15
thanks! i moved this whole change to https://coder
|
| - FIRST_PAINT = 1 << 0, |
| - FIRST_CONTENTFUL_PAINT = 1 << 1, |
| - STYLE_UPDATE_BEFORE_FCP = 1 << 2 |
| + FIRST_LAYOUT = 1 << 0, |
| + FIRST_PAINT = 1 << 1, |
| + FIRST_CONTENTFUL_PAINT = 1 << 2, |
| + STYLE_UPDATE_BEFORE_FCP = 1 << 3, |
| + DOCUMENT_WRITE_BLOCK_RELOAD = 1 << 4 |
| }; |
| explicit PageLoadMetricsWaiter(content::WebContents* web_contents) |
| @@ -56,14 +62,11 @@ class PageLoadMetricsWaiter |
| ~PageLoadMetricsWaiter() override { DCHECK_EQ(nullptr, run_loop_.get()); } |
| // Add the given expectation to match on. |
| - void AddExpectation(ExpectedTimingFields fields) { |
| - matching_fields_ |= fields; |
| + void AddMainFrameExpectation(ExpectedTimingFields fields) { |
| + main_frame_expected_fields_ |= fields; |
| } |
| - |
| - // Instructs observer to also watch for |count| |
| - // WebLoadingBehaviorDocumentWriteBlockReload events. |
| - void ExpectDocumentWriteBlockReload(int count) { |
| - match_document_write_block_reload_ = count; |
| + void AddSubFrameExpectation(ExpectedTimingFields fields) { |
| + child_frame_expected_fields_ |= fields; |
| } |
| // Waits for a TimingUpdated IPC that matches the fields set by |
| @@ -81,26 +84,40 @@ class PageLoadMetricsWaiter |
| } |
| private: |
| + static int GetMatchedBits( |
| + const page_load_metrics::PageLoadTiming& timing, |
| + const page_load_metrics::PageLoadMetadata& metadata) { |
| + int matched_bits = 0; |
| + if (timing.document_timing.first_layout) |
| + matched_bits |= FIRST_LAYOUT; |
| + if (timing.paint_timing.first_paint) |
| + matched_bits |= FIRST_PAINT; |
| + if (timing.paint_timing.first_contentful_paint) |
| + matched_bits |= FIRST_CONTENTFUL_PAINT; |
| + if (timing.style_sheet_timing.update_style_duration_before_fcp) |
| + matched_bits |= STYLE_UPDATE_BEFORE_FCP; |
| + if (metadata.behavior_flags & |
| + blink::WebLoadingBehaviorFlag:: |
| + kWebLoadingBehaviorDocumentWriteBlockReload) |
| + matched_bits |= DOCUMENT_WRITE_BLOCK_RELOAD; |
| + |
| + return matched_bits; |
| + } |
| + |
| void OnTimingUpdated( |
| + bool is_main_frame, |
| const page_load_metrics::PageLoadTiming& timing, |
| const page_load_metrics::PageLoadMetadata& metadata) override { |
| - if (match_document_write_block_reload_ > 0 && |
| - metadata.behavior_flags & |
| - blink::WebLoadingBehaviorFlag:: |
| - kWebLoadingBehaviorDocumentWriteBlockReload) { |
| - --match_document_write_block_reload_; |
| - } |
| - |
| - if (match_document_write_block_reload_ > 0) { |
| + if (expectations_satisfied_) |
| return; |
| - } |
| - if ((!(matching_fields_ & FIRST_PAINT) || |
| - timing.paint_timing.first_paint) && |
| - (!(matching_fields_ & FIRST_CONTENTFUL_PAINT) || |
| - timing.paint_timing.first_contentful_paint) && |
| - (!(matching_fields_ & STYLE_UPDATE_BEFORE_FCP) || |
| - timing.style_sheet_timing.update_style_duration_before_fcp)) { |
| + int matched_bits = GetMatchedBits(timing, metadata); |
| + if (is_main_frame) |
| + main_frame_expected_fields_ &= ~matched_bits; |
|
jkarlin
2017/05/10 16:55:28
Maybe add a comment that we're incrementally remov
Bryan McQuade
2017/05/10 18:06:15
i think the refactor i did in the other change mak
|
| + else |
| + child_frame_expected_fields_ &= ~matched_bits; |
| + |
| + if (main_frame_expected_fields_ == 0 && child_frame_expected_fields_ == 0) { |
| expectations_satisfied_ = true; |
| if (run_loop_) |
| run_loop_->Quit(); |
| @@ -108,11 +125,26 @@ class PageLoadMetricsWaiter |
| } |
| std::unique_ptr<base::RunLoop> run_loop_; |
| - int matching_fields_ = 0; // A bitvector composed from ExpectedTimingFields. |
| + |
| + // Bitvectors composed from ExpectedTimingFields. |
| + int child_frame_expected_fields_ = 0; |
| + int main_frame_expected_fields_ = 0; |
| + |
| bool expectations_satisfied_ = false; |
|
jkarlin
2017/05/10 16:55:28
expectations_satisfied_ can be replaced with main_
Bryan McQuade
2017/05/10 18:06:15
done in other change
|
| - int match_document_write_block_reload_ = 0; |
| }; |
| +// Due to crbug/705315, paints in child frames are associated with the main |
| +// frame, unless the child frame is cross-origin and Chrome is running with out |
| +// of process cross-origin child frames. As a result, some tests wait for |
| +// different behavior to be observed depending on which mode we are in. |
| +// TODO(crbug/705315): remove this method once the bug is addressed. |
| +static bool AreCrossOriginChildFramesOutOfProcess() { |
| + return base::CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kSitePerProcess) || |
| + base::CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kTopDocumentIsolation); |
| +} |
| + |
| } // namespace |
| class PageLoadMetricsBrowserTest : public InProcessBrowserTest { |
| @@ -125,6 +157,15 @@ class PageLoadMetricsBrowserTest : public InProcessBrowserTest { |
| ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); |
| } |
| + // TODO(crbug/705315): remove this method once the bug is addressed. |
| + void SetUpOnMainThread() override { |
| + InProcessBrowserTest::SetUpOnMainThread(); |
| + host_resolver()->AddRule("a.com", "127.0.0.1"); |
| + host_resolver()->AddRule("b.com", "127.0.0.1"); |
| + host_resolver()->AddRule("c.com", "127.0.0.1"); |
| + content::SetupCrossSiteRedirector(embedded_test_server()); |
| + } |
| + |
| bool NoPageLoadMetricsRecorded() { |
| // Determine whether any 'public' page load metrics are recorded. We exclude |
| // 'internal' metrics as these may be recorded for debugging purposes. |
| @@ -169,13 +210,18 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoNavigation) { |
| IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) { |
| ASSERT_TRUE(embedded_test_server()->Start()); |
| + std::unique_ptr<PageLoadMetricsWaiter> timing_waiter = |
| + CreatePageLoadMetricsWaiter(); |
| + timing_waiter->AddMainFrameExpectation(PageLoadMetricsWaiter::FIRST_PAINT); |
| ui_test_utils::NavigateToURL(browser(), |
| embedded_test_server()->GetURL("/title1.html")); |
| + timing_waiter->Wait(); |
| NavigateToUntrackedUrl(); |
| histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); |
| histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); |
| histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); |
| histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1); |
| histogram_tester_.ExpectTotalCount( |
| internal::kHistogramParseBlockedOnScriptLoad, 1); |
| @@ -190,6 +236,121 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) { |
| EXPECT_FALSE(NoPageLoadMetricsRecorded()); |
| } |
| +IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPaintForEmptyDocument) { |
| + ASSERT_TRUE(embedded_test_server()->Start()); |
| + |
| + std::unique_ptr<PageLoadMetricsWaiter> timing_waiter = |
| + CreatePageLoadMetricsWaiter(); |
| + timing_waiter->AddMainFrameExpectation(PageLoadMetricsWaiter::FIRST_LAYOUT); |
| + ui_test_utils::NavigateToURL(browser(), |
| + embedded_test_server()->GetURL("/empty.html")); |
| + timing_waiter->Wait(); |
| + |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, |
| + 0); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, |
| + NoPaintForEmptyDocumentInChildFrame) { |
| + ASSERT_TRUE(embedded_test_server()->Start()); |
| + |
| + std::unique_ptr<PageLoadMetricsWaiter> timing_waiter = |
| + CreatePageLoadMetricsWaiter(); |
| + timing_waiter->AddMainFrameExpectation(PageLoadMetricsWaiter::FIRST_LAYOUT); |
| + timing_waiter->AddSubFrameExpectation(PageLoadMetricsWaiter::FIRST_LAYOUT); |
| + // TODO(crbug/705315): remove the a.com domain once the bug is addressed. |
| + GURL a_url(embedded_test_server()->GetURL( |
| + "a.com", "/page_load_metrics/empty_iframe.html")); |
| + ui_test_utils::NavigateToURL(browser(), a_url); |
| + timing_waiter->Wait(); |
| + |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramFirstContentfulPaint, |
| + 0); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInChildFrame) { |
|
jkarlin
2017/05/10 16:55:28
I'd like to see a set of tests w/ mocked navigatio
Bryan McQuade
2017/05/10 18:06:15
i'd like to do this in a unit test too, and we onc
|
| + ASSERT_TRUE(embedded_test_server()->Start()); |
| + |
| + std::unique_ptr<PageLoadMetricsWaiter> timing_waiter = |
| + CreatePageLoadMetricsWaiter(); |
| + // TODO(crbug/705315): Once the bug is fixed, remove the else case and make |
| + // the if case the default behavior. |
| + if (AreCrossOriginChildFramesOutOfProcess()) { |
| + timing_waiter->AddSubFrameExpectation(PageLoadMetricsWaiter::FIRST_PAINT); |
| + timing_waiter->AddSubFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| + } else { |
| + timing_waiter->AddMainFrameExpectation(PageLoadMetricsWaiter::FIRST_PAINT); |
| + timing_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| + } |
| + // TODO(crbug/705315): remove the a.com domain once the bug is addressed. |
| + GURL a_url(embedded_test_server()->GetURL("a.com", |
| + "/page_load_metrics/iframe.html")); |
| + ui_test_utils::NavigateToURL(browser(), a_url); |
| + timing_waiter->Wait(); |
| + |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInMultipleChildFrames) { |
| + ASSERT_TRUE(embedded_test_server()->Start()); |
| + |
| + std::unique_ptr<PageLoadMetricsWaiter> timing_waiter = |
| + CreatePageLoadMetricsWaiter(); |
| + // TODO(crbug/705315): Once the bug is fixed, remove the else case and make |
| + // the if case the default behavior. |
| + if (AreCrossOriginChildFramesOutOfProcess()) { |
| + timing_waiter->AddSubFrameExpectation(PageLoadMetricsWaiter::FIRST_PAINT); |
| + timing_waiter->AddSubFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| + } else { |
| + timing_waiter->AddMainFrameExpectation(PageLoadMetricsWaiter::FIRST_PAINT); |
| + timing_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| + } |
| + |
| + // TODO(crbug/705315): remove the a.com domain once the bug is addressed. |
| + GURL a_url(embedded_test_server()->GetURL("a.com", |
| + "/page_load_metrics/iframes.html")); |
| + ui_test_utils::NavigateToURL(browser(), a_url); |
| + timing_waiter->Wait(); |
| + |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PaintInMainAndChildFrame) { |
| + ASSERT_TRUE(embedded_test_server()->Start()); |
| + |
| + std::unique_ptr<PageLoadMetricsWaiter> timing_waiter = |
| + CreatePageLoadMetricsWaiter(); |
| + timing_waiter->AddMainFrameExpectation(PageLoadMetricsWaiter::FIRST_PAINT); |
| + timing_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| + // TODO(crbug/705315): Once the bug is fixed, make the if case the default |
| + // behavior. |
| + if (AreCrossOriginChildFramesOutOfProcess()) { |
| + timing_waiter->AddSubFrameExpectation(PageLoadMetricsWaiter::FIRST_PAINT); |
| + timing_waiter->AddSubFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| + } |
| + |
| + // TODO(crbug/705315): remove the a.com domain once the bug is addressed. |
| + GURL a_url(embedded_test_server()->GetURL( |
| + "a.com", "/page_load_metrics/main_frame_with_iframe.html")); |
| + ui_test_utils::NavigateToURL(browser(), a_url); |
| + timing_waiter->Wait(); |
| + |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 1); |
| +} |
| + |
| IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameDocumentNavigation) { |
| ASSERT_TRUE(embedded_test_server()->Start()); |
| @@ -298,7 +459,8 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) { |
| std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
| CreatePageLoadMetricsWaiter(); |
| - fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| + fcp_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| ui_test_utils::NavigateToURL( |
| browser(), embedded_test_server()->GetURL( |
| @@ -326,7 +488,8 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWrite) { |
| std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
| CreatePageLoadMetricsWaiter(); |
| - fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| + fcp_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| ui_test_utils::NavigateToURL(browser(), |
| embedded_test_server()->GetURL("/title1.html")); |
| @@ -344,7 +507,8 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteBlock) { |
| std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
| CreatePageLoadMetricsWaiter(); |
| - fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| + fcp_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| ui_test_utils::NavigateToURL( |
| browser(), embedded_test_server()->GetURL( |
| @@ -361,28 +525,37 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteReload) { |
| std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
| CreatePageLoadMetricsWaiter(); |
| - fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| - std::unique_ptr<PageLoadMetricsWaiter> reload_waiter = |
| - CreatePageLoadMetricsWaiter(); |
| - reload_waiter->ExpectDocumentWriteBlockReload(2); |
| - |
| + fcp_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| ui_test_utils::NavigateToURL( |
| browser(), embedded_test_server()->GetURL( |
| "/page_load_metrics/document_write_script_block.html")); |
| + fcp_waiter->Wait(); |
| + |
| + histogram_tester_.ExpectTotalCount( |
| + internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); |
| + histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); |
| // Reload should not log the histogram as the script is not blocked. |
| + std::unique_ptr<PageLoadMetricsWaiter> reload_waiter = |
| + CreatePageLoadMetricsWaiter(); |
| + reload_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::DOCUMENT_WRITE_BLOCK_RELOAD); |
| + reload_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| ui_test_utils::NavigateToURL( |
| browser(), embedded_test_server()->GetURL( |
| "/page_load_metrics/document_write_script_block.html")); |
| + reload_waiter->Wait(); |
| + reload_waiter = CreatePageLoadMetricsWaiter(); |
| + reload_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::DOCUMENT_WRITE_BLOCK_RELOAD); |
| + reload_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| ui_test_utils::NavigateToURL( |
| browser(), embedded_test_server()->GetURL( |
| "/page_load_metrics/document_write_script_block.html")); |
| - |
| - histogram_tester_.ExpectTotalCount( |
| - internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); |
| - |
| - fcp_waiter->Wait(); |
| reload_waiter->Wait(); |
| histogram_tester_.ExpectTotalCount( |
| @@ -443,7 +616,7 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, MAYBE_BadXhtml) { |
| std::unique_ptr<PageLoadMetricsWaiter> timing_waiter = |
| CreatePageLoadMetricsWaiter(); |
| - timing_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_PAINT); |
| + timing_waiter->AddMainFrameExpectation(PageLoadMetricsWaiter::FIRST_PAINT); |
| // When an XHTML page contains invalid XML, it causes a paint of the error |
| // message without a layout. Page load metrics currently treats this as an |
| @@ -643,7 +816,8 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, |
| std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
| CreatePageLoadMetricsWaiter(); |
| - fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| + fcp_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| ui_test_utils::NavigateToURL( |
| browser(), embedded_test_server()->GetURL( |
| @@ -668,7 +842,8 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, |
| std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
| CreatePageLoadMetricsWaiter(); |
| - fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| + fcp_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| ui_test_utils::NavigateToURL(browser(), |
| embedded_test_server()->GetURL("/title1.html")); |
| @@ -687,7 +862,8 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, |
| std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
| CreatePageLoadMetricsWaiter(); |
| - fcp_waiter->AddExpectation(PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| + fcp_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::FIRST_CONTENTFUL_PAINT); |
| ui_test_utils::NavigateToURL(browser(), |
| embedded_test_server()->GetURL("/nostore.html")); |
| @@ -705,7 +881,8 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, CSSTiming) { |
| std::unique_ptr<PageLoadMetricsWaiter> fcp_waiter = |
| CreatePageLoadMetricsWaiter(); |
| - fcp_waiter->AddExpectation(PageLoadMetricsWaiter::STYLE_UPDATE_BEFORE_FCP); |
| + fcp_waiter->AddMainFrameExpectation( |
| + PageLoadMetricsWaiter::STYLE_UPDATE_BEFORE_FCP); |
| // Careful: Blink code clamps timestamps to 5us, so any CSS parsing we do here |
| // must take >> 5us, otherwise we'll log 0 for the value and it will remain |