Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1124)

Side by Side Diff: components/page_load_metrics/renderer/page_timing_metrics_sender_unittest.cc

Issue 1857443002: Plumb experiment flags through page_load_metrics and add a new observer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@page_load_experiments
Patch Set: No need to add Default group to variation config Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698