Index: chrome/browser/android/data_usage/external_data_use_observer.cc |
diff --git a/chrome/browser/android/data_usage/external_data_use_observer.cc b/chrome/browser/android/data_usage/external_data_use_observer.cc |
index 2146b7e1fd0d19c155245a4f8d1288a37a38b6de..d019adcba88d93e1ec1142e01b42507a021cde4a 100644 |
--- a/chrome/browser/android/data_usage/external_data_use_observer.cc |
+++ b/chrome/browser/android/data_usage/external_data_use_observer.cc |
@@ -146,6 +146,11 @@ ExternalDataUseObserver::ExternalDataUseObserver( |
data_use_report_min_bytes_(GetMinBytes()), |
data_report_submit_timeout_( |
base::TimeDelta::FromMilliseconds(GetDataReportSubmitTimeoutMsec())), |
+#if defined(OS_ANDROID) |
+ app_state_listener_(new base::android::ApplicationStatusListener( |
+ base::Bind(&ExternalDataUseObserver::OnApplicationStateChange, |
+ base::Unretained(this)))), |
+#endif |
registered_as_data_use_observer_(false), |
weak_factory_(this) { |
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
@@ -204,9 +209,18 @@ void ExternalDataUseObserver::OnReportDataUseDone(bool success) { |
last_data_report_submitted_ticks_ = base::TimeTicks(); |
pending_report_bytes_ = 0; |
- SubmitBufferedDataUseReport(); |
+ SubmitBufferedDataUseReport(false); |
} |
+#if defined(OS_ANDROID) |
+void ExternalDataUseObserver::OnApplicationStateChange( |
+ base::android::ApplicationState new_state) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ if (new_state == base::android::APPLICATION_STATE_HAS_PAUSED_ACTIVITIES) |
+ SubmitBufferedDataUseReport(true); |
+} |
+#endif |
+ |
void ExternalDataUseObserver::OnDataUse(const data_usage::DataUse& data_use) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK(registered_as_data_use_observer_); |
@@ -270,7 +284,7 @@ void ExternalDataUseObserver::DataUseLabelApplied( |
return; |
BufferDataUseReport(data_use, *label, start_time, end_time); |
- SubmitBufferedDataUseReport(); |
+ SubmitBufferedDataUseReport(false); |
} |
void ExternalDataUseObserver::BufferDataUseReport( |
@@ -320,7 +334,7 @@ void ExternalDataUseObserver::BufferDataUseReport( |
DCHECK_LE(buffered_data_reports_.size(), kMaxBufferSize); |
} |
-void ExternalDataUseObserver::SubmitBufferedDataUseReport() { |
+void ExternalDataUseObserver::SubmitBufferedDataUseReport(bool immediate) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
const base::TimeTicks ticks_now = base::TimeTicks::Now(); |
@@ -336,7 +350,7 @@ void ExternalDataUseObserver::SubmitBufferedDataUseReport() { |
if (buffered_data_reports_.empty()) |
return; |
- if (total_bytes_buffered_ < data_use_report_min_bytes_) |
+ if (!immediate && total_bytes_buffered_ < data_use_report_min_bytes_) |
return; |
if (!last_data_report_submitted_ticks_.is_null()) { |