Chromium Code Reviews| 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 "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" | 5 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" | 
| 6 | 6 | 
| 7 #include <memory> | 7 #include <memory> | 
| 8 #include <vector> | 8 #include <vector> | 
| 9 | 9 | 
| 10 #include "base/macros.h" | 10 #include "base/macros.h" | 
| 11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" | 
| 12 #include "base/process/kill.h" | 12 #include "base/process/kill.h" | 
| 13 #include "base/run_loop.h" | |
| 13 #include "base/test/histogram_tester.h" | 14 #include "base/test/histogram_tester.h" | 
| 14 #include "base/time/time.h" | 15 #include "base/time/time.h" | 
| 15 #include "chrome/browser/page_load_metrics/metrics_navigation_throttle.h" | 16 #include "chrome/browser/page_load_metrics/metrics_navigation_throttle.h" | 
| 16 #include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface. h" | 17 #include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface. h" | 
| 17 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h" | 18 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h" | 
| 18 #include "chrome/browser/page_load_metrics/page_load_tracker.h" | 19 #include "chrome/browser/page_load_metrics/page_load_tracker.h" | 
| 19 #include "chrome/common/page_load_metrics/page_load_metrics_messages.h" | 20 #include "chrome/common/page_load_metrics/page_load_metrics_messages.h" | 
| 20 #include "chrome/common/url_constants.h" | 21 #include "chrome/common/url_constants.h" | 
| 21 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 22 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 
| 22 #include "content/public/browser/navigation_handle.h" | 23 #include "content/public/browser/navigation_handle.h" | 
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 164 void SimulateTimingUpdate(const PageLoadTiming& timing) { | 165 void SimulateTimingUpdate(const PageLoadTiming& timing) { | 
| 165 SimulateTimingUpdate(timing, web_contents()->GetMainFrame()); | 166 SimulateTimingUpdate(timing, web_contents()->GetMainFrame()); | 
| 166 } | 167 } | 
| 167 | 168 | 
| 168 void SimulateTimingUpdate(const PageLoadTiming& timing, | 169 void SimulateTimingUpdate(const PageLoadTiming& timing, | 
| 169 content::RenderFrameHost* render_frame_host) { | 170 content::RenderFrameHost* render_frame_host) { | 
| 170 ASSERT_TRUE(observer_->OnMessageReceived( | 171 ASSERT_TRUE(observer_->OnMessageReceived( | 
| 171 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing, | 172 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing, | 
| 172 PageLoadMetadata()), | 173 PageLoadMetadata()), | 
| 173 render_frame_host)); | 174 render_frame_host)); | 
| 175 | |
| 176 observer_->page_load_metrics_binding_for_testing() | |
| 
 
Bryan McQuade
2017/04/25 15:41:14
I think I'm inclined to change the SimulateTimingU
 
Ken Rockot(use gerrit already)
2017/04/25 19:31:46
+1 - I prefer to avoid going through IPC boundarie
 
lpy
2017/04/26 14:18:40
Done.
 
 | |
