Index: android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java |
diff --git a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java |
index 64b7c6fc210b41fafd6bb68e92d2d23e182bbe30..756f10225f1505254de9d4be00de4863a93545ee 100644 |
--- a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java |
+++ b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java |
@@ -13,7 +13,9 @@ import android.os.IBinder; |
import android.os.ParcelFileDescriptor; |
import android.os.RemoteException; |
import android.os.StrictMode; |
+import android.webkit.ValueCallback; |
+import org.chromium.android_webview.command_line.CommandLineUtil; |
import org.chromium.android_webview.crash.CrashReceiverService; |
import org.chromium.android_webview.crash.ICrashReceiverService; |
import org.chromium.android_webview.policy.AwPolicyProvider; |
@@ -22,6 +24,8 @@ import org.chromium.base.ContextUtils; |
import org.chromium.base.Log; |
import org.chromium.base.PathUtils; |
import org.chromium.base.ThreadUtils; |
+import org.chromium.base.annotations.CalledByNative; |
+import org.chromium.base.annotations.JNINamespace; |
import org.chromium.base.library_loader.LibraryLoader; |
import org.chromium.base.library_loader.LibraryProcessType; |
import org.chromium.base.library_loader.ProcessInitException; |
@@ -40,6 +44,7 @@ import java.nio.channels.FileLock; |
/** |
* Wrapper for the steps needed to initialize the java and native sides of webview chromium. |
*/ |
+@JNINamespace("android_webview") |
public abstract class AwBrowserProcess { |
public static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "webview"; |
@@ -47,6 +52,7 @@ public abstract class AwBrowserProcess { |
private static final String EXCLUSIVE_LOCK_FILE = "webview_data.lock"; |
private static RandomAccessFile sLockFile; |
private static FileLock sExclusiveFileLock; |
+ private static String sWebViewPackageName; |
private static final int MAX_MINIDUMP_UPLOAD_TRIES = 3; |
@@ -149,6 +155,49 @@ public abstract class AwBrowserProcess { |
} |
} |
+ public static void setWebViewPackageName(String webViewPackageName) { |
+ assert sWebViewPackageName == null || sWebViewPackageName.equals(webViewPackageName); |
+ sWebViewPackageName = webViewPackageName; |
+ } |
+ |
+ /** |
+ * Trigger minidump copying, which in turn triggers minidump uploading. |
+ */ |
+ @CalledByNative |
+ private static void triggerMinidumpUploading() { |
+ handleMinidumpsAndSetMetricsConsent(sWebViewPackageName, false /* updateMetricsConsent */); |
+ } |
+ |
+ /** |
+ * Trigger minidump uploading, and optionaly also update the metrics-consent value depending on |
+ * whether the Android Checkbox is toggled on. |
+ * @param updateMetricsConsent whether to update the metrics-consent value to represent the |
+ * Android Checkbox toggle. |
+ */ |
+ public static void handleMinidumpsAndSetMetricsConsent( |
+ final String webViewPackageName, final boolean updateMetricsConsent) { |
+ final boolean enableMinidumpUploadingForTesting = CommandLine.getInstance().hasSwitch( |
+ CommandLineUtil.CRASH_UPLOADS_ENABLED_FOR_TESTING_SWITCH); |
+ if (enableMinidumpUploadingForTesting) { |
+ AwBrowserProcess.handleMinidumps(webViewPackageName, true /* enabled */); |
+ } |
+ |
+ PlatformServiceBridge.getInstance().queryMetricsSetting(new ValueCallback<Boolean>() { |
+ // Actions conditioned on whether the Android Checkbox is toggled on |
+ public void onReceiveValue(Boolean enabled) { |
+ ThreadUtils.assertOnUiThread(); |
+ if (updateMetricsConsent) { |
+ AwMetricsServiceClient.setConsentSetting( |
+ ContextUtils.getApplicationContext(), enabled); |
+ } |
+ |
+ if (!enableMinidumpUploadingForTesting) { |
+ AwBrowserProcess.handleMinidumps(webViewPackageName, enabled); |
+ } |
+ } |
+ }); |
+ } |
+ |
/** |
* Pass Minidumps to a separate Service declared in the WebView provider package. |
* That Service will copy the Minidumps to its own data directory - at which point we can delete |
@@ -234,6 +283,9 @@ public abstract class AwBrowserProcess { |
} |
return null; |
} |
- }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); |
+ // To avoid any potential synchronization issues we post all minidump-copying actions to |
+ // the same thread to be run serially. |
+ } |
+ .executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); |
} |
} |