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 10 matching lines...) Expand all Loading... |
21 bool Send(IPC::Message* message) { | 21 bool Send(IPC::Message* message) { |
22 IPC_BEGIN_MESSAGE_MAP(MockIPCSender, *message) | 22 IPC_BEGIN_MESSAGE_MAP(MockIPCSender, *message) |
23 IPC_MESSAGE_HANDLER(PageLoadMetricsMsg_TimingUpdated, OnTimingUpdated) | 23 IPC_MESSAGE_HANDLER(PageLoadMetricsMsg_TimingUpdated, OnTimingUpdated) |
24 IPC_MESSAGE_UNHANDLED(ADD_FAILURE()) | 24 IPC_MESSAGE_UNHANDLED(ADD_FAILURE()) |
25 IPC_END_MESSAGE_MAP() | 25 IPC_END_MESSAGE_MAP() |
26 | 26 |
27 delete message; | 27 delete message; |
28 return true; | 28 return true; |
29 } | 29 } |
30 | 30 |
31 MOCK_METHOD1(OnTimingUpdated, void(PageLoadTiming)); | 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 : PageTimingMetricsSender( | 39 : PageTimingMetricsSender( |
40 ipc_sender, | 40 ipc_sender, |
41 MSG_ROUTING_NONE, | 41 MSG_ROUTING_NONE, |
(...skipping 17 matching lines...) Expand all Loading... |
59 base::Time nav_start = base::Time::FromDoubleT(10); | 59 base::Time nav_start = base::Time::FromDoubleT(10); |
60 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); | 60 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); |
61 | 61 |
62 PageLoadTiming timing; | 62 PageLoadTiming timing; |
63 timing.navigation_start = nav_start; | 63 timing.navigation_start = nav_start; |
64 timing.first_layout = first_layout; | 64 timing.first_layout = first_layout; |
65 | 65 |
66 metrics_sender_.Send(timing); | 66 metrics_sender_.Send(timing); |
67 | 67 |
68 // Firing the timer should trigger sending of an OnTimingUpdated IPC. | 68 // Firing the timer should trigger sending of an OnTimingUpdated IPC. |
69 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing)); | 69 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata())); |
70 ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning()); | 70 ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning()); |
71 metrics_sender_.mock_timer()->Fire(); | 71 metrics_sender_.mock_timer()->Fire(); |
72 EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning()); | 72 EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning()); |
73 | 73 |
74 // At this point, we should have triggered the send of the PageLoadTiming IPC. | 74 // At this point, we should have triggered the send of the PageLoadTiming IPC. |
75 testing::Mock::VerifyAndClearExpectations(&mock_ipc_sender_); | 75 testing::Mock::VerifyAndClearExpectations(&mock_ipc_sender_); |
76 | 76 |
77 // Attempt to send the same timing instance again. The send should be | 77 // Attempt to send the same timing instance again. The send should be |
78 // suppressed, since the timing instance hasn't changed since the last send. | 78 // suppressed, since the timing instance hasn't changed since the last send. |
79 metrics_sender_.Send(timing); | 79 metrics_sender_.Send(timing); |
(...skipping 12 matching lines...) Expand all Loading... |
92 metrics_sender_.Send(timing); | 92 metrics_sender_.Send(timing); |
93 ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning()); | 93 ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning()); |
94 | 94 |
95 // Send an updated PageLoadTiming before the timer has fired. When the timer | 95 // Send an updated PageLoadTiming before the timer has fired. When the timer |
96 // fires, the updated PageLoadTiming should be sent. | 96 // fires, the updated PageLoadTiming should be sent. |
97 timing.load_event_start = load_event; | 97 timing.load_event_start = load_event; |
98 metrics_sender_.Send(timing); | 98 metrics_sender_.Send(timing); |
99 | 99 |
100 // Firing the timer should trigger sending of the OnTimingUpdated IPC with | 100 // Firing the timer should trigger sending of the OnTimingUpdated IPC with |
101 // the most recently provided PageLoadTiming instance. | 101 // the most recently provided PageLoadTiming instance. |
102 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing)); | 102 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata())); |
103 metrics_sender_.mock_timer()->Fire(); | 103 metrics_sender_.mock_timer()->Fire(); |
104 EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning()); | 104 EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning()); |
105 } | 105 } |
106 | 106 |
107 TEST_F(PageTimingMetricsSenderTest, MultipleIPCs) { | 107 TEST_F(PageTimingMetricsSenderTest, MultipleIPCs) { |
108 base::Time nav_start = base::Time::FromDoubleT(10); | 108 base::Time nav_start = base::Time::FromDoubleT(10); |
109 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); | 109 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); |
110 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4); | 110 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4); |
111 | 111 |
112 PageLoadTiming timing; | 112 PageLoadTiming timing; |
113 timing.navigation_start = nav_start; | 113 timing.navigation_start = nav_start; |
114 timing.first_layout = first_layout; | 114 timing.first_layout = first_layout; |
115 | 115 |
116 metrics_sender_.Send(timing); | 116 metrics_sender_.Send(timing); |
117 ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning()); | 117 ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning()); |
118 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing)); | 118 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata())); |
119 metrics_sender_.mock_timer()->Fire(); | 119 metrics_sender_.mock_timer()->Fire(); |
120 EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning()); | 120 EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning()); |
121 testing::Mock::VerifyAndClearExpectations(&mock_ipc_sender_); | 121 testing::Mock::VerifyAndClearExpectations(&mock_ipc_sender_); |
122 | 122 |
123 // Send an updated PageLoadTiming after the timer for the first send request | 123 // Send an updated PageLoadTiming after the timer for the first send request |
124 // has fired, and verify that a second IPC is sent. | 124 // has fired, and verify that a second IPC is sent. |
125 timing.load_event_start = load_event; | 125 timing.load_event_start = load_event; |
126 metrics_sender_.Send(timing); | 126 metrics_sender_.Send(timing); |
127 ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning()); | 127 ASSERT_TRUE(metrics_sender_.mock_timer()->IsRunning()); |
128 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing)); | 128 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata())); |
129 metrics_sender_.mock_timer()->Fire(); | 129 metrics_sender_.mock_timer()->Fire(); |
130 EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning()); | 130 EXPECT_FALSE(metrics_sender_.mock_timer()->IsRunning()); |
131 } | 131 } |
132 | 132 |
133 TEST_F(PageTimingMetricsSenderTest, SendIPCOnDestructor) { | 133 TEST_F(PageTimingMetricsSenderTest, SendIPCOnDestructor) { |
134 PageLoadTiming timing; | 134 PageLoadTiming timing; |
135 timing.navigation_start = base::Time::FromDoubleT(10); | 135 timing.navigation_start = base::Time::FromDoubleT(10); |
136 { | 136 { |
137 // This test wants to verify behavior in the PageTimingMetricsSender | 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 | 138 // destructor, so we create our own instance to make it go out of scope |
139 // before the end of the test body. | 139 // before the end of the test body. |
140 TestPageTimingMetricsSender sender(&mock_ipc_sender_); | 140 TestPageTimingMetricsSender sender(&mock_ipc_sender_); |
141 | 141 |
142 sender.Send(timing); | 142 sender.Send(timing); |
143 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing)); | 143 EXPECT_CALL(mock_ipc_sender_, OnTimingUpdated(timing, PageLoadMetadata())); |
144 ASSERT_TRUE(sender.mock_timer()->IsRunning()); | 144 ASSERT_TRUE(sender.mock_timer()->IsRunning()); |
145 } | 145 } |
146 } | 146 } |
147 | 147 |
148 } // namespace page_load_metrics | 148 } // namespace page_load_metrics |
OLD | NEW |