| 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.content.Context; |
| 7 import android.os.Build; | 8 import android.os.Build; |
| 8 import android.util.Patterns; | 9 import android.util.Patterns; |
| 9 | 10 |
| 10 import org.chromium.base.ContextUtils; | |
| 11 import org.chromium.base.Log; | 11 import org.chromium.base.Log; |
| 12 import org.chromium.base.VisibleForTesting; | 12 import org.chromium.base.VisibleForTesting; |
| 13 import org.chromium.components.minidump_uploader.CrashFileManager; | 13 import org.chromium.components.minidump_uploader.CrashFileManager; |
| 14 | 14 |
| 15 import java.io.BufferedReader; | 15 import java.io.BufferedReader; |
| 16 import java.io.File; | 16 import java.io.File; |
| 17 import java.io.IOException; | 17 import java.io.IOException; |
| 18 import java.io.InputStreamReader; | 18 import java.io.InputStreamReader; |
| 19 import java.util.ArrayList; | 19 import java.util.ArrayList; |
| 20 import java.util.Collections; | 20 import java.util.Collections; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 "android.hardware", "android.inputmethodservice", "android.location"
, "android.media", | 102 "android.hardware", "android.inputmethodservice", "android.location"
, "android.media", |
| 103 "android.mtp", "android.net", "android.nfc", "android.opengl", "andr
oid.os", | 103 "android.mtp", "android.net", "android.nfc", "android.opengl", "andr
oid.os", |
| 104 "android.preference", "android.print", "android.printservice", "andr
oid.provider", | 104 "android.preference", "android.print", "android.printservice", "andr
oid.provider", |
| 105 "android.renderscript", "android.sax", "android.security", "android.
service", | 105 "android.renderscript", "android.sax", "android.security", "android.
service", |
| 106 "android.speech", "android.support", "android.system", "android.tele
com", | 106 "android.speech", "android.support", "android.system", "android.tele
com", |
| 107 "android.telephony", "android.test", "android.text", "android.transi
tion", | 107 "android.telephony", "android.test", "android.text", "android.transi
tion", |
| 108 "android.util", "android.view", "android.webkit", "android.widget",
"com.android.", | 108 "android.util", "android.view", "android.webkit", "android.widget",
"com.android.", |
| 109 "dalvik.", "java.", "javax.", "org.apache.", "org.json.", "org.w3c.d
om.", "org.xml.", | 109 "dalvik.", "java.", "javax.", "org.apache.", "org.json.", "org.w3c.d
om.", "org.xml.", |
| 110 "org.xmlpull."}; | 110 "org.xmlpull."}; |
| 111 | 111 |
| 112 private final Context mContext; |
| 112 private final File mMinidumpFile; | 113 private final File mMinidumpFile; |
| 113 | 114 |
| 114 /** | 115 /** |
| 116 * @param context The application context for accessing the cache directory
and firing intents. |
| 115 * @param minidump The minidump file that needs logcat output to be attached
. | 117 * @param minidump The minidump file that needs logcat output to be attached
. |
| 116 */ | 118 */ |
| 117 public LogcatExtractionRunnable(File minidump) { | 119 public LogcatExtractionRunnable(Context context, File minidump) { |
| 120 mContext = context; |
| 118 mMinidumpFile = minidump; | 121 mMinidumpFile = minidump; |
| 119 } | 122 } |
| 120 | 123 |
| 121 @Override | 124 @Override |
| 122 public void run() { | 125 public void run() { |
| 123 Log.i(TAG, "Trying to extract logcat for minidump %s.", mMinidumpFile.ge
tName()); | 126 Log.i(TAG, "Trying to extract logcat for minidump %s.", mMinidumpFile.ge
tName()); |
| 124 CrashFileManager fileManager = | 127 CrashFileManager fileManager = new CrashFileManager(mContext.getCacheDir
()); |
| 125 new CrashFileManager(ContextUtils.getApplicationContext().getCac
heDir()); | |
| 126 File fileToUpload = mMinidumpFile; | 128 File fileToUpload = mMinidumpFile; |
| 127 try { | 129 try { |
| 128 List<String> logcat = getElidedLogcat(); | 130 List<String> logcat = getElidedLogcat(); |
| 129 fileToUpload = new MinidumpLogcatPrepender(fileManager, mMinidumpFil
e, logcat).run(); | 131 fileToUpload = new MinidumpLogcatPrepender(fileManager, mMinidumpFil
e, logcat).run(); |
| 130 Log.i(TAG, "Succeeded extracting logcat to %s.", fileToUpload.getNam
e()); | 132 Log.i(TAG, "Succeeded extracting logcat to %s.", fileToUpload.getNam
e()); |
| 131 } catch (IOException | InterruptedException e) { | 133 } catch (IOException | InterruptedException e) { |
| 132 Log.w(TAG, e.toString()); | 134 Log.w(TAG, e.toString()); |
| 133 } | 135 } |
| 134 | 136 |
| 135 // Regardless of success, initiate the upload. That way, even if there a
re errors augmenting | 137 // Regardless of success, initiate the upload. That way, even if there a
re errors augmenting |
| 136 // the minidump with logcat data, the service can still upload the unaug
mented minidump. | 138 // the minidump with logcat data, the service can still upload the unaug
mented minidump. |
| 137 if (MinidumpUploadService.shouldUseJobSchedulerForUploads()) { | 139 if (MinidumpUploadService.shouldUseJobSchedulerForUploads()) { |
| 138 MinidumpUploadService.scheduleUploadJob(); | 140 MinidumpUploadService.scheduleUploadJob(mContext); |
| 139 } else { | 141 } else { |
| 140 try { | 142 try { |
| 141 MinidumpUploadService.tryUploadCrashDump(fileToUpload); | 143 MinidumpUploadService.tryUploadCrashDump(mContext, fileToUpload)
; |
| 142 } catch (SecurityException e) { | 144 } catch (SecurityException e) { |
| 143 // For KitKat and below, there was a framework bug which causes
us to not be able to | 145 // For KitKat and below, there was a framework bug which causes
us to not be able to |
| 144 // find our own crash uploading service. Ignore a SecurityExcept
ion here on older | 146 // find our own crash uploading service. Ignore a SecurityExcept
ion here on older |
| 145 // OS versions since the crash will eventually get uploaded on n
ext start. | 147 // OS versions since the crash will eventually get uploaded on n
ext start. |
| 146 // crbug/542533 | 148 // crbug/542533 |
| 147 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | 149 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { |
| 148 throw e; | 150 throw e; |
| 149 } | 151 } |
| 150 } | 152 } |
| 151 } | 153 } |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 * {@link #CONSOLE_ELISION}. | 331 * {@link #CONSOLE_ELISION}. |
| 330 * | 332 * |
| 331 * @param original String potentially containing console messages. | 333 * @param original String potentially containing console messages. |
| 332 * @return String with elided console messages. | 334 * @return String with elided console messages. |
| 333 */ | 335 */ |
| 334 @VisibleForTesting | 336 @VisibleForTesting |
| 335 protected static String elideConsole(String original) { | 337 protected static String elideConsole(String original) { |
| 336 return CONSOLE_MSG.matcher(original).replaceAll(CONSOLE_ELISION); | 338 return CONSOLE_MSG.matcher(original).replaceAll(CONSOLE_ELISION); |
| 337 } | 339 } |
| 338 } | 340 } |
| OLD | NEW |