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

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: Remove dcheck for STILL_RUNNING 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(make_scoped_ptr(new AbortsPageLoadMetricsObserver()));
52 } 54 }
53 void set_referrer(const content::Referrer& referrer) { referrer_ = referrer; } 55 void set_referrer(const content::Referrer& referrer) { referrer_ = referrer; }
54 56
55 private: 57 private:
56 content::Referrer referrer_; 58 content::Referrer referrer_;
57 59
58 DISALLOW_COPY_AND_ASSIGN(TestPageLoadMetricsEmbedderInterface); 60 DISALLOW_COPY_AND_ASSIGN(TestPageLoadMetricsEmbedderInterface);
59 }; 61 };
60 62
61 class PageLoadMetricsObserverTest : public ChromeRenderViewHostTestHarness { 63 class PageLoadMetricsObserverTest : public ChromeRenderViewHostTestHarness {
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 232
231 observer_->OnMessageReceived( 233 observer_->OnMessageReceived(
232 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), 234 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
233 web_contents()->GetMainFrame()); 235 web_contents()->GetMainFrame());
234 236
235 // Navigate again to force logging. 237 // Navigate again to force logging.
236 NavigateAndCommit(GURL("https://www.google.com")); 238 NavigateAndCommit(GURL("https://www.google.com"));
237 histogram_tester_.ExpectTotalCount(kHistogramNameFromGWSFirstTextPaint, 0); 239 histogram_tester_.ExpectTotalCount(kHistogramNameFromGWSFirstTextPaint, 0);
238 } 240 }
239 241
242 TEST_F(PageLoadMetricsObserverTest, AbortStopClose) {
243 page_load_metrics::PageLoadTiming timing;
244 timing.navigation_start = base::Time::FromDoubleT(1);
245 content::WebContentsTester* web_contents_tester =
246 content::WebContentsTester::For(web_contents());
247 NavigateAndCommit(GURL("https://www.google.com"));
248 observer_->OnMessageReceived(
249 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
250 web_contents()->GetMainFrame());
251 // Simulate the user pressing the stop button.
252 observer_->NavigationStopped();
253 web_contents_tester->NavigateAndCommit(GURL("https://www.example.com"));
254 observer_->OnMessageReceived(
255 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
256 web_contents()->GetMainFrame());
257 // Kill the MetricsWebContentsObserver to simulate closing the tab.
258 observer_.reset();
259 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortStopBeforePaint,
260 1);
261 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforePaint,
262 1);
263 }
264
265 TEST_F(PageLoadMetricsObserverTest, AbortNewNavigation) {
266 page_load_metrics::PageLoadTiming timing;
267 timing.navigation_start = base::Time::FromDoubleT(1);
268 content::WebContentsTester* web_contents_tester =
269 content::WebContentsTester::For(web_contents());
270 web_contents_tester->NavigateAndCommit(GURL("https://www.google.com"));
271 observer_->OnMessageReceived(
272 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
273 web_contents()->GetMainFrame());
274 // Simulate the user performaning another navigation before first paint.
275 web_contents_tester->NavigateAndCommit(GURL("https://www.example.com"));
276 histogram_tester_.ExpectTotalCount(
277 internal::kHistogramAbortNewNavigationBeforePaint, 1);
278 }
279
280 TEST_F(PageLoadMetricsObserverTest, NoAbortNewNavigationFromAboutURL) {
281 content::WebContentsTester* web_contents_tester =
282 content::WebContentsTester::For(web_contents());
283 web_contents_tester->NavigateAndCommit(GURL("about:blank"));
284 web_contents_tester->NavigateAndCommit(GURL("https://www.example.com"));
285 histogram_tester_.ExpectTotalCount(
286 internal::kHistogramAbortNewNavigationBeforePaint, 0);
287 }
288
289 TEST_F(PageLoadMetricsObserverTest, NoAbortNewNavigationAfterPaint) {
290 page_load_metrics::PageLoadTiming timing;
291 timing.navigation_start = base::Time::FromDoubleT(1);
292 timing.first_paint = base::TimeDelta::FromMicroseconds(1);
293 content::WebContentsTester* web_contents_tester =
294 content::WebContentsTester::For(web_contents());
295 web_contents_tester->NavigateAndCommit(GURL("https://www.google.com"));
296 observer_->OnMessageReceived(
297 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
298 web_contents()->GetMainFrame());
299 web_contents_tester->NavigateAndCommit(GURL("https://www.example.com"));
300 histogram_tester_.ExpectTotalCount(
301 internal::kHistogramAbortNewNavigationBeforePaint, 0);
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