OLD | NEW |
---|---|
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 14 matching lines...) Expand all Loading... | |
25 const char kHistogramNameFirstLayout[] = | 25 const char kHistogramNameFirstLayout[] = |
26 "PageLoad.Timing2.NavigationToFirstLayout"; | 26 "PageLoad.Timing2.NavigationToFirstLayout"; |
27 const char kHistogramNameFirstTextPaint[] = | 27 const char kHistogramNameFirstTextPaint[] = |
28 "PageLoad.Timing2.NavigationToFirstTextPaint"; | 28 "PageLoad.Timing2.NavigationToFirstTextPaint"; |
29 const char kHistogramNameDomContent[] = | 29 const char kHistogramNameDomContent[] = |
30 "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"; | 30 "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"; |
31 const char kHistogramNameLoad[] = | 31 const char kHistogramNameLoad[] = |
32 "PageLoad.Timing2.NavigationToLoadEventFired"; | 32 "PageLoad.Timing2.NavigationToLoadEventFired"; |
33 | 33 |
34 const char kBGHistogramNameFirstLayout[] = | 34 const char kBGHistogramNameFirstLayout[] = |
35 "PageLoad.Timing2.NavigationToFirstLayout.BG"; | 35 "PageLoad.Timing2.NavigationToFirstLayout.Background"; |
36 const char kBGHistogramNameFirstTextPaint[] = | 36 const char kBGHistogramNameFirstTextPaint[] = |
37 "PageLoad.Timing2.NavigationToFirstTextPaint.BG"; | 37 "PageLoad.Timing2.NavigationToFirstTextPaint.Background"; |
38 const char kBGHistogramNameDomContent[] = | 38 const char kBGHistogramNameDomContent[] = |
39 "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired.BG"; | 39 "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired.Background"; |
40 const char kBGHistogramNameLoad[] = | 40 const char kBGHistogramNameLoad[] = |
41 "PageLoad.Timing2.NavigationToLoadEventFired.BG"; | 41 "PageLoad.Timing2.NavigationToLoadEventFired.Background"; |
42 | 42 |
43 const char kHistogramNameEvents[] = "PageLoad.EventCounts"; | 43 const char kProvisionalEvents[] = "PageLoad.Events.Provisional"; |
44 const char kCommittedEvents[] = "PageLoad.Events.Committed"; | |
45 const char kBGProvisionalEvents[] = "PageLoad.Events.Provisional.Background"; | |
46 const char kBGCommittedEvents[] = "PageLoad.Events.Committed.Background"; | |
47 | |
48 const char kErrorEvents[] = "PageLoad.Events.InternalError"; | |
44 | 49 |
45 } // namespace | 50 } // namespace |
46 | 51 |
47 class MetricsWebContentsObserverTest | 52 class MetricsWebContentsObserverTest |
48 : public content::RenderViewHostTestHarness { | 53 : public content::RenderViewHostTestHarness { |
49 public: | 54 public: |
50 MetricsWebContentsObserverTest() {} | 55 MetricsWebContentsObserverTest() {} |
51 | 56 |
52 void SetUp() override { | 57 void SetUp() override { |
53 RenderViewHostTestHarness::SetUp(); | 58 RenderViewHostTestHarness::SetUp(); |
54 observer_ = make_scoped_ptr(new MetricsWebContentsObserver(web_contents())); | 59 observer_ = make_scoped_ptr(new MetricsWebContentsObserver(web_contents())); |
55 observer_->WasShown(); | 60 observer_->WasShown(); |
61 num_provisional_events_ = 0; | |
62 num_committed_events_ = 0; | |
63 num_provisional_events_bg_ = 0; | |
64 num_committed_events_bg_ = 0; | |
65 num_errors_ = 0; | |
Alexei Svitkine (slow)
2015/10/16 16:48:54
Nit: Init these in the ctor instead.
The ctor wil
Charlie Harrison
2015/10/16 17:29:55
Great! Done.
| |
56 } | 66 } |
57 | 67 |
58 void AssertNoHistogramsLogged() { | 68 void AssertNoHistogramsLogged() { |
59 histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 0); | 69 histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 0); |
60 histogram_tester_.ExpectTotalCount(kHistogramNameLoad, 0); | 70 histogram_tester_.ExpectTotalCount(kHistogramNameLoad, 0); |
61 histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 0); | 71 histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 0); |
62 histogram_tester_.ExpectTotalCount(kHistogramNameFirstTextPaint, 0); | 72 histogram_tester_.ExpectTotalCount(kHistogramNameFirstTextPaint, 0); |
63 } | 73 } |
64 | 74 |
75 void CheckProvisionalEvent(ProvisionalLoadEvent event, | |
76 int count, | |
77 bool background) { | |
78 if (background) { | |
79 histogram_tester_.ExpectBucketCount(kBGProvisionalEvents, event, count); | |
80 num_provisional_events_bg_ += count; | |
81 } else { | |
82 histogram_tester_.ExpectBucketCount(kProvisionalEvents, event, count); | |
83 num_provisional_events_ += count; | |
84 } | |
85 } | |
86 | |
87 void CheckCommittedEvent(CommittedLoadEvent event, | |
88 int count, | |
89 bool background) { | |
90 if (background) { | |
91 histogram_tester_.ExpectBucketCount(kBGCommittedEvents, event, count); | |
92 num_committed_events_bg_ += count; | |
93 } else { | |
94 histogram_tester_.ExpectBucketCount(kCommittedEvents, event, count); | |
95 num_committed_events_ += count; | |
96 } | |
97 } | |
98 | |
99 void CheckErrorEvent(InternalErrorLoadEvent error, int count) { | |
100 histogram_tester_.ExpectBucketCount(kErrorEvents, error, count); | |
101 num_errors_ += count; | |
102 } | |
103 | |
104 void CheckTotalEvents() { | |
105 histogram_tester_.ExpectTotalCount(kProvisionalEvents, | |
106 num_provisional_events_); | |
107 histogram_tester_.ExpectTotalCount(kCommittedEvents, num_committed_events_); | |
108 histogram_tester_.ExpectTotalCount(kBGProvisionalEvents, | |
109 num_provisional_events_bg_); | |
110 histogram_tester_.ExpectTotalCount(kBGCommittedEvents, | |
111 num_committed_events_bg_); | |
112 histogram_tester_.ExpectTotalCount(kErrorEvents, num_errors_); | |
113 } | |
114 | |
65 protected: | 115 protected: |
66 base::HistogramTester histogram_tester_; | 116 base::HistogramTester histogram_tester_; |
67 scoped_ptr<MetricsWebContentsObserver> observer_; | 117 scoped_ptr<MetricsWebContentsObserver> observer_; |
118 | |
119 private: | |
120 int num_provisional_events_; | |
121 int num_provisional_events_bg_; | |
122 int num_committed_events_; | |
123 int num_committed_events_bg_; | |
124 int num_errors_; | |
125 | |
126 DISALLOW_COPY_AND_ASSIGN(MetricsWebContentsObserverTest); | |
68 }; | 127 }; |
69 | 128 |
70 TEST_F(MetricsWebContentsObserverTest, NoMetrics) { | 129 TEST_F(MetricsWebContentsObserverTest, NoMetrics) { |
71 AssertNoHistogramsLogged(); | 130 AssertNoHistogramsLogged(); |
72 } | 131 } |
73 | 132 |
74 TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) { | 133 TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) { |
75 base::TimeDelta first_layout = base::TimeDelta::FromMilliseconds(1); | 134 base::TimeDelta first_layout = base::TimeDelta::FromMilliseconds(1); |
76 | 135 |
77 PageLoadTiming timing; | 136 PageLoadTiming timing; |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
364 content::WebContentsTester* web_contents_tester = | 423 content::WebContentsTester* web_contents_tester = |
365 content::WebContentsTester::For(web_contents()); | 424 content::WebContentsTester::For(web_contents()); |
366 | 425 |
367 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); | 426 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); |
368 content::RenderFrameHostTester* rfh_tester = | 427 content::RenderFrameHostTester* rfh_tester = |
369 content::RenderFrameHostTester::For(main_rfh()); | 428 content::RenderFrameHostTester::For(main_rfh()); |
370 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), | 429 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), |
371 net::ERR_TIMED_OUT); | 430 net::ERR_TIMED_OUT); |
372 rfh_tester->SimulateNavigationStop(); | 431 rfh_tester->SimulateNavigationStop(); |
373 | 432 |
374 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); | 433 CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_FAILED_NON_ABORT, 1, false); |
375 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 434 CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_ABORTED, 0, false); |
376 PAGE_LOAD_STARTED, 1); | 435 CheckTotalEvents(); |
377 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | |
378 PAGE_LOAD_FAILED_BEFORE_COMMIT, 1); | |
379 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | |
380 PAGE_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1); | |
381 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | |
382 PAGE_LOAD_ABORTED_BEFORE_COMMIT, 0); | |
383 } | 436 } |
384 | 437 |
385 TEST_F(MetricsWebContentsObserverTest, AbortProvisionalLoad) { | 438 TEST_F(MetricsWebContentsObserverTest, AbortProvisionalLoad) { |
386 content::WebContentsTester* web_contents_tester = | 439 content::WebContentsTester* web_contents_tester = |
387 content::WebContentsTester::For(web_contents()); | 440 content::WebContentsTester::For(web_contents()); |
388 | 441 |
389 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); | 442 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); |
390 content::RenderFrameHostTester* rfh_tester = | 443 content::RenderFrameHostTester* rfh_tester = |
391 content::RenderFrameHostTester::For(main_rfh()); | 444 content::RenderFrameHostTester::For(main_rfh()); |
392 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), net::ERR_ABORTED); | 445 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), net::ERR_ABORTED); |
393 rfh_tester->SimulateNavigationStop(); | 446 rfh_tester->SimulateNavigationStop(); |
394 | 447 |
395 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 4); | 448 CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_FAILED_NON_ABORT, 0, false); |
396 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 449 CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_ABORTED, 1, false); |
397 PAGE_LOAD_STARTED, 1); | 450 CheckTotalEvents(); |
398 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 451 } |
399 PAGE_LOAD_FAILED_BEFORE_COMMIT, 1); | 452 |
400 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 453 TEST_F(MetricsWebContentsObserverTest, AbortProvisionalLoadInBackground) { |
401 PAGE_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1); | 454 content::WebContentsTester* web_contents_tester = |
402 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 455 content::WebContentsTester::For(web_contents()); |
403 PAGE_LOAD_ABORTED_BEFORE_COMMIT, 1); | 456 |
457 observer_->WasHidden(); | |
458 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); | |
459 content::RenderFrameHostTester* rfh_tester = | |
460 content::RenderFrameHostTester::For(main_rfh()); | |
461 rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), net::ERR_ABORTED); | |
462 rfh_tester->SimulateNavigationStop(); | |
463 | |
464 CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_FAILED_NON_ABORT, 0, true); | |
465 CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_ABORTED, 1, true); | |
466 CheckTotalEvents(); | |
467 } | |
468 | |
469 TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) { | |
470 PageLoadTiming timing; | |
471 timing.navigation_start = base::Time::FromDoubleT(10); | |
472 | |
473 content::WebContentsTester* web_contents_tester = | |
474 content::WebContentsTester::For(web_contents()); | |
475 | |
476 GURL about_blank_url = GURL("about:blank"); | |
477 web_contents_tester->NavigateAndCommit(about_blank_url); | |
478 | |
479 observer_->OnMessageReceived( | |
480 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | |
481 main_rfh()); | |
482 | |
483 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | |
484 | |
485 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2, false); | |
486 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 1, false); | |
487 CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 1); | |
488 CheckErrorEvent(ERR_IPC_WITH_NO_COMMITTED_LOAD, 1); | |
489 CheckTotalEvents(); | |
490 } | |
491 | |
492 TEST_F(MetricsWebContentsObserverTest, NotInMainError) { | |
493 PageLoadTiming timing; | |
494 timing.navigation_start = base::Time::FromDoubleT(1); | |
495 timing.first_layout = base::TimeDelta::FromMilliseconds(1); | |
496 | |
497 content::WebContentsTester* web_contents_tester = | |
498 content::WebContentsTester::For(web_contents()); | |
499 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | |
500 | |
501 content::RenderFrameHostTester* rfh_tester = | |
502 content::RenderFrameHostTester::For(main_rfh()); | |
503 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe"); | |
504 | |
505 content::RenderFrameHostTester* subframe_tester = | |
506 content::RenderFrameHostTester::For(subframe); | |
507 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2)); | |
508 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); | |
509 observer_->OnMessageReceived( | |
510 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | |
511 subframe); | |
512 CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1); | |
404 } | 513 } |
405 | 514 |
406 TEST_F(MetricsWebContentsObserverTest, AbortCommittedLoadBeforeFirstLayout) { | 515 TEST_F(MetricsWebContentsObserverTest, AbortCommittedLoadBeforeFirstLayout) { |
407 PageLoadTiming timing; | 516 PageLoadTiming timing; |
408 timing.navigation_start = base::Time::FromDoubleT(10); | 517 timing.navigation_start = base::Time::FromDoubleT(10); |
409 | 518 |
410 content::WebContentsTester* web_contents_tester = | 519 content::WebContentsTester* web_contents_tester = |
411 content::WebContentsTester::For(web_contents()); | 520 content::WebContentsTester::For(web_contents()); |
412 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 521 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
413 | 522 |
414 observer_->OnMessageReceived( | 523 observer_->OnMessageReceived( |
415 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 524 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
416 main_rfh()); | 525 main_rfh()); |
417 // Navigate again to force histogram logging. | 526 // Navigate again to force histogram logging. |
418 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 527 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
419 | 528 |
420 // 3 events: 2 starts and one abort before first layout. | 529 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2, false); |
421 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); | 530 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 2, false); |
422 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 531 CheckCommittedEvent(COMMITTED_LOAD_FAILED_BEFORE_FIRST_LAYOUT, 1, false); |
423 PAGE_LOAD_STARTED, 2); | 532 CheckTotalEvents(); |
424 histogram_tester_.ExpectBucketCount( | |
425 kHistogramNameEvents, PAGE_LOAD_ABORTED_BEFORE_FIRST_LAYOUT, 1); | |
426 } | 533 } |
427 | 534 |
428 TEST_F(MetricsWebContentsObserverTest, | 535 TEST_F(MetricsWebContentsObserverTest, SuccessfulFirstLayoutInForegroundEvent) { |
429 SuccessfulFirstLayoutInForeGroundEvent) { | |
430 PageLoadTiming timing; | 536 PageLoadTiming timing; |
431 timing.navigation_start = base::Time::FromDoubleT(10); | 537 timing.navigation_start = base::Time::FromDoubleT(10); |
432 timing.first_layout = base::TimeDelta::FromMilliseconds(100); | 538 timing.first_layout = base::TimeDelta::FromMilliseconds(100); |
433 | 539 |
434 content::WebContentsTester* web_contents_tester = | 540 content::WebContentsTester* web_contents_tester = |
435 content::WebContentsTester::For(web_contents()); | 541 content::WebContentsTester::For(web_contents()); |
436 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 542 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
437 | 543 |
438 observer_->OnMessageReceived( | 544 observer_->OnMessageReceived( |
439 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 545 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
440 main_rfh()); | 546 main_rfh()); |
441 // Navigate again to force histogram logging. | 547 // Navigate again to force histogram logging. |
442 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 548 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
443 | 549 |
444 // 3 events: 2 starts and one successful first layout. | 550 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2, false); |
445 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); | 551 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 2, false); |
446 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 552 CheckCommittedEvent(COMMITTED_LOAD_SUCCESSFUL_FIRST_LAYOUT, 1, false); |
447 PAGE_LOAD_STARTED, 2); | 553 CheckTotalEvents(); |
448 histogram_tester_.ExpectBucketCount( | |
449 kHistogramNameEvents, PAGE_LOAD_SUCCESSFUL_FIRST_LAYOUT_FOREGROUND, 1); | |
450 } | 554 } |
451 | 555 |
452 TEST_F(MetricsWebContentsObserverTest, | 556 TEST_F(MetricsWebContentsObserverTest, |
453 SuccessfulFirstLayoutInBackgroundEvent) { | 557 SuccessfulFirstLayoutInBackgroundEvent) { |
454 PageLoadTiming timing; | 558 PageLoadTiming timing; |
455 timing.navigation_start = base::Time::FromDoubleT( | 559 timing.navigation_start = base::Time::FromDoubleT( |
456 (base::TimeTicks::Now() - base::TimeTicks::UnixEpoch()).InSecondsF() - 1); | 560 (base::TimeTicks::Now() - base::TimeTicks::UnixEpoch()).InSecondsF() - 1); |
457 | 561 |
458 timing.first_layout = base::TimeDelta::FromSeconds(30); | 562 timing.first_layout = base::TimeDelta::FromSeconds(30); |
459 | 563 |
460 content::WebContentsTester* web_contents_tester = | 564 content::WebContentsTester* web_contents_tester = |
461 content::WebContentsTester::For(web_contents()); | 565 content::WebContentsTester::For(web_contents()); |
462 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | |
463 // Background the tab. | 566 // Background the tab. |
464 observer_->WasHidden(); | 567 observer_->WasHidden(); |
568 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | |
465 | 569 |
466 observer_->OnMessageReceived( | 570 observer_->OnMessageReceived( |
467 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | 571 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), |
468 main_rfh()); | 572 main_rfh()); |
469 | 573 |
470 observer_->WasShown(); | 574 observer_->WasShown(); |
471 // Navigate again to force histogram logging. | 575 // Navigate again to force histogram logging. |
472 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 576 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
473 | 577 |
474 // 3 events: 2 starts and one successful first layout. | 578 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1, true); |
475 histogram_tester_.ExpectTotalCount(kHistogramNameEvents, 3); | 579 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1, false); |
476 histogram_tester_.ExpectBucketCount(kHistogramNameEvents, | 580 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 1, true); |
477 PAGE_LOAD_STARTED, 2); | 581 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 1, false); |
478 histogram_tester_.ExpectBucketCount( | 582 CheckCommittedEvent(COMMITTED_LOAD_SUCCESSFUL_FIRST_LAYOUT, 1, true); |
479 kHistogramNameEvents, PAGE_LOAD_SUCCESSFUL_FIRST_LAYOUT_BACKGROUND, 1); | 583 CheckTotalEvents(); |
480 } | 584 } |
585 | |
586 TEST_F(MetricsWebContentsObserverTest, BadIPC) { | |
587 PageLoadTiming timing; | |
588 timing.navigation_start = base::Time::FromDoubleT(10); | |
589 PageLoadTiming timing2; | |
590 timing2.navigation_start = base::Time::FromDoubleT(100); | |
591 | |
592 content::WebContentsTester* web_contents_tester = | |
593 content::WebContentsTester::For(web_contents()); | |
594 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | |
595 | |
596 observer_->OnMessageReceived( | |
597 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), | |
598 main_rfh()); | |
599 observer_->OnMessageReceived( | |
600 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing2), | |
601 main_rfh()); | |
602 | |
603 CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1, false); | |
604 CheckCommittedEvent(COMMITTED_LOAD_STARTED, 1, false); | |
605 CheckErrorEvent(ERR_BAD_TIMING_IPC, 1); | |
606 CheckTotalEvents(); | |
607 } | |
608 | |
481 } // namespace page_load_metrics | 609 } // namespace page_load_metrics |
OLD | NEW |