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

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

Issue 2727573004: [Android Crash Reporting] Simplify crash report upload code. (Closed)
Patch Set: Fix up a comment 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/MinidumpPreparationCallable.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpPreparationCallable.java b/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpPreparationCallable.java
deleted file mode 100644
index 4529ff255857e533718877aafa692fa3918b6c26..0000000000000000000000000000000000000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpPreparationCallable.java
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.crash;
-
-import android.content.Context;
-import android.content.Intent;
-
-import org.chromium.base.Log;
-import org.chromium.components.minidump_uploader.CrashFileManager;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.concurrent.Callable;
-
-/**
- * Callable helper for {@link MinidumpPreparationService}.
- *
- * This class will append a logcat file to a minidump file for upload.
- */
-public class MinidumpPreparationCallable implements Callable<Boolean> {
- private static final String TAG = "DumpPrepCallable";
-
- private static final String LOGCAT_CONTENT_DISPOSITION =
- "Content-Disposition: form-data; name=\"logcat\"; filename=\"logcat\"";
-
- private static final String LOGCAT_CONTENT_TYPE = "Content-Type: text/plain";
-
- private final File mLogcatFile;
- private final File mMinidumpFile;
- private final Intent mRedirectIntent;
- private final Context mContext;
- private final CrashFileManager mFileManager;
-
- public MinidumpPreparationCallable(
- Context context, File miniDumpFile, File logcatFile, Intent redirectIntent) {
- mContext = context;
- mLogcatFile = logcatFile;
- mMinidumpFile = miniDumpFile;
- mRedirectIntent = redirectIntent;
- mFileManager = new CrashFileManager(context.getCacheDir());
- }
-
- /**
- * Read the boundary from the first lien of the file.
- */
- private static String getBoundary(File processMinidumpFile) throws IOException {
- BufferedReader bReader = null;
- try {
- bReader = new BufferedReader(new FileReader(processMinidumpFile));
- return bReader.readLine();
- } finally {
- if (bReader != null) {
- bReader.close();
- }
- }
- }
-
- /**
- * Write the invoking {@link MinidumpPreparationCallable}s logcat data to
- * the specified target {@link File}.
- *
- * Target file is overwritten, not appended to the end.
- *
- * @param targetFile File to which logcat data should be written.
- * @param boundary String MIME boundary to prepend.
- * @throws IOException if something goes wrong.
- */
- private static void writeLogcat(File targetFile, List<String> logcat, String boundary)
- throws IOException {
- BufferedWriter bWriter = null;
- try {
- bWriter = new BufferedWriter(new FileWriter(targetFile, false));
- bWriter.write(boundary);
- bWriter.newLine();
- // Next we write the logcat data in a MIME block.
- bWriter.write(LOGCAT_CONTENT_DISPOSITION);
- bWriter.newLine();
- bWriter.write(LOGCAT_CONTENT_TYPE);
- bWriter.newLine();
- bWriter.newLine();
- // Emits the contents of the buffer into the output file.
- for (String ln : logcat) {
- bWriter.write(ln);
- bWriter.newLine();
- }
- } finally {
- if (bWriter != null) {
- bWriter.close();
- }
- }
- }
-
- /**
- * Append the minidump file data to the specified target {@link File}.
- *
- * @param processMinidumpFile File containing data to append.
- * @param targetFile File to which data should be appended.
- * @throws IOException when standard IO errors occur.
- */
- private static void appendMinidump(File processMinidumpFile, File targetFile)
- throws IOException {
- BufferedInputStream bIn = null;
- BufferedOutputStream bOut = null;
- try {
- byte[] buf = new byte[256];
- bIn = new BufferedInputStream(new FileInputStream(processMinidumpFile));
- bOut = new BufferedOutputStream(new FileOutputStream(targetFile, true));
- int count;
- while ((count = bIn.read(buf)) != -1) {
- bOut.write(buf, 0, count);
- }
- } finally {
- if (bIn != null) bIn.close();
- if (bOut != null) bOut.close();
- }
- }
-
- private boolean augmentTargetFile(List<String> logcat) {
- File targetFile = null;
- try {
- targetFile = mFileManager.createNewTempFile(mMinidumpFile.getName() + ".try0");
-
- String boundary = getBoundary(mMinidumpFile);
- if (boundary == null) {
- return false;
- }
- writeLogcat(targetFile, logcat, boundary);
- // Finally Reopen and append the original minidump MIME sections
- // including the leading boundary.
- appendMinidump(mMinidumpFile, targetFile);
- if (!mMinidumpFile.delete()) {
- Log.w(TAG, "Fail to delete minidump file: " + mMinidumpFile.getName());
- }
- return true;
- } catch (IOException e) {
- String msg = String.format(
- "Error while tyring to annotate minidump file %s with logcat data",
- mMinidumpFile.getAbsoluteFile());
- Log.w(TAG, msg, e);
- if (targetFile != null) {
- CrashFileManager.deleteFile(targetFile);
- }
- return false;
- }
- }
-
- private List<String> getLogcatAsList() throws IOException {
- BufferedReader r = null;
- try {
- List<String> logcat = new LinkedList<String>();
- if (mLogcatFile != null) {
- r = new BufferedReader(new FileReader(mLogcatFile));
- String ln;
- while ((ln = r.readLine()) != null) {
- logcat.add(ln);
- }
- }
- return Collections.unmodifiableList(logcat);
- } finally {
- if (r != null) {
- r.close();
- }
- }
- }
-
- @Override
- public Boolean call() throws IOException {
- // By default set the basic minidump to be uploaded. That way, even if
- // there are errors augmenting the minidump with logcat data, the service
- // can still upload the unaugmented minidump.
- List<String> logcat = getLogcatAsList();
- boolean success = true;
- if (!logcat.isEmpty()) {
- success = augmentTargetFile(logcat);
- if (success && !mLogcatFile.delete()) {
- Log.w(TAG, "Failed to delete logcat file: " + mLogcatFile.getName());
- }
- }
- if (mRedirectIntent != null) {
- mContext.startService(mRedirectIntent);
- }
- return success;
- }
-}

Powered by Google App Engine
This is Rietveld 408576698