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 |