| Index: components/page_load_metrics/renderer/page_timing_metrics_sender_unittest.cc
|
| diff --git a/components/page_load_metrics/renderer/page_timing_metrics_sender_unittest.cc b/components/page_load_metrics/renderer/page_timing_metrics_sender_unittest.cc
|
| index 83993d688dd57e6f86ecdb1c8886d0a3a56c910a..2aca12557a891b3379d53c7a7c29b0103d1f6e02 100644
|
| --- a/components/page_load_metrics/renderer/page_timing_metrics_sender_unittest.cc
|
| +++ b/components/page_load_metrics/renderer/page_timing_metrics_sender_unittest.cc
|
| @@ -6,31 +6,13 @@
|
|
|
| #include "base/time/time.h"
|
| #include "base/timer/mock_timer.h"
|
| -#include "components/page_load_metrics/common/page_load_metrics_messages.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 "ipc/ipc_message.h"
|
| -#include "ipc/ipc_message_macros.h"
|
| -#include "ipc/ipc_sender.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace page_load_metrics {
|
|
|
| -class MockIPCSender : public IPC::Sender {
|
| - public:
|
| - bool Send(IPC::Message* message) {
|
| - IPC_BEGIN_MESSAGE_MAP(MockIPCSender, *message)
|
| - IPC_MESSAGE_HANDLER(PageLoadMetricsMsg_TimingUpdated, OnTimingUpdated)
|
| - IPC_MESSAGE_UNHANDLED(ADD_FAILURE())
|
| - IPC_END_MESSAGE_MAP()
|
| -
|
| - delete message;
|
| - return true;
|
| - }
|
| -
|
| - MOCK_METHOD2(OnTimingUpdated, void(PageLoadTiming, PageLoadMetadata));
|
| -};
|
| -
|
| // Thin wrapper around PageTimingMetricsSender that provides access to the
|
| // MockTimer instance.
|
| class TestPageTimingMetricsSender : public PageTimingMetricsSender {
|
| @@ -51,11 +33,12 @@ class TestPageTimingMetricsSender : public PageTimingMetricsSender {
|
| class PageTimingMetricsSenderTest : public testing::Test {
|
| public:
|
| PageTimingMetricsSenderTest()
|
| - : metrics_sender_(&mock_ipc_sender_, PageLoadTiming()) {}
|
| + : metrics_sender_(new TestPageTimingMetricsSender(&fake_ipc_sender_,
|
| + PageLoadTiming())) {}
|
|
|
| protected:
|
| - testing::StrictMock<MockIPCSender> mock_ipc_sender_;
|
| - TestPageTimingMetricsSender metrics_sender_;
|
| + FakePageTimingMetricsIPCSender fake_ipc_sender_;
|
| + std::unique_ptr<TestPageTimingMetricsSender> metrics_sender_;
|
| };
|
|
|
| TEST_F(PageTimingMetricsSenderTest, Basic) {
|
| @@ -66,21 +49,21 @@ TEST_F(PageTimingMetricsSenderTest, Basic) {
|
| timing.navigation_start = nav_start;
|
| timing.first_layout = first_layout;
|
|
|
| - metrics_sender_.Send(timing);
|
| + metrics_sender_->Send(timing);
|
|
|
| // Firing the timer should trigger sending of an OnTimingUpdated IPC.
|
| - EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata()));
|
| - ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning());
|
| - metrics_sender_.mock_timer()->Fire();
|
| - EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning());
|
| + fake_ipc_sender_.ExpectPageLoadTiming(timing);
|
| + ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
|
| + metrics_sender_->mock_timer()->Fire();
|
| + EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
|
|
|
| // At this point, we should have triggered the send of the PageLoadTiming IPC.
|
| - testing::Mock::VerifyAndClearExpectations(&mock_ipc_sender_);
|
| + fake_ipc_sender_.VerifyExpectedTimings();
|
|
|
| // Attempt to send the same timing instance again. The send should be
|
| // suppressed, since the timing instance hasn't changed since the last send.
|
| - metrics_sender_.Send(timing);
|
| - EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning());
|
| + metrics_sender_->Send(timing);
|
| + EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
|
| }
|
|
|
| TEST_F(PageTimingMetricsSenderTest, CoalesceMultipleIPCs) {
|
| @@ -92,19 +75,19 @@ TEST_F(PageTimingMetricsSenderTest, CoalesceMultipleIPCs) {
|
| timing.navigation_start = nav_start;
|
| timing.first_layout = first_layout;
|
|
|
| - metrics_sender_.Send(timing);
|
| - ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning());
|
| + metrics_sender_->Send(timing);
|
| + ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
|
|
|
| // Send an updated PageLoadTiming before the timer has fired. When the timer
|
| // fires, the updated PageLoadTiming should be sent.
|
| timing.load_event_start = load_event;
|
| - metrics_sender_.Send(timing);
|
| + metrics_sender_->Send(timing);
|
|
|
| // Firing the timer should trigger sending of the OnTimingUpdated IPC with
|
| // the most recently provided PageLoadTiming instance.
|
| - EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata()));
|
| - metrics_sender_.mock_timer()->Fire();
|
| - EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning());
|
| + fake_ipc_sender_.ExpectPageLoadTiming(timing);
|
| + metrics_sender_->mock_timer()->Fire();
|
| + EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
|
| }
|
|
|
| TEST_F(PageTimingMetricsSenderTest, MultipleIPCs) {
|
| @@ -116,21 +99,21 @@ TEST_F(PageTimingMetricsSenderTest, MultipleIPCs) {
|
| timing.navigation_start = nav_start;
|
| timing.first_layout = first_layout;
|
|
|
| - metrics_sender_.Send(timing);
|
| - ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning());
|
| - EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata()));
|
| - metrics_sender_.mock_timer()->Fire();
|
| - EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning());
|
| - testing::Mock::VerifyAndClearExpectations(&mock_ipc_sender_);
|
| + metrics_sender_->Send(timing);
|
| + ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
|
| + fake_ipc_sender_.ExpectPageLoadTiming(timing);
|
| + metrics_sender_->mock_timer()->Fire();
|
| + EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
|
| + fake_ipc_sender_.VerifyExpectedTimings();
|
|
|
| // Send an updated PageLoadTiming after the timer for the first send request
|
| // has fired, and verify that a second IPC is sent.
|
| timing.load_event_start = load_event;
|
| - metrics_sender_.Send(timing);
|
| - ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning());
|
| - EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata()));
|
| - metrics_sender_.mock_timer()->Fire();
|
| - EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning());
|
| + metrics_sender_->Send(timing);
|
| + ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
|
| + fake_ipc_sender_.ExpectPageLoadTiming(timing);
|
| + metrics_sender_->mock_timer()->Fire();
|
| + EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
|
| }
|
|
|
| TEST_F(PageTimingMetricsSenderTest, SendIPCOnDestructor) {
|
| @@ -139,11 +122,14 @@ TEST_F(PageTimingMetricsSenderTest, SendIPCOnDestructor) {
|
| timing.first_layout = base::TimeDelta::FromMilliseconds(10);
|
|
|
| // This test wants to verify behavior in the PageTimingMetricsSender
|
| - // destructor, the EXPECT_CALL will be verified when the test tears down and
|
| - // |metrics_sender_| goes out of scope.
|
| - metrics_sender_.Send(timing);
|
| - EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata()));
|
| - ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning());
|
| + // destructor. The EXPECT_CALL will be satisfied when the |metrics_sender_|
|
| + // is destroyed below.
|
| + metrics_sender_->Send(timing);
|
| + fake_ipc_sender_.ExpectPageLoadTiming(timing);
|
| + ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
|
| +
|
| + // Destroy |metrics_sender_|, in order to force its destructor to run.
|
| + metrics_sender_.reset();
|
| }
|
|
|
| } // namespace page_load_metrics
|
|
|