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

Side by Side Diff: components/page_load_metrics/renderer/metrics_render_frame_observer_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: clean up unit tests 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 (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/metrics_render_frame_observer.h" 5 #include "components/page_load_metrics/renderer/metrics_render_frame_observer.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 14 matching lines...) Expand all
25 // messages get sent. 25 // messages get sent.
26 class MockIPCInterceptor { 26 class MockIPCInterceptor {
27 public: 27 public:
28 void OnMessage(const IPC::Message& message) { 28 void OnMessage(const IPC::Message& message) {
29 IPC_BEGIN_MESSAGE_MAP(MockIPCInterceptor, message) 29 IPC_BEGIN_MESSAGE_MAP(MockIPCInterceptor, message)
30 IPC_MESSAGE_HANDLER(PageLoadMetricsMsg_TimingUpdated, OnTimingUpdated) 30 IPC_MESSAGE_HANDLER(PageLoadMetricsMsg_TimingUpdated, OnTimingUpdated)
31 IPC_MESSAGE_UNHANDLED(ADD_FAILURE()) 31 IPC_MESSAGE_UNHANDLED(ADD_FAILURE())
32 IPC_END_MESSAGE_MAP() 32 IPC_END_MESSAGE_MAP()
33 } 33 }
34 34
35 MOCK_METHOD1(OnTimingUpdated, void(PageLoadTiming)); 35 MOCK_METHOD2(OnTimingUpdated, void(PageLoadTiming, PageLoadMetadata));
36 }; 36 };
37 37
38 // Implementation of the MetricsRenderFrameObserver class we're testing, 38 // Implementation of the MetricsRenderFrameObserver class we're testing,
39 // with the GetTiming() and ShouldSendMetrics() methods stubbed out to make 39 // with the GetTiming() and ShouldSendMetrics() methods stubbed out to make
40 // the rest of the class more testable. 40 // the rest of the class more testable.
41 class MockMetricsRenderFrameObserver : public MetricsRenderFrameObserver { 41 class MockMetricsRenderFrameObserver : public MetricsRenderFrameObserver {
42 public: 42 public:
43 MockMetricsRenderFrameObserver() : MetricsRenderFrameObserver(nullptr) { 43 MockMetricsRenderFrameObserver() : MetricsRenderFrameObserver(nullptr) {
44 ON_CALL(*this, ShouldSendMetrics()).WillByDefault(Return(true)); 44 ON_CALL(*this, ShouldSendMetrics()).WillByDefault(Return(true));
45 ON_CALL(*this, HasNoRenderFrame()).WillByDefault(Return(false)); 45 ON_CALL(*this, HasNoRenderFrame()).WillByDefault(Return(false));
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 NiceMock<MockMetricsRenderFrameObserver> observer; 94 NiceMock<MockMetricsRenderFrameObserver> observer;
95 base::MockTimer* mock_timer = new base::MockTimer(false, false); 95 base::MockTimer* mock_timer = new base::MockTimer(false, false);
96 observer.set_mock_timer(make_scoped_ptr(mock_timer)); 96 observer.set_mock_timer(make_scoped_ptr(mock_timer));
97 observer.DidCommitProvisionalLoad(true, false); 97 observer.DidCommitProvisionalLoad(true, false);
98 98
99 PageLoadTiming timing; 99 PageLoadTiming timing;
100 timing.navigation_start = nav_start; 100 timing.navigation_start = nav_start;
101 timing.first_layout = first_layout; 101 timing.first_layout = first_layout;
102 EXPECT_CALL(observer, GetTiming()).WillRepeatedly(Return(timing)); 102 EXPECT_CALL(observer, GetTiming()).WillRepeatedly(Return(timing));
103 103
104 EXPECT_CALL(*observer.ipc_interceptor(), OnTimingUpdated(timing)); 104 EXPECT_CALL(*observer.ipc_interceptor(),
105 OnTimingUpdated(timing, PageLoadMetadata()));
105 106
106 observer.DidChangePerformanceTiming(); 107 observer.DidChangePerformanceTiming();
107 mock_timer->Fire(); 108 mock_timer->Fire();
108 } 109 }
109 110
110 TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) { 111 TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) {
111 base::Time nav_start = base::Time::FromDoubleT(10); 112 base::Time nav_start = base::Time::FromDoubleT(10);
112 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); 113 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2);
113 base::TimeDelta dom_event = base::TimeDelta::FromMillisecondsD(2); 114 base::TimeDelta dom_event = base::TimeDelta::FromMillisecondsD(2);
114 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2); 115 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2);
115 116
116 NiceMock<MockMetricsRenderFrameObserver> observer; 117 NiceMock<MockMetricsRenderFrameObserver> observer;
117 base::MockTimer* mock_timer = new base::MockTimer(false, false); 118 base::MockTimer* mock_timer = new base::MockTimer(false, false);
118 observer.set_mock_timer(make_scoped_ptr(mock_timer)); 119 observer.set_mock_timer(make_scoped_ptr(mock_timer));
119 observer.DidCommitProvisionalLoad(true, false); 120 observer.DidCommitProvisionalLoad(true, false);
120 121
121 PageLoadTiming timing; 122 PageLoadTiming timing;
122 timing.navigation_start = nav_start; 123 timing.navigation_start = nav_start;
123 timing.first_layout = first_layout; 124 timing.first_layout = first_layout;
124 timing.dom_content_loaded_event_start = dom_event; 125 timing.dom_content_loaded_event_start = dom_event;
125 EXPECT_CALL(observer, GetTiming()).WillRepeatedly(Return(timing)); 126 EXPECT_CALL(observer, GetTiming()).WillRepeatedly(Return(timing));
126 127
127 EXPECT_CALL(*observer.ipc_interceptor(), OnTimingUpdated(timing)); 128 EXPECT_CALL(*observer.ipc_interceptor(),
129 OnTimingUpdated(timing, PageLoadMetadata()));
128 observer.DidChangePerformanceTiming(); 130 observer.DidChangePerformanceTiming();
129 mock_timer->Fire(); 131 mock_timer->Fire();
130 132
131 // At this point, we should have triggered the generation of two metrics. 133 // At this point, we should have triggered the generation of two metrics.
132 // Verify and reset the observer's expectations before moving on to the next 134 // Verify and reset the observer's expectations before moving on to the next
133 // part of the test. 135 // part of the test.
134 testing::Mock::VerifyAndClearExpectations(observer.ipc_interceptor()); 136 testing::Mock::VerifyAndClearExpectations(observer.ipc_interceptor());
135 137
136 timing.load_event_start = load_event; 138 timing.load_event_start = load_event;
137 EXPECT_CALL(observer, GetTiming()).WillRepeatedly(Return(timing)); 139 EXPECT_CALL(observer, GetTiming()).WillRepeatedly(Return(timing));
138 140
139 EXPECT_CALL(*observer.ipc_interceptor(), OnTimingUpdated(timing)); 141 EXPECT_CALL(*observer.ipc_interceptor(),
142 OnTimingUpdated(timing, PageLoadMetadata()));
140 observer.DidChangePerformanceTiming(); 143 observer.DidChangePerformanceTiming();
141 mock_timer->Fire(); 144 mock_timer->Fire();
142 145
143 // Verify and reset the observer's expectations before moving on to the next 146 // Verify and reset the observer's expectations before moving on to the next
144 // part of the test. 147 // part of the test.
145 testing::Mock::VerifyAndClearExpectations(observer.ipc_interceptor()); 148 testing::Mock::VerifyAndClearExpectations(observer.ipc_interceptor());
146 149
147 // The PageLoadTiming above includes timing information for the first layout, 150 // The PageLoadTiming above includes timing information for the first layout,
148 // dom content, and load metrics. However, since we've already generated 151 // dom content, and load metrics. However, since we've already generated
149 // timing information for all of these metrics previously, we do not expect 152 // timing information for all of these metrics previously, we do not expect
(...skipping 12 matching lines...) Expand all
162 base::MockTimer* mock_timer = new base::MockTimer(false, false); 165 base::MockTimer* mock_timer = new base::MockTimer(false, false);
163 observer.set_mock_timer(make_scoped_ptr(mock_timer)); 166 observer.set_mock_timer(make_scoped_ptr(mock_timer));
164 observer.DidCommitProvisionalLoad(true, false); 167 observer.DidCommitProvisionalLoad(true, false);
165 168
166 PageLoadTiming timing; 169 PageLoadTiming timing;
167 timing.navigation_start = nav_start; 170 timing.navigation_start = nav_start;
168 timing.first_layout = first_layout; 171 timing.first_layout = first_layout;
169 timing.dom_content_loaded_event_start = dom_event; 172 timing.dom_content_loaded_event_start = dom_event;
170 timing.load_event_start = load_event; 173 timing.load_event_start = load_event;
171 EXPECT_CALL(observer, GetTiming()).WillRepeatedly(Return(timing)); 174 EXPECT_CALL(observer, GetTiming()).WillRepeatedly(Return(timing));
172 EXPECT_CALL(*observer.ipc_interceptor(), OnTimingUpdated(timing)); 175 EXPECT_CALL(*observer.ipc_interceptor(),
176 OnTimingUpdated(timing, PageLoadMetadata()));
173 observer.DidChangePerformanceTiming(); 177 observer.DidChangePerformanceTiming();
174 mock_timer->Fire(); 178 mock_timer->Fire();
175 179
176 // At this point, we should have triggered the generation of two metrics. 180 // At this point, we should have triggered the generation of two metrics.
177 // Verify and reset the observer's expectations before moving on to the next 181 // Verify and reset the observer's expectations before moving on to the next
178 // part of the test. 182 // part of the test.
179 testing::Mock::VerifyAndClearExpectations(observer.ipc_interceptor()); 183 testing::Mock::VerifyAndClearExpectations(observer.ipc_interceptor());
180 184
181 base::Time nav_start_2 = base::Time::FromDoubleT(100); 185 base::Time nav_start_2 = base::Time::FromDoubleT(100);
182 base::TimeDelta first_layout_2 = base::TimeDelta::FromMillisecondsD(20); 186 base::TimeDelta first_layout_2 = base::TimeDelta::FromMillisecondsD(20);
183 base::TimeDelta dom_event_2 = base::TimeDelta::FromMillisecondsD(20); 187 base::TimeDelta dom_event_2 = base::TimeDelta::FromMillisecondsD(20);
184 base::TimeDelta load_event_2 = base::TimeDelta::FromMillisecondsD(20); 188 base::TimeDelta load_event_2 = base::TimeDelta::FromMillisecondsD(20);
185 PageLoadTiming timing_2; 189 PageLoadTiming timing_2;
186 timing_2.navigation_start = nav_start_2; 190 timing_2.navigation_start = nav_start_2;
187 timing_2.first_layout = first_layout_2; 191 timing_2.first_layout = first_layout_2;
188 timing_2.dom_content_loaded_event_start = dom_event_2; 192 timing_2.dom_content_loaded_event_start = dom_event_2;
189 timing_2.load_event_start = load_event_2; 193 timing_2.load_event_start = load_event_2;
190 194
191 base::MockTimer* mock_timer2 = new base::MockTimer(false, false); 195 base::MockTimer* mock_timer2 = new base::MockTimer(false, false);
192 observer.set_mock_timer(make_scoped_ptr(mock_timer2)); 196 observer.set_mock_timer(make_scoped_ptr(mock_timer2));
193 observer.DidCommitProvisionalLoad(true, false); 197 observer.DidCommitProvisionalLoad(true, false);
194 EXPECT_CALL(*observer.ipc_interceptor(), OnTimingUpdated(timing)); 198 EXPECT_CALL(*observer.ipc_interceptor(),
199 OnTimingUpdated(timing, PageLoadMetadata()));
195 observer.DidChangePerformanceTiming(); 200 observer.DidChangePerformanceTiming();
196 mock_timer2->Fire(); 201 mock_timer2->Fire();
197 } 202 }
198 203
199 } // namespace page_load_metrics 204 } // namespace page_load_metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698