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

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

Issue 1384213002: Page Abort Events for relevant navigations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: new enum per Randy, updated histograms Created 5 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 "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 18 matching lines...) Expand all
29 const char kHistogramNameLoad[] = 29 const char kHistogramNameLoad[] =
30 "PageLoad.Timing2.NavigationToLoadEventFired"; 30 "PageLoad.Timing2.NavigationToLoadEventFired";
31 31
32 const char kBGHistogramNameFirstLayout[] = 32 const char kBGHistogramNameFirstLayout[] =
33 "PageLoad.Timing2.NavigationToFirstLayout.BG"; 33 "PageLoad.Timing2.NavigationToFirstLayout.BG";
34 const char kBGHistogramNameDomContent[] = 34 const char kBGHistogramNameDomContent[] =
35 "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired.BG"; 35 "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired.BG";
36 const char kBGHistogramNameLoad[] = 36 const char kBGHistogramNameLoad[] =
37 "PageLoad.Timing2.NavigationToLoadEventFired.BG"; 37 "PageLoad.Timing2.NavigationToLoadEventFired.BG";
38 38
39 const char kHistogramNameEvents[] = "PageLoad.EventCounts"; 39 const char kProvisionalEvents[] = "PageLoad.Events.Provisional";
40 const char kCommittedEvents[] = "PageLoad.Events.Committed";
40 41
41 } // namespace 42 } // namespace
42 43
43 class MetricsWebContentsObserverTest 44 class MetricsWebContentsObserverTest
44 : public content::RenderViewHostTestHarness { 45 : public content::RenderViewHostTestHarness {
45 public: 46 public:
46 MetricsWebContentsObserverTest() {} 47 MetricsWebContentsObserverTest() {}
47 48
48 void SetUp() override { 49 void SetUp() override {
49 RenderViewHostTestHarness::SetUp(); 50 RenderViewHostTestHarness::SetUp();
50 observer_ = make_scoped_ptr(new MetricsWebContentsObserver(web_contents())); 51 observer_ = make_scoped_ptr(new MetricsWebContentsObserver(web_contents()));
51 observer_->WasShown(); 52 observer_->WasShown();
53 num_provisional_events_ = 0;
54 num_committed_events_ = 0;
52 } 55 }
53 56
54 void AssertNoHistogramsLogged() { 57 void AssertNoHistogramsLogged() {
55 histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 0); 58 histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 0);
56 histogram_tester_.ExpectTotalCount(kHistogramNameLoad, 0); 59 histogram_tester_.ExpectTotalCount(kHistogramNameLoad, 0);
57 histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 0); 60 histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 0);
58 } 61 }
59 62
63 void CheckProvisionalEvent(ProvisionalLoadEvent event, int count) {
64 histogram_tester_.ExpectBucketCount(kProvisionalEvents, event, count);
65 num_provisional_events_ += count;
66 }
67
68 void CheckCommittedEvent(CommittedLoadEvent event, int count) {
69 histogram_tester_.ExpectBucketCount(kCommittedEvents, event, count);
70 num_committed_events_ += count;
71 }
72
73 void CheckTotalEvents() {
74 histogram_tester_.ExpectTotalCount(kProvisionalEvents,
75 num_provisional_events_);
76 histogram_tester_.ExpectTotalCount(kCommittedEvents, num_committed_events_);
77 }
78
60 protected: 79 protected:
61 base::HistogramTester histogram_tester_; 80 base::HistogramTester histogram_tester_;
62 scoped_ptr<MetricsWebContentsObserver> observer_; 81 scoped_ptr<MetricsWebContentsObserver> observer_;
82
83 private:
84 int num_provisional_events_;
85 int num_committed_events_;
63 }; 86 };
64 87
65 TEST_F(MetricsWebContentsObserverTest, NoMetrics) { 88 TEST_F(MetricsWebContentsObserverTest, NoMetrics) {
66 AssertNoHistogramsLogged(); 89 AssertNoHistogramsLogged();
67 } 90 }
68 91
69 TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) { 92 TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) {
70 base::TimeDelta first_layout = base::TimeDelta::FromMilliseconds(1); 93 base::TimeDelta first_layout = base::TimeDelta::FromMilliseconds(1);
71 94
72 PageLoadTiming timing; 95 PageLoadTiming timing;
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 content::WebContentsTester* web_contents_tester = 365 content::WebContentsTester* web_contents_tester =
343 content::WebContentsTester::For(web_contents()); 366 content::WebContentsTester::For(web_contents());
344 367
345 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); 368 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl));
346 content::RenderFrameHostTester* rfh_tester = 369 content::RenderFrameHostTester* rfh_tester =
347 content::RenderFrameHostTester::For(main_rfh()); 370 content::RenderFrameHostTester::For(main_rfh());
348 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), 371 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl),
349 net::ERR_TIMED_OUT); 372 net::ERR_TIMED_OUT);
350 rfh_tester->SimulateNavigationStop(); 373 rfh_tester->SimulateNavigationStop();
351 374
352 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); 375 CheckProvisionalEvent(PROVISIONAL_LOAD_FAILED_NON_ABORT, 1);
353 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 376 CheckProvisionalEvent(PROVISIONAL_LOAD_ABORTED, 0);
354 PAGE_LOAD_STARTED, 1); 377 CheckTotalEvents();
355 histogram_tester_.ExpectBucketCount(kHistogramNameEvents,
356 PAGE_LOAD_FAILED_BEFORE_COMMIT, 1);
357 histogram_tester_.ExpectBucketCount(kHistogramNameEvents,
358 PAGE_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1);
359 histogram_tester_.ExpectBucketCount(kHistogramNameEvents,
360 PAGE_LOAD_ABORTED_BEFORE_COMMIT, 0);
361 } 378 }
362 379
363 TEST_F(MetricsWebContentsObserverTest, AbortProvisionalLoad) { 380 TEST_F(MetricsWebContentsObserverTest, AbortProvisionalLoad) {
364 content::WebContentsTester* web_contents_tester = 381 content::WebContentsTester* web_contents_tester =
365 content::WebContentsTester::For(web_contents()); 382 content::WebContentsTester::For(web_contents());
366 383
367 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); 384 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl));
368 content::RenderFrameHostTester* rfh_tester = 385 content::RenderFrameHostTester* rfh_tester =
369 content::RenderFrameHostTester::For(main_rfh()); 386 content::RenderFrameHostTester::For(main_rfh());
370 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), net::ERR_ABORTED); 387 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), net::ERR_ABORTED);
371 rfh_tester->SimulateNavigationStop(); 388 rfh_tester->SimulateNavigationStop();
372 389
373 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 4); 390 CheckProvisionalEvent(PROVISIONAL_LOAD_FAILED_NON_ABORT, 0);
374 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 391 CheckProvisionalEvent(PROVISIONAL_LOAD_ABORTED, 1);
375 PAGE_LOAD_STARTED, 1); 392 CheckTotalEvents();
376 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 393 }
377 PAGE_LOAD_FAILED_BEFORE_COMMIT, 1); 394
378 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 395 TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) {
379 PAGE_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1); 396 PageLoadTiming timing;
380 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 397 timing.navigation_start = base::Time::FromDoubleT(10);
381 PAGE_LOAD_ABORTED_BEFORE_COMMIT, 1); 398
399 content::WebContentsTester* web_contents_tester =
400 content::WebContentsTester::For(web_contents());
401
402 GURL about_blank_url = GURL("about:blank");
403 web_contents_tester->NavigateAndCommit(about_blank_url);
404
405 observer_->OnMessageReceived(
406 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
407 main_rfh());
408
409 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
410
411 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2);
412 CheckCommittedEvent(COMMITTED_LOAD_STARTED_IN_FOREGROUND, 1);
413 CheckTotalEvents();
382 } 414 }
383 415
384 TEST_F(MetricsWebContentsObserverTest, AbortCommittedLoadBeforeFirstLayout) { 416 TEST_F(MetricsWebContentsObserverTest, AbortCommittedLoadBeforeFirstLayout) {
385 PageLoadTiming timing; 417 PageLoadTiming timing;
386 timing.navigation_start = base::Time::FromDoubleT(10); 418 timing.navigation_start = base::Time::FromDoubleT(10);
387 419
388 content::WebContentsTester* web_contents_tester = 420 content::WebContentsTester* web_contents_tester =
389 content::WebContentsTester::For(web_contents()); 421 content::WebContentsTester::For(web_contents());
390 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); 422 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
391 423
392 observer_->OnMessageReceived( 424 observer_->OnMessageReceived(
393 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), 425 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
394 main_rfh()); 426 main_rfh());
395 // Navigate again to force histogram logging. 427 // Navigate again to force histogram logging.
396 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); 428 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
397 429
398 // 3 events: 2 starts and one abort before first layout. 430 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2);
399 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); 431 CheckCommittedEvent(COMMITTED_LOAD_STARTED_IN_FOREGROUND, 2);
400 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 432 CheckCommittedEvent(COMMITTED_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1);
401 PAGE_LOAD_STARTED, 2); 433 CheckTotalEvents();
402 histogram_tester_.ExpectBucketCount(
403 kHistogramNameEvents, PAGE_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1);
404 } 434 }
405 435
406 TEST_F(MetricsWebContentsObserverTest, 436 TEST_F(MetricsWebContentsObserverTest, SuccessfulFirstLayoutInForegroundEvent) {
407 SuccessfulFirstLayoutInForeGroundEvent) {
408 PageLoadTiming timing; 437 PageLoadTiming timing;
409 timing.navigation_start = base::Time::FromDoubleT(10); 438 timing.navigation_start = base::Time::FromDoubleT(10);
410 timing.first_layout = base::TimeDelta::FromMilliseconds(100); 439 timing.first_layout = base::TimeDelta::FromMilliseconds(100);
411 440
412 content::WebContentsTester* web_contents_tester = 441 content::WebContentsTester* web_contents_tester =
413 content::WebContentsTester::For(web_contents()); 442 content::WebContentsTester::For(web_contents());
414 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); 443 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
415 444
416 observer_->OnMessageReceived( 445 observer_->OnMessageReceived(
417 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), 446 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
418 main_rfh()); 447 main_rfh());
419 // Navigate again to force histogram logging. 448 // Navigate again to force histogram logging.
420 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); 449 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
421 450
422 // 3 events: 2 starts and one successful first layout. 451 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2);
423 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); 452 CheckCommittedEvent(COMMITTED_LOAD_STARTED_IN_FOREGROUND, 2);
424 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 453 CheckCommittedEvent(COMMITTED_LOAD_SUCCESSFUL_FIRST_LAYOUT_FOREGROUND, 1);
425 PAGE_LOAD_STARTED, 2); 454 CheckTotalEvents();
426 histogram_tester_.ExpectBucketCount(
427 kHistogramNameEvents, PAGE_LOAD_SUCCESSFUL_FIRST_LAYOUT_FOREGROUND, 1);
428 } 455 }
429 456
430 TEST_F(MetricsWebContentsObserverTest, 457 TEST_F(MetricsWebContentsObserverTest,
431 SuccessfulFirstLayoutInBackgroundEvent) { 458 SuccessfulFirstLayoutInBackgroundEvent) {
432 PageLoadTiming timing; 459 PageLoadTiming timing;
433 timing.navigation_start = base::Time::FromDoubleT( 460 timing.navigation_start = base::Time::FromDoubleT(
434 (base::TimeTicks::Now() - base::TimeTicks::UnixEpoch()).InSecondsF() - 1); 461 (base::TimeTicks::Now() - base::TimeTicks::UnixEpoch()).InSecondsF() - 1);
435 462
436 timing.first_layout = base::TimeDelta::FromSeconds(30); 463 timing.first_layout = base::TimeDelta::FromSeconds(30);
437 464
438 content::WebContentsTester* web_contents_tester = 465 content::WebContentsTester* web_contents_tester =
439 content::WebContentsTester::For(web_contents()); 466 content::WebContentsTester::For(web_contents());
440 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); 467 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
441 // Background the tab. 468 // Background the tab.
442 observer_->WasHidden(); 469 observer_->WasHidden();
443 470
444 observer_->OnMessageReceived( 471 observer_->OnMessageReceived(
445 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), 472 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
446 main_rfh()); 473 main_rfh());
447 474
448 observer_->WasShown(); 475 observer_->WasShown();
449 // Navigate again to force histogram logging. 476 // Navigate again to force histogram logging.
450 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); 477 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
451 478
452 // 3 events: 2 starts and one successful first layout. 479 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2);
453 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); 480 CheckCommittedEvent(COMMITTED_LOAD_STARTED_IN_FOREGROUND, 2);
454 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 481 CheckCommittedEvent(COMMITTED_LOAD_SUCCESSFUL_FIRST_LAYOUT_BACKGROUND, 1);
455 PAGE_LOAD_STARTED, 2); 482 CheckTotalEvents();
456 histogram_tester_.ExpectBucketCount(
457 kHistogramNameEvents, PAGE_LOAD_SUCCESSFUL_FIRST_LAYOUT_BACKGROUND, 1);
458 } 483 }
484
485 TEST_F(MetricsWebContentsObserverTest, BadIPC) {
486 PageLoadTiming timing;
487 timing.navigation_start = base::Time::FromDoubleT(10);
488 PageLoadTiming timing2;
489 timing2.navigation_start = base::Time::FromDoubleT(100);
490
491 content::WebContentsTester* web_contents_tester =
492 content::WebContentsTester::For(web_contents());
493 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
494
495 observer_->OnMessageReceived(
496 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
497 main_rfh());
498 observer_->OnMessageReceived(
499 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing2),
500 main_rfh());
501
502 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1);
503 CheckCommittedEvent(COMMITTED_LOAD_STARTED_IN_FOREGROUND, 1);
504 CheckCommittedEvent(COMMITTED_LOAD_BAD_IPC, 1);
505 CheckTotalEvents();
506 }
507
459 } // namespace page_load_metrics 508 } // namespace page_load_metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698