| Index: chrome/browser/android/metrics/uma_session_stats.cc
|
| diff --git a/chrome/browser/android/metrics/uma_session_stats.cc b/chrome/browser/android/metrics/uma_session_stats.cc
|
| index e209d4fddba7e04dd1df6da2e6c62fa15ad0fb12..eddcb911b34e09c2e6de6b60262fc23c91528886 100644
|
| --- a/chrome/browser/android/metrics/uma_session_stats.cc
|
| +++ b/chrome/browser/android/metrics/uma_session_stats.cc
|
| @@ -93,34 +93,46 @@ void UmaSessionStats::RegisterSyntheticMultiGroupFieldTrial(
|
| trial_name, group_name_hashes);
|
| }
|
|
|
| -// Starts/stops the MetricsService when permissions have changed.
|
| +// Updates metrics reporting state managed by native code. This should only be
|
| +// called when consent is changing, and UpdateMetricsServiceState() should be
|
| +// called immediately after for metrics services to be started or stopped as
|
| +// needed. This is enforced by UmaSessionStats.changeMetricsReportingConsent on
|
| +// the Java side.
|
| +static void ChangeMetricsReportingConsent(JNIEnv*,
|
| + const JavaParamRef<jclass>&,
|
| + jboolean consent) {
|
| + UpdateMetricsPrefsOnPermissionChange(consent);
|
| +
|
| + // This function ensures a consent file in the data directory is either
|
| + // created, or deleted, depending on consent. Starting up metrics services
|
| + // will ensure that the consent file contains the ClientID. The ID is passed
|
| + // to the renderer for crash reporting when things go wrong.
|
| + content::BrowserThread::GetBlockingPool()->PostTask(
|
| + FROM_HERE, base::Bind(base::IgnoreResult(
|
| + GoogleUpdateSettings::SetCollectStatsConsent),
|
| + consent));
|
| +}
|
| +
|
| +// Starts/stops the MetricsService based on existing consent and upload
|
| +// preferences.
|
| // There are three possible states:
|
| // * Logs are being recorded and being uploaded to the server.
|
| // * Logs are being recorded, but not being uploaded to the server.
|
| // This happens when we've got permission to upload on Wi-Fi but we're on a
|
| // mobile connection (for example).
|
| // * Logs are neither being recorded or uploaded.
|
| -static void UpdateMetricsServiceState(JNIEnv* env,
|
| - const JavaParamRef<jobject>& obj,
|
| - jboolean may_record,
|
| +// If logs aren't being recorded, then |may_upload| is ignored.
|
| +//
|
| +// This can be called at any time when consent hasn't changed, such as
|
| +// connection type change, or start up. If consent has changed, then
|
| +// ChangeMetricsReportingConsent() should be called first.
|
| +static void UpdateMetricsServiceState(JNIEnv*,
|
| + const JavaParamRef<jclass>&,
|
| jboolean may_upload) {
|
| - metrics::MetricsService* metrics = g_browser_process->metrics_service();
|
| - DCHECK(metrics);
|
| -
|
| - if (metrics->recording_active() != may_record) {
|
| - UpdateMetricsPrefsOnPermissionChange(may_record);
|
| -
|
| - // This function puts a consent file with the ClientID in the
|
| - // data directory. The ID is passed to the renderer for crash
|
| - // reporting when things go wrong.
|
| - content::BrowserThread::GetBlockingPool()->PostTask(FROM_HERE,
|
| - base::Bind(
|
| - base::IgnoreResult(GoogleUpdateSettings::SetCollectStatsConsent),
|
| - may_record));
|
| - }
|
| -
|
| - g_browser_process->GetMetricsServicesManager()->UpdatePermissions(
|
| - may_record, may_upload);
|
| + // This will also apply the consent state, taken from Chrome Local State
|
| + // prefs.
|
| + g_browser_process->GetMetricsServicesManager()->UpdateUploadPermissions(
|
| + may_upload);
|
| }
|
|
|
| // Renderer process crashed in the foreground.
|
|
|