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

Side by Side Diff: chrome/browser/page_load_metrics/metrics_web_contents_observer.cc

Issue 2847803002: Revert of Break page load metrics test dependency on IPC. (Closed)
Patch Set: Created 3 years, 7 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 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 "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" 5 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <ostream> 8 #include <ostream>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 57
58 return UserInitiatedInfo::RenderInitiated( 58 return UserInitiatedInfo::RenderInitiated(
59 navigation_handle->HasUserGesture(), 59 navigation_handle->HasUserGesture(),
60 committed_load && 60 committed_load &&
61 committed_load->input_tracker()->FindAndConsumeInputEventsBefore( 61 committed_load->input_tracker()->FindAndConsumeInputEventsBefore(
62 navigation_handle->NavigationStart())); 62 navigation_handle->NavigationStart()));
63 } 63 }
64 64
65 } // namespace 65 } // namespace
66 66
67 // static
67 MetricsWebContentsObserver::MetricsWebContentsObserver( 68 MetricsWebContentsObserver::MetricsWebContentsObserver(
68 content::WebContents* web_contents, 69 content::WebContents* web_contents,
69 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface) 70 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface)
70 : content::WebContentsObserver(web_contents), 71 : content::WebContentsObserver(web_contents),
71 in_foreground_(false), 72 in_foreground_(false),
72 embedder_interface_(std::move(embedder_interface)), 73 embedder_interface_(std::move(embedder_interface)),
73 has_navigated_(false) { 74 has_navigated_(false) {
74 RegisterInputEventObserver(web_contents->GetRenderViewHost()); 75 RegisterInputEventObserver(web_contents->GetRenderViewHost());
75 } 76 }
76 77
77 // static
78 MetricsWebContentsObserver* MetricsWebContentsObserver::CreateForWebContents( 78 MetricsWebContentsObserver* MetricsWebContentsObserver::CreateForWebContents(
79 content::WebContents* web_contents, 79 content::WebContents* web_contents,
80 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface) { 80 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface) {
81 DCHECK(web_contents); 81 DCHECK(web_contents);
82 82
83 MetricsWebContentsObserver* metrics = FromWebContents(web_contents); 83 MetricsWebContentsObserver* metrics = FromWebContents(web_contents);
84 if (!metrics) { 84 if (!metrics) {
85 metrics = new MetricsWebContentsObserver(web_contents, 85 metrics = new MetricsWebContentsObserver(web_contents,
86 std::move(embedder_interface)); 86 std::move(embedder_interface));
87 web_contents->SetUserData(UserDataKey(), metrics); 87 web_contents->SetUserData(UserDataKey(), metrics);
88 } 88 }
89 return metrics; 89 return metrics;
90 } 90 }
91 91
92 MetricsWebContentsObserver::~MetricsWebContentsObserver() { 92 MetricsWebContentsObserver::~MetricsWebContentsObserver() {
93 // TODO(csharrison): Use a more user-initiated signal for CLOSE. 93 // TODO(csharrison): Use a more user-initiated signal for CLOSE.
94 NotifyPageEndAllLoads(END_CLOSE, UserInitiatedInfo::NotUserInitiated()); 94 NotifyPageEndAllLoads(END_CLOSE, UserInitiatedInfo::NotUserInitiated());
95
96 for (auto& observer : testing_observers_)
97 observer.OnGoingAway();
98 } 95 }
99 96
100 void MetricsWebContentsObserver::RegisterInputEventObserver( 97 void MetricsWebContentsObserver::RegisterInputEventObserver(
101 content::RenderViewHost* host) { 98 content::RenderViewHost* host) {
102 if (host != nullptr) 99 if (host != nullptr)
103 host->GetWidget()->AddInputEventObserver(this); 100 host->GetWidget()->AddInputEventObserver(this);
104 } 101 }
105 102
106 void MetricsWebContentsObserver::UnregisterInputEventObserver( 103 void MetricsWebContentsObserver::UnregisterInputEventObserver(
107 content::RenderViewHost* host) { 104 content::RenderViewHost* host) {
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 if (render_frame_host->GetParent() != nullptr) { 572 if (render_frame_host->GetParent() != nullptr) {
576 // Child frames may send PageLoadMetadata updates, but not PageLoadTiming 573 // Child frames may send PageLoadMetadata updates, but not PageLoadTiming
577 // updates. 574 // updates.
578 if (!timing.IsEmpty()) 575 if (!timing.IsEmpty())
579 RecordInternalError(ERR_TIMING_IPC_FROM_SUBFRAME); 576 RecordInternalError(ERR_TIMING_IPC_FROM_SUBFRAME);
580 committed_load_->UpdateChildFrameMetadata(metadata); 577 committed_load_->UpdateChildFrameMetadata(metadata);
581 return; 578 return;
582 } 579 }
583 580
584 committed_load_->UpdateTiming(timing, metadata); 581 committed_load_->UpdateTiming(timing, metadata);
585
586 for (auto& observer : testing_observers_)
587 observer.OnTimingUpdated(timing, metadata);
588 } 582 }
589 583
590 bool MetricsWebContentsObserver::ShouldTrackNavigation( 584 bool MetricsWebContentsObserver::ShouldTrackNavigation(
591 content::NavigationHandle* navigation_handle) const { 585 content::NavigationHandle* navigation_handle) const {
592 DCHECK(navigation_handle->IsInMainFrame()); 586 DCHECK(navigation_handle->IsInMainFrame());
593 DCHECK(!navigation_handle->HasCommitted() || 587 DCHECK(!navigation_handle->HasCommitted() ||
594 !navigation_handle->IsSameDocument()); 588 !navigation_handle->IsSameDocument());
595 589
596 return BrowserPageTrackDecider(embedder_interface_.get(), web_contents(), 590 return BrowserPageTrackDecider(embedder_interface_.get(), web_contents(),
597 navigation_handle).ShouldTrack(); 591 navigation_handle).ShouldTrack();
598 } 592 }
599 593
600 void MetricsWebContentsObserver::AddTestingObserver(TestingObserver* observer) {
601 if (!testing_observers_.HasObserver(observer))
602 testing_observers_.AddObserver(observer);
603 }
604
605 void MetricsWebContentsObserver::RemoveTestingObserver(
606 TestingObserver* observer) {
607 testing_observers_.RemoveObserver(observer);
608 }
609
610 MetricsWebContentsObserver::TestingObserver::TestingObserver(
611 content::WebContents* web_contents)
612 : observer_(page_load_metrics::MetricsWebContentsObserver::FromWebContents(
613 web_contents)) {
614 observer_->AddTestingObserver(this);
615 }
616
617 MetricsWebContentsObserver::TestingObserver::~TestingObserver() {
618 if (observer_) {
619 observer_->RemoveTestingObserver(this);
620 observer_ = nullptr;
621 }
622 }
623
624 void MetricsWebContentsObserver::TestingObserver::OnGoingAway() {
625 observer_ = nullptr;
626 }
627
628 } // namespace page_load_metrics 594 } // namespace page_load_metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698