Chromium Code Reviews| 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 "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/process/kill.h" | 8 #include "base/process/kill.h" |
| 9 #include "base/test/histogram_tester.h" | 9 #include "base/test/histogram_tester.h" |
| 10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 25 const char kHistogramNameFirstLayout[] = | 25 const char kHistogramNameFirstLayout[] = |
| 26 "PageLoad.Timing2.NavigationToFirstLayout"; | 26 "PageLoad.Timing2.NavigationToFirstLayout"; |
| 27 const char kHistogramNameFirstTextPaint[] = | 27 const char kHistogramNameFirstTextPaint[] = |
| 28 "PageLoad.Timing2.NavigationToFirstTextPaint"; | 28 "PageLoad.Timing2.NavigationToFirstTextPaint"; |
| 29 const char kHistogramNameDomContent[] = | 29 const char kHistogramNameDomContent[] = |
| 30 "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"; | 30 "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"; |
| 31 const char kHistogramNameLoad[] = | 31 const char kHistogramNameLoad[] = |
| 32 "PageLoad.Timing2.NavigationToLoadEventFired"; | 32 "PageLoad.Timing2.NavigationToLoadEventFired"; |
| 33 | 33 |
| 34 const char kBGHistogramNameFirstLayout[] = | 34 const char kBGHistogramNameFirstLayout[] = |
| 35 "PageLoad.Timing2.NavigationToFirstLayout.BG"; | 35 "PageLoad.Timing2.NavigationToFirstLayout.Background"; |
| 36 const char kBGHistogramNameFirstTextPaint[] = | 36 const char kBGHistogramNameFirstTextPaint[] = |
| 37 "PageLoad.Timing2.NavigationToFirstTextPaint.BG"; | 37 "PageLoad.Timing2.NavigationToFirstTextPaint.Background"; |
| 38 const char kBGHistogramNameDomContent[] = | 38 const char kBGHistogramNameDomContent[] = |
| 39 "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired.BG"; | 39 "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired.Background"; |
| 40 const char kBGHistogramNameLoad[] = | 40 const char kBGHistogramNameLoad[] = |
| 41 "PageLoad.Timing2.NavigationToLoadEventFired.BG"; | 41 "PageLoad.Timing2.NavigationToLoadEventFired.Background"; |
| 42 | 42 |
| 43 const char kHistogramNameEvents[] = "PageLoad.EventCounts"; | 43 const char kProvisionalEvents[] = "PageLoad.Events.Provisional"; |
| 44 const char kCommittedEvents[] = "PageLoad.Events.Committed"; | |
| 45 const char kBGProvisionalEvents[] = "PageLoad.Events.Provisional.Background"; | |
| 46 const char kBGCommittedEvents[] = "PageLoad.Events.Committed.Background"; | |
| 47 | |
| 48 const char kErrorEvents[] = "PageLoad.Events.InternalError"; | |
| 44 | 49 |
| 45 } // namespace | 50 } // namespace |
| 46 | 51 |
| 47 class MetricsWebContentsObserverTest | 52 class MetricsWebContentsObserverTest |
| 48 : public content::RenderViewHostTestHarness { | 53 : public content::RenderViewHostTestHarness { |
| 49 public: | 54 public: |
| 50 MetricsWebContentsObserverTest() {} | 55 MetricsWebContentsObserverTest() {} |
| 51 | 56 |
| 52 void SetUp() override { | 57 void SetUp() override { |
| 53 RenderViewHostTestHarness::SetUp(); | 58 RenderViewHostTestHarness::SetUp(); |
| 54 observer_ = make_scoped_ptr(new MetricsWebContentsObserver(web_contents())); | 59 observer_ = make_scoped_ptr(new MetricsWebContentsObserver(web_contents())); |
| 55 observer_->WasShown(); | 60 observer_->WasShown(); |
| 61 num_provisional_events_ = 0; | |
| 62 num_committed_events_ = 0; | |
| 63 num_provisional_events_bg_ = 0; | |
| 64 num_committed_events_bg_ = 0; | |
| 65 num_errors_ = 0; | |
| 56 } | 66 } |
| 57 | 67 |
| 58 void AssertNoHistogramsLogged() { | 68 void AssertNoHistogramsLogged() { |
| 59 histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 0); | 69 histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 0); |
| 60 histogram_tester_.ExpectTotalCount(kHistogramNameLoad, 0); | 70 histogram_tester_.ExpectTotalCount(kHistogramNameLoad, 0); |
| 61 histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 0); | 71 histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 0); |
| 62 histogram_tester_.ExpectTotalCount(kHistogramNameFirstTextPaint, 0); | 72 histogram_tester_.ExpectTotalCount(kHistogramNameFirstTextPaint, 0); |
| 63 } | 73 } |
| 64 | 74 |
| 75 void CheckProvisionalEvent(ProvisionalLoadEvent event, | |
| 76 int count, | |
| 77 bool background) { | |
| 78 if (background) { | |
| 79 histogram_tester_.ExpectBucketCount(kBGProvisionalEvents, event, count); | |
| 80 num_provisional_events_bg_ += count; | |
| 81 } else { | |
| 82 histogram_tester_.ExpectBucketCount(kProvisionalEvents, event, count); | |
| 83 num_provisional_events_ += count; | |
| 84 } | |
| 85 } | |
| 86 | |
| 87 void CheckCommittedEvent(CommittedLoadEvent event, | |
| 88 int count, | |
| 89 bool background) { | |
| 90 if (background) { | |
| 91 histogram_tester_.ExpectBucketCount(kBGCommittedEvents, event, count); | |
| 92 num_committed_events_bg_ += count; | |
| 93 } else { | |
| 94 histogram_tester_.ExpectBucketCount(kCommittedEvents, event, count); | |
| 95 num_committed_events_ += count; | |
| 96 } | |
| 97 } | |
| 98 | |
| 99 void CheckErrorEvent(InternalErrorLoadEvent error, int count) { | |
| 100 histogram_tester_.ExpectBucketCount(kErrorEvents, error, count); | |
| 101 num_errors_ += count; | |
| 102 } | |
| 103 | |
| 104 void CheckTotalEvents() { | |
| 105 histogram_tester_.ExpectTotalCount(kProvisionalEvents, | |
| 106 num_provisional_events_); | |
| 107 histogram_tester_.ExpectTotalCount(kCommittedEvents, num_committed_events_); | |
| 108 histogram_tester_.ExpectTotalCount(kBGProvisionalEvents, | |
| 109 num_provisional_events_bg_); | |
| 110 histogram_tester_.ExpectTotalCount(kBGCommittedEvents, | |
| 111 num_committed_events_bg_); | |
| 112 histogram_tester_.ExpectTotalCount(kErrorEvents, num_errors_); | |
| 113 } | |
| 114 | |
| 65 protected: | 115 protected: |
| 66 base::HistogramTester histogram_tester_; | 116 base::HistogramTester histogram_tester_; |
| 67 scoped_ptr<MetricsWebContentsObserver> observer_; | 117 scoped_ptr<MetricsWebContentsObserver> observer_; |
| 118 | |
| 119 private: | |
| 120 int num_provisional_events_; | |
| 121 int num_provisional_events_bg_; | |
| 122 int num_committed_events_; | |
| 123 int num_committed_events_bg_; | |
| 124 int num_errors_; | |
| 68 }; | 125 }; |
|
Alexei Svitkine (slow)
2015/10/16 15:43:15
Nit: DISALLOW_COPY_AND_ASSIGN()
Charlie Harrison
2015/10/16 16:05:06
Done.
| |
| 69 | 126 |
| 70 TEST_F(MetricsWebContentsObserverTest, NoMetrics) { | 127 TEST_F(MetricsWebContentsObserverTest, NoMetrics) { |
| 71 AssertNoHistogramsLogged(); | 128 AssertNoHistogramsLogged(); |
| 72 } | 129 } |
| 73 | 130 |
| 74 TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) { | 131 TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) { |
| 75 base::TimeDelta first_layout = base::TimeDelta::FromMilliseconds(1); | 132 base::TimeDelta first_layout = base::TimeDelta::FromMilliseconds(1); |
| 76 | 133 |
| 77 PageLoadTiming timing; | 134 PageLoadTiming timing; |
| 78 timing.navigation_start = base::Time::FromDoubleT(1); | 135 timing.navigation_start = base::Time::FromDoubleT(1); |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 364 content::WebContentsTester* web_contents_tester = | 421 content::WebContentsTester* web_contents_tester = |
| 365 content::WebContentsTester::For(web_contents()); | 422 content::WebContentsTester::For(web_contents()); |
| 366 | 423 |
| 367 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); | 424 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); |
| 368 content::RenderFrameHostTester* rfh_tester = | 425 content::RenderFrameHostTester* rfh_tester = |
| 369 content::RenderFrameHostTester::For(main_rfh()); | 426 content::RenderFrameHostTester::For(main_rfh()); |
| 370 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), | 427 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), |
| 371 net::ERR_TIMED_OUT); | 428 net::ERR_TIMED_OUT); |
| 372 rfh_tester->SimulateNavigationStop(); | 429 rfh_tester->SimulateNavigationStop(); |
| 373 | 430 |
| 374 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); | 431 CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_FAILED_NON_ABORT, 1, false); |
| 375 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 432 CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_ABORTED, 0, false); |
| 376 PAGE_LOAD_STARTED, 1); | 433 CheckTotalEvents(); |
| 377 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | |
| 378 PAGE_LOAD_FAILED_BEFORE_COMMIT, 1); | |
| 379 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | |
| 380 PAGE_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1); | |
| 381 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | |
| 382 PAGE_LOAD_ABORTED_BEFORE_COMMIT, 0); | |
| 383 } | 434 } |
| 384 | 435 |
| 385 TEST_F(MetricsWebContentsObserverTest, AbortProvisionalLoad) { | 436 TEST_F(MetricsWebContentsObserverTest, AbortProvisionalLoad) { |
| 386 content::WebContentsTester* web_contents_tester = | 437 content::WebContentsTester* web_contents_tester = |
| 387 content::WebContentsTester::For(web_contents()); | 438 content::WebContentsTester::For(web_contents()); |
| 388 | 439 |
| 389 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); | 440 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); |
| 390 content::RenderFrameHostTester* rfh_tester = | 441 content::RenderFrameHostTester* rfh_tester = |
| 391 content::RenderFrameHostTester::For(main_rfh()); | 442 content::RenderFrameHostTester::For(main_rfh()); |
| 392 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), net::ERR_ABORTED); | 443 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), net::ERR_ABORTED); |
| 393 rfh_tester->SimulateNavigationStop(); | 444 rfh_tester->SimulateNavigationStop(); |
| 394 | 445 |
| 395 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 4); | 446 CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_FAILED_NON_ABORT, 0, false); |
| 396 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 447 CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_ABORTED, 1, false); |
| 397 PAGE_LOAD_STARTED, 1); | 448 CheckTotalEvents(); |
| 398 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 449 } |
| 399 PAGE_LOAD_FAILED_BEFORE_COMMIT, 1); | 450 |
| 400 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 451 TEST_F(MetricsWebContentsObserverTest, AbortProvisionalLoadInBackground) { |
| 401 PAGE_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1); | 452 content::WebContentsTester* web_contents_tester = |
| 402 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 453 content::WebContentsTester::For(web_contents()); |
| 403 PAGE_LOAD_ABORTED_BEFORE_COMMIT, 1); | 454 |
| 455 observer_->WasHidden(); | |
| 456 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); | |
| 457 content::RenderFrameHostTester* rfh_tester = | |
| 458 content::RenderFrameHostTester::For(main_rfh()); | |
| 459 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), net::ERR_ABORTED); | |
| 460 rfh_tester->SimulateNavigationStop(); | |
| 461 | |
| 462 CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_FAILED_NON_ABORT, 0, true); | |
| 463 CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_ABORTED, 1, true); | |
| 464 CheckTotalEvents(); | |
| 465 } | |
| 466 | |
| 467 TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) { | |
| 468 PageLoadTiming timing; | |
| 469 timing.navigation_start = base::Time::FromDoubleT(10); | |
| 470 | |
| 471 content::WebContentsTester* web_contents_tester = | |
| 472 content::WebContentsTester::For(web_contents()); | |
| 473 | |
| 474 GURL about_blank_url = GURL("about:blank"); | |
| 475 web_contents_tester->NavigateAndCommit(about_blank_url); | |
| 476 | |
| 477 observer_->OnMessageReceived( | |
| 478 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | |
| 479 main_rfh()); | |
| 480 | |
| 481 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | |
| 482 | |
| 483 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2, false); | |
| 484 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 1, false); | |
| 485 CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 1); | |
| 486 CheckErrorEvent(ERR_IPC_WITH_NO_COMMITTED_LOAD, 1); | |
| 487 CheckTotalEvents(); | |
| 488 } | |
| 489 | |
| 490 TEST_F(MetricsWebContentsObserverTest, NotInMainError) { | |
| 491 PageLoadTiming timing; | |
| 492 timing.navigation_start = base::Time::FromDoubleT(1); | |
| 493 timing.first_layout = base::TimeDelta::FromMilliseconds(1); | |
| 494 | |
| 495 content::WebContentsTester* web_contents_tester = | |
| 496 content::WebContentsTester::For(web_contents()); | |
| 497 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | |
| 498 | |
| 499 content::RenderFrameHostTester* rfh_tester = | |
| 500 content::RenderFrameHostTester::For(main_rfh()); | |
| 501 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe"); | |
| 502 | |
| 503 content::RenderFrameHostTester* subframe_tester = | |
| 504 content::RenderFrameHostTester::For(subframe); | |
| 505 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2)); | |
| 506 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); | |
| 507 observer_->OnMessageReceived( | |
| 508 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | |
| 509 subframe); | |
| 510 CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1); | |
| 404 } | 511 } |
| 405 | 512 |
| 406 TEST_F(MetricsWebContentsObserverTest, AbortCommittedLoadBeforeFirstLayout) { | 513 TEST_F(MetricsWebContentsObserverTest, AbortCommittedLoadBeforeFirstLayout) { |
| 407 PageLoadTiming timing; | 514 PageLoadTiming timing; |
| 408 timing.navigation_start = base::Time::FromDoubleT(10); | 515 timing.navigation_start = base::Time::FromDoubleT(10); |
| 409 | 516 |
| 410 content::WebContentsTester* web_contents_tester = | 517 content::WebContentsTester* web_contents_tester = |
| 411 content::WebContentsTester::For(web_contents()); | 518 content::WebContentsTester::For(web_contents()); |
| 412 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 519 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
| 413 | 520 |
| 414 observer_->OnMessageReceived( | 521 observer_->OnMessageReceived( |
| 415 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 522 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| 416 main_rfh()); | 523 main_rfh()); |
| 417 // Navigate again to force histogram logging. | 524 // Navigate again to force histogram logging. |
| 418 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 525 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
| 419 | 526 |
| 420 // 3 events: 2 starts and one abort before first layout. | 527 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2, false); |
| 421 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); | 528 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 2, false); |
| 422 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 529 CheckCommittedEvent(COMMITTED_LOAD_FAILED_BEFORE_FIRST_LAYOUT, 1, false); |
| 423 PAGE_LOAD_STARTED, 2); | 530 CheckTotalEvents(); |
| 424 histogram_tester_.ExpectBucketCount( | |
| 425 kHistogramNameEvents, PAGE_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1); | |
| 426 } | 531 } |
| 427 | 532 |
| 428 TEST_F(MetricsWebContentsObserverTest, | 533 TEST_F(MetricsWebContentsObserverTest, SuccessfulFirstLayoutInForegroundEvent) { |
| 429 SuccessfulFirstLayoutInForeGroundEvent) { | |
| 430 PageLoadTiming timing; | 534 PageLoadTiming timing; |
| 431 timing.navigation_start = base::Time::FromDoubleT(10); | 535 timing.navigation_start = base::Time::FromDoubleT(10); |
| 432 timing.first_layout = base::TimeDelta::FromMilliseconds(100); | 536 timing.first_layout = base::TimeDelta::FromMilliseconds(100); |
| 433 | 537 |
| 434 content::WebContentsTester* web_contents_tester = | 538 content::WebContentsTester* web_contents_tester = |
| 435 content::WebContentsTester::For(web_contents()); | 539 content::WebContentsTester::For(web_contents()); |
| 436 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 540 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
| 437 | 541 |
| 438 observer_->OnMessageReceived( | 542 observer_->OnMessageReceived( |
| 439 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 543 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| 440 main_rfh()); | 544 main_rfh()); |
| 441 // Navigate again to force histogram logging. | 545 // Navigate again to force histogram logging. |
| 442 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 546 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
| 443 | 547 |
| 444 // 3 events: 2 starts and one successful first layout. | 548 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2, false); |
| 445 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); | 549 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 2, false); |
| 446 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 550 CheckCommittedEvent(COMMITTED_LOAD_SUCCESSFUL_FIRST_LAYOUT, 1, false); |
| 447 PAGE_LOAD_STARTED, 2); | 551 CheckTotalEvents(); |
| 448 histogram_tester_.ExpectBucketCount( | |
| 449 kHistogramNameEvents, PAGE_LOAD_SUCCESSFUL_FIRST_LAYOUT_FOREGROUND, 1); | |
| 450 } | 552 } |
| 451 | 553 |
| 452 TEST_F(MetricsWebContentsObserverTest, | 554 TEST_F(MetricsWebContentsObserverTest, |
| 453 SuccessfulFirstLayoutInBackgroundEvent) { | 555 SuccessfulFirstLayoutInBackgroundEvent) { |
| 454 PageLoadTiming timing; | 556 PageLoadTiming timing; |
| 455 timing.navigation_start = base::Time::FromDoubleT( | 557 timing.navigation_start = base::Time::FromDoubleT( |
| 456 (base::TimeTicks::Now() - base::TimeTicks::UnixEpoch()).InSecondsF() - 1); | 558 (base::TimeTicks::Now() - base::TimeTicks::UnixEpoch()).InSecondsF() - 1); |
| 457 | 559 |
| 458 timing.first_layout = base::TimeDelta::FromSeconds(30); | 560 timing.first_layout = base::TimeDelta::FromSeconds(30); |
| 459 | 561 |
| 460 content::WebContentsTester* web_contents_tester = | 562 content::WebContentsTester* web_contents_tester = |
| 461 content::WebContentsTester::For(web_contents()); | 563 content::WebContentsTester::For(web_contents()); |
| 462 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | |
| 463 // Background the tab. | 564 // Background the tab. |
| 464 observer_->WasHidden(); | 565 observer_->WasHidden(); |
| 566 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | |
| 465 | 567 |
| 466 observer_->OnMessageReceived( | 568 observer_->OnMessageReceived( |
| 467 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 569 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| 468 main_rfh()); | 570 main_rfh()); |
| 469 | 571 |
| 470 observer_->WasShown(); | 572 observer_->WasShown(); |
| 471 // Navigate again to force histogram logging. | 573 // Navigate again to force histogram logging. |
| 472 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 574 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
| 473 | 575 |
| 474 // 3 events: 2 starts and one successful first layout. | 576 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1, true); |
| 475 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); | 577 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1, false); |
| 476 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 578 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 1, true); |
| 477 PAGE_LOAD_STARTED, 2); | 579 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 1, false); |
| 478 histogram_tester_.ExpectBucketCount( | 580 CheckCommittedEvent(COMMITTED_LOAD_SUCCESSFUL_FIRST_LAYOUT, 1, true); |
| 479 kHistogramNameEvents, PAGE_LOAD_SUCCESSFUL_FIRST_LAYOUT_BACKGROUND, 1); | 581 CheckTotalEvents(); |
| 480 } | 582 } |
| 583 | |
| 584 TEST_F(MetricsWebContentsObserverTest, BadIPC) { | |
| 585 PageLoadTiming timing; | |
| 586 timing.navigation_start = base::Time::FromDoubleT(10); | |
| 587 PageLoadTiming timing2; | |
| 588 timing2.navigation_start = base::Time::FromDoubleT(100); | |
| 589 | |
| 590 content::WebContentsTester* web_contents_tester = | |
| 591 content::WebContentsTester::For(web_contents()); | |
| 592 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | |
| 593 | |
| 594 observer_->OnMessageReceived( | |
| 595 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | |
| 596 main_rfh()); | |
| 597 observer_->OnMessageReceived( | |
| 598 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing2), | |
| 599 main_rfh()); | |
| 600 | |
| 601 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1, false); | |
| 602 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 1, false); | |
| 603 CheckErrorEvent(ERR_BAD_TIMING_IPC, 1); | |
| 604 CheckTotalEvents(); | |
| 605 } | |
| 606 | |
| 481 } // namespace page_load_metrics | 607 } // namespace page_load_metrics |
| OLD | NEW |