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 */); |
+ } |
+ } |
+ }); |
} |
/** |