| 177 .SetCurrentTargetFrameForTesting(render_frame_host); | |
| 178 mojo::Binding<page_load_metrics::mojom::PageLoadMetrics> binding(observer_); | |
| 179 mojom::PageLoadMetricsPtr ptr; | |
| 180 mojom::PageLoadMetricsRequest request = MakeRequest(&ptr); | |
| 181 binding.Bind(std::move(request)); | |
| 182 ptr->UpdateTiming(timing, PageLoadMetadata()); | |
| 183 base::RunLoop().RunUntilIdle(); | |
| 174 } | 184 } | 
| 175 | 185 | 
| 176 void AttachObserver() { | 186 void AttachObserver() { | 
| 177 embedder_interface_ = new TestPageLoadMetricsEmbedderInterface(); | 187 embedder_interface_ = new TestPageLoadMetricsEmbedderInterface(); | 
| 178 // Owned by the web_contents. Tests must be careful not to call | 188 // Owned by the web_contents. Tests must be careful not to call | 
| 179 // SimulateTimingUpdate after they call DeleteContents() without also | 189 // SimulateTimingUpdate after they call DeleteContents() without also | 
| 180 // calling AttachObserver() again. Otherwise they will use-after-free the | 190 // calling AttachObserver() again. Otherwise they will use-after-free the | 
| 181 // observer_. | 191 // observer_. | 
| 182 observer_ = MetricsWebContentsObserver::CreateForWebContents( | 192 observer_ = MetricsWebContentsObserver::CreateForWebContents( | 
| 183 web_contents(), base::WrapUnique(embedder_interface_)); | 193 web_contents(), base::WrapUnique(embedder_interface_)); | 
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 278 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); | 288 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); | 
| 279 SimulateTimingUpdate(timing, subframe); | 289 SimulateTimingUpdate(timing, subframe); | 
| 280 subframe_tester->SimulateNavigationStop(); | 290 subframe_tester->SimulateNavigationStop(); | 
| 281 | 291 | 
| 282 // Navigate again to see if the timing updated for a subframe message. | 292 // Navigate again to see if the timing updated for a subframe message. | 
| 283 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 293 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 
| 284 | 294 | 
| 285 ASSERT_EQ(0, CountUpdatedTimingReported()); | 295 ASSERT_EQ(0, CountUpdatedTimingReported()); | 
| 286 ASSERT_EQ(1, CountCompleteTimingReported()); | 296 ASSERT_EQ(1, CountCompleteTimingReported()); | 
| 287 ASSERT_EQ(1, CountEmptyCompleteTimingReported()); | 297 ASSERT_EQ(1, CountEmptyCompleteTimingReported()); | 
| 288 CheckErrorEvent(ERR_TIMING_IPC_FROM_SUBFRAME, 1); | 298 CheckErrorEvent(ERR_TIMING_IPC_FROM_SUBFRAME, 2); | 
| 289 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); | 299 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); | 
| 290 CheckTotalErrorEvents(); | 300 CheckTotalErrorEvents(); | 
| 291 } | 301 } | 
| 292 | 302 | 
| 293 TEST_F(MetricsWebContentsObserverTest, SameDocumentNoTrigger) { | 303 TEST_F(MetricsWebContentsObserverTest, SameDocumentNoTrigger) { | 
| 294 PageLoadTiming timing; | 304 PageLoadTiming timing; | 
| 295 timing.navigation_start = base::Time::FromDoubleT(1); | 305 timing.navigation_start = base::Time::FromDoubleT(1); | 
| 296 | 306 | 
| 297 content::WebContentsTester* web_contents_tester = | 307 content::WebContentsTester* web_contents_tester = | 
| 298 content::WebContentsTester::For(web_contents()); | 308 content::WebContentsTester::For(web_contents()); | 
| (...skipping 27 matching lines...) Expand all Loading... | |
| 326 | 336 | 
| 327 content::WebContentsTester* web_contents_tester = | 337 content::WebContentsTester* web_contents_tester = | 
| 328 content::WebContentsTester::For(web_contents()); | 338 content::WebContentsTester::For(web_contents()); | 
| 329 embedder_interface_->set_is_ntp(true); | 339 embedder_interface_->set_is_ntp(true); | 
| 330 | 340 | 
| 331 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 341 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 
| 332 SimulateTimingUpdate(timing); | 342 SimulateTimingUpdate(timing); | 
| 333 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 343 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 
| 334 ASSERT_EQ(0, CountUpdatedTimingReported()); | 344 ASSERT_EQ(0, CountUpdatedTimingReported()); | 
| 335 ASSERT_EQ(0, CountCompleteTimingReported()); | 345 ASSERT_EQ(0, CountCompleteTimingReported()); | 
| 336 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); | 346 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 2); | 
| 337 CheckTotalErrorEvents(); | 347 CheckTotalErrorEvents(); | 
| 338 } | 348 } | 
| 339 | 349 | 
| 340 TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) { | 350 TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) { | 
| 341 PageLoadTiming timing; | 351 PageLoadTiming timing; | 
| 342 timing.navigation_start = base::Time::FromDoubleT(10); | 352 timing.navigation_start = base::Time::FromDoubleT(10); | 
| 343 | 353 | 
| 344 content::WebContentsTester* web_contents_tester = | 354 content::WebContentsTester* web_contents_tester = | 
| 345 content::WebContentsTester::For(web_contents()); | 355 content::WebContentsTester::For(web_contents()); | 
| 346 | 356 | 
| 347 GURL about_blank_url = GURL("about:blank"); | 357 GURL about_blank_url = GURL("about:blank"); | 
| 348 web_contents_tester->NavigateAndCommit(about_blank_url); | 358 web_contents_tester->NavigateAndCommit(about_blank_url); | 
| 349 SimulateTimingUpdate(timing); | 359 SimulateTimingUpdate(timing); | 
| 350 ASSERT_EQ(0, CountUpdatedTimingReported()); | 360 ASSERT_EQ(0, CountUpdatedTimingReported()); | 
| 351 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 361 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 
| 352 ASSERT_EQ(0, CountUpdatedTimingReported()); | 362 ASSERT_EQ(0, CountUpdatedTimingReported()); | 
| 353 ASSERT_EQ(0, CountCompleteTimingReported()); | 363 ASSERT_EQ(0, CountCompleteTimingReported()); | 
| 354 | 364 | 
| 355 CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 1); | 365 CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 2); | 
| 356 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); | 366 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 2); | 
| 357 CheckTotalErrorEvents(); | 367 CheckTotalErrorEvents(); | 
| 358 } | 368 } | 
| 359 | 369 | 
| 360 TEST_F(MetricsWebContentsObserverTest, EmptyTimingError) { | 370 TEST_F(MetricsWebContentsObserverTest, EmptyTimingError) { | 
| 361 PageLoadTiming timing; | 371 PageLoadTiming timing; | 
| 362 | 372 | 
| 363 content::WebContentsTester* web_contents_tester = | 373 content::WebContentsTester* web_contents_tester = | 
| 364 content::WebContentsTester::For(web_contents()); | 374 content::WebContentsTester::For(web_contents()); | 
| 365 | 375 | 
| 366 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 376 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 
| 367 SimulateTimingUpdate(timing); | 377 SimulateTimingUpdate(timing); | 
| 368 ASSERT_EQ(0, CountUpdatedTimingReported()); | 378 ASSERT_EQ(0, CountUpdatedTimingReported()); | 
| 369 NavigateToUntrackedUrl(); | 379 NavigateToUntrackedUrl(); | 
| 370 ASSERT_EQ(0, CountUpdatedTimingReported()); | 380 ASSERT_EQ(0, CountUpdatedTimingReported()); | 
| 371 ASSERT_EQ(1, CountCompleteTimingReported()); | 381 ASSERT_EQ(1, CountCompleteTimingReported()); | 
| 372 | 382 | 
| 373 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 1); | 383 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 2); | 
| 374 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); | 384 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); | 
| 375 CheckTotalErrorEvents(); | 385 CheckTotalErrorEvents(); | 
| 376 | 386 | 
| 377 histogram_tester_.ExpectTotalCount( | 387 histogram_tester_.ExpectTotalCount( | 
| 378 page_load_metrics::internal::kPageLoadTimingStatus, 1); | 388 page_load_metrics::internal::kPageLoadTimingStatus, 2); | 
| 379 histogram_tester_.ExpectBucketCount( | 389 histogram_tester_.ExpectBucketCount( | 
| 380 page_load_metrics::internal::kPageLoadTimingStatus, | 390 page_load_metrics::internal::kPageLoadTimingStatus, | 
| 381 page_load_metrics::internal::INVALID_EMPTY_TIMING, 1); | 391 page_load_metrics::internal::INVALID_EMPTY_TIMING, 2); | 
| 382 } | 392 } | 
| 383 | 393 | 
| 384 TEST_F(MetricsWebContentsObserverTest, NullNavigationStartError) { | 394 TEST_F(MetricsWebContentsObserverTest, NullNavigationStartError) { | 
| 385 PageLoadTiming timing; | 395 PageLoadTiming timing; | 
| 386 timing.parse_timing.parse_start = base::TimeDelta::FromMilliseconds(1); | 396 timing.parse_timing.parse_start = base::TimeDelta::FromMilliseconds(1); | 
| 387 | 397 | 
| 388 content::WebContentsTester* web_contents_tester = | 398 content::WebContentsTester* web_contents_tester = | 
| 389 content::WebContentsTester::For(web_contents()); | 399 content::WebContentsTester::For(web_contents()); | 
| 390 | 400 | 
| 391 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 401 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 
| 392 SimulateTimingUpdate(timing); | 402 SimulateTimingUpdate(timing); | 
| 393 ASSERT_EQ(0, CountUpdatedTimingReported()); | 403 ASSERT_EQ(0, CountUpdatedTimingReported()); | 
| 394 NavigateToUntrackedUrl(); | 404 NavigateToUntrackedUrl(); | 
| 395 ASSERT_EQ(0, CountUpdatedTimingReported()); | 405 ASSERT_EQ(0, CountUpdatedTimingReported()); | 
| 396 ASSERT_EQ(1, CountCompleteTimingReported()); | 406 ASSERT_EQ(1, CountCompleteTimingReported()); | 
| 397 | 407 | 
| 398 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 1); | 408 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 2); | 
| 399 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); | 409 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); | 
| 400 CheckTotalErrorEvents(); | 410 CheckTotalErrorEvents(); | 
| 401 | 411 | 
| 402 histogram_tester_.ExpectTotalCount( | 412 histogram_tester_.ExpectTotalCount( | 
| 403 page_load_metrics::internal::kPageLoadTimingStatus, 1); | 413 page_load_metrics::internal::kPageLoadTimingStatus, 2); | 
| 404 histogram_tester_.ExpectBucketCount( | 414 histogram_tester_.ExpectBucketCount( | 
| 405 page_load_metrics::internal::kPageLoadTimingStatus, | 415 page_load_metrics::internal::kPageLoadTimingStatus, | 
| 406 page_load_metrics::internal::INVALID_NULL_NAVIGATION_START, 1); | 416 page_load_metrics::internal::INVALID_NULL_NAVIGATION_START, 2); | 
| 407 } | 417 } | 
| 408 | 418 | 
| 409 TEST_F(MetricsWebContentsObserverTest, TimingOrderError) { | 419 TEST_F(MetricsWebContentsObserverTest, TimingOrderError) { | 
| 410 PageLoadTiming timing; | 420 PageLoadTiming timing; | 
| 411 timing.navigation_start = base::Time::FromDoubleT(1); | 421 timing.navigation_start = base::Time::FromDoubleT(1); | 
| 412 timing.parse_timing.parse_stop = base::TimeDelta::FromMilliseconds(1); | 422 timing.parse_timing.parse_stop = base::TimeDelta::FromMilliseconds(1); | 
| 413 | 423 | 
| 414 content::WebContentsTester* web_contents_tester = | 424 content::WebContentsTester* web_contents_tester = | 
| 415 content::WebContentsTester::For(web_contents()); | 425 content::WebContentsTester::For(web_contents()); | 
| 416 | 426 | 
| 417 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 427 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 
| 418 SimulateTimingUpdate(timing); | 428 SimulateTimingUpdate(timing); | 
| 419 ASSERT_EQ(0, CountUpdatedTimingReported()); | 429 ASSERT_EQ(0, CountUpdatedTimingReported()); | 
| 420 NavigateToUntrackedUrl(); | 430 NavigateToUntrackedUrl(); | 
| 421 ASSERT_EQ(0, CountUpdatedTimingReported()); | 431 ASSERT_EQ(0, CountUpdatedTimingReported()); | 
| 422 ASSERT_EQ(1, CountCompleteTimingReported()); | 432 ASSERT_EQ(1, CountCompleteTimingReported()); | 
| 423 | 433 | 
| 424 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 1); | 434 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 2); | 
| 425 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); | 435 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); | 
| 426 CheckTotalErrorEvents(); | 436 CheckTotalErrorEvents(); | 
| 427 | 437 | 
| 428 histogram_tester_.ExpectTotalCount( | 438 histogram_tester_.ExpectTotalCount( | 
| 429 page_load_metrics::internal::kPageLoadTimingStatus, 1); | 439 page_load_metrics::internal::kPageLoadTimingStatus, 2); | 
| 430 histogram_tester_.ExpectBucketCount( | 440 histogram_tester_.ExpectBucketCount( | 
| 431 page_load_metrics::internal::kPageLoadTimingStatus, | 441 page_load_metrics::internal::kPageLoadTimingStatus, | 
| 432 page_load_metrics::internal::INVALID_ORDER_PARSE_START_PARSE_STOP, 1); | 442 page_load_metrics::internal::INVALID_ORDER_PARSE_START_PARSE_STOP, 2); | 
| 433 } | 443 } | 
| 434 | 444 | 
| 435 TEST_F(MetricsWebContentsObserverTest, NotInMainError) { | 445 TEST_F(MetricsWebContentsObserverTest, NotInMainError) { | 
| 436 PageLoadTiming timing; | 446 PageLoadTiming timing; | 
| 437 timing.navigation_start = base::Time::FromDoubleT(1); | 447 timing.navigation_start = base::Time::FromDoubleT(1); | 
| 438 | 448 | 
| 439 content::WebContentsTester* web_contents_tester = | 449 content::WebContentsTester* web_contents_tester = | 
| 440 content::WebContentsTester::For(web_contents()); | 450 content::WebContentsTester::For(web_contents()); | 
| 441 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 451 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 
| 442 | 452 | 
| 443 content::RenderFrameHostTester* rfh_tester = | 453 content::RenderFrameHostTester* rfh_tester = | 
| 444 content::RenderFrameHostTester::For(main_rfh()); | 454 content::RenderFrameHostTester::For(main_rfh()); | 
| 445 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe"); | 455 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe"); | 
| 446 | 456 | 
| 447 content::RenderFrameHostTester* subframe_tester = | 457 content::RenderFrameHostTester* subframe_tester = | 
| 448 content::RenderFrameHostTester::For(subframe); | 458 content::RenderFrameHostTester::For(subframe); | 
| 449 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2)); | 459 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2)); | 
| 450 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); | 460 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); | 
| 451 SimulateTimingUpdate(timing, subframe); | 461 SimulateTimingUpdate(timing, subframe); | 
| 452 CheckErrorEvent(ERR_TIMING_IPC_FROM_SUBFRAME, 1); | 462 CheckErrorEvent(ERR_TIMING_IPC_FROM_SUBFRAME, 2); | 
| 453 CheckTotalErrorEvents(); | 463 CheckTotalErrorEvents(); | 
| 454 ASSERT_EQ(0, CountUpdatedTimingReported()); | 464 ASSERT_EQ(0, CountUpdatedTimingReported()); | 
| 455 ASSERT_EQ(0, CountCompleteTimingReported()); | 465 ASSERT_EQ(0, CountCompleteTimingReported()); | 
| 456 } | 466 } | 
| 457 | 467 | 
| 458 TEST_F(MetricsWebContentsObserverTest, BadIPC) { | 468 TEST_F(MetricsWebContentsObserverTest, BadIPC) { | 
| 459 PageLoadTiming timing; | 469 PageLoadTiming timing; | 
| 460 timing.navigation_start = base::Time::FromDoubleT(10); | 470 timing.navigation_start = base::Time::FromDoubleT(10); | 
| 461 PageLoadTiming timing2; | 471 PageLoadTiming timing2; | 
| 462 timing2.navigation_start = base::Time::FromDoubleT(100); | 472 timing2.navigation_start = base::Time::FromDoubleT(100); | 
| 463 | 473 | 
| 464 content::WebContentsTester* web_contents_tester = | 474 content::WebContentsTester* web_contents_tester = | 
| 465 content::WebContentsTester::For(web_contents()); | 475 content::WebContentsTester::For(web_contents()); | 
| 466 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 476 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 
| 467 | 477 | 
| 468 SimulateTimingUpdate(timing); | 478 SimulateTimingUpdate(timing); | 
| 469 ASSERT_EQ(1, CountUpdatedTimingReported()); | 479 ASSERT_EQ(1, CountUpdatedTimingReported()); | 
| 470 SimulateTimingUpdate(timing2); | 480 SimulateTimingUpdate(timing2); | 
| 471 ASSERT_EQ(1, CountUpdatedTimingReported()); | 481 ASSERT_EQ(1, CountUpdatedTimingReported()); | 
| 472 | 482 | 
| 473 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING_DESCENDENT, 1); | 483 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING_DESCENDENT, 2); | 
| 474 CheckTotalErrorEvents(); | 484 CheckTotalErrorEvents(); | 
| 475 } | 485 } | 
| 476 | 486 | 
| 477 TEST_F(MetricsWebContentsObserverTest, ObservePartialNavigation) { | 487 TEST_F(MetricsWebContentsObserverTest, ObservePartialNavigation) { | 
| 478 // Reset the state of the tests, and attach the MetricsWebContentsObserver in | 488 // Reset the state of the tests, and attach the MetricsWebContentsObserver in | 
| 479 // the middle of a navigation. This tests that the class is robust to only | 489 // the middle of a navigation. This tests that the class is robust to only | 
| 480 // observing some of a navigation. | 490 // observing some of a navigation. | 
| 481 DeleteContents(); | 491 DeleteContents(); | 
| 482 SetContents(CreateTestWebContents()); | 492 SetContents(CreateTestWebContents()); | 
| 483 | 493 | 
| (...skipping 10 matching lines...) Expand all Loading... | |
| 494 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); | 504 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); | 
| 495 AttachObserver(); | 505 AttachObserver(); | 
| 496 rfh_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl)); | 506 rfh_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl)); | 
| 497 | 507 | 
| 498 SimulateTimingUpdate(timing); | 508 SimulateTimingUpdate(timing); | 
| 499 | 509 | 
| 500 // Navigate again to force histogram logging. | 510 // Navigate again to force histogram logging. | 
| 501 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 511 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 
| 502 ASSERT_EQ(0, CountCompleteTimingReported()); | 512 ASSERT_EQ(0, CountCompleteTimingReported()); | 
| 503 ASSERT_EQ(0, CountUpdatedTimingReported()); | 513 ASSERT_EQ(0, CountUpdatedTimingReported()); | 
| 504 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); | 514 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 2); | 
| 505 CheckTotalErrorEvents(); | 515 CheckTotalErrorEvents(); | 
| 506 } | 516 } | 
| 507 | 517 | 
| 508 TEST_F(MetricsWebContentsObserverTest, DontLogAbortChains) { | 518 TEST_F(MetricsWebContentsObserverTest, DontLogAbortChains) { | 
| 509 NavigateAndCommit(GURL(kDefaultTestUrl)); | 519 NavigateAndCommit(GURL(kDefaultTestUrl)); | 
| 510 NavigateAndCommit(GURL(kDefaultTestUrl2)); | 520 NavigateAndCommit(GURL(kDefaultTestUrl2)); | 
| 511 NavigateAndCommit(GURL(kDefaultTestUrl)); | 521 NavigateAndCommit(GURL(kDefaultTestUrl)); | 
| 512 histogram_tester_.ExpectTotalCount(internal::kAbortChainSizeNewNavigation, 0); | 522 histogram_tester_.ExpectTotalCount(internal::kAbortChainSizeNewNavigation, 0); | 
| 513 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 2); | 523 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 2); | 
| 514 CheckTotalErrorEvents(); | 524 CheckTotalErrorEvents(); | 
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 666 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 676 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 
| 667 ASSERT_EQ(std::vector<GURL>({GURL(kDefaultTestUrl)}), | 677 ASSERT_EQ(std::vector<GURL>({GURL(kDefaultTestUrl)}), | 
| 668 completed_filtered_urls()); | 678 completed_filtered_urls()); | 
| 669 | 679 | 
| 670 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 680 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 
| 671 ASSERT_EQ(std::vector<GURL>({GURL(kDefaultTestUrl), GURL(kDefaultTestUrl2)}), | 681 ASSERT_EQ(std::vector<GURL>({GURL(kDefaultTestUrl), GURL(kDefaultTestUrl2)}), | 
| 672 completed_filtered_urls()); | 682 completed_filtered_urls()); | 
| 673 } | 683 } | 
| 674 | 684 | 
| 675 } // namespace page_load_metrics | 685 } // namespace page_load_metrics | 
| OLD | NEW |