| Index: chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java
|
| index 7aaaff8b232e5d2bde0f2e777384bacd122d1203..93efec358a982997a198589d42005c9ae2f3ae0a 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java
|
| @@ -155,15 +155,37 @@ public class UmaSessionStats implements NetworkChangeNotifier.ConnectionTypeObse
|
| }
|
|
|
| /**
|
| - * Updates the state of the MetricsService to account for the user's preferences.
|
| + * Updates the metrics services based on a change of consent. This can happen during first-run
|
| + * flow, and when the user changes their preferences.
|
| */
|
| - public void updateMetricsServiceState() {
|
| - boolean mayRecordStats = !PrivacyPreferencesManager.getInstance()
|
| - .isNeverUploadCrashDump();
|
| - boolean mayUploadStats = mReportingPermissionManager.isUmaUploadPermitted();
|
| + public static void changeMetricsReportingConsent(boolean consent) {
|
| + PrivacyPreferencesManager privacyManager = PrivacyPreferencesManager.getInstance();
|
| + // Update the new two-choice Android preference.
|
| + privacyManager.setUsageAndCrashReporting(consent);
|
| + // Update the old three-choice Android preference, and synchronize with Chrome local state
|
| + // preferences. Note, this forces the three-choice preferences to be either never upload,
|
| + // or only upload on WiFi.
|
| + privacyManager.initCrashUploadPreference(consent);
|
| +
|
| + // Perform native changes needed to reflect the new consent value.
|
| + nativeChangeMetricsReportingConsent(consent);
|
|
|
| - // Re-start the MetricsService with the given parameters.
|
| - nativeUpdateMetricsServiceState(mayRecordStats, mayUploadStats);
|
| + updateMetricsServiceState();
|
| + }
|
| +
|
| + /**
|
| + * Updates the state of MetricsService to account for the user's preferences.
|
| + */
|
| + public static void updateMetricsServiceState() {
|
| + PrivacyPreferencesManager privacyManager = PrivacyPreferencesManager.getInstance();
|
| +
|
| + // Ensure Android and Chrome local state prefs are in sync.
|
| + privacyManager.syncUsageAndCrashReportingPrefs();
|
| +
|
| + boolean mayUploadStats = privacyManager.isUmaUploadPermitted();
|
| +
|
| + // Re-start the MetricsService with the given parameter, and current consent.
|
| + nativeUpdateMetricsServiceState(mayUploadStats);
|
| }
|
|
|
| /**
|
| @@ -194,6 +216,10 @@ public class UmaSessionStats implements NetworkChangeNotifier.ConnectionTypeObse
|
| prefManager.setUsageAndCrashReporting(prefBridge.isMetricsReportingEnabled());
|
| }
|
|
|
| + // Update the metrics sampling state so it's available before the native feature list is
|
| + // available.
|
| + prefManager.setClientInMetricsSample(UmaUtils.isClientInMetricsReportingSample());
|
| +
|
| // Make sure preferences are in sync.
|
| prefManager.syncUsageAndCrashReportingPrefs();
|
| }
|
| @@ -212,7 +238,8 @@ public class UmaSessionStats implements NetworkChangeNotifier.ConnectionTypeObse
|
| }
|
|
|
| private static native long nativeInit();
|
| - private native void nativeUpdateMetricsServiceState(boolean mayRecord, boolean mayUpload);
|
| + private static native void nativeChangeMetricsReportingConsent(boolean consent);
|
| + private static native void nativeUpdateMetricsServiceState(boolean mayUpload);
|
| private native void nativeUmaResumeSession(long nativeUmaSessionStats);
|
| private native void nativeUmaEndSession(long nativeUmaSessionStats);
|
| private static native void nativeLogRendererCrash();
|
|
|