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 7b8f7b8f772cd59318134ae87e51277d26a645c6..0a1bf48d2475c23ef94aaf2c9fa5c120d7301306 100644 |
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc |
+++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc |
@@ -473,6 +473,16 @@ void PageLoadTracker::FlushMetricsOnAppEnterBackground() { |
RecordAppBackgroundPageLoadCompleted(false); |
app_entered_background_ = true; |
} |
+ |
+ const PageLoadExtraInfo info = ComputePageLoadExtraInfo(); |
+ for (auto it = observers_.begin(); it != observers_.end();) { |
+ if ((*it)->FlushMetricsOnAppEnterBackground(timing_, info) == |
+ PageLoadMetricsObserver::STOP_OBSERVING) { |
+ it = observers_.erase(it); |
+ } else { |
+ ++it; |
+ } |
+ } |
} |
void PageLoadTracker::NotifyClientRedirectTo( |
@@ -915,6 +925,11 @@ void MetricsWebContentsObserver::OnInputEvent( |
} |
void MetricsWebContentsObserver::FlushMetricsOnAppEnterBackground() { |
+ // Signal to observers that we've been backgrounded, in cases where the |
+ // FlushMetricsOnAppEnterBackground callback gets invoked before the |
+ // associated WasHidden callback. |
+ WasHidden(); |
+ |
if (committed_load_) |
committed_load_->FlushMetricsOnAppEnterBackground(); |
for (const auto& kv : provisional_loads_) { |