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

Side by Side Diff: chrome/browser/page_load_metrics/observers/page_load_metrics_observers_unittest.cc

Issue 1476503004: [page_load_metrics] User Initiated Abort Tracking (Observer version) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@new_observer
Patch Set: Update for EventOccurredInForeground Created 5 years 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 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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/test/histogram_tester.h" 6 #include "base/test/histogram_tester.h"
7 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h"
7 #include "chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_ observer.h" 8 #include "chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_ observer.h"
8 #include "chrome/browser/page_load_metrics/observers/google_captcha_observer.h" 9 #include "chrome/browser/page_load_metrics/observers/google_captcha_observer.h"
9 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 10 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
10 #include "components/page_load_metrics/browser/metrics_web_contents_observer.h" 11 #include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
11 #include "components/page_load_metrics/common/page_load_metrics_messages.h" 12 #include "components/page_load_metrics/common/page_load_metrics_messages.h"
12 #include "content/public/test/web_contents_tester.h" 13 #include "content/public/test/web_contents_tester.h"
13 #include "url/gurl.h" 14 #include "url/gurl.h"
14 15
15 namespace { 16 namespace {
16 17
(...skipping 25 matching lines...) Expand all
42 TestPageLoadMetricsEmbedderInterface() 43 TestPageLoadMetricsEmbedderInterface()
43 : referrer_(content::Referrer(GURL("https://www.google.com"), 44 : referrer_(content::Referrer(GURL("https://www.google.com"),
44 blink::WebReferrerPolicyDefault)) {} 45 blink::WebReferrerPolicyDefault)) {}
45 rappor::RapporService* GetRapporService() override { return nullptr; } 46 rappor::RapporService* GetRapporService() override { return nullptr; }
46 bool IsPrerendering(content::WebContents* web_contents) override { 47 bool IsPrerendering(content::WebContents* web_contents) override {
47 return false; 48 return false;
48 } 49 }
49 void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override { 50 void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override {
50 tracker->AddObserver( 51 tracker->AddObserver(
51 make_scoped_ptr(new TestFromGWSPageLoadMetricsObserver(referrer_))); 52 make_scoped_ptr(new TestFromGWSPageLoadMetricsObserver(referrer_)));
53 tracker->AddObserver(
Bryan McQuade 2015/12/10 17:04:23 I'd like to have a separate aborts_page_load_metri
Charlie Harrison 2015/12/10 17:59:31 I have a bug filed for this. I'll do it asap after
54 make_scoped_ptr(new AbortsPageLoadMetricsObserver()));
52 } 55 }
53 void set_referrer(const content::Referrer& referrer) { referrer_ = referrer; } 56 void set_referrer(const content::Referrer& referrer) { referrer_ = referrer; }
54 57
55 private: 58 private:
56 content::Referrer referrer_; 59 content::Referrer referrer_;
57 60
58 DISALLOW_COPY_AND_ASSIGN(TestPageLoadMetricsEmbedderInterface); 61 DISALLOW_COPY_AND_ASSIGN(TestPageLoadMetricsEmbedderInterface);
59 }; 62 };
60 63
61 class PageLoadMetricsObserverTest : public ChromeRenderViewHostTestHarness { 64 class PageLoadMetricsObserverTest : public ChromeRenderViewHostTestHarness {
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 233
231 observer_->OnMessageReceived( 234 observer_->OnMessageReceived(
232 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), 235 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
233 web_contents()->GetMainFrame()); 236 web_contents()->GetMainFrame());
234 237
235 // Navigate again to force logging. 238 // Navigate again to force logging.
236 NavigateAndCommit(GURL("https://www.google.com")); 239 NavigateAndCommit(GURL("https://www.google.com"));
237 histogram_tester_.ExpectTotalCount(kHistogramNameFromGWSFirstTextPaint, 0); 240 histogram_tester_.ExpectTotalCount(kHistogramNameFromGWSFirstTextPaint, 0);
238 } 241 }
239 242
243 TEST_F(PageLoadMetricsObserverTest, AbortStopClose) {
244 page_load_metrics::PageLoadTiming timing;
245 timing.navigation_start = base::Time::FromDoubleT(1);
246 content::WebContentsTester* web_contents_tester =
247 content::WebContentsTester::For(web_contents());
248 NavigateAndCommit(GURL("https://www.google.com"));
249 observer_->OnMessageReceived(
250 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
251 web_contents()->GetMainFrame());
252 // Simulate the user pressing the stop button.
253 observer_->NavigationStopped();
254 web_contents_tester->NavigateAndCommit(GURL("https://www.example.com"));
255 observer_->OnMessageReceived(
256 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
257 web_contents()->GetMainFrame());
258 // Kill the MetricsWebContentsObserver to simulate closing the tab.
259 observer_.reset();
260 histogram_tester_.ExpectTotalCount(kHistogramAbortStopBeforePaint, 1);
261 histogram_tester_.ExpectTotalCount(kHistogramAbortCloseBeforePaint, 1);
262 }
263
264 TEST_F(PageLoadMetricsObserverTest, AbortNewNavigation) {
265 page_load_metrics::PageLoadTiming timing;
266 timing.navigation_start = base::Time::FromDoubleT(1);
267 content::WebContentsTester* web_contents_tester =
268 content::WebContentsTester::For(web_contents());
269 web_contents_tester->NavigateAndCommit(GURL("https://www.google.com"));
270 observer_->OnMessageReceived(
271 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
272 web_contents()->GetMainFrame());
273 // Simulate the user performaning another navigation before first paint.
274 web_contents_tester->NavigateAndCommit(GURL("https://www.example.com"));
275 histogram_tester_.ExpectTotalCount(kHistogramAbortNewNavigationBeforePaint,
276 1);
277 }
278
279 TEST_F(PageLoadMetricsObserverTest, NoAbortNewNavigationFromAboutURL) {
280 content::WebContentsTester* web_contents_tester =
281 content::WebContentsTester::For(web_contents());
282 web_contents_tester->NavigateAndCommit(GURL("about:blank"));
283 web_contents_tester->NavigateAndCommit(GURL("https://www.example.com"));
284 histogram_tester_.ExpectTotalCount(kHistogramAbortNewNavigationBeforePaint,
285 0);
286 }
287
288 TEST_F(PageLoadMetricsObserverTest, NoAbortNewNavigationAfterPaint) {
289 page_load_metrics::PageLoadTiming timing;
290 timing.navigation_start = base::Time::FromDoubleT(1);
291 timing.first_paint = base::TimeDelta::FromMicroseconds(1);
292 content::WebContentsTester* web_contents_tester =
293 content::WebContentsTester::For(web_contents());
294 web_contents_tester->NavigateAndCommit(GURL("https://www.google.com"));
295 observer_->OnMessageReceived(
296 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
297 web_contents()->GetMainFrame());
298 web_contents_tester->NavigateAndCommit(GURL("https://www.example.com"));
299 histogram_tester_.ExpectTotalCount(kHistogramAbortNewNavigationBeforePaint,
300 0);
301 }
302
303
240 TEST_F(PageLoadMetricsObserverTest, IsGoogleCaptcha) { 304 TEST_F(PageLoadMetricsObserverTest, IsGoogleCaptcha) {
241 struct { 305 struct {
242 std::string url; 306 std::string url;
243 bool expected; 307 bool expected;
244 } test_cases[] = { 308 } test_cases[] = {
245 {"", false}, 309 {"", false},
246 {"http://www.google.com/", false}, 310 {"http://www.google.com/", false},
247 {"http://www.cnn.com/", false}, 311 {"http://www.cnn.com/", false},
248 {"http://ipv4.google.com/", false}, 312 {"http://ipv4.google.com/", false},
249 {"https://ipv4.google.com/sorry/IndexRedirect?continue=http://a", true}, 313 {"https://ipv4.google.com/sorry/IndexRedirect?continue=http://a", true},
250 {"https://ipv6.google.com/sorry/IndexRedirect?continue=http://a", true}, 314 {"https://ipv6.google.com/sorry/IndexRedirect?continue=http://a", true},
251 {"https://ipv7.google.com/sorry/IndexRedirect?continue=http://a", false}, 315 {"https://ipv7.google.com/sorry/IndexRedirect?continue=http://a", false},
252 }; 316 };
253 for (const auto& test : test_cases) { 317 for (const auto& test : test_cases) {
254 EXPECT_EQ(test.expected, 318 EXPECT_EQ(test.expected,
255 google_captcha_observer::IsGoogleCaptcha(GURL(test.url))) 319 google_captcha_observer::IsGoogleCaptcha(GURL(test.url)))
256 << "for URL: " << test.url; 320 << "for URL: " << test.url;
257 } 321 }
258 } 322 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698