| Index: chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer_unittest.cc | 
| diff --git a/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer_unittest.cc | 
| index f8bcb254a53fb7a285715348a25bd80202370dd2..d8cb11170edc491882e9ea597d9e601e4f775e66 100644 | 
| --- a/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer_unittest.cc | 
| +++ b/chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_observer_unittest.cc | 
| @@ -7,6 +7,7 @@ | 
| #include "base/macros.h" | 
| #include "base/memory/ptr_util.h" | 
| #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h" | 
| +#include "components/page_load_metrics/browser/page_load_metrics_util.h" | 
|  | 
| namespace { | 
| const char kExampleUrl[] = "http://www.example.com/"; | 
| @@ -427,16 +428,25 @@ TEST_F(FromGWSPageLoadMetricsObserverTest, | 
| NavigateAndCommit(GURL("https://www.google.com/search#q=test")); | 
| NavigateAndCommit(GURL(kExampleUrl)); | 
|  | 
| -  SimulateTimingUpdate(timing); | 
| web_contents()->WasHidden(); | 
| +  SimulateTimingUpdate(timing); | 
|  | 
| -  // Navigate again to force logging. | 
| -  NavigateAndCommit(GURL("https://www.final.com")); | 
| -  histogram_tester().ExpectTotalCount(internal::kHistogramFromGWSFirstTextPaint, | 
| -                                      1); | 
| -  histogram_tester().ExpectBucketCount( | 
| -      internal::kHistogramFromGWSFirstTextPaint, | 
| -      timing.first_text_paint.InMilliseconds(), 1); | 
| +  page_load_metrics::PageLoadExtraInfo info = | 
| +      GetPageLoadExtraInfoForCommittedLoad(); | 
| + | 
| +  // If the system clock is low resolution PageLoadTracker's background_time_ | 
| +  // may be < timing.first_text_paint. | 
| +  if (page_load_metrics::WasStartedInForegroundEventInForeground( | 
| +          timing.first_text_paint, info)) { | 
| +    histogram_tester().ExpectTotalCount( | 
| +        internal::kHistogramFromGWSFirstTextPaint, 1); | 
| +    histogram_tester().ExpectBucketCount( | 
| +        internal::kHistogramFromGWSFirstTextPaint, | 
| +        timing.first_text_paint.InMilliseconds(), 1); | 
| +  } else { | 
| +    histogram_tester().ExpectTotalCount( | 
| +        internal::kHistogramFromGWSFirstTextPaint, 0); | 
| +  } | 
| } | 
|  | 
| TEST_F(FromGWSPageLoadMetricsObserverTest, UnknownNavigationBeforeCommit) { | 
| @@ -599,9 +609,20 @@ TEST_F(FromGWSPageLoadMetricsObserverTest, NoAbortNewNavigationAfterPaint) { | 
| PopulateRequiredTimingFields(&timing); | 
| NavigateAndCommit(GURL("https://example.test")); | 
| SimulateTimingUpdate(timing); | 
| + | 
| +  // The test cannot assume that abort time will be > first_paint | 
| +  // (1 micro-sec). If the system clock is low resolution, PageLoadTracker's | 
| +  // abort time may be <= first_paint. In that case the histogram will be | 
| +  // logged. Thus both 0 and 1 counts of histograms are considered good. | 
| + | 
| NavigateAndCommit(GURL("https://example.test2")); | 
| -  histogram_tester().ExpectTotalCount( | 
| -      internal::kHistogramFromGWSAbortNewNavigationBeforePaint, 0); | 
| + | 
| +  base::HistogramTester::CountsMap counts_map = | 
| +      histogram_tester().GetTotalCountsForPrefix( | 
| +          internal::kHistogramFromGWSAbortNewNavigationBeforePaint); | 
| + | 
| +  EXPECT_TRUE(counts_map.empty() || | 
| +              (counts_map.size() == 1 && counts_map.begin()->second == 1)); | 
| } | 
|  | 
| TEST_F(FromGWSPageLoadMetricsObserverTest, NewNavigationBeforeInteraction) { | 
|  |