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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadService.java

Issue 2737263006: [Android Crash Reporting] Allow uploading minidumps via the JobScheduler (Closed)
Patch Set: Fully implemented, still needs tests Created 3 years, 9 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: chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadService.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadService.java b/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadService.java
index 148b8a6097a18854e69ec18e84ee524609ea4d42..7c89a18a94a39f5b068c94ebeae4d36b9ccf81e0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadService.java
@@ -4,9 +4,13 @@
package org.chromium.chrome.browser.crash;
+import android.annotation.SuppressLint;
import android.app.IntentService;
+import android.app.job.JobInfo;
import android.content.Context;
import android.content.Intent;
+import android.os.Build;
+import android.os.PersistableBundle;
import android.support.annotation.StringDef;
import org.chromium.base.Log;
@@ -14,10 +18,12 @@ import org.chromium.base.StreamUtil;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.metrics.RecordHistogram;
+import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
import org.chromium.chrome.browser.preferences.privacy.PrivacyPreferencesManager;
import org.chromium.components.minidump_uploader.CrashFileManager;
import org.chromium.components.minidump_uploader.MinidumpUploadCallable;
+import org.chromium.components.minidump_uploader.MinidumpUploadJobService;
import org.chromium.components.minidump_uploader.util.CrashReportingPermissionManager;
import java.io.BufferedReader;
@@ -68,6 +74,43 @@ public class MinidumpUploadService extends IntentService {
}
/**
+ * @return Whether to use the JobSchduler API to upload crash reports, rather than directly
+ * creating a service for uploading.
+ */
+ public static boolean shouldUseJobSchedulerForUploads() {
+ // The JobScheduler API is only available as of Android L.
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+ return false;
+ }
+
+ return ChromeFeatureList.isEnabled(
+ ChromeFeatureList.UPLOAD_CRASH_REPORTS_USING_JOB_SCHEDULER);
+ }
+
+ /**
+ * Schedules uploading of all pending minidumps, using the JobScheduler API.
+ */
+ @SuppressLint("NewApi")
+ public static void scheduleUploadJob(Context context) {
+ assert MinidumpUploadService.shouldUseJobSchedulerForUploads();
+ CrashReportingPermissionManager permissionManager = PrivacyPreferencesManager.getInstance();
+ PersistableBundle permissions = new PersistableBundle();
+ // Note: putBoolean is only available in API level 22, so massage the data into ints
+ // instead.
+ permissions.putInt(ChromeMinidumpUploaderDelegate.IS_CLIENT_IN_METRICS_SAMPLE,
+ permissionManager.isClientInMetricsSample() ? 1 : 0);
+ permissions.putInt(ChromeMinidumpUploaderDelegate.IS_CRASH_UPLOAD_DISABLED_BY_COMMAND_LINE,
+ permissionManager.isCrashUploadDisabledByCommandLine() ? 1 : 0);
+ permissions.putInt(
+ ChromeMinidumpUploaderDelegate.IS_USAGE_AND_CRASH_REPORTING_PERMITTED_BY_USER,
+ permissionManager.isUsageAndCrashReportingPermittedByUser() ? 1 : 0);
+ permissions.putInt(ChromeMinidumpUploaderDelegate.IS_UPLOAD_ENABLED_FOR_TESTS,
+ permissionManager.isUploadEnabledForTests() ? 1 : 0);
+ MinidumpUploadJobService.scheduleUpload(context, ChromeMinidumpUploadJobService.class,
+ JobInfo.NETWORK_TYPE_ANY, permissions);
gsennton 2017/03/13 17:57:17 Not sure I like the mismatch between the network t
Ilya Sherman 2017/03/14 02:18:55 I believe that matches what we currently do in Chr
gsennton 2017/03/14 18:17:28 Right, because updating to only using unmetered ne
Ilya Sherman 2017/03/15 02:13:34 Affirmative =)
+ }
+
+ /**
* Stores the successes and failures from uploading crash to UMA,
*/
public static void storeBreakpadUploadStatsInUma(ChromePreferenceManager pref) {
@@ -249,6 +292,7 @@ public class MinidumpUploadService extends IntentService {
*/
public static void tryUploadCrashDump(Context context, File minidumpFile)
throws SecurityException {
+ assert !MinidumpUploadService.shouldUseJobSchedulerForUploads();
gsennton 2017/03/13 17:57:17 Should we add this assert in tryUploadAllCrashDump
Ilya Sherman 2017/03/14 02:18:55 Done. tryUploadAllCrashDumps calls this method in
CrashFileManager fileManager = new CrashFileManager(context.getCacheDir());
Intent intent = new Intent(context, MinidumpUploadService.class);
intent.setAction(ACTION_UPLOAD);
@@ -305,6 +349,11 @@ public class MinidumpUploadService extends IntentService {
Log.w(TAG, "Could not rename the file " + minidumpFile.getName() + " for re-upload");
return;
}
- MinidumpUploadService.tryUploadCrashDump(context, renamedMinidumpFile);
+
+ if (MinidumpUploadService.shouldUseJobSchedulerForUploads()) {
+ MinidumpUploadService.scheduleUploadJob(context);
+ } else {
+ MinidumpUploadService.tryUploadCrashDump(context, renamedMinidumpFile);
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698