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

Unified Diff: android_webview/java/src/org/chromium/android_webview/crash/MinidumpUploaderImpl.java

Issue 2628863004: [Android WebView] Ensure we have user consent before uploading minidumps (Closed)
Patch Set: 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/crash/MinidumpUploaderImpl.java
diff --git a/android_webview/java/src/org/chromium/android_webview/crash/MinidumpUploaderImpl.java b/android_webview/java/src/org/chromium/android_webview/crash/MinidumpUploaderImpl.java
index 7d9ed3265dec59ad2410771dddd33bc2d5b091fc..1f6961f10c5b245acd2a1dacac3adfdc963125e7 100644
--- a/android_webview/java/src/org/chromium/android_webview/crash/MinidumpUploaderImpl.java
+++ b/android_webview/java/src/org/chromium/android_webview/crash/MinidumpUploaderImpl.java
@@ -5,7 +5,9 @@
package org.chromium.android_webview.crash;
import android.content.Context;
+import android.webkit.ValueCallback;
+import org.chromium.android_webview.UserConsentInterface;
import org.chromium.base.Log;
import org.chromium.base.VisibleForTesting;
import org.chromium.components.minidump_uploader.CrashFileManager;
@@ -32,6 +34,8 @@ public class MinidumpUploaderImpl implements MinidumpUploader {
private final boolean mCleanOutMinidumps;
+ private final UserConsentInterface mUserConsentInterface;
+
@VisibleForTesting
public static final int MAX_UPLOAD_TRIES_ALLOWED = 3;
@@ -55,13 +59,15 @@ public class MinidumpUploaderImpl implements MinidumpUploader {
}
@VisibleForTesting
- public MinidumpUploaderImpl(Context context, boolean cleanOutMinidumps) {
+ public MinidumpUploaderImpl(
+ Context context, boolean cleanOutMinidumps, UserConsentInterface userConsentInterface) {
File webviewCrashDir = CrashReceiverService.createWebViewCrashDir(context);
mFileManager = new CrashFileManager(webviewCrashDir);
if (!mFileManager.ensureCrashDirExists()) {
Log.e(TAG, "Crash directory doesn't exist!");
}
mCleanOutMinidumps = cleanOutMinidumps;
+ mUserConsentInterface = userConsentInterface;
}
/**
@@ -105,9 +111,9 @@ public class MinidumpUploaderImpl implements MinidumpUploader {
}
@Override
public boolean isUsageAndCrashReportingPermittedByUser() {
- // TODO(gsennton): make this depend on Android Checkbox when we can read that
- // through GmsCore.
- return false;
+ // We ensure we have user permission before starting to upload minidumps - so always
+ // return true here.
+ return true;
}
@Override
public boolean isUploadEnabledForTests() {
@@ -165,13 +171,37 @@ public class MinidumpUploaderImpl implements MinidumpUploader {
@Override
public void uploadAllMinidumps(
- MinidumpUploader.UploadsFinishedCallback uploadsFinishedCallback) {
+ final MinidumpUploader.UploadsFinishedCallback uploadsFinishedCallback) {
if (mWorkerThread != null) {
throw new RuntimeException("Only one upload-job should be active at a time");
}
- mWorkerThread = new Thread(new UploadRunnable(uploadsFinishedCallback), "mWorkerThread");
setCancelUpload(false);
- mWorkerThread.start();
+
+ // Abort if we cannot get the user-consent value.
+ if (!mUserConsentInterface.userConsentInterfaceAvailable()) {
+ uploadsFinishedCallback.uploadsFinished(false /* reschedule */);
+ return;
+ }
+
+ mUserConsentInterface.userConsents(new ValueCallback<Boolean>() {
+ @Override
+ public void onReceiveValue(Boolean enabled) {
+ // TODO if (mWorkerThread != null) return; ?
+ // This callback is posted to the UI thread when we know whether the U&D flag is
+ // toggled on or off. We need to check that the flag is on and that our job hasn't
+ // been cancelled already.
+ if (getCancelUpload()) {
+ return;
+ }
+ if (enabled) {
gsennton 2017/01/13 19:01:55 TODO also read enabledForTesting flag and have it
gsennton 2017/01/23 17:50:40 Done (in CrashReceiverService).
+ mWorkerThread = new Thread(
+ new UploadRunnable(uploadsFinishedCallback), "mWorkerThread");
+ mWorkerThread.start();
+ } else {
+ uploadsFinishedCallback.uploadsFinished(false /* reschedule */);
+ }
+ }
+ });
}
/**

Powered by Google App Engine
This is Rietveld 408576698