Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(258)

Side by Side Diff: chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc

Issue 2372573005: Update OnCommit to return ObservePolicy. (Closed)
Patch Set: restore missing private: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "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"
(...skipping 12 matching lines...) Expand all
23 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
24 #include "url/gurl.h" 24 #include "url/gurl.h"
25 25
26 namespace page_load_metrics { 26 namespace page_load_metrics {
27 27
28 namespace { 28 namespace {
29 29
30 const char kDefaultTestUrl[] = "https://google.com/"; 30 const char kDefaultTestUrl[] = "https://google.com/";
31 const char kDefaultTestUrlAnchor[] = "https://google.com/#samepage"; 31 const char kDefaultTestUrlAnchor[] = "https://google.com/#samepage";
32 const char kDefaultTestUrl2[] = "https://whatever.com/"; 32 const char kDefaultTestUrl2[] = "https://whatever.com/";
33 const char kFilteredCommitUrl[] = "https://whatever.com/ignore-on-commit";
33 34
34 // Simple PageLoadMetricsObserver that copies observed PageLoadTimings into the 35 // Simple PageLoadMetricsObserver that copies observed PageLoadTimings into the
35 // provided std::vector, so they can be analyzed by unit tests. 36 // provided std::vector, so they can be analyzed by unit tests.
36 class TestPageLoadMetricsObserver : public PageLoadMetricsObserver { 37 class TestPageLoadMetricsObserver : public PageLoadMetricsObserver {
37 public: 38 public:
38 explicit TestPageLoadMetricsObserver( 39 TestPageLoadMetricsObserver(std::vector<PageLoadTiming>* updated_timings,
39 std::vector<PageLoadTiming>* updated_timings, 40 std::vector<PageLoadTiming>* complete_timings,
40 std::vector<PageLoadTiming>* complete_timings, 41 std::vector<GURL>* observed_committed_urls)
41 std::vector<GURL>* observed_committed_urls)
42 : updated_timings_(updated_timings), 42 : updated_timings_(updated_timings),
43 complete_timings_(complete_timings), 43 complete_timings_(complete_timings),
44 observed_committed_urls_(observed_committed_urls) {} 44 observed_committed_urls_(observed_committed_urls) {}
45 45
46 void OnStart(content::NavigationHandle* navigation_handle, 46 void OnStart(content::NavigationHandle* navigation_handle,
47 const GURL& currently_committed_url, 47 const GURL& currently_committed_url,
48 bool started_in_foreground) override { 48 bool started_in_foreground) override {
49 observed_committed_urls_->push_back(currently_committed_url); 49 observed_committed_urls_->push_back(currently_committed_url);
50 } 50 }
51 51
(...skipping 12 matching lines...) Expand all
64 const PageLoadExtraInfo& extra_info) override { 64 const PageLoadExtraInfo& extra_info) override {
65 return STOP_OBSERVING; 65 return STOP_OBSERVING;
66 } 66 }
67 67
68 private: 68 private:
69 std::vector<PageLoadTiming>* const updated_timings_; 69 std::vector<PageLoadTiming>* const updated_timings_;
70 std::vector<PageLoadTiming>* const complete_timings_; 70 std::vector<PageLoadTiming>* const complete_timings_;
71 std::vector<GURL>* const observed_committed_urls_; 71 std::vector<GURL>* const observed_committed_urls_;
72 }; 72 };
73 73
74 // Test PageLoadMetricsObserver that stops observing page loads with certain
75 // substrings in the URL.
76 class FilteringPageLoadMetricsObserver : public PageLoadMetricsObserver {
77 public:
78 explicit FilteringPageLoadMetricsObserver(
79 std::vector<GURL>* completed_filtered_urls)
80 : completed_filtered_urls_(completed_filtered_urls) {}
81
82 ObservePolicy OnCommit(content::NavigationHandle* handle) override {
83 const bool should_ignore =
84 handle->GetURL().spec().find("ignore-on-commit") != std::string::npos;
85 return should_ignore ? STOP_OBSERVING : CONTINUE_OBSERVING;
86 }
87
88 void OnComplete(const PageLoadTiming& timing,
89 const PageLoadExtraInfo& extra_info) override {
90 completed_filtered_urls_->push_back(extra_info.committed_url);
91 }
92
93 private:
94 std::vector<GURL>* const completed_filtered_urls_;
95 };
96
74 class TestPageLoadMetricsEmbedderInterface 97 class TestPageLoadMetricsEmbedderInterface
75 : public PageLoadMetricsEmbedderInterface { 98 : public PageLoadMetricsEmbedderInterface {
76 public: 99 public:
77 TestPageLoadMetricsEmbedderInterface() 100 TestPageLoadMetricsEmbedderInterface()
78 : is_prerendering_(false), is_ntp_(false) {} 101 : is_prerendering_(false), is_ntp_(false) {}
79 102
80 bool IsPrerendering(content::WebContents* web_contents) override { 103 bool IsPrerendering(content::WebContents* web_contents) override {
81 return is_prerendering_; 104 return is_prerendering_;
82 } 105 }
83 bool IsNewTabPageUrl(const GURL& url) override { return is_ntp_; } 106 bool IsNewTabPageUrl(const GURL& url) override { return is_ntp_; }
84 void set_is_prerendering(bool is_prerendering) { 107 void set_is_prerendering(bool is_prerendering) {
85 is_prerendering_ = is_prerendering; 108 is_prerendering_ = is_prerendering;
86 } 109 }
87 void set_is_ntp(bool is_ntp) { is_ntp_ = is_ntp; } 110 void set_is_ntp(bool is_ntp) { is_ntp_ = is_ntp; }
88 void RegisterObservers(PageLoadTracker* tracker) override { 111 void RegisterObservers(PageLoadTracker* tracker) override {
89 tracker->AddObserver(base::MakeUnique<TestPageLoadMetricsObserver>( 112 tracker->AddObserver(base::MakeUnique<TestPageLoadMetricsObserver>(
90 &updated_timings_, &complete_timings_, &observed_committed_urls_)); 113 &updated_timings_, &complete_timings_, &observed_committed_urls_));
114 tracker->AddObserver(base::MakeUnique<FilteringPageLoadMetricsObserver>(
115 &completed_filtered_urls_));
91 } 116 }
92 const std::vector<PageLoadTiming>& updated_timings() const { 117 const std::vector<PageLoadTiming>& updated_timings() const {
93 return updated_timings_; 118 return updated_timings_;
94 } 119 }
95 const std::vector<PageLoadTiming>& complete_timings() const { 120 const std::vector<PageLoadTiming>& complete_timings() const {
96 return complete_timings_; 121 return complete_timings_;
97 } 122 }
98 123
99 // currently_committed_urls passed to OnStart(). 124 // currently_committed_urls passed to OnStart().
100 const std::vector<GURL>& observed_committed_urls_from_on_start() const { 125 const std::vector<GURL>& observed_committed_urls_from_on_start() const {
101 return observed_committed_urls_; 126 return observed_committed_urls_;
102 } 127 }
103 128
129 // committed URLs passed to FilteringPageLoadMetricsObserver::OnComplete().
130 const std::vector<GURL>& completed_filtered_urls() const {
131 return completed_filtered_urls_;
132 }
133
104 private: 134 private:
105 std::vector<PageLoadTiming> updated_timings_; 135 std::vector<PageLoadTiming> updated_timings_;
106 std::vector<PageLoadTiming> complete_timings_; 136 std::vector<PageLoadTiming> complete_timings_;
107 std::vector<GURL> observed_committed_urls_; 137 std::vector<GURL> observed_committed_urls_;
138 std::vector<GURL> completed_filtered_urls_;
108 bool is_prerendering_; 139 bool is_prerendering_;
109 bool is_ntp_; 140 bool is_ntp_;
110 }; 141 };
111 142
112 } // namespace 143 } // namespace
113 144
114 class MetricsWebContentsObserverTest : public ChromeRenderViewHostTestHarness { 145 class MetricsWebContentsObserverTest : public ChromeRenderViewHostTestHarness {
115 public: 146 public:
116 MetricsWebContentsObserverTest() : num_errors_(0) {} 147 MetricsWebContentsObserverTest() : num_errors_(0) {}
117 148
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 return embedder_interface_->complete_timings().size(); 200 return embedder_interface_->complete_timings().size();
170 } 201 }
171 int CountUpdatedTimingReported() { 202 int CountUpdatedTimingReported() {
172 return embedder_interface_->updated_timings().size(); 203 return embedder_interface_->updated_timings().size();
173 } 204 }
174 205
175 const std::vector<GURL>& observed_committed_urls_from_on_start() const { 206 const std::vector<GURL>& observed_committed_urls_from_on_start() const {
176 return embedder_interface_->observed_committed_urls_from_on_start(); 207 return embedder_interface_->observed_committed_urls_from_on_start();
177 } 208 }
178 209
210 const std::vector<GURL>& completed_filtered_urls() const {
211 return embedder_interface_->completed_filtered_urls();
212 }
213
179 protected: 214 protected:
180 base::HistogramTester histogram_tester_; 215 base::HistogramTester histogram_tester_;
181 TestPageLoadMetricsEmbedderInterface* embedder_interface_; 216 TestPageLoadMetricsEmbedderInterface* embedder_interface_;
182 MetricsWebContentsObserver* observer_; 217 MetricsWebContentsObserver* observer_;
183 218
184 private: 219 private:
185 int num_errors_; 220 int num_errors_;
186 221
187 DISALLOW_COPY_AND_ASSIGN(MetricsWebContentsObserverTest); 222 DISALLOW_COPY_AND_ASSIGN(MetricsWebContentsObserverTest);
188 }; 223 };
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 DeleteContents(); 551 DeleteContents();
517 552
518 histogram_tester_.ExpectTotalCount( 553 histogram_tester_.ExpectTotalCount(
519 internal::kPageLoadCompletedAfterAppBackground, 2); 554 internal::kPageLoadCompletedAfterAppBackground, 2);
520 histogram_tester_.ExpectBucketCount( 555 histogram_tester_.ExpectBucketCount(
521 internal::kPageLoadCompletedAfterAppBackground, false, 1); 556 internal::kPageLoadCompletedAfterAppBackground, false, 1);
522 histogram_tester_.ExpectBucketCount( 557 histogram_tester_.ExpectBucketCount(
523 internal::kPageLoadCompletedAfterAppBackground, true, 1); 558 internal::kPageLoadCompletedAfterAppBackground, true, 1);
524 } 559 }
525 560
561 TEST_F(MetricsWebContentsObserverTest, StopObservingOnCommit) {
562 content::WebContentsTester* web_contents_tester =
563 content::WebContentsTester::For(web_contents());
564 ASSERT_TRUE(completed_filtered_urls().empty());
565
566 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
567 ASSERT_TRUE(completed_filtered_urls().empty());
568
569 // kFilteredCommitUrl should stop observing in OnCommit, and thus should not
570 // reach OnComplete().
571 web_contents_tester->NavigateAndCommit(GURL(kFilteredCommitUrl));
572 ASSERT_EQ(std::vector<GURL>({GURL(kDefaultTestUrl)}),
573 completed_filtered_urls());
574
575 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
576 ASSERT_EQ(std::vector<GURL>({GURL(kDefaultTestUrl)}),
577 completed_filtered_urls());
578
579 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
580 ASSERT_EQ(std::vector<GURL>({GURL(kDefaultTestUrl), GURL(kDefaultTestUrl2)}),
581 completed_filtered_urls());
582 }
583
526 } // namespace page_load_metrics 584 } // namespace page_load_metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698