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

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: More events + bg/fg metrics 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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 42
43 class MetricsWebContentsObserverTest 43 class MetricsWebContentsObserverTest
44 : public content::RenderViewHostTestHarness { 44 : public content::RenderViewHostTestHarness {
45 public: 45 public:
46 MetricsWebContentsObserverTest() {} 46 MetricsWebContentsObserverTest() {}
47 47
48 void SetUp() override { 48 void SetUp() override {
49 RenderViewHostTestHarness::SetUp(); 49 RenderViewHostTestHarness::SetUp();
50 observer_ = make_scoped_ptr(new MetricsWebContentsObserver(web_contents())); 50 observer_ = make_scoped_ptr(new MetricsWebContentsObserver(web_contents()));
51 observer_->WasShown(); 51 observer_->WasShown();
52 num_events_ = 0;
52 } 53 }
53 54
54 void AssertNoHistogramsLogged() { 55 void AssertNoHistogramsLogged() {
55 histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 0); 56 histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 0);
56 histogram_tester_.ExpectTotalCount(kHistogramNameLoad, 0); 57 histogram_tester_.ExpectTotalCount(kHistogramNameLoad, 0);
57 histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 0); 58 histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 0);
58 } 59 }
59 60
61 void CheckEvent(PageLoadEvent event, int count) {
62 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, event, count);
63 num_events_ = num_events_ + count;
64 }
65
66 void CheckTotalEvents() {
67 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, num_events_);
68 }
69
60 protected: 70 protected:
61 base::HistogramTester histogram_tester_; 71 base::HistogramTester histogram_tester_;
62 scoped_ptr<MetricsWebContentsObserver> observer_; 72 scoped_ptr<MetricsWebContentsObserver> observer_;
73
74 private:
75 int num_events_;
63 }; 76 };
64 77
65 TEST_F(MetricsWebContentsObserverTest, NoMetrics) { 78 TEST_F(MetricsWebContentsObserverTest, NoMetrics) {
66 AssertNoHistogramsLogged(); 79 AssertNoHistogramsLogged();
67 } 80 }
68 81
69 TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) { 82 TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) {
70 base::TimeDelta first_layout = base::TimeDelta::FromMilliseconds(1); 83 base::TimeDelta first_layout = base::TimeDelta::FromMilliseconds(1);
71 84
72 PageLoadTiming timing; 85 PageLoadTiming timing;
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 content::WebContentsTester* web_contents_tester = 355 content::WebContentsTester* web_contents_tester =
343 content::WebContentsTester::For(web_contents()); 356 content::WebContentsTester::For(web_contents());
344 357
345 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); 358 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl));
346 content::RenderFrameHostTester* rfh_tester = 359 content::RenderFrameHostTester* rfh_tester =
347 content::RenderFrameHostTester::For(main_rfh()); 360 content::RenderFrameHostTester::For(main_rfh());
348 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), 361 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl),
349 net::ERR_TIMED_OUT); 362 net::ERR_TIMED_OUT);
350 rfh_tester->SimulateNavigationStop(); 363 rfh_tester->SimulateNavigationStop();
351 364
352 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); 365 CheckEvent(PAGE_LOAD_STARTED, 1);
353 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 366 CheckEvent(PAGE_LOAD_FAILED_BEFORE_COMMIT, 1);
354 PAGE_LOAD_STARTED, 1); 367 CheckEvent(PAGE_LOAD_ABORTED_BEFORE_COMMIT, 0);
355 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 368 CheckTotalEvents();
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 } 369 }
362 370
363 TEST_F(MetricsWebContentsObserverTest, AbortProvisionalLoad) { 371 TEST_F(MetricsWebContentsObserverTest, AbortProvisionalLoad) {
364 content::WebContentsTester* web_contents_tester = 372 content::WebContentsTester* web_contents_tester =
365 content::WebContentsTester::For(web_contents()); 373 content::WebContentsTester::For(web_contents());
366 374
367 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); 375 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl));
368 content::RenderFrameHostTester* rfh_tester = 376 content::RenderFrameHostTester* rfh_tester =
369 content::RenderFrameHostTester::For(main_rfh()); 377 content::RenderFrameHostTester::For(main_rfh());
370 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), net::ERR_ABORTED); 378 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), net::ERR_ABORTED);
371 rfh_tester->SimulateNavigationStop(); 379 rfh_tester->SimulateNavigationStop();
372 380
373 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 4); 381 CheckEvent(PAGE_LOAD_STARTED, 1);
374 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 382 CheckEvent(PAGE_LOAD_FAILED_BEFORE_COMMIT, 1);
375 PAGE_LOAD_STARTED, 1); 383 CheckEvent(PAGE_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1);
376 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 384 CheckEvent(PAGE_LOAD_ABORTED_BEFORE_COMMIT, 1);
377 PAGE_LOAD_FAILED_BEFORE_COMMIT, 1); 385 CheckTotalEvents();
378 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 386 }
379 PAGE_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1); 387
380 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 388 TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) {
381 PAGE_LOAD_ABORTED_BEFORE_COMMIT, 1); 389 PageLoadTiming timing;
390 timing.navigation_start = base::Time::FromDoubleT(10);
391
392 content::WebContentsTester* web_contents_tester =
393 content::WebContentsTester::For(web_contents());
394
395 GURL about_blank_url = GURL("about:blank");
396 web_contents_tester->NavigateAndCommit(about_blank_url);
397
398 observer_->OnMessageReceived(
399 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
400 main_rfh());
401
402 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
403
404 CheckEvent(PAGE_LOAD_STARTED, 2);
405 CheckEvent(PAGE_LOAD_RELEVANT_STARTED_IN_FOREGROUND, 1);
406 CheckTotalEvents();
382 } 407 }
383 408
384 TEST_F(MetricsWebContentsObserverTest, AbortCommittedLoadBeforeFirstLayout) { 409 TEST_F(MetricsWebContentsObserverTest, AbortCommittedLoadBeforeFirstLayout) {
385 PageLoadTiming timing; 410 PageLoadTiming timing;
386 timing.navigation_start = base::Time::FromDoubleT(10); 411 timing.navigation_start = base::Time::FromDoubleT(10);
387 412
388 content::WebContentsTester* web_contents_tester = 413 content::WebContentsTester* web_contents_tester =
389 content::WebContentsTester::For(web_contents()); 414 content::WebContentsTester::For(web_contents());
390 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); 415 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
391 416
392 observer_->OnMessageReceived( 417 observer_->OnMessageReceived(
393 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), 418 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
394 main_rfh()); 419 main_rfh());
395 // Navigate again to force histogram logging. 420 // Navigate again to force histogram logging.
396 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); 421 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
397 422
398 // 3 events: 2 starts and one abort before first layout. 423
399 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); 424 CheckEvent(PAGE_LOAD_STARTED, 2);
400 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 425 CheckEvent(PAGE_LOAD_RELEVANT_STARTED_IN_FOREGROUND, 2);
401 PAGE_LOAD_STARTED, 2); 426 CheckEvent(PAGE_LOAD_RELEVANT_ABORTED_BEFORE_FIRST_LAYOUT, 1);
402 histogram_tester_.ExpectBucketCount( 427 CheckEvent(PAGE_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1);
403 kHistogramNameEvents, PAGE_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1); 428 CheckTotalEvents();
404 } 429 }
405 430
406 TEST_F(MetricsWebContentsObserverTest, 431 TEST_F(MetricsWebContentsObserverTest,
407 SuccessfulFirstLayoutInForeGroundEvent) { 432 SuccessfulFirstLayoutInForegroundEvent) {
408 PageLoadTiming timing; 433 PageLoadTiming timing;
409 timing.navigation_start = base::Time::FromDoubleT(10); 434 timing.navigation_start = base::Time::FromDoubleT(10);
410 timing.first_layout = base::TimeDelta::FromMilliseconds(100); 435 timing.first_layout = base::TimeDelta::FromMilliseconds(100);
411 436
412 content::WebContentsTester* web_contents_tester = 437 content::WebContentsTester* web_contents_tester =
413 content::WebContentsTester::For(web_contents()); 438 content::WebContentsTester::For(web_contents());
414 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); 439 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
415 440
416 observer_->OnMessageReceived( 441 observer_->OnMessageReceived(
417 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), 442 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
418 main_rfh()); 443 main_rfh());
419 // Navigate again to force histogram logging. 444 // Navigate again to force histogram logging.
420 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); 445 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
421 446
422 // 3 events: 2 starts and one successful first layout. 447 CheckEvent(PAGE_LOAD_STARTED, 2);
423 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); 448 CheckEvent(PAGE_LOAD_SUCCESSFUL_FIRST_LAYOUT_FOREGROUND, 1);
424 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 449 CheckEvent(PAGE_LOAD_RELEVANT_STARTED_IN_FOREGROUND, 2);
425 PAGE_LOAD_STARTED, 2); 450 CheckTotalEvents();
426 histogram_tester_.ExpectBucketCount(
427 kHistogramNameEvents, PAGE_LOAD_SUCCESSFUL_FIRST_LAYOUT_FOREGROUND, 1);
428 } 451 }
429 452
430 TEST_F(MetricsWebContentsObserverTest, 453 TEST_F(MetricsWebContentsObserverTest,
431 SuccessfulFirstLayoutInBackgroundEvent) { 454 SuccessfulFirstLayoutInBackgroundEvent) {
432 PageLoadTiming timing; 455 PageLoadTiming timing;
433 timing.navigation_start = base::Time::FromDoubleT( 456 timing.navigation_start = base::Time::FromDoubleT(
434 (base::TimeTicks::Now() - base::TimeTicks::UnixEpoch()).InSecondsF() - 1); 457 (base::TimeTicks::Now() - base::TimeTicks::UnixEpoch()).InSecondsF() - 1);
435 458
436 timing.first_layout = base::TimeDelta::FromSeconds(30); 459 timing.first_layout = base::TimeDelta::FromSeconds(30);
437 460
438 content::WebContentsTester* web_contents_tester = 461 content::WebContentsTester* web_contents_tester =
439 content::WebContentsTester::For(web_contents()); 462 content::WebContentsTester::For(web_contents());
440 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); 463 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
441 // Background the tab. 464 // Background the tab.
442 observer_->WasHidden(); 465 observer_->WasHidden();
443 466
444 observer_->OnMessageReceived( 467 observer_->OnMessageReceived(
445 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), 468 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
446 main_rfh()); 469 main_rfh());
447 470
448 observer_->WasShown(); 471 observer_->WasShown();
449 // Navigate again to force histogram logging. 472 // Navigate again to force histogram logging.
450 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); 473 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
451 474
452 // 3 events: 2 starts and one successful first layout. 475 CheckEvent(PAGE_LOAD_STARTED, 2);
453 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); 476 CheckEvent(PAGE_LOAD_SUCCESSFUL_FIRST_LAYOUT_BACKGROUND, 1);
454 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, 477 CheckEvent(PAGE_LOAD_RELEVANT_STARTED_IN_FOREGROUND, 2);
455 PAGE_LOAD_STARTED, 2); 478 CheckTotalEvents();
456 histogram_tester_.ExpectBucketCount(
457 kHistogramNameEvents, PAGE_LOAD_SUCCESSFUL_FIRST_LAYOUT_BACKGROUND, 1);
458 } 479 }
480
481 TEST_F(MetricsWebContentsObserverTest, BadIPC) {
482 PageLoadTiming timing;
483 timing.navigation_start = base::Time::FromDoubleT(10);
484 PageLoadTiming timing2;
485 timing2.navigation_start = base::Time::FromDoubleT(100);
486
487 content::WebContentsTester* web_contents_tester =
488 content::WebContentsTester::For(web_contents());
489 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
490
491 observer_->OnMessageReceived(
492 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing),
493 main_rfh());
494 observer_->OnMessageReceived(
495 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing2),
496 main_rfh());
497
498 CheckEvent(PAGE_LOAD_STARTED, 1);
499 CheckEvent(PAGE_LOAD_BAD_IPC, 1);
500 CheckEvent(PAGE_LOAD_RELEVANT_STARTED_IN_FOREGROUND, 1);
501 CheckTotalEvents();
502 }
503
459 } // namespace page_load_metrics 504 } // namespace page_load_metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698