| Index: components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
|
| diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
|
| index de1fc2668d382f3005c3994d276543b6ec2803a4..d11b456686f0ee75ed90422b22af54858641752f 100644
|
| --- a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
|
| +++ b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
|
| @@ -33,9 +33,11 @@ const char kDefaultTestUrl2[] = "https://whatever.com/";
|
| class TestPageLoadMetricsObserver : public PageLoadMetricsObserver {
|
| public:
|
| explicit TestPageLoadMetricsObserver(
|
| - std::vector<PageLoadTiming>* observed_timings,
|
| + std::vector<PageLoadTiming>* updated_timings,
|
| + std::vector<PageLoadTiming>* complete_timings,
|
| std::vector<GURL>* observed_committed_urls)
|
| - : observed_timings_(observed_timings),
|
| + : updated_timings_(updated_timings),
|
| + complete_timings_(complete_timings),
|
| observed_committed_urls_(observed_committed_urls) {}
|
|
|
| void OnStart(content::NavigationHandle* navigation_handle,
|
| @@ -43,13 +45,19 @@ class TestPageLoadMetricsObserver : public PageLoadMetricsObserver {
|
| observed_committed_urls_->push_back(currently_committed_url);
|
| }
|
|
|
| + void OnTimingUpdate(const PageLoadTiming& timing,
|
| + const PageLoadExtraInfo& extra_info) override {
|
| + updated_timings_->push_back(timing);
|
| + }
|
| +
|
| void OnComplete(const PageLoadTiming& timing,
|
| const PageLoadExtraInfo& extra_info) override {
|
| - observed_timings_->push_back(timing);
|
| + complete_timings_->push_back(timing);
|
| }
|
|
|
| private:
|
| - std::vector<PageLoadTiming>* const observed_timings_;
|
| + std::vector<PageLoadTiming>* const updated_timings_;
|
| + std::vector<PageLoadTiming>* const complete_timings_;
|
| std::vector<GURL>* const observed_committed_urls_;
|
| };
|
|
|
| @@ -66,10 +74,13 @@ class TestPageLoadMetricsEmbedderInterface
|
| }
|
| void RegisterObservers(PageLoadTracker* tracker) override {
|
| tracker->AddObserver(make_scoped_ptr(new TestPageLoadMetricsObserver(
|
| - &observed_timings_, &observed_committed_urls_)));
|
| + &updated_timings_, &complete_timings_, &observed_committed_urls_)));
|
| }
|
| - const std::vector<PageLoadTiming>& observed_timings() const {
|
| - return observed_timings_;
|
| + const std::vector<PageLoadTiming>& updated_timings() const {
|
| + return updated_timings_;
|
| + }
|
| + const std::vector<PageLoadTiming>& complete_timings() const {
|
| + return complete_timings_;
|
| }
|
|
|
| // currently_committed_urls passed to OnStart().
|
| @@ -78,7 +89,8 @@ class TestPageLoadMetricsEmbedderInterface
|
| }
|
|
|
| private:
|
| - std::vector<PageLoadTiming> observed_timings_;
|
| + std::vector<PageLoadTiming> updated_timings_;
|
| + std::vector<PageLoadTiming> complete_timings_;
|
| std::vector<GURL> observed_committed_urls_;
|
| bool is_prerendering_;
|
| };
|
| @@ -128,26 +140,31 @@ class MetricsWebContentsObserverTest
|
| }
|
|
|
| void AssertNoNonEmptyTimingReported() {
|
| - ASSERT_FALSE(embedder_interface_->observed_timings().empty());
|
| - for (const auto& timing : embedder_interface_->observed_timings()) {
|
| + ASSERT_FALSE(embedder_interface_->complete_timings().empty());
|
| + for (const auto& timing : embedder_interface_->complete_timings()) {
|
| ASSERT_TRUE(timing.IsEmpty());
|
| }
|
| }
|
|
|
| void AssertNonEmptyTimingsReported(size_t expected_non_empty_timings) {
|
| - ASSERT_GE(embedder_interface_->observed_timings().size(),
|
| + ASSERT_GE(embedder_interface_->complete_timings().size(),
|
| expected_non_empty_timings);
|
| size_t actual_non_empty_timings = 0;
|
| - for (const auto& timing : embedder_interface_->observed_timings()) {
|
| + for (const auto& timing : embedder_interface_->complete_timings()) {
|
| if (!timing.IsEmpty()) {
|
| ++actual_non_empty_timings;
|
| }
|
| }
|
| ASSERT_EQ(expected_non_empty_timings, actual_non_empty_timings);
|
| + ASSERT_GE(embedder_interface_->updated_timings().size(),
|
| + actual_non_empty_timings);
|
| }
|
|
|
| - void AssertNoTimingReported() {
|
| - ASSERT_TRUE(embedder_interface_->observed_timings().empty());
|
| + int CountCompleteTimingReported() {
|
| + return embedder_interface_->complete_timings().size();
|
| + }
|
| + int CountUpdatedTimingReported() {
|
| + return embedder_interface_->updated_timings().size();
|
| }
|
|
|
| const std::vector<GURL>& observed_committed_urls_from_on_start() const {
|
| @@ -178,14 +195,17 @@ TEST_F(MetricsWebContentsObserverTest, SuccessfulMainFrameNavigation) {
|
| ASSERT_EQ(1u, observed_committed_urls_from_on_start().size());
|
| ASSERT_TRUE(observed_committed_urls_from_on_start().at(0).is_empty());
|
|
|
| + ASSERT_EQ(0, CountUpdatedTimingReported());
|
| SimulateTimingUpdate(timing);
|
| - AssertNoTimingReported();
|
| + ASSERT_EQ(1, CountUpdatedTimingReported());
|
| + ASSERT_EQ(0, CountCompleteTimingReported());
|
|
|
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
|
| AssertNonEmptyTimingsReported(1);
|
| ASSERT_EQ(2u, observed_committed_urls_from_on_start().size());
|
| ASSERT_EQ(kDefaultTestUrl,
|
| observed_committed_urls_from_on_start().at(1).spec());
|
| + ASSERT_EQ(1, CountUpdatedTimingReported());
|
|
|
| CheckNoErrorEvents();
|
| }
|
| @@ -212,6 +232,7 @@ TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) {
|
| // Navigate again to see if the timing updated for a subframe message.
|
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
|
|
|
| + ASSERT_EQ(0, CountUpdatedTimingReported());
|
| AssertNoNonEmptyTimingReported();
|
| CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1);
|
| CheckTotalErrorEvents();
|
| @@ -224,9 +245,12 @@ TEST_F(MetricsWebContentsObserverTest, SamePageNoTrigger) {
|
| content::WebContentsTester* web_contents_tester =
|
| content::WebContentsTester::For(web_contents());
|
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
|
| + ASSERT_EQ(0, CountUpdatedTimingReported());
|
| SimulateTimingUpdate(timing);
|
| + ASSERT_EQ(1, CountUpdatedTimingReported());
|
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrlAnchor));
|
| // A same page navigation shouldn't trigger logging UMA for the original.
|
| + ASSERT_EQ(1, CountUpdatedTimingReported());
|
| AssertNoNonEmptyTimingReported();
|
| CheckNoErrorEvents();
|
| }
|
| @@ -242,7 +266,8 @@ TEST_F(MetricsWebContentsObserverTest, DontLogPrerender) {
|
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
|
| SimulateTimingUpdate(timing);
|
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
|
| - AssertNoTimingReported();
|
| + ASSERT_EQ(0, CountUpdatedTimingReported());
|
| + ASSERT_EQ(0, CountCompleteTimingReported());
|
| CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1);
|
| CheckTotalErrorEvents();
|
| }
|
| @@ -257,7 +282,10 @@ TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) {
|
| GURL about_blank_url = GURL("about:blank");
|
| web_contents_tester->NavigateAndCommit(about_blank_url);
|
| SimulateTimingUpdate(timing);
|
| + ASSERT_EQ(0, CountUpdatedTimingReported());
|
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
|
| + ASSERT_EQ(0, CountUpdatedTimingReported());
|
| + ASSERT_EQ(0, CountCompleteTimingReported());
|
|
|
| CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 1);
|
| CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1);
|
| @@ -283,6 +311,8 @@ TEST_F(MetricsWebContentsObserverTest, NotInMainError) {
|
| SimulateTimingUpdate(timing, subframe);
|
| CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1);
|
| CheckTotalErrorEvents();
|
| + ASSERT_EQ(0, CountUpdatedTimingReported());
|
| + ASSERT_EQ(0, CountCompleteTimingReported());
|
| }
|
|
|
| TEST_F(MetricsWebContentsObserverTest, BadIPC) {
|
| @@ -296,7 +326,9 @@ TEST_F(MetricsWebContentsObserverTest, BadIPC) {
|
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
|
|
|
| SimulateTimingUpdate(timing);
|
| + ASSERT_EQ(1, CountUpdatedTimingReported());
|
| SimulateTimingUpdate(timing2);
|
| + ASSERT_EQ(1, CountUpdatedTimingReported());
|
|
|
| CheckErrorEvent(ERR_BAD_TIMING_IPC, 1);
|
| CheckTotalErrorEvents();
|
| @@ -323,7 +355,8 @@ TEST_F(MetricsWebContentsObserverTest, ObservePartialNavigation) {
|
|
|
| // Navigate again to force histogram logging.
|
| web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
|
| - AssertNoTimingReported();
|
| + ASSERT_EQ(0, CountCompleteTimingReported());
|
| + ASSERT_EQ(0, CountUpdatedTimingReported());
|
| CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1);
|
| CheckTotalErrorEvents();
|
| }
|
|
|