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