| 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;
|
| - }
|
| -}
|
|
|