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 90f0859832a3c1bd7155348bdc4b4a8a52c4ed76..8dbb975a0a10c9fe9d0b704b2f09f0679afd5bc1 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 |
@@ -11,6 +11,7 @@ |
#include "base/time/time.h" |
#include "base/timer/mock_timer.h" |
#include "chrome/common/page_load_metrics/page_load_timing.h" |
+#include "chrome/common/page_load_metrics/test/weak_mock_timer.h" |
#include "chrome/renderer/page_load_metrics/fake_page_timing_sender.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -19,14 +20,15 @@ namespace page_load_metrics { |
// Implementation of the MetricsRenderFrameObserver class we're testing, |
// with the GetTiming() and ShouldSendMetrics() methods stubbed out to make |
// the rest of the class more testable. |
-class TestMetricsRenderFrameObserver : public MetricsRenderFrameObserver { |
+class TestMetricsRenderFrameObserver : public MetricsRenderFrameObserver, |
+ public test::WeakMockTimerProvider { |
public: |
TestMetricsRenderFrameObserver() : MetricsRenderFrameObserver(nullptr) {} |
- std::unique_ptr<base::Timer> CreateTimer() const override { |
- if (!mock_timer_) |
- ADD_FAILURE() << "CreateTimer() called, but no MockTimer available."; |
- return std::move(mock_timer_); |
+ std::unique_ptr<base::Timer> CreateTimer() override { |
+ auto timer = base::MakeUnique<test::WeakMockTimer>(); |
+ SetMockTimer(timer->AsWeakPtr()); |
+ return std::move(timer); |
} |
std::unique_ptr<PageTimingSender> CreatePageTimingSender() override { |
@@ -34,11 +36,6 @@ class TestMetricsRenderFrameObserver : public MetricsRenderFrameObserver { |
new FakePageTimingSender(&validator_)); |
} |
- void set_mock_timer(std::unique_ptr<base::Timer> timer) { |
- ASSERT_EQ(nullptr, mock_timer_); |
- mock_timer_ = std::move(timer); |
- } |
- |
void ExpectPageLoadTiming(const mojom::PageLoadTiming& timing) { |
SetFakePageLoadTiming(timing); |
validator_.ExpectPageLoadTiming(timing); |
@@ -65,18 +62,14 @@ class TestMetricsRenderFrameObserver : public MetricsRenderFrameObserver { |
private: |
FakePageTimingSender::PageTimingValidator validator_; |
mutable mojom::PageLoadTimingPtr fake_timing_; |
- mutable std::unique_ptr<base::Timer> mock_timer_; |
}; |
typedef testing::Test MetricsRenderFrameObserverTest; |
TEST_F(MetricsRenderFrameObserverTest, NoMetrics) { |
TestMetricsRenderFrameObserver observer; |
- base::MockTimer* mock_timer = new base::MockTimer(false, false); |
- observer.set_mock_timer(base::WrapUnique(mock_timer)); |
- |
observer.DidChangePerformanceTiming(); |
- ASSERT_FALSE(mock_timer->IsRunning()); |
+ ASSERT_EQ(nullptr, observer.GetMockTimer()); |
} |
TEST_F(MetricsRenderFrameObserverTest, SingleMetric) { |
@@ -84,21 +77,19 @@ TEST_F(MetricsRenderFrameObserverTest, SingleMetric) { |
base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(10); |
TestMetricsRenderFrameObserver observer; |
- base::MockTimer* mock_timer = new base::MockTimer(false, false); |
- observer.set_mock_timer(base::WrapUnique(mock_timer)); |
mojom::PageLoadTiming timing; |
page_load_metrics::InitPageLoadTimingForTest(&timing); |
timing.navigation_start = nav_start; |
observer.ExpectPageLoadTiming(timing); |
observer.DidCommitProvisionalLoad(true, false); |
- mock_timer->Fire(); |
+ observer.GetMockTimer()->Fire(); |
timing.document_timing->first_layout = first_layout; |
observer.ExpectPageLoadTiming(timing); |
observer.DidChangePerformanceTiming(); |
- mock_timer->Fire(); |
+ observer.GetMockTimer()->Fire(); |
} |
TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) { |
@@ -108,22 +99,20 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) { |
base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2); |
TestMetricsRenderFrameObserver observer; |
- base::MockTimer* mock_timer = new base::MockTimer(false, false); |
- observer.set_mock_timer(base::WrapUnique(mock_timer)); |
mojom::PageLoadTiming timing; |
page_load_metrics::InitPageLoadTimingForTest(&timing); |
timing.navigation_start = nav_start; |
observer.ExpectPageLoadTiming(timing); |
observer.DidCommitProvisionalLoad(true, false); |
- mock_timer->Fire(); |
+ observer.GetMockTimer()->Fire(); |
timing.document_timing->first_layout = first_layout; |
timing.document_timing->dom_content_loaded_event_start = dom_event; |
observer.ExpectPageLoadTiming(timing); |
observer.DidChangePerformanceTiming(); |
- mock_timer->Fire(); |
+ observer.GetMockTimer()->Fire(); |
// At this point, we should have triggered the generation of two metrics. |
// Verify and reset the observer's expectations before moving on to the next |
@@ -134,7 +123,7 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) { |
observer.ExpectPageLoadTiming(timing); |
observer.DidChangePerformanceTiming(); |
- mock_timer->Fire(); |
+ observer.GetMockTimer()->Fire(); |
// Verify and reset the observer's expectations before moving on to the next |
// part of the test. |
@@ -146,7 +135,7 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) { |
// this invocation to generate any additional metrics. |
observer.SetFakePageLoadTiming(timing); |
observer.DidChangePerformanceTiming(); |
- ASSERT_FALSE(mock_timer->IsRunning()); |
+ ASSERT_FALSE(observer.GetMockTimer()->IsRunning()); |
} |
TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) { |
@@ -156,22 +145,20 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) { |
base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2); |
TestMetricsRenderFrameObserver observer; |
- base::MockTimer* mock_timer = new base::MockTimer(false, false); |
- observer.set_mock_timer(base::WrapUnique(mock_timer)); |
mojom::PageLoadTiming timing; |
page_load_metrics::InitPageLoadTimingForTest(&timing); |
timing.navigation_start = nav_start; |
observer.ExpectPageLoadTiming(timing); |
observer.DidCommitProvisionalLoad(true, false); |
- mock_timer->Fire(); |
+ observer.GetMockTimer()->Fire(); |
timing.document_timing->first_layout = first_layout; |
timing.document_timing->dom_content_loaded_event_start = dom_event; |
timing.document_timing->load_event_start = load_event; |
observer.ExpectPageLoadTiming(timing); |
observer.DidChangePerformanceTiming(); |
- mock_timer->Fire(); |
+ observer.GetMockTimer()->Fire(); |
// At this point, we should have triggered the generation of two metrics. |
// Verify and reset the observer's expectations before moving on to the next |
@@ -186,12 +173,11 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) { |
page_load_metrics::InitPageLoadTimingForTest(&timing_2); |
timing_2.navigation_start = nav_start_2; |
- base::MockTimer* mock_timer2 = new base::MockTimer(false, false); |
- observer.set_mock_timer(base::WrapUnique(mock_timer2)); |
+ observer.SetMockTimer(nullptr); |
observer.ExpectPageLoadTiming(timing_2); |
observer.DidCommitProvisionalLoad(true, false); |
- mock_timer2->Fire(); |
+ observer.GetMockTimer()->Fire(); |
timing_2.document_timing->first_layout = first_layout_2; |
timing_2.document_timing->dom_content_loaded_event_start = dom_event_2; |
@@ -199,7 +185,7 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) { |
observer.ExpectPageLoadTiming(timing_2); |
observer.DidChangePerformanceTiming(); |
- mock_timer2->Fire(); |
+ observer.GetMockTimer()->Fire(); |
} |
} // namespace page_load_metrics |