Index: components/page_load_metrics/renderer/metrics_render_frame_observer_unittest.cc |
diff --git a/components/page_load_metrics/renderer/metrics_render_frame_observer_unittest.cc b/components/page_load_metrics/renderer/metrics_render_frame_observer_unittest.cc |
index 7ef1d3922365eeb0cd8239aef52c32c86d793155..19ef86068da1c78f55ff2a3207be5b9d3b9b8571 100644 |
--- a/components/page_load_metrics/renderer/metrics_render_frame_observer_unittest.cc |
+++ b/components/page_load_metrics/renderer/metrics_render_frame_observer_unittest.cc |
@@ -8,10 +8,13 @@ |
#include <utility> |
#include "base/memory/ptr_util.h" |
+#include "base/message_loop/message_loop.h" |
+#include "base/run_loop.h" |
#include "base/time/time.h" |
#include "base/timer/mock_timer.h" |
#include "components/page_load_metrics/common/page_load_timing.h" |
-#include "components/page_load_metrics/renderer/fake_page_timing_metrics_ipc_sender.h" |
+#include "components/page_load_metrics/renderer/fake_page_load_metrics.h" |
+#include "mojo/public/cpp/bindings/binding.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace page_load_metrics { |
@@ -21,7 +24,10 @@ namespace page_load_metrics { |
// the rest of the class more testable. |
class TestMetricsRenderFrameObserver : public MetricsRenderFrameObserver { |
public: |
- TestMetricsRenderFrameObserver() : MetricsRenderFrameObserver(nullptr) {} |
+ TestMetricsRenderFrameObserver(mojom::PageLoadMetricsPtr page_load_metrics, |
+ FakePageLoadMetrics* fake_page_load_metrics) |
+ : MetricsRenderFrameObserver(nullptr, std::move(page_load_metrics)), |
+ fake_page_load_metrics_(fake_page_load_metrics) {} |
std::unique_ptr<base::Timer> CreateTimer() const override { |
if (!mock_timer_) |
@@ -29,44 +35,48 @@ class TestMetricsRenderFrameObserver : public MetricsRenderFrameObserver { |
return std::move(mock_timer_); |
} |
- // We intercept sent messages and dispatch them to our |
- // FakePageTimingMetricsIPCSender, which we use to verify that the expected |
- // IPC messages get sent. |
- bool Send(IPC::Message* message) override { |
- return fake_timing_ipc_sender_.Send(message); |
- } |
- |
void set_mock_timer(std::unique_ptr<base::Timer> timer) { |
ASSERT_EQ(nullptr, mock_timer_); |
mock_timer_ = std::move(timer); |
} |
void ExpectPageLoadTiming(const PageLoadTiming& timing) { |
- fake_timing_ipc_sender_.ExpectPageLoadTiming(timing); |
+ fake_page_load_metrics_->ExpectPageLoadTiming(timing); |
} |
PageLoadTiming GetTiming() const override { |
- return fake_timing_ipc_sender_.expected_timings().empty() |
+ return fake_page_load_metrics_->expected_timings().empty() |
? PageLoadTiming() |
- : fake_timing_ipc_sender_.expected_timings().back(); |
+ : fake_page_load_metrics_->expected_timings().back(); |
} |
void VerifyExpectedTimings() const { |
- fake_timing_ipc_sender_.VerifyExpectedTimings(); |
+ fake_page_load_metrics_->VerifyExpectedTimings(); |
} |
bool ShouldSendMetrics() const override { return true; } |
bool HasNoRenderFrame() const override { return false; } |
private: |
- FakePageTimingMetricsIPCSender fake_timing_ipc_sender_; |
mutable std::unique_ptr<base::Timer> mock_timer_; |
+ FakePageLoadMetrics* fake_page_load_metrics_; |
}; |
-typedef testing::Test MetricsRenderFrameObserverTest; |
+class MetricsRenderFrameObserverTest : public testing::Test { |
+ public: |
+ MetricsRenderFrameObserverTest() : binding_(&fake_page_load_metrics_) {} |
+ void SetUp() override { binding_.Bind(mojo::GetProxy(&page_load_metrics_)); } |
+ |
+ protected: |
+ base::MessageLoop loop_; |
+ mojom::PageLoadMetricsPtr page_load_metrics_; |
+ FakePageLoadMetrics fake_page_load_metrics_; |
+ mojo::Binding<mojom::PageLoadMetrics> binding_; |
+}; |
TEST_F(MetricsRenderFrameObserverTest, NoMetrics) { |
- TestMetricsRenderFrameObserver observer; |
+ TestMetricsRenderFrameObserver observer(std::move(page_load_metrics_), |
+ &fake_page_load_metrics_); |
base::MockTimer* mock_timer = new base::MockTimer(false, false); |
observer.set_mock_timer(base::WrapUnique(mock_timer)); |
@@ -78,7 +88,8 @@ TEST_F(MetricsRenderFrameObserverTest, SingleMetric) { |
base::Time nav_start = base::Time::FromDoubleT(10); |
base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(10); |
- TestMetricsRenderFrameObserver observer; |
+ TestMetricsRenderFrameObserver observer(std::move(page_load_metrics_), |
+ &fake_page_load_metrics_); |
base::MockTimer* mock_timer = new base::MockTimer(false, false); |
observer.set_mock_timer(base::WrapUnique(mock_timer)); |
@@ -87,12 +98,14 @@ TEST_F(MetricsRenderFrameObserverTest, SingleMetric) { |
observer.ExpectPageLoadTiming(timing); |
observer.DidCommitProvisionalLoad(true, false); |
mock_timer->Fire(); |
+ base::RunLoop().RunUntilIdle(); |
timing.first_layout = first_layout; |
observer.ExpectPageLoadTiming(timing); |
observer.DidChangePerformanceTiming(); |
mock_timer->Fire(); |
+ base::RunLoop().RunUntilIdle(); |
} |
TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) { |
@@ -101,7 +114,8 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) { |
base::TimeDelta dom_event = base::TimeDelta::FromMillisecondsD(2); |
base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2); |
- TestMetricsRenderFrameObserver observer; |
+ TestMetricsRenderFrameObserver observer(std::move(page_load_metrics_), |
+ &fake_page_load_metrics_); |
base::MockTimer* mock_timer = new base::MockTimer(false, false); |
observer.set_mock_timer(base::WrapUnique(mock_timer)); |
@@ -110,6 +124,7 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) { |
observer.ExpectPageLoadTiming(timing); |
observer.DidCommitProvisionalLoad(true, false); |
mock_timer->Fire(); |
+ base::RunLoop().RunUntilIdle(); |
timing.first_layout = first_layout; |
timing.dom_content_loaded_event_start = dom_event; |
@@ -117,6 +132,7 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) { |
observer.DidChangePerformanceTiming(); |
mock_timer->Fire(); |
+ base::RunLoop().RunUntilIdle(); |
// 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 |
@@ -128,6 +144,7 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) { |
observer.DidChangePerformanceTiming(); |
mock_timer->Fire(); |
+ base::RunLoop().RunUntilIdle(); |
// Verify and reset the observer's expectations before moving on to the next |
// part of the test. |
@@ -147,7 +164,8 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) { |
base::TimeDelta dom_event = base::TimeDelta::FromMillisecondsD(2); |
base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2); |
- TestMetricsRenderFrameObserver observer; |
+ TestMetricsRenderFrameObserver observer(std::move(page_load_metrics_), |
+ &fake_page_load_metrics_); |
base::MockTimer* mock_timer = new base::MockTimer(false, false); |
observer.set_mock_timer(base::WrapUnique(mock_timer)); |
@@ -156,6 +174,7 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) { |
observer.ExpectPageLoadTiming(timing); |
observer.DidCommitProvisionalLoad(true, false); |
mock_timer->Fire(); |
+ base::RunLoop().RunUntilIdle(); |
timing.first_layout = first_layout; |
timing.dom_content_loaded_event_start = dom_event; |
@@ -163,6 +182,7 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) { |
observer.ExpectPageLoadTiming(timing); |
observer.DidChangePerformanceTiming(); |
mock_timer->Fire(); |
+ base::RunLoop().RunUntilIdle(); |
// 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 |
@@ -182,6 +202,7 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) { |
observer.ExpectPageLoadTiming(timing_2); |
observer.DidCommitProvisionalLoad(true, false); |
mock_timer2->Fire(); |
+ base::RunLoop().RunUntilIdle(); |
timing_2.first_layout = first_layout_2; |
timing_2.dom_content_loaded_event_start = dom_event_2; |
@@ -190,6 +211,7 @@ TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) { |
observer.DidChangePerformanceTiming(); |
mock_timer2->Fire(); |
+ base::RunLoop().RunUntilIdle(); |
} |
} // namespace page_load_metrics |