Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Unified Diff: android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java

Issue 2611883002: Prepare to call GMS APIs from WebView (Closed)
Patch Set: explicit destructor for style checker Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java
diff --git a/android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java b/android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java
index 09173a39b45da3a2d45903427ec6c20f4a294cf2..209c8a633ffae9ef20cd65dfdb81c3e4589d3b2e 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java
@@ -7,15 +7,25 @@ package org.chromium.android_webview;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
-import android.webkit.ValueCallback;
import org.chromium.base.Log;
+import org.chromium.base.ThreadUtils;
+import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
/**
- * Java twin of the homonymous C++ class. The Java side is only responsible for
- * switching metrics on and off. Since the setting is a platform feature, it
- * must be obtained through PlatformServiceBridge.
+ * Determines whether metrics should be enabled.
+ *
+ * This requires the following steps:
+ * 1) Check the platform's metrics consent setting.
+ * 2) Check if the app has opted out.
+ * 3) Wait for the native AwMetricsServiceClient to call nativeInitialized.
+ * 4) If enabled, inform the native AwMetricsServiceClient via nativeSetMetricsEnabled.
+ *
+ * Step 1 is done asynchronously and the result is passed to setConsentSetting, which does step 2.
+ * This happens in parallel with native AwMetricsServiceClient initialization; either
+ * nativeInitialized or setConsentSetting might fire first. Whichever fires second should call
+ * nativeSetMetricsEnabled.
*/
@JNINamespace("android_webview")
public class AwMetricsServiceClient {
@@ -25,10 +35,13 @@ public class AwMetricsServiceClient {
// reporting. See https://developer.android.com/reference/android/webkit/WebView.html
private static final String OPT_OUT_META_DATA_STR = "android.webkit.WebView.MetricsOptOut";
- private static boolean isAppOptedOut(Context applicationContext) {
+ private static boolean sIsClientReady; // Is the native AwMetricsServiceClient initialized?
+ private static boolean sShouldEnable; // Have steps 1 and 2 passed?
+
+ private static boolean isAppOptedOut(Context appContext) {
try {
- ApplicationInfo info = applicationContext.getPackageManager().getApplicationInfo(
- applicationContext.getPackageName(), PackageManager.GET_META_DATA);
+ ApplicationInfo info = appContext.getPackageManager().getApplicationInfo(
+ appContext.getPackageName(), PackageManager.GET_META_DATA);
if (info.metaData == null) {
// null means no such tag was found.
return false;
@@ -43,18 +56,27 @@ public class AwMetricsServiceClient {
}
}
- public AwMetricsServiceClient(Context applicationContext) {
- if (isAppOptedOut(applicationContext)) {
+ public static void setConsentSetting(Context appContext, boolean userConsent) {
+ ThreadUtils.assertOnUiThread();
+
+ if (!userConsent || isAppOptedOut(appContext)) {
+ // Metrics defaults to off, so no need to call nativeSetMetricsEnabled(false).
return;
}
- // Check if the user has consented.
- PlatformServiceBridge.getInstance(applicationContext)
- .setMetricsSettingListener(new ValueCallback<Boolean>() {
- public void onReceiveValue(Boolean enabled) {
- nativeSetMetricsEnabled(enabled);
- }
- });
+ sShouldEnable = true;
+ if (sIsClientReady) {
+ nativeSetMetricsEnabled(true);
+ }
+ }
+
+ @CalledByNative
+ public static void nativeInitialized() {
+ ThreadUtils.assertOnUiThread();
+ sIsClientReady = true;
+ if (sShouldEnable) {
+ nativeSetMetricsEnabled(true);
+ }
}
public static native void nativeSetMetricsEnabled(boolean enabled);

Powered by Google App Engine
This is Rietveld 408576698