From a2496aebe453b1dc526b5c0120d00439b212a7fc Mon Sep 17 00:00:00 2001 From: Alex Mitra Date: Tue, 30 May 2023 19:11:46 +0000 Subject: [PATCH] Adds autofill provider package name logging for WebView This CL adds recognition for AwG, Samsung Pass and Last Pass. (cherry picked from commit f12697134501b091875606247495463f7d905ff9) Bug: 1448099 Low-Coverage-Reason: Only adding metrics Change-Id: Id4400999014acf452823054ba1dd111ce3eca470 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4556886 Reviewed-by: Weilun Shi Commit-Queue: Alex Mitra Reviewed-by: Colin Blundell Auto-Submit: Alex Mitra Reviewed-by: Peter Conn Cr-Original-Commit-Position: refs/heads/main@{#1148453} Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4567732 Cr-Commit-Position: refs/branch-heads/5790@{#140} Cr-Branched-From: 1d71a337b1f6e707a13ae074dca1e2c34905eb9f-refs/heads/main@{#1148114} --- .../autofill/AutofillManagerWrapper.java | 1 + .../autofill/AutofillProviderUMA.java | 38 +++++++++++++++++++ tools/metrics/histograms/enums.xml | 7 ++++ .../metadata/autofill/histograms.xml | 12 ++++++ 4 files changed, 58 insertions(+) diff --git a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillManagerWrapper.java b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillManagerWrapper.java index 39da77389aebc..88551ab677ff4 100644 --- a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillManagerWrapper.java +++ b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillManagerWrapper.java @@ -91,6 +91,7 @@ public AutofillManagerWrapper(Context context) { if (componentName != null) { mIsAwGCurrentAutofillService = AWG_COMPONENT_NAME.equals(componentName.flattenToString()); + AutofillProviderUMA.logCurrentProvider(componentName.getPackageName()); } else { mIsAwGCurrentAutofillService = false; } diff --git a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillProviderUMA.java b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillProviderUMA.java index a526cf3fd8318..1518413d9fe69 100644 --- a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillProviderUMA.java +++ b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillProviderUMA.java @@ -95,6 +95,22 @@ public class AutofillProviderUMA { private static final long MAX_TIME_MILLIS = TimeUnit.SECONDS.toMillis(2); private static final int NUM_OF_BUCKETS = 50; + // The package name of the autofill provider. + // To add a new provider, add a String for the provider's package name and an int equal to + // AUTOFILL_PROVIDER_MAX for the provider then increment AUTOFILL_PROVIDER_MAX. + // Make sure to update tools/metrics/histograms/enums.xml with the new entry. Lastly, add a case + // to the switch statement in logCurrentProvider for that provider. + private static final String UMA_AUTOFILL_PROVIDER = "Autofill.WebView.Provider.PackageName"; + private static final int AUTOFILL_PROVIDER_UNKNOWN = 0; + private static final String AWG_PACKAGE_NAME = "com.google.android.gms"; + private static final int AUTOFILL_PROVIDER_AWG = 1; + private static final String SAMSUNG_PASS_PACKAGE_NAME = + "com.samsung.android.samsungpassautofill"; + private static final int AUTOFILL_PROVIDER_SAMSUNG_PASS = 2; + private static final String LASTPASS_PACKAGE_NAME = "com.lastpass.lpandroid"; + private static final int AUTOFILL_PROVIDER_LAST_PASS = 3; + private static final int AUTOFILL_PROVIDER_MAX = 4; + private static void recordTimesHistogram(String name, long durationMillis) { RecordHistogram.recordCustomTimesHistogram( name, durationMillis, MIN_TIME_MILLIS, MAX_TIME_MILLIS, NUM_OF_BUCKETS); @@ -334,6 +350,28 @@ public void onServerTypeAvailable(FormData formData, boolean afterSessionStarted mRecorder.onServerTypeAvailable(formData, afterSessionStarted); } + static void logCurrentProvider(String packageName) { + switch (packageName) { + case AWG_PACKAGE_NAME: + recordUmaAutofillProvider(AUTOFILL_PROVIDER_AWG); + break; + case SAMSUNG_PASS_PACKAGE_NAME: + recordUmaAutofillProvider(AUTOFILL_PROVIDER_SAMSUNG_PASS); + break; + case LASTPASS_PACKAGE_NAME: + recordUmaAutofillProvider(AUTOFILL_PROVIDER_LAST_PASS); + break; + default: + recordUmaAutofillProvider(AUTOFILL_PROVIDER_UNKNOWN); + break; + } + } + + private static void recordUmaAutofillProvider(int autofillProvider) { + RecordHistogram.recordEnumeratedHistogram( + UMA_AUTOFILL_PROVIDER, autofillProvider, AUTOFILL_PROVIDER_MAX); + } + private void recordSession() { if (mAutofillDisabled != null && !mAutofillDisabled.booleanValue() && mRecorder != null) { mRecorder.recordHistogram(); diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 616baa11587c0..4e469f3f5468a 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml @@ -9495,6 +9495,13 @@ others/histograms.xml --> + + + + + + + diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml index df050ce0326bb..83672df916b66 100644 --- a/tools/metrics/histograms/metadata/autofill/histograms.xml +++ b/tools/metrics/histograms/metadata/autofill/histograms.xml @@ -5442,6 +5442,18 @@ chromium-metrics-reviews@google.com. + + alexmitra@chromium.org + src/android_webview/OWNERS + + Records the Autofill provider on the device if it matches a fixed list of + package names or unknown otherwise. This is recorded once for a given + AwContents. It is recorded on AutofillProvider initialization. Only recorded + in Android P and beyond. + + + battre@chromium.org