Chromium Code Reviews| Index: components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc |
| diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc |
| index ee2639f5009f4f89450accc0a0a03f2da77f838a..cba70ee57cd8b184b6fc5a22c474ee06d50e5ff7 100644 |
| --- a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc |
| +++ b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc |
| @@ -29,6 +29,12 @@ const char kHistogramNameDomContent[] = |
| const char kHistogramNameLoad[] = |
| "PageLoad.Timing.NavigationToLoadEventFired"; |
| +const char kBGHistogramNameFirstLayout[] = |
| + "PageLoad.Timing.BG.NavigationToFirstLayout"; |
| +const char kBGHistogramNameDomContent[] = |
| + "PageLoad.Timing.BG.NavigationToDOMContentLoadedEventFired"; |
| +const char kBGHistogramNameLoad[] = |
| + "PageLoad.Timing.BG.NavigationToLoadEventFired"; |
| } // namespace |
| class MetricsWebContentsObserverTest |
| @@ -39,6 +45,7 @@ class MetricsWebContentsObserverTest |
| void SetUp() override { |
| RenderViewHostTestHarness::SetUp(); |
| observer_ = make_scoped_ptr(new MetricsWebContentsObserver(web_contents())); |
| + observer_->WasShown(); |
| } |
| void AssertNoHistogramsLogged() { |
| @@ -79,6 +86,8 @@ TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) { |
| PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| subframe); |
| subframe_tester->SimulateNavigationStop(); |
| + observer_->DidFinishLoad(web_contents()->GetMainFrame(), |
|
Bryan McQuade
2015/09/29 00:43:01
we probably no longer need these calls to DidFinis
|
| + GURL(kDefaultTestUrl2)); |
| // Navigate again to see if the timing updated for a subframe message. |
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
| @@ -100,6 +109,8 @@ TEST_F(MetricsWebContentsObserverTest, SamePageNoTrigger) { |
| observer_->OnMessageReceived( |
| PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| web_contents()->GetMainFrame()); |
| + observer_->DidFinishLoad(web_contents()->GetMainFrame(), |
| + GURL(kDefaultTestUrl)); |
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrlAnchor)); |
| // A same page navigation shouldn't trigger logging UMA for the original. |
| AssertNoHistogramsLogged(); |
| @@ -119,7 +130,11 @@ TEST_F(MetricsWebContentsObserverTest, SamePageNoTriggerUntilTrueNavCommit) { |
| observer_->OnMessageReceived( |
| PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| web_contents()->GetMainFrame()); |
| + observer_->DidFinishLoad(web_contents()->GetMainFrame(), |
| + GURL(kDefaultTestUrl)); |
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrlAnchor)); |
| + observer_->DidFinishLoad(web_contents()->GetMainFrame(), |
| + GURL(kDefaultTestUrlAnchor)); |
| // A same page navigation shouldn't trigger logging UMA for the original. |
| AssertNoHistogramsLogged(); |
| @@ -147,6 +162,8 @@ TEST_F(MetricsWebContentsObserverTest, SingleMetricAfterCommit) { |
| observer_->OnMessageReceived( |
| PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| web_contents()->GetMainFrame()); |
| + observer_->DidFinishLoad(web_contents()->GetMainFrame(), |
| + GURL(kDefaultTestUrl)); |
| AssertNoHistogramsLogged(); |
| @@ -181,6 +198,8 @@ TEST_F(MetricsWebContentsObserverTest, MultipleMetricsAfterCommits) { |
| observer_->OnMessageReceived( |
| PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| web_contents()->GetMainFrame()); |
| + observer_->DidFinishLoad(web_contents()->GetMainFrame(), |
| + GURL(kDefaultTestUrl)); |
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
| @@ -191,6 +210,8 @@ TEST_F(MetricsWebContentsObserverTest, MultipleMetricsAfterCommits) { |
| observer_->OnMessageReceived( |
| PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing2), |
| web_contents()->GetMainFrame()); |
| + observer_->DidFinishLoad(web_contents()->GetMainFrame(), |
| + GURL(kDefaultTestUrl2)); |
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
| @@ -211,4 +232,83 @@ TEST_F(MetricsWebContentsObserverTest, MultipleMetricsAfterCommits) { |
| 1); |
| } |
| +TEST_F(MetricsWebContentsObserverTest, BackgroundDifferentHistogram) { |
| + base::TimeDelta first_layout = base::TimeDelta::FromMilliseconds(1); |
| + |
| + PageLoadTiming timing; |
| + timing.navigation_start = base::Time::FromDoubleT(1); |
| + timing.first_layout = first_layout; |
| + |
| + content::WebContentsTester* web_contents_tester = |
| + content::WebContentsTester::For(web_contents()); |
| + |
| + // Simulate "Open link in new tab." |
| + observer_->WasHidden(); |
| + web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
| + |
| + observer_->OnMessageReceived( |
| + PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| + web_contents()->GetMainFrame()); |
| + |
| + // Simulate switching to the tab and making another navigation. |
| + observer_->WasShown(); |
| + observer_->DidFinishLoad(web_contents()->GetMainFrame(), |
| + GURL(kDefaultTestUrl)); |
| + AssertNoHistogramsLogged(); |
| + |
| + // Navigate again to force histogram recording. |
| + web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
| + |
| + histogram_tester_.ExpectTotalCount(kBGHistogramNameDomContent, 0); |
| + histogram_tester_.ExpectTotalCount(kBGHistogramNameLoad, 0); |
| + histogram_tester_.ExpectTotalCount(kBGHistogramNameFirstLayout, 1); |
| + histogram_tester_.ExpectBucketCount(kBGHistogramNameFirstLayout, |
| + first_layout.InMilliseconds(), 1); |
| + |
| + histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 0); |
| + histogram_tester_.ExpectTotalCount(kHistogramNameLoad, 0); |
| + histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 0); |
| +} |
| + |
| +TEST_F(MetricsWebContentsObserverTest, DontBackgroundQuickerLoad) { |
| + base::TimeDelta first_layout = base::TimeDelta::FromMilliseconds(1); |
| + |
| + PageLoadTiming timing; |
| + timing.navigation_start = base::Time::FromDoubleT(1); |
| + timing.first_layout = first_layout; |
| + |
| + observer_->WasHidden(); |
| + |
| + // Open in new tab |
| + content::WebContentsTester* web_contents_tester = |
| + content::WebContentsTester::For(web_contents()); |
| + |
| + web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); |
| + |
| + content::RenderFrameHostTester* rfh_tester = |
| + content::RenderFrameHostTester::For(main_rfh()); |
| + |
| + // Switch to the tab |
| + observer_->WasShown(); |
| + |
| + // Start another provisional load |
| + web_contents_tester->StartNavigation(GURL(kDefaultTestUrl2)); |
| + rfh_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); |
| + observer_->OnMessageReceived( |
| + PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| + main_rfh()); |
| + rfh_tester->SimulateNavigationStop(); |
| + |
| + observer_->DidFinishLoad(web_contents()->GetMainFrame(), |
| + GURL(kDefaultTestUrl2)); |
| + |
| + // Navigate again to see if the timing updated for a subframe message. |
| + web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
| + |
| + histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 0); |
| + histogram_tester_.ExpectTotalCount(kHistogramNameLoad, 0); |
| + histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 1); |
| + histogram_tester_.ExpectBucketCount(kHistogramNameFirstLayout, |
| + first_layout.InMilliseconds(), 1); |
| +} |
|
Bryan McQuade
2015/09/29 00:43:01
could we add one more test where some metrics occu
Charlie Harrison
2015/09/29 14:13:07
It's already in the most updated patch :)
|
| } // namespace page_load_metrics |