| 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 19 matching lines...) Expand all Loading... |
| 30 class TestPageLoadMetricsEmbedderInterface | 30 class TestPageLoadMetricsEmbedderInterface |
| 31 : public PageLoadMetricsEmbedderInterface { | 31 : public PageLoadMetricsEmbedderInterface { |
| 32 public: | 32 public: |
| 33 TestPageLoadMetricsEmbedderInterface() : is_prerendering_(false) {} | 33 TestPageLoadMetricsEmbedderInterface() : is_prerendering_(false) {} |
| 34 rappor::TestRapporService* GetRapporService() override { | 34 rappor::TestRapporService* GetRapporService() override { |
| 35 return &rappor_tester_; | 35 return &rappor_tester_; |
| 36 } | 36 } |
| 37 bool IsPrerendering(content::WebContents* web_contents) override { | 37 bool IsPrerendering(content::WebContents* web_contents) override { |
| 38 return is_prerendering_; | 38 return is_prerendering_; |
| 39 } | 39 } |
| 40 void RegisterObservers(PageLoadMetricsObservable* metrics) override {} |
| 40 void set_is_prerendering(bool is_prerendering) { | 41 void set_is_prerendering(bool is_prerendering) { |
| 41 is_prerendering_ = is_prerendering; | 42 is_prerendering_ = is_prerendering; |
| 42 } | 43 } |
| 43 | 44 |
| 44 private: | 45 private: |
| 45 bool is_prerendering_; | 46 bool is_prerendering_; |
| 46 rappor::TestRapporService rappor_tester_; | 47 rappor::TestRapporService rappor_tester_; |
| 47 }; | 48 }; |
| 48 | 49 |
| 49 class MetricsWebContentsObserverTest | 50 class MetricsWebContentsObserverTest |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 if (background) { | 82 if (background) { |
| 82 histogram_tester_.ExpectBucketCount(kBackgroundProvisionalEvents, event, | 83 histogram_tester_.ExpectBucketCount(kBackgroundProvisionalEvents, event, |
| 83 count); | 84 count); |
| 84 num_provisional_events_bg_ += count; | 85 num_provisional_events_bg_ += count; |
| 85 } else { | 86 } else { |
| 86 histogram_tester_.ExpectBucketCount(kProvisionalEvents, event, count); | 87 histogram_tester_.ExpectBucketCount(kProvisionalEvents, event, count); |
| 87 num_provisional_events_ += count; | 88 num_provisional_events_ += count; |
| 88 } | 89 } |
| 89 } | 90 } |
| 90 | 91 |
| 91 void CheckCommittedEvent(CommittedLoadEvent event, | 92 void CheckCommittedEvent(CommittedRelevantLoadEvent event, |
| 92 int count, | 93 int count, |
| 93 bool background) { | 94 bool background) { |
| 94 if (background) { | 95 if (background) { |
| 95 histogram_tester_.ExpectBucketCount(kBackgroundCommittedEvents, event, | 96 histogram_tester_.ExpectBucketCount(kBackgroundCommittedEvents, event, |
| 96 count); | 97 count); |
| 97 num_committed_events_bg_ += count; | 98 num_committed_events_bg_ += count; |
| 98 } else { | 99 } else { |
| 99 histogram_tester_.ExpectBucketCount(kCommittedEvents, event, count); | 100 histogram_tester_.ExpectBucketCount(kCommittedEvents, event, count); |
| 100 num_committed_events_ += count; | 101 num_committed_events_ += count; |
| 101 } | 102 } |
| (...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 499 GURL about_blank_url = GURL("about:blank"); | 500 GURL about_blank_url = GURL("about:blank"); |
| 500 web_contents_tester->NavigateAndCommit(about_blank_url); | 501 web_contents_tester->NavigateAndCommit(about_blank_url); |
| 501 | 502 |
| 502 observer_->OnMessageReceived( | 503 observer_->OnMessageReceived( |
| 503 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 504 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| 504 main_rfh()); | 505 main_rfh()); |
| 505 | 506 |
| 506 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 507 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
| 507 | 508 |
| 508 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2, false); | 509 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2, false); |
| 509 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 1, false); | 510 CheckCommittedEvent(RELEVANT_LOAD_STARTED, 1, false); |
| 510 CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 1); | 511 CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 1); |
| 511 CheckErrorEvent(ERR_IPC_WITH_NO_COMMITTED_LOAD, 1); | 512 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); |
| 512 CheckTotalEvents(); | 513 CheckTotalEvents(); |
| 513 } | 514 } |
| 514 | 515 |
| 515 TEST_F(MetricsWebContentsObserverTest, NotInMainError) { | 516 TEST_F(MetricsWebContentsObserverTest, NotInMainError) { |
| 516 PageLoadTiming timing; | 517 PageLoadTiming timing; |
| 517 timing.navigation_start = base::Time::FromDoubleT(1); | 518 timing.navigation_start = base::Time::FromDoubleT(1); |
| 518 timing.first_layout = base::TimeDelta::FromMilliseconds(1); | 519 timing.first_layout = base::TimeDelta::FromMilliseconds(1); |
| 519 | 520 |
| 520 content::WebContentsTester* web_contents_tester = | 521 content::WebContentsTester* web_contents_tester = |
| 521 content::WebContentsTester::For(web_contents()); | 522 content::WebContentsTester::For(web_contents()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 543 content::WebContentsTester::For(web_contents()); | 544 content::WebContentsTester::For(web_contents()); |
| 544 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 545 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
| 545 | 546 |
| 546 observer_->OnMessageReceived( | 547 observer_->OnMessageReceived( |
| 547 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 548 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| 548 main_rfh()); | 549 main_rfh()); |
| 549 // Navigate again to force histogram logging. | 550 // Navigate again to force histogram logging. |
| 550 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 551 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
| 551 | 552 |
| 552 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2, false); | 553 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2, false); |
| 553 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 2, false); | 554 CheckCommittedEvent(RELEVANT_LOAD_STARTED, 2, false); |
| 554 CheckCommittedEvent(COMMITTED_LOAD_FAILED_BEFORE_FIRST_LAYOUT, 1, false); | 555 CheckCommittedEvent(RELEVANT_LOAD_FAILED_BEFORE_FIRST_LAYOUT, 1, false); |
| 555 CheckTotalEvents(); | 556 CheckTotalEvents(); |
| 556 } | 557 } |
| 557 | 558 |
| 558 TEST_F(MetricsWebContentsObserverTest, SuccessfulFirstLayoutInForegroundEvent) { | 559 TEST_F(MetricsWebContentsObserverTest, SuccessfulFirstLayoutInForegroundEvent) { |
| 559 PageLoadTiming timing; | 560 PageLoadTiming timing; |
| 560 timing.navigation_start = base::Time::FromDoubleT(10); | 561 timing.navigation_start = base::Time::FromDoubleT(10); |
| 561 timing.first_layout = base::TimeDelta::FromMilliseconds(100); | 562 timing.first_layout = base::TimeDelta::FromMilliseconds(100); |
| 562 | 563 |
| 563 content::WebContentsTester* web_contents_tester = | 564 content::WebContentsTester* web_contents_tester = |
| 564 content::WebContentsTester::For(web_contents()); | 565 content::WebContentsTester::For(web_contents()); |
| 565 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 566 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
| 566 | 567 |
| 567 observer_->OnMessageReceived( | 568 observer_->OnMessageReceived( |
| 568 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 569 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| 569 main_rfh()); | 570 main_rfh()); |
| 570 // Navigate again to force histogram logging. | 571 // Navigate again to force histogram logging. |
| 571 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 572 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
| 572 | 573 |
| 573 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2, false); | 574 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2, false); |
| 574 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 2, false); | 575 CheckCommittedEvent(RELEVANT_LOAD_STARTED, 2, false); |
| 575 CheckCommittedEvent(COMMITTED_LOAD_SUCCESSFUL_FIRST_LAYOUT, 1, false); | 576 CheckCommittedEvent(RELEVANT_LOAD_SUCCESSFUL_FIRST_LAYOUT, 1, false); |
| 576 CheckTotalEvents(); | 577 CheckTotalEvents(); |
| 577 } | 578 } |
| 578 | 579 |
| 579 TEST_F(MetricsWebContentsObserverTest, | 580 TEST_F(MetricsWebContentsObserverTest, |
| 580 SuccessfulFirstLayoutInBackgroundEvent) { | 581 SuccessfulFirstLayoutInBackgroundEvent) { |
| 581 PageLoadTiming timing; | 582 PageLoadTiming timing; |
| 582 timing.navigation_start = base::Time::FromDoubleT(1); | 583 timing.navigation_start = base::Time::FromDoubleT(1); |
| 583 timing.first_layout = base::TimeDelta::FromSeconds(30); | 584 timing.first_layout = base::TimeDelta::FromSeconds(30); |
| 584 | 585 |
| 585 content::WebContentsTester* web_contents_tester = | 586 content::WebContentsTester* web_contents_tester = |
| 586 content::WebContentsTester::For(web_contents()); | 587 content::WebContentsTester::For(web_contents()); |
| 587 // Background the tab. | 588 // Background the tab. |
| 588 observer_->WasHidden(); | 589 observer_->WasHidden(); |
| 589 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 590 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
| 590 | 591 |
| 591 observer_->OnMessageReceived( | 592 observer_->OnMessageReceived( |
| 592 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 593 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| 593 main_rfh()); | 594 main_rfh()); |
| 594 | 595 |
| 595 observer_->WasShown(); | 596 observer_->WasShown(); |
| 596 // Navigate again to force histogram logging. | 597 // Navigate again to force histogram logging. |
| 597 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 598 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
| 598 | 599 |
| 599 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1, true); | 600 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1, true); |
| 600 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1, false); | 601 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1, false); |
| 601 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 1, true); | 602 CheckCommittedEvent(RELEVANT_LOAD_STARTED, 1, true); |
| 602 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 1, false); | 603 CheckCommittedEvent(RELEVANT_LOAD_STARTED, 1, false); |
| 603 CheckCommittedEvent(COMMITTED_LOAD_SUCCESSFUL_FIRST_LAYOUT, 1, true); | 604 CheckCommittedEvent(RELEVANT_LOAD_SUCCESSFUL_FIRST_LAYOUT, 1, true); |
| 604 CheckTotalEvents(); | 605 CheckTotalEvents(); |
| 605 } | 606 } |
| 606 | 607 |
| 607 TEST_F(MetricsWebContentsObserverTest, BadIPC) { | 608 TEST_F(MetricsWebContentsObserverTest, BadIPC) { |
| 608 PageLoadTiming timing; | 609 PageLoadTiming timing; |
| 609 timing.navigation_start = base::Time::FromDoubleT(10); | 610 timing.navigation_start = base::Time::FromDoubleT(10); |
| 610 PageLoadTiming timing2; | 611 PageLoadTiming timing2; |
| 611 timing2.navigation_start = base::Time::FromDoubleT(100); | 612 timing2.navigation_start = base::Time::FromDoubleT(100); |
| 612 | 613 |
| 613 content::WebContentsTester* web_contents_tester = | 614 content::WebContentsTester* web_contents_tester = |
| 614 content::WebContentsTester::For(web_contents()); | 615 content::WebContentsTester::For(web_contents()); |
| 615 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 616 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
| 616 | 617 |
| 617 observer_->OnMessageReceived( | 618 observer_->OnMessageReceived( |
| 618 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 619 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
| 619 main_rfh()); | 620 main_rfh()); |
| 620 observer_->OnMessageReceived( | 621 observer_->OnMessageReceived( |
| 621 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing2), | 622 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing2), |
| 622 main_rfh()); | 623 main_rfh()); |
| 623 | 624 |
| 624 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1, false); | 625 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1, false); |
| 625 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 1, false); | 626 CheckCommittedEvent(RELEVANT_LOAD_STARTED, 1, false); |
| 626 CheckErrorEvent(ERR_BAD_TIMING_IPC, 1); | 627 CheckErrorEvent(ERR_BAD_TIMING_IPC, 1); |
| 627 CheckTotalEvents(); | 628 CheckTotalEvents(); |
| 628 } | 629 } |
| 629 | 630 |
| 630 TEST_F(MetricsWebContentsObserverTest, ObservePartialNavigation) { | 631 TEST_F(MetricsWebContentsObserverTest, ObservePartialNavigation) { |
| 631 // Delete the observer for this test, add it once the navigation has started. | 632 // Delete the observer for this test, add it once the navigation has started. |
| 632 observer_.reset(); | 633 observer_.reset(); |
| 633 PageLoadTiming timing; | 634 PageLoadTiming timing; |
| 634 timing.navigation_start = base::Time::FromDoubleT(10); | 635 timing.navigation_start = base::Time::FromDoubleT(10); |
| 635 timing.first_layout = base::TimeDelta::FromSeconds(2); | 636 timing.first_layout = base::TimeDelta::FromSeconds(2); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 710 EXPECT_NE(string_it, sample_obj->string_fields.end()); | 711 EXPECT_NE(string_it, sample_obj->string_fields.end()); |
| 711 EXPECT_EQ(rappor::GetDomainAndRegistrySampleFromGURL(GURL(kDefaultTestUrl)), | 712 EXPECT_EQ(rappor::GetDomainAndRegistrySampleFromGURL(GURL(kDefaultTestUrl)), |
| 712 string_it->second); | 713 string_it->second); |
| 713 | 714 |
| 714 const auto& flag_it = sample_obj->flag_fields.find("IsSlow"); | 715 const auto& flag_it = sample_obj->flag_fields.find("IsSlow"); |
| 715 EXPECT_NE(flag_it, sample_obj->flag_fields.end()); | 716 EXPECT_NE(flag_it, sample_obj->flag_fields.end()); |
| 716 EXPECT_EQ(0u, flag_it->second); | 717 EXPECT_EQ(0u, flag_it->second); |
| 717 } | 718 } |
| 718 | 719 |
| 719 } // namespace page_load_metrics | 720 } // namespace page_load_metrics |
| OLD | NEW |