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

Unified Diff: chrome/browser/page_load_metrics/metrics_web_contents_observer.cc

Issue 2847513002: Break page load metrics test dependency on IPC. (Closed)
Patch Set: add expectation in wait method Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/page_load_metrics/metrics_web_contents_observer.cc
diff --git a/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc b/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc
index 3e41fa893e06c3249e92a862b19183e438b6c8f6..d0ebb744b1bff85ca72602b211ce730251175737 100644
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc
+++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc
@@ -64,7 +64,6 @@ UserInitiatedInfo CreateUserInitiatedInfo(
} // namespace
-// static
MetricsWebContentsObserver::MetricsWebContentsObserver(
content::WebContents* web_contents,
std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface)
@@ -75,6 +74,7 @@ MetricsWebContentsObserver::MetricsWebContentsObserver(
RegisterInputEventObserver(web_contents->GetRenderViewHost());
}
+// static
MetricsWebContentsObserver* MetricsWebContentsObserver::CreateForWebContents(
content::WebContents* web_contents,
std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface) {
@@ -92,6 +92,9 @@ MetricsWebContentsObserver* MetricsWebContentsObserver::CreateForWebContents(
MetricsWebContentsObserver::~MetricsWebContentsObserver() {
// TODO(csharrison): Use a more user-initiated signal for CLOSE.
NotifyPageEndAllLoads(END_CLOSE, UserInitiatedInfo::NotUserInitiated());
+
+ for (auto& observer : testing_observers_)
+ observer.OnGoingAway();
}
void MetricsWebContentsObserver::RegisterInputEventObserver(
@@ -579,6 +582,9 @@ void MetricsWebContentsObserver::OnTimingUpdated(
}
committed_load_->UpdateTiming(timing, metadata);
+
+ for (auto& observer : testing_observers_)
+ observer.OnTimingUpdated(timing, metadata);
}
bool MetricsWebContentsObserver::ShouldTrackNavigation(
@@ -591,4 +597,32 @@ bool MetricsWebContentsObserver::ShouldTrackNavigation(
navigation_handle).ShouldTrack();
}
+void MetricsWebContentsObserver::AddTestingObserver(TestingObserver* observer) {
+ if (!testing_observers_.HasObserver(observer))
+ testing_observers_.AddObserver(observer);
+}
+
+void MetricsWebContentsObserver::RemoveTestingObserver(
+ TestingObserver* observer) {
+ testing_observers_.RemoveObserver(observer);
+}
+
+MetricsWebContentsObserver::TestingObserver::TestingObserver(
+ content::WebContents* web_contents)
+ : observer_(page_load_metrics::MetricsWebContentsObserver::FromWebContents(
+ web_contents)) {
+ observer_->AddTestingObserver(this);
+}
+
+MetricsWebContentsObserver::TestingObserver::~TestingObserver() {
+ if (observer_) {
+ observer_->RemoveTestingObserver(this);
+ observer_ = nullptr;
+ }
+}
+
+void MetricsWebContentsObserver::TestingObserver::OnGoingAway() {
+ observer_ = nullptr;
+}
+
} // namespace page_load_metrics

Powered by Google App Engine
This is Rietveld 408576698