| 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 |