OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser.crash; | 5 package org.chromium.chrome.browser.crash; |
6 | 6 |
7 import android.annotation.SuppressLint; | 7 import android.annotation.SuppressLint; |
8 import android.app.IntentService; | 8 import android.app.IntentService; |
9 import android.app.job.JobInfo; | 9 import android.app.job.JobInfo; |
10 import android.content.ComponentName; | 10 import android.content.ComponentName; |
11 import android.content.Context; | 11 import android.content.Context; |
12 import android.content.Intent; | 12 import android.content.Intent; |
13 import android.os.Build; | 13 import android.os.Build; |
14 import android.os.PersistableBundle; | 14 import android.os.PersistableBundle; |
15 import android.support.annotation.StringDef; | 15 import android.support.annotation.StringDef; |
16 | 16 |
17 import org.chromium.base.Log; | 17 import org.chromium.base.Log; |
18 import org.chromium.base.StreamUtil; | 18 import org.chromium.base.StreamUtil; |
19 import org.chromium.base.VisibleForTesting; | 19 import org.chromium.base.VisibleForTesting; |
20 import org.chromium.base.annotations.CalledByNative; | 20 import org.chromium.base.annotations.CalledByNative; |
21 import org.chromium.base.metrics.RecordHistogram; | 21 import org.chromium.base.metrics.RecordHistogram; |
22 import org.chromium.chrome.browser.ChromeFeatureList; | |
23 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; | 22 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; |
24 import org.chromium.chrome.browser.preferences.privacy.PrivacyPreferencesManager
; | 23 import org.chromium.chrome.browser.preferences.privacy.PrivacyPreferencesManager
; |
25 import org.chromium.components.background_task_scheduler.TaskIds; | 24 import org.chromium.components.background_task_scheduler.TaskIds; |
26 import org.chromium.components.minidump_uploader.CrashFileManager; | 25 import org.chromium.components.minidump_uploader.CrashFileManager; |
27 import org.chromium.components.minidump_uploader.MinidumpUploadCallable; | 26 import org.chromium.components.minidump_uploader.MinidumpUploadCallable; |
28 import org.chromium.components.minidump_uploader.MinidumpUploadJobService; | 27 import org.chromium.components.minidump_uploader.MinidumpUploadJobService; |
29 import org.chromium.components.minidump_uploader.util.CrashReportingPermissionMa
nager; | 28 import org.chromium.components.minidump_uploader.util.CrashReportingPermissionMa
nager; |
30 | 29 |
31 import java.io.BufferedReader; | 30 import java.io.BufferedReader; |
32 import java.io.File; | 31 import java.io.File; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 public MinidumpUploadService() { | 72 public MinidumpUploadService() { |
74 super(TAG); | 73 super(TAG); |
75 setIntentRedelivery(true); | 74 setIntentRedelivery(true); |
76 } | 75 } |
77 | 76 |
78 /** | 77 /** |
79 * @return Whether to use the JobSchduler API to upload crash reports, rathe
r than directly | 78 * @return Whether to use the JobSchduler API to upload crash reports, rathe
r than directly |
80 * creating a service for uploading. | 79 * creating a service for uploading. |
81 */ | 80 */ |
82 public static boolean shouldUseJobSchedulerForUploads() { | 81 public static boolean shouldUseJobSchedulerForUploads() { |
83 // The JobScheduler API is only available as of Android M. | 82 // The JobScheduler API is only usable as of Android M. |
84 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return false; | 83 return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M; |
85 | |
86 return ChromeFeatureList.isEnabled( | |
87 ChromeFeatureList.UPLOAD_CRASH_REPORTS_USING_JOB_SCHEDULER); | |
88 } | 84 } |
89 | 85 |
90 /** | 86 /** |
91 * Schedules uploading of all pending minidumps, using the JobScheduler API. | 87 * Schedules uploading of all pending minidumps, using the JobScheduler API. |
92 */ | 88 */ |
93 @SuppressLint("NewApi") | 89 @SuppressLint("NewApi") |
94 public static void scheduleUploadJob(Context context) { | 90 public static void scheduleUploadJob(Context context) { |
95 assert shouldUseJobSchedulerForUploads(); | 91 assert shouldUseJobSchedulerForUploads(); |
96 | 92 |
97 CrashReportingPermissionManager permissionManager = PrivacyPreferencesMa
nager.getInstance(); | 93 CrashReportingPermissionManager permissionManager = PrivacyPreferencesMa
nager.getInstance(); |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 return; | 357 return; |
362 } | 358 } |
363 | 359 |
364 if (shouldUseJobSchedulerForUploads()) { | 360 if (shouldUseJobSchedulerForUploads()) { |
365 scheduleUploadJob(context); | 361 scheduleUploadJob(context); |
366 } else { | 362 } else { |
367 tryUploadCrashDump(context, renamedMinidumpFile); | 363 tryUploadCrashDump(context, renamedMinidumpFile); |
368 } | 364 } |
369 } | 365 } |
370 } | 366 } |
OLD | NEW |