| Index: chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc
|
| diff --git a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc
|
| index eefc6bf6ded56b4255814bcace6ee330f876040b..d66de85856e5bf3c9c24665bc9172469be13ab0a 100644
|
| --- a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc
|
| +++ b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/memory/ptr_util.h"
|
| #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h"
|
| #include "chrome/test/base/testing_browser_process.h"
|
| +#include "components/page_load_metrics/browser/page_load_metrics_util.h"
|
| #include "components/rappor/rappor_utils.h"
|
| #include "components/rappor/test_rappor_service.h"
|
|
|
| @@ -238,10 +239,51 @@ TEST_F(CorePageLoadMetricsObserverTest, BackgroundDifferentHistogram) {
|
| histogram_tester().ExpectTotalCount(internal::kHistogramFirstTextPaint, 0);
|
| }
|
|
|
| +TEST_F(CorePageLoadMetricsObserverTest,
|
| + BackgroundCommitHistogramClockResolutionNonDeterministic) {
|
| + base::TimeDelta first_layout = base::TimeDelta::FromMilliseconds(1);
|
| +
|
| + page_load_metrics::PageLoadTiming timing;
|
| + timing.navigation_start = base::Time::FromDoubleT(1);
|
| + timing.first_layout = first_layout;
|
| + PopulateRequiredTimingFields(&timing);
|
| +
|
| + // Start a provisional load.
|
| + GURL url(kDefaultTestUrl2);
|
| + content::RenderFrameHostTester* rfh_tester =
|
| + content::RenderFrameHostTester::For(main_rfh());
|
| + rfh_tester->SimulateNavigationStart(url);
|
| +
|
| + // Background and then commit.
|
| + web_contents()->WasHidden();
|
| + rfh_tester->SimulateNavigationCommit(url);
|
| + SimulateTimingUpdate(timing);
|
| + rfh_tester->SimulateNavigationStop();
|
| +
|
| + page_load_metrics::PageLoadExtraInfo info =
|
| + GetPageLoadExtraInfoForCommittedLoad();
|
| +
|
| + // Navigate again to force histograms to be logged.
|
| + NavigateAndCommit(GURL(kDefaultTestUrl));
|
| +
|
| + // If the system clock is low resolution PageLoadTracker's commit_time_ may
|
| + // be = first_background_time_.
|
| + if (page_load_metrics::WasStartedInForegroundOptionalEventInForeground(
|
| + info.time_to_commit, info)) {
|
| + histogram_tester().ExpectTotalCount(internal::kBackgroundHistogramCommit,
|
| + 0);
|
| + histogram_tester().ExpectTotalCount(internal::kHistogramCommit, 1);
|
| + } else {
|
| + histogram_tester().ExpectTotalCount(internal::kBackgroundHistogramCommit,
|
| + 1);
|
| + histogram_tester().ExpectTotalCount(internal::kHistogramCommit, 0);
|
| + }
|
| +}
|
| +
|
| TEST_F(CorePageLoadMetricsObserverTest, OnlyBackgroundLaterEvents) {
|
| page_load_metrics::PageLoadTiming timing;
|
| timing.navigation_start = base::Time::FromDoubleT(1);
|
| - // Set these events at 1 microsecond so they are definitely occur before we
|
| + // Set these events at 1 microsecond so they definitely occur before we
|
| // background the tab later in the test.
|
| timing.response_start = base::TimeDelta::FromMicroseconds(1);
|
| timing.dom_loading = base::TimeDelta::FromMicroseconds(1);
|
| @@ -250,7 +292,7 @@ TEST_F(CorePageLoadMetricsObserverTest, OnlyBackgroundLaterEvents) {
|
| NavigateAndCommit(GURL(kDefaultTestUrl));
|
| SimulateTimingUpdate(timing);
|
|
|
| - // Background the tab, then forground it.
|
| + // Background the tab, then foreground it.
|
| web_contents()->WasHidden();
|
| web_contents()->WasShown();
|
| timing.first_layout = base::TimeDelta::FromSeconds(3);
|
| @@ -258,12 +300,33 @@ TEST_F(CorePageLoadMetricsObserverTest, OnlyBackgroundLaterEvents) {
|
| PopulateRequiredTimingFields(&timing);
|
| SimulateTimingUpdate(timing);
|
|
|
| + // If the system clock is low resolution, PageLoadTracker's
|
| + // first_background_time_ may be same as other times such as
|
| + // dom_content_loaded_event_start.
|
| + page_load_metrics::PageLoadExtraInfo info =
|
| + GetPageLoadExtraInfoForCommittedLoad();
|
| +
|
| // Navigate again to force histogram recording.
|
| NavigateAndCommit(GURL(kDefaultTestUrl2));
|
|
|
| histogram_tester().ExpectTotalCount(internal::kBackgroundHistogramCommit, 0);
|
| - histogram_tester().ExpectTotalCount(
|
| - internal::kBackgroundHistogramDomContentLoaded, 0);
|
| +
|
| + if (page_load_metrics::WasStartedInForegroundEventInForeground(
|
| + timing.dom_content_loaded_event_start, info)) {
|
| + histogram_tester().ExpectTotalCount(internal::kHistogramDomContentLoaded,
|
| + 1);
|
| + histogram_tester().ExpectBucketCount(
|
| + internal::kHistogramDomContentLoaded,
|
| + timing.dom_content_loaded_event_start.InMilliseconds(), 1);
|
| + histogram_tester().ExpectTotalCount(
|
| + internal::kBackgroundHistogramDomContentLoaded, 0);
|
| + } else {
|
| + histogram_tester().ExpectTotalCount(
|
| + internal::kBackgroundHistogramDomContentLoaded, 1);
|
| + histogram_tester().ExpectTotalCount(internal::kHistogramDomContentLoaded,
|
| + 0);
|
| + }
|
| +
|
| histogram_tester().ExpectTotalCount(internal::kBackgroundHistogramLoad, 0);
|
| histogram_tester().ExpectTotalCount(internal::kBackgroundHistogramFirstLayout,
|
| 1);
|
| @@ -277,10 +340,6 @@ TEST_F(CorePageLoadMetricsObserverTest, OnlyBackgroundLaterEvents) {
|
| timing.first_text_paint.InMilliseconds(), 1);
|
|
|
| histogram_tester().ExpectTotalCount(internal::kHistogramCommit, 1);
|
| - histogram_tester().ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
|
| - histogram_tester().ExpectBucketCount(
|
| - internal::kHistogramDomContentLoaded,
|
| - timing.dom_content_loaded_event_start.InMilliseconds(), 1);
|
| histogram_tester().ExpectTotalCount(internal::kHistogramLoad, 0);
|
| histogram_tester().ExpectTotalCount(internal::kHistogramFirstLayout, 0);
|
| histogram_tester().ExpectTotalCount(internal::kHistogramFirstTextPaint, 0);
|
| @@ -345,10 +404,10 @@ TEST_F(CorePageLoadMetricsObserverTest, FailedBackgroundProvisionalLoad) {
|
| // Test that failed provisional event does not get logged in the
|
| // histogram if it happened in the background
|
| GURL url(kDefaultTestUrl);
|
| + web_contents()->WasHidden();
|
| content::RenderFrameHostTester* rfh_tester =
|
| content::RenderFrameHostTester::For(main_rfh());
|
| rfh_tester->SimulateNavigationStart(url);
|
| - web_contents()->WasHidden();
|
| rfh_tester->SimulateNavigationError(url, net::ERR_TIMED_OUT);
|
| rfh_tester->SimulateNavigationStop();
|
|
|
|
|