OLD | NEW |
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/browser/metrics_web_contents_observer.h" | 5 #include "components/page_load_metrics/browser/metrics_web_contents_observer.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 | 132 |
133 content::RenderFrameHostTester* rfh_tester = | 133 content::RenderFrameHostTester* rfh_tester = |
134 content::RenderFrameHostTester::For(main_rfh()); | 134 content::RenderFrameHostTester::For(main_rfh()); |
135 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe"); | 135 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe"); |
136 | 136 |
137 content::RenderFrameHostTester* subframe_tester = | 137 content::RenderFrameHostTester* subframe_tester = |
138 content::RenderFrameHostTester::For(subframe); | 138 content::RenderFrameHostTester::For(subframe); |
139 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2)); | 139 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2)); |
140 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); | 140 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); |
141 observer_->OnMessageReceived( | 141 observer_->OnMessageReceived( |
142 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 142 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing, |
| 143 PageLoadMetadata()), |
143 subframe); | 144 subframe); |
144 subframe_tester->SimulateNavigationStop(); | 145 subframe_tester->SimulateNavigationStop(); |
145 | 146 |
146 // Navigate again to see if the timing updated for a subframe message. | 147 // Navigate again to see if the timing updated for a subframe message. |
147 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 148 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
148 | 149 |
149 AssertNoNonEmptyTimingReported(); | 150 AssertNoNonEmptyTimingReported(); |
150 CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1); | 151 CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1); |
151 CheckTotalErrorEvents(); | 152 CheckTotalErrorEvents(); |
152 } | 153 } |
153 | 154 |
154 TEST_F(MetricsWebContentsObserverTest, SamePageNoTrigger) { | 155 TEST_F(MetricsWebContentsObserverTest, SamePageNoTrigger) { |
155 PageLoadTiming timing; | 156 PageLoadTiming timing; |
156 timing.navigation_start = base::Time::FromDoubleT(1); | 157 timing.navigation_start = base::Time::FromDoubleT(1); |
157 | 158 |
158 content::WebContentsTester* web_contents_tester = | 159 content::WebContentsTester* web_contents_tester = |
159 content::WebContentsTester::For(web_contents()); | 160 content::WebContentsTester::For(web_contents()); |
160 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 161 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
161 | 162 |
162 observer_->OnMessageReceived( | 163 observer_->OnMessageReceived( |
163 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 164 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing, |
| 165 PageLoadMetadata()), |
164 web_contents()->GetMainFrame()); | 166 web_contents()->GetMainFrame()); |
165 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrlAnchor)); | 167 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrlAnchor)); |
166 // A same page navigation shouldn't trigger logging UMA for the original. | 168 // A same page navigation shouldn't trigger logging UMA for the original. |
167 AssertNoNonEmptyTimingReported(); | 169 AssertNoNonEmptyTimingReported(); |
168 CheckNoErrorEvents(); | 170 CheckNoErrorEvents(); |
169 } | 171 } |
170 | 172 |
171 TEST_F(MetricsWebContentsObserverTest, DontLogPrerender) { | 173 TEST_F(MetricsWebContentsObserverTest, DontLogPrerender) { |
172 PageLoadTiming timing; | 174 PageLoadTiming timing; |
173 timing.navigation_start = base::Time::FromDoubleT(1); | 175 timing.navigation_start = base::Time::FromDoubleT(1); |
174 | 176 |
175 content::WebContentsTester* web_contents_tester = | 177 content::WebContentsTester* web_contents_tester = |
176 content::WebContentsTester::For(web_contents()); | 178 content::WebContentsTester::For(web_contents()); |
177 embedder_interface_->set_is_prerendering(true); | 179 embedder_interface_->set_is_prerendering(true); |
178 | 180 |
179 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 181 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
180 observer_->OnMessageReceived( | 182 observer_->OnMessageReceived( |
181 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 183 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing, |
| 184 PageLoadMetadata()), |
182 web_contents()->GetMainFrame()); | 185 web_contents()->GetMainFrame()); |
183 | 186 |
184 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 187 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
185 AssertNoTimingReported(); | 188 AssertNoTimingReported(); |
186 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); | 189 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); |
187 CheckTotalErrorEvents(); | 190 CheckTotalErrorEvents(); |
188 } | 191 } |
189 | 192 |
190 TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) { | 193 TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) { |
191 PageLoadTiming timing; | 194 PageLoadTiming timing; |
192 timing.navigation_start = base::Time::FromDoubleT(10); | 195 timing.navigation_start = base::Time::FromDoubleT(10); |
193 | 196 |
194 content::WebContentsTester* web_contents_tester = | 197 content::WebContentsTester* web_contents_tester = |
195 content::WebContentsTester::For(web_contents()); | 198 content::WebContentsTester::For(web_contents()); |
196 | 199 |
197 GURL about_blank_url = GURL("about:blank"); | 200 GURL about_blank_url = GURL("about:blank"); |
198 web_contents_tester->NavigateAndCommit(about_blank_url); | 201 web_contents_tester->NavigateAndCommit(about_blank_url); |
199 | 202 |
200 observer_->OnMessageReceived( | 203 observer_->OnMessageReceived( |
201 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 204 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing, |
| 205 PageLoadMetadata()), |
202 main_rfh()); | 206 main_rfh()); |
203 | 207 |
204 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 208 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
205 | 209 |
206 CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 1); | 210 CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 1); |
207 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); | 211 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); |
208 CheckTotalErrorEvents(); | 212 CheckTotalErrorEvents(); |
209 } | 213 } |
210 | 214 |
211 TEST_F(MetricsWebContentsObserverTest, NotInMainError) { | 215 TEST_F(MetricsWebContentsObserverTest, NotInMainError) { |
212 PageLoadTiming timing; | 216 PageLoadTiming timing; |
213 timing.navigation_start = base::Time::FromDoubleT(1); | 217 timing.navigation_start = base::Time::FromDoubleT(1); |
214 | 218 |
215 content::WebContentsTester* web_contents_tester = | 219 content::WebContentsTester* web_contents_tester = |
216 content::WebContentsTester::For(web_contents()); | 220 content::WebContentsTester::For(web_contents()); |
217 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 221 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
218 | 222 |
219 content::RenderFrameHostTester* rfh_tester = | 223 content::RenderFrameHostTester* rfh_tester = |
220 content::RenderFrameHostTester::For(main_rfh()); | 224 content::RenderFrameHostTester::For(main_rfh()); |
221 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe"); | 225 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe"); |
222 | 226 |
223 content::RenderFrameHostTester* subframe_tester = | 227 content::RenderFrameHostTester* subframe_tester = |
224 content::RenderFrameHostTester::For(subframe); | 228 content::RenderFrameHostTester::For(subframe); |
225 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2)); | 229 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2)); |
226 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); | 230 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); |
227 observer_->OnMessageReceived( | 231 observer_->OnMessageReceived( |
228 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 232 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing, |
| 233 PageLoadMetadata()), |
229 subframe); | 234 subframe); |
230 CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1); | 235 CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1); |
231 CheckTotalErrorEvents(); | 236 CheckTotalErrorEvents(); |
232 } | 237 } |
233 | 238 |
234 TEST_F(MetricsWebContentsObserverTest, BadIPC) { | 239 TEST_F(MetricsWebContentsObserverTest, BadIPC) { |
235 PageLoadTiming timing; | 240 PageLoadTiming timing; |
236 timing.navigation_start = base::Time::FromDoubleT(10); | 241 timing.navigation_start = base::Time::FromDoubleT(10); |
237 PageLoadTiming timing2; | 242 PageLoadTiming timing2; |
238 timing2.navigation_start = base::Time::FromDoubleT(100); | 243 timing2.navigation_start = base::Time::FromDoubleT(100); |
239 | 244 |
240 content::WebContentsTester* web_contents_tester = | 245 content::WebContentsTester* web_contents_tester = |
241 content::WebContentsTester::For(web_contents()); | 246 content::WebContentsTester::For(web_contents()); |
242 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 247 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
243 | 248 |
244 observer_->OnMessageReceived( | 249 observer_->OnMessageReceived( |
245 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 250 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing, |
| 251 PageLoadMetadata()), |
246 main_rfh()); | 252 main_rfh()); |
247 observer_->OnMessageReceived( | 253 observer_->OnMessageReceived( |
248 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing2), | 254 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing2, |
| 255 PageLoadMetadata()), |
249 main_rfh()); | 256 main_rfh()); |
250 | 257 |
251 CheckErrorEvent(ERR_BAD_TIMING_IPC, 1); | 258 CheckErrorEvent(ERR_BAD_TIMING_IPC, 1); |
252 CheckTotalErrorEvents(); | 259 CheckTotalErrorEvents(); |
253 } | 260 } |
254 | 261 |
255 TEST_F(MetricsWebContentsObserverTest, ObservePartialNavigation) { | 262 TEST_F(MetricsWebContentsObserverTest, ObservePartialNavigation) { |
256 // Delete the observer for this test, add it once the navigation has started. | 263 // Delete the observer for this test, add it once the navigation has started. |
257 observer_.reset(); | 264 observer_.reset(); |
258 PageLoadTiming timing; | 265 PageLoadTiming timing; |
259 timing.navigation_start = base::Time::FromDoubleT(10); | 266 timing.navigation_start = base::Time::FromDoubleT(10); |
260 | 267 |
261 content::WebContentsTester* web_contents_tester = | 268 content::WebContentsTester* web_contents_tester = |
262 content::WebContentsTester::For(web_contents()); | 269 content::WebContentsTester::For(web_contents()); |
263 content::RenderFrameHostTester* rfh_tester = | 270 content::RenderFrameHostTester* rfh_tester = |
264 content::RenderFrameHostTester::For(main_rfh()); | 271 content::RenderFrameHostTester::For(main_rfh()); |
265 | 272 |
266 // Start the navigation, then start observing the web contents. This used to | 273 // Start the navigation, then start observing the web contents. This used to |
267 // crash us. Make sure we bail out and don't log histograms. | 274 // crash us. Make sure we bail out and don't log histograms. |
268 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); | 275 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); |
269 AttachObserver(); | 276 AttachObserver(); |
270 rfh_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl)); | 277 rfh_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl)); |
271 | 278 |
272 observer_->OnMessageReceived( | 279 observer_->OnMessageReceived( |
273 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 280 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing, |
| 281 PageLoadMetadata()), |
274 main_rfh()); | 282 main_rfh()); |
275 // Navigate again to force histogram logging. | 283 // Navigate again to force histogram logging. |
276 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 284 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
277 AssertNoTimingReported(); | 285 AssertNoTimingReported(); |
278 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); | 286 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); |
279 CheckTotalErrorEvents(); | 287 CheckTotalErrorEvents(); |
280 } | 288 } |
281 | 289 |
282 TEST_F(MetricsWebContentsObserverTest, DontLogAbortChains) { | 290 TEST_F(MetricsWebContentsObserverTest, DontLogAbortChains) { |
283 NavigateAndCommit(GURL(kDefaultTestUrl)); | 291 NavigateAndCommit(GURL(kDefaultTestUrl)); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 rfh_tester->SimulateNavigationStop(); | 366 rfh_tester->SimulateNavigationStop(); |
359 | 367 |
360 web_contents()->Stop(); | 368 web_contents()->Stop(); |
361 | 369 |
362 histogram_tester_.ExpectTotalCount(internal::kAbortChainSizeNoCommit, 1); | 370 histogram_tester_.ExpectTotalCount(internal::kAbortChainSizeNoCommit, 1); |
363 histogram_tester_.ExpectBucketCount(internal::kAbortChainSizeNoCommit, 3, | 371 histogram_tester_.ExpectBucketCount(internal::kAbortChainSizeNoCommit, 3, |
364 1); | 372 1); |
365 } | 373 } |
366 | 374 |
367 } // namespace page_load_metrics | 375 } // namespace page_load_metrics |
OLD | NEW |