Index: chrome/renderer/page_load_metrics/metrics_render_frame_observer_unittest.cc |
diff --git a/chrome/renderer/page_load_metrics/metrics_render_frame_observer_unittest.cc b/chrome/renderer/page_load_metrics/metrics_render_frame_observer_unittest.cc |
index b2e041f94b915e644bbe5ac495db7b5fd1f89541..6142b1d2ff2bf799517a5b5e853a19bf5039b458 100644 |
--- a/chrome/renderer/page_load_metrics/metrics_render_frame_observer_unittest.cc |
+++ b/chrome/renderer/page_load_metrics/metrics_render_frame_observer_unittest.cc |
@@ -41,26 +41,40 @@ class TestMetricsRenderFrameObserver : public MetricsRenderFrameObserver { |
mock_timer_ = std::move(timer); |
} |
+ void set_is_main_frame(bool is_main_frame) { is_main_frame_ = is_main_frame; } |
+ |
+ bool WasFakeTimingConsumed() const { return fake_timing_.IsEmpty(); } |
+ |
void ExpectPageLoadTiming(const PageLoadTiming& timing) { |
+ SetFakePageLoadTiming(timing); |
fake_timing_ipc_sender_.ExpectPageLoadTiming(timing); |
} |
+ void SetFakePageLoadTiming(const PageLoadTiming& timing) { |
+ EXPECT_TRUE(fake_timing_.IsEmpty()); |
+ fake_timing_ = timing; |
+ } |
+ |
PageLoadTiming GetTiming() const override { |
- return fake_timing_ipc_sender_.expected_timings().empty() |
- ? PageLoadTiming() |
- : fake_timing_ipc_sender_.expected_timings().back(); |
+ PageLoadTiming tmp = fake_timing_; |
+ fake_timing_ = PageLoadTiming(); |
+ return tmp; |
} |
void VerifyExpectedTimings() const { |
+ EXPECT_TRUE(fake_timing_.IsEmpty()); |
fake_timing_ipc_sender_.VerifyExpectedTimings(); |
} |
bool ShouldSendMetrics() const override { return true; } |
bool HasNoRenderFrame() const override { return false; } |
+ bool IsMainFrame() const override { return is_main_frame_; } |
private: |
FakePageTimingMetricsIPCSender fake_timing_ipc_sender_; |
+ mutable PageLoadTiming fake_timing_; |
mutable std::unique_ptr<base::Timer> mock_timer_; |
+ bool is_main_frame_ = true; |
}; |
typedef testing::Test MetricsRenderFrameObserverTest; |
@@ -192,4 +206,24 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) { |
mock_timer2->Fire(); |
} |
+TEST_F(MetricsRenderFrameObserverTest, NoUpdatesFromChildFrames) { |
+ base::Time nav_start = base::Time::FromDoubleT(10); |
+ |
+ TestMetricsRenderFrameObserver observer; |
+ base::MockTimer* mock_timer = new base::MockTimer(false, false); |
+ observer.set_mock_timer(base::WrapUnique(mock_timer)); |
+ observer.set_is_main_frame(false); |
+ |
+ PageLoadTiming timing; |
+ timing.navigation_start = nav_start; |
+ observer.SetFakePageLoadTiming(timing); |
+ observer.DidCommitProvisionalLoad(true, false); |
+ ASSERT_FALSE(observer.WasFakeTimingConsumed()); |
+ ASSERT_FALSE(mock_timer->IsRunning()); |
+ |
+ observer.DidChangePerformanceTiming(); |
+ ASSERT_FALSE(observer.WasFakeTimingConsumed()); |
+ ASSERT_FALSE(mock_timer->IsRunning()); |
+} |
+ |
} // namespace page_load_metrics |