Commit 3fb32d18 authored by Tao Bai's avatar Tao Bai Committed by Commit Bot

Add app package name in WebView UMA

This patch is straightforward, but it is hard to write test.
We land this patch first, and check the result in dashboard.

This feature is behind flag, disabled by default.

Bug: 839646
Change-Id: Id81843640f28416da440eb3d44f0933121bc67a3
Reviewed-on: https://chromium-review.googlesource.com/c/1306514
Commit-Queue: Tao Bai <michaelbai@chromium.org>
Reviewed-by: default avatarAlexei Svitkine <asvitkine@chromium.org>
Reviewed-by: default avatarPaul Miller <paulmiller@chromium.org>
Reviewed-by: default avatarChangwan Ryu <changwan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605088}
parent d374d79e
...@@ -47,6 +47,10 @@ namespace features { ...@@ -47,6 +47,10 @@ namespace features {
const base::Feature kWebViewConnectionlessSafeBrowsing{ const base::Feature kWebViewConnectionlessSafeBrowsing{
"WebViewConnectionlessSafeBrowsing", base::FEATURE_DISABLED_BY_DEFAULT}; "WebViewConnectionlessSafeBrowsing", base::FEATURE_DISABLED_BY_DEFAULT};
// Whether the application package name is logged in UMA.
const base::Feature kWebViewUmaLogAppPackageName{
"WebViewUmaLogAppPackageName", base::FEATURE_DISABLED_BY_DEFAULT};
} // namespace features } // namespace features
static jboolean JNI_AwFeatureList_IsEnabled( static jboolean JNI_AwFeatureList_IsEnabled(
......
...@@ -15,6 +15,7 @@ namespace features { ...@@ -15,6 +15,7 @@ namespace features {
// Alphabetical: // Alphabetical:
extern const base::Feature kWebViewConnectionlessSafeBrowsing; extern const base::Feature kWebViewConnectionlessSafeBrowsing;
extern const base::Feature kWebViewUmaLogAppPackageName;
} // namespace features } // namespace features
} // namespace android_webview } // namespace android_webview
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <stdint.h> #include <stdint.h>
#include <vector> #include <vector>
#include "android_webview/browser/aw_feature_list.h"
#include "android_webview/browser/aw_metrics_log_uploader.h" #include "android_webview/browser/aw_metrics_log_uploader.h"
#include "android_webview/common/aw_switches.h" #include "android_webview/common/aw_switches.h"
#include "android_webview/jni/AwMetricsServiceClient_jni.h" #include "android_webview/jni/AwMetricsServiceClient_jni.h"
...@@ -268,6 +269,16 @@ base::TimeDelta AwMetricsServiceClient::GetStandardUploadInterval() { ...@@ -268,6 +269,16 @@ base::TimeDelta AwMetricsServiceClient::GetStandardUploadInterval() {
return base::TimeDelta::FromMinutes(kUploadIntervalMinutes); return base::TimeDelta::FromMinutes(kUploadIntervalMinutes);
} }
std::string AwMetricsServiceClient::GetAppPackageName() {
if (!base::FeatureList::IsEnabled(features::kWebViewUmaLogAppPackageName))
return std::string();
JNIEnv* env = base::android::AttachCurrentThread();
base::android::ScopedJavaLocalRef<jstring> j_app_name =
Java_AwMetricsServiceClient_getAppPackageName(env);
return ConvertJavaStringToUTF8(env, j_app_name);
}
AwMetricsServiceClient::AwMetricsServiceClient() AwMetricsServiceClient::AwMetricsServiceClient()
: pref_service_(nullptr), : pref_service_(nullptr),
consent_(false), consent_(false),
......
...@@ -78,6 +78,7 @@ class AwMetricsServiceClient : public metrics::MetricsServiceClient, ...@@ -78,6 +78,7 @@ class AwMetricsServiceClient : public metrics::MetricsServiceClient,
const metrics::MetricsLogUploader::UploadCallback& on_upload_complete) const metrics::MetricsLogUploader::UploadCallback& on_upload_complete)
override; override;
base::TimeDelta GetStandardUploadInterval() override; base::TimeDelta GetStandardUploadInterval() override;
std::string GetAppPackageName() override;
private: private:
AwMetricsServiceClient(); AwMetricsServiceClient();
......
...@@ -8,6 +8,7 @@ import android.content.Context; ...@@ -8,6 +8,7 @@ import android.content.Context;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import org.chromium.base.ContextUtils;
import org.chromium.base.Log; import org.chromium.base.Log;
import org.chromium.base.ThreadUtils; import org.chromium.base.ThreadUtils;
import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.CalledByNative;
...@@ -84,5 +85,10 @@ public class AwMetricsServiceClient { ...@@ -84,5 +85,10 @@ public class AwMetricsServiceClient {
} }
} }
@CalledByNative
private static String getAppPackageName() {
return ContextUtils.getApplicationContext().getPackageName();
}
public static native void nativeSetHaveMetricsConsent(boolean enabled); public static native void nativeSetHaveMetricsConsent(boolean enabled);
} }
...@@ -130,8 +130,8 @@ class MetricsServiceClient { ...@@ -130,8 +130,8 @@ class MetricsServiceClient {
// Returns whether UKM notification listeners were attached to all profiles. // Returns whether UKM notification listeners were attached to all profiles.
virtual bool AreNotificationListenersEnabledOnAllProfiles(); virtual bool AreNotificationListenersEnabledOnAllProfiles();
// Gets the Chrome package name for Android. Returns empty string for other // Gets Chrome's package name in Android Chrome, or the host app's package
// platforms. // name in Android WebView, or an empty string on other platforms.
virtual std::string GetAppPackageName(); virtual std::string GetAppPackageName();
// Sets the callback to run MetricsServiceManager::UpdateRunningServices. // Sets the callback to run MetricsServiceManager::UpdateRunningServices.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment