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 4f1635151f42b52ef3e52a75ff967db51a72ba94..2e12c4122994467c3b722d5738c0a5ae59607820 100644 |
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc |
+++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc |
@@ -53,6 +53,8 @@ const char kClientRedirectWithoutPaint[] = |
"PageLoad.Internal.ClientRedirect.NavigationWithoutPaint"; |
const char kCommitToCompleteNoTimingIPCs[] = |
"PageLoad.Internal.CommitToComplete.NoTimingIPCs"; |
+const char kPageLoadCompletedAfterAppBackground[] = |
+ "PageLoad.Internal.PageLoadCompleted.AfterAppBackground"; |
} // namespace internal |
@@ -187,6 +189,11 @@ void RecordInternalError(InternalErrorLoadEvent event) { |
UMA_HISTOGRAM_ENUMERATION(internal::kErrorEvents, event, ERR_LAST_ENTRY); |
} |
+void RecordAppBackgroundPageLoadCompleted(bool completed_after_background) { |
+ UMA_HISTOGRAM_BOOLEAN(internal::kPageLoadCompletedAfterAppBackground, |
+ completed_after_background); |
+} |
+ |
UserAbortType AbortTypeForPageTransition(ui::PageTransition transition) { |
if (ui::PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_RELOAD)) |
return ABORT_RELOAD; |
@@ -247,6 +254,7 @@ PageLoadTracker::PageLoadTracker( |
int aborted_chain_size, |
int aborted_chain_size_same_url) |
: did_stop_tracking_(false), |
+ app_entered_background_(false), |
navigation_start_(navigation_handle->NavigationStart()), |
url_(navigation_handle->GetURL()), |
abort_type_(ABORT_NONE), |
@@ -263,6 +271,10 @@ PageLoadTracker::PageLoadTracker( |
} |
PageLoadTracker::~PageLoadTracker() { |
+ if (app_entered_background_) { |
+ RecordAppBackgroundPageLoadCompleted(true); |
+ } |
+ |
if (did_stop_tracking_) |
return; |
@@ -398,6 +410,13 @@ void PageLoadTracker::OnInputEvent(const blink::WebInputEvent& event) { |
} |
} |
+void PageLoadTracker::FlushMetricsOnAppEnterBackground() { |
+ if (!app_entered_background_) { |
+ RecordAppBackgroundPageLoadCompleted(false); |
+ app_entered_background_ = true; |
+ } |
+} |
+ |
void PageLoadTracker::NotifyClientRedirectTo( |
const PageLoadTracker& destination) { |
if (timing_.first_paint) { |
@@ -805,6 +824,17 @@ void MetricsWebContentsObserver::OnInputEvent( |
committed_load_->OnInputEvent(event); |
} |
+void MetricsWebContentsObserver::FlushMetricsOnAppEnterBackground() { |
+ if (committed_load_) |
+ committed_load_->FlushMetricsOnAppEnterBackground(); |
+ for (const auto& kv : provisional_loads_) { |
+ kv.second->FlushMetricsOnAppEnterBackground(); |
+ } |
+ for (const auto& tracker : aborted_provisional_loads_) { |
+ tracker->FlushMetricsOnAppEnterBackground(); |
+ } |
+} |
+ |
void MetricsWebContentsObserver::DidRedirectNavigation( |
content::NavigationHandle* navigation_handle) { |
if (!navigation_handle->IsInMainFrame()) |