| 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 fa9943c06b4eda3c8901cd5750f488f6d61ccb20..3c773cb94cf08942ded81dd8f04a8567d1b827a9 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
 | 
| @@ -145,25 +145,13 @@ class MetricsWebContentsObserverTest
 | 
|      histogram_tester_.ExpectTotalCount(internal::kErrorEvents, 0);
 | 
|    }
 | 
|  
 | 
| -  void AssertNoNonEmptyTimingReported() {
 | 
| -    ASSERT_FALSE(embedder_interface_->complete_timings().empty());
 | 
| +  int CountEmptyCompleteTimingReported() {
 | 
| +    int empty = 0;
 | 
|      for (const auto& timing : embedder_interface_->complete_timings()) {
 | 
| -      ASSERT_TRUE(timing.IsEmpty());
 | 
| +      if (timing.IsEmpty())
 | 
| +        ++empty;
 | 
|      }
 | 
| -  }
 | 
| -
 | 
| -  void AssertNonEmptyTimingsReported(size_t expected_non_empty_timings) {
 | 
| -    ASSERT_GE(embedder_interface_->complete_timings().size(),
 | 
| -              expected_non_empty_timings);
 | 
| -    size_t actual_non_empty_timings = 0;
 | 
| -    for (const auto& timing : embedder_interface_->complete_timings()) {
 | 
| -      if (!timing.IsEmpty()) {
 | 
| -        ++actual_non_empty_timings;
 | 
| -      }
 | 
| -    }
 | 
| -    ASSERT_EQ(expected_non_empty_timings, actual_non_empty_timings);
 | 
| -    ASSERT_GE(embedder_interface_->updated_timings().size(),
 | 
| -              actual_non_empty_timings);
 | 
| +    return empty;
 | 
|    }
 | 
|  
 | 
|    int CountCompleteTimingReported() {
 | 
| @@ -207,7 +195,8 @@ TEST_F(MetricsWebContentsObserverTest, SuccessfulMainFrameNavigation) {
 | 
|    ASSERT_EQ(0, CountCompleteTimingReported());
 | 
|  
 | 
|    web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
 | 
| -  AssertNonEmptyTimingsReported(1);
 | 
| +  ASSERT_EQ(1, CountCompleteTimingReported());
 | 
| +  ASSERT_EQ(0, CountEmptyCompleteTimingReported());
 | 
|    ASSERT_EQ(2u, observed_committed_urls_from_on_start().size());
 | 
|    ASSERT_EQ(kDefaultTestUrl,
 | 
|              observed_committed_urls_from_on_start().at(1).spec());
 | 
| @@ -236,11 +225,13 @@ TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) {
 | 
|    subframe_tester->SimulateNavigationStop();
 | 
|  
 | 
|    // Navigate again to see if the timing updated for a subframe message.
 | 
| -  web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
 | 
| +  web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
 | 
|  
 | 
|    ASSERT_EQ(0, CountUpdatedTimingReported());
 | 
| -  AssertNoNonEmptyTimingReported();
 | 
| +  ASSERT_EQ(1, CountCompleteTimingReported());
 | 
| +  ASSERT_EQ(1, CountEmptyCompleteTimingReported());
 | 
|    CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1);
 | 
| +  CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1);
 | 
|    CheckTotalErrorEvents();
 | 
|  }
 | 
|  
 | 
| @@ -255,9 +246,22 @@ TEST_F(MetricsWebContentsObserverTest, SamePageNoTrigger) {
 | 
|    SimulateTimingUpdate(timing);
 | 
|    ASSERT_EQ(1, CountUpdatedTimingReported());
 | 
|    web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrlAnchor));
 | 
| +  // Send the same timing update. The original tracker for kDefaultTestUrl
 | 
| +  // should dedup the update, and the tracker for kDefaultTestUrlAnchor should
 | 
| +  // have been destroyed as a result of its being a same page navigation, so
 | 
| +  // CountUpdatedTimingReported() should continue to return 1.
 | 
| +  SimulateTimingUpdate(timing);
 | 
| +
 | 
| +  ASSERT_EQ(1, CountUpdatedTimingReported());
 | 
| +  ASSERT_EQ(0, CountCompleteTimingReported());
 | 
| +
 | 
| +  // Navigate again to force histogram logging.
 | 
| +  web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
 | 
| +
 | 
|    // A same page navigation shouldn't trigger logging UMA for the original.
 | 
|    ASSERT_EQ(1, CountUpdatedTimingReported());
 | 
| -  AssertNoNonEmptyTimingReported();
 | 
| +  ASSERT_EQ(1, CountCompleteTimingReported());
 | 
| +  ASSERT_EQ(0, CountEmptyCompleteTimingReported());
 | 
|    CheckNoErrorEvents();
 | 
|  }
 | 
|  
 | 
| 
 |