diff options
author | paulmiller <paulmiller@chromium.org> | 2016-01-12 09:11:28 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-12 17:13:02 +0000 |
commit | ae2d4a588c7d8e3c4376d570f2eb1b4d4d0cf538 (patch) | |
tree | 632e7ddf8f8a12ef8771d634132671ac7460739b /android_webview | |
parent | b38b7f72dab00b34e432687f1aa7e4979e568b73 (diff) | |
download | chromium_src-ae2d4a588c7d8e3c4376d570f2eb1b4d4d0cf538.zip chromium_src-ae2d4a588c7d8e3c4376d570f2eb1b4d4d0cf538.tar.gz chromium_src-ae2d4a588c7d8e3c4376d570f2eb1b4d4d0cf538.tar.bz2 |
WebView Metrics opt out API
BUG=546823
Review URL: https://codereview.chromium.org/1562303004
Cr-Commit-Position: refs/heads/master@{#368903}
Diffstat (limited to 'android_webview')
-rw-r--r-- | android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java | 32 |
1 files changed, 32 insertions, 0 deletions
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 7775fb2..09173a3 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java +++ b/android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java @@ -5,8 +5,11 @@ 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.annotations.JNINamespace; /** @@ -16,7 +19,36 @@ import org.chromium.base.annotations.JNINamespace; */ @JNINamespace("android_webview") public class AwMetricsServiceClient { + private static final String TAG = "AwMetricsServiceCli-"; + + // Individual apps can use this meta-data tag in their manifest to opt out of metrics + // 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) { + try { + ApplicationInfo info = applicationContext.getPackageManager().getApplicationInfo( + applicationContext.getPackageName(), PackageManager.GET_META_DATA); + if (info.metaData == null) { + // null means no such tag was found. + return false; + } + // getBoolean returns false if the key is not found, which is what we want. + return info.metaData.getBoolean(OPT_OUT_META_DATA_STR); + } catch (PackageManager.NameNotFoundException e) { + // This should never happen. + Log.e(TAG, "App could not find itself by package name!"); + // The conservative thing is to assume the app HAS opted out. + return true; + } + } + public AwMetricsServiceClient(Context applicationContext) { + if (isAppOptedOut(applicationContext)) { + return; + } + + // Check if the user has consented. PlatformServiceBridge.getInstance(applicationContext) .setMetricsSettingListener(new ValueCallback<Boolean>() { public void onReceiveValue(Boolean enabled) { |