| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/page_load_metrics/renderer/page_timing_metrics_sender.h" | 5 #include "components/page_load_metrics/renderer/page_timing_metrics_sender.h" |
| 6 | 6 |
| 7 #include "base/time/time.h" | 7 #include "base/time/time.h" |
| 8 #include "base/timer/mock_timer.h" | 8 #include "base/timer/mock_timer.h" |
| 9 #include "components/page_load_metrics/common/page_load_metrics_messages.h" | 9 #include "components/page_load_metrics/common/page_load_metrics_messages.h" |
| 10 #include "components/page_load_metrics/common/page_load_timing.h" | 10 #include "components/page_load_metrics/common/page_load_timing.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 return true; | 28 return true; |
| 29 } | 29 } |
| 30 | 30 |
| 31 MOCK_METHOD2(OnTimingUpdated, void(PageLoadTiming, PageLoadMetadata)); | 31 MOCK_METHOD2(OnTimingUpdated, void(PageLoadTiming, PageLoadMetadata)); |
| 32 }; | 32 }; |
| 33 | 33 |
| 34 // Thin wrapper around PageTimingMetricsSender that provides access to the | 34 // Thin wrapper around PageTimingMetricsSender that provides access to the |
| 35 // MockTimer instance. | 35 // MockTimer instance. |
| 36 class TestPageTimingMetricsSender : public PageTimingMetricsSender { | 36 class TestPageTimingMetricsSender : public PageTimingMetricsSender { |
| 37 public: | 37 public: |
| 38 explicit TestPageTimingMetricsSender(IPC::Sender* ipc_sender) | 38 explicit TestPageTimingMetricsSender(IPC::Sender* ipc_sender, |
| 39 const PageLoadTiming& initial_timing) |
| 39 : PageTimingMetricsSender( | 40 : PageTimingMetricsSender( |
| 40 ipc_sender, | 41 ipc_sender, |
| 41 MSG_ROUTING_NONE, | 42 MSG_ROUTING_NONE, |
| 42 std::unique_ptr<base::Timer>(new base::MockTimer(false, false))) {} | 43 std::unique_ptr<base::Timer>(new base::MockTimer(false, false)), |
| 44 initial_timing) {} |
| 43 | 45 |
| 44 base::MockTimer* mock_timer() const { | 46 base::MockTimer* mock_timer() const { |
| 45 return reinterpret_cast<base::MockTimer*>(timer()); | 47 return reinterpret_cast<base::MockTimer*>(timer()); |
| 46 } | 48 } |
| 47 }; | 49 }; |
| 48 | 50 |
| 49 class PageTimingMetricsSenderTest : public testing::Test { | 51 class PageTimingMetricsSenderTest : public testing::Test { |
| 50 public: | 52 public: |
| 51 PageTimingMetricsSenderTest() : metrics_sender_(&mock_ipc_sender_) {} | 53 PageTimingMetricsSenderTest() |
| 54 : metrics_sender_(&mock_ipc_sender_, PageLoadTiming()) {} |
| 52 | 55 |
| 53 protected: | 56 protected: |
| 54 testing::StrictMock<MockIPCSender> mock_ipc_sender_; | 57 testing::StrictMock<MockIPCSender> mock_ipc_sender_; |
| 55 TestPageTimingMetricsSender metrics_sender_; | 58 TestPageTimingMetricsSender metrics_sender_; |
| 56 }; | 59 }; |
| 57 | 60 |
| 58 TEST_F(PageTimingMetricsSenderTest, Basic) { | 61 TEST_F(PageTimingMetricsSenderTest, Basic) { |
| 59 base::Time nav_start = base::Time::FromDoubleT(10); | 62 base::Time nav_start = base::Time::FromDoubleT(10); |
| 60 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); | 63 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); |
| 61 | 64 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 metrics_sender_.Send(timing); | 129 metrics_sender_.Send(timing); |
| 127 ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning()); | 130 ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning()); |
| 128 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata())); | 131 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata())); |
| 129 metrics_sender_.mock_timer()->Fire(); | 132 metrics_sender_.mock_timer()->Fire(); |
| 130 EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning()); | 133 EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning()); |
| 131 } | 134 } |
| 132 | 135 |
| 133 TEST_F(PageTimingMetricsSenderTest, SendIPCOnDestructor) { | 136 TEST_F(PageTimingMetricsSenderTest, SendIPCOnDestructor) { |
| 134 PageLoadTiming timing; | 137 PageLoadTiming timing; |
| 135 timing.navigation_start = base::Time::FromDoubleT(10); | 138 timing.navigation_start = base::Time::FromDoubleT(10); |
| 136 { | 139 timing.first_layout = base::TimeDelta::FromMilliseconds(10); |
| 137 // This test wants to verify behavior in the PageTimingMetricsSender | |
| 138 // destructor, so we create our own instance to make it go out of scope | |
| 139 // before the end of the test body. | |
| 140 TestPageTimingMetricsSender sender(&mock_ipc_sender_); | |
| 141 | 140 |
| 142 sender.Send(timing); | 141 // This test wants to verify behavior in the PageTimingMetricsSender |
| 143 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata())); | 142 // destructor, the EXPECT_CALL will be verified when the test tears down and |
| 144 ASSERT_TRUE(sender.mock_timer()->IsRunning()); | 143 // |metrics_sender_| goes out of scope. |
| 145 } | 144 metrics_sender_.Send(timing); |
| 145 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata())); |
| 146 ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning()); |
| 146 } | 147 } |
| 147 | 148 |
| 148 } // namespace page_load_metrics | 149 } // namespace page_load_metrics |
| OLD | NEW |