Index: components/crash/android/java/src/org/chromium/components/crash/browser/CrashDumpManager.java |
diff --git a/components/crash/android/java/src/org/chromium/components/crash/browser/CrashDumpManager.java b/components/crash/android/java/src/org/chromium/components/crash/browser/CrashDumpManager.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..495556181de78a8b14f72f034a5e6d8bd082d26d |
--- /dev/null |
+++ b/components/crash/android/java/src/org/chromium/components/crash/browser/CrashDumpManager.java |
@@ -0,0 +1,80 @@ |
+// Copyright 2017 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.components.crash.browser; |
+ |
+import org.chromium.base.Log; |
+import org.chromium.base.ThreadUtils; |
+import org.chromium.base.annotations.CalledByNative; |
+ |
+import java.io.File; |
+ |
+/** |
+ * A Java-side bridge for continuing the upload processing for child process crash minidumps. |
+ */ |
+public class CrashDumpManager { |
+ private static final String TAG = "CrashDumpManager"; |
+ |
+ /** |
+ * An interface for providing a callback that will try to upload a minidump. The callback should |
+ * be registered on, and will be run on, the UI thread. |
+ */ |
+ public interface UploadMinidumpCallback { public void tryToUploadMinidump(File minidump); } |
+ |
+ /** |
+ * The globally registered callback for uploading minidumps, or null if no callback has been |
+ * registered yet. |
+ */ |
+ private static UploadMinidumpCallback sCallback; |
+ |
+ /** |
+ * Registers a callback for uploading minidumps. May be called at most once, and only on the UI |
+ * thread. |
+ * |
+ * @param callback The callback to trigger when a new minidump is generated by a child process. |
+ */ |
+ public static void registerUploadCallback(UploadMinidumpCallback callback) { |
+ ThreadUtils.assertOnUiThread(); |
+ assert sCallback == null; |
+ sCallback = callback; |
+ } |
+ |
+ /** |
+ * Attempts to upload the specified child process minidump (or a no-op if no observer has been |
+ * registered). |
+ * |
+ * @param minidumpPath The file path for the generated minidump. |
+ */ |
+ @CalledByNative |
+ public static void tryToUploadMinidump(String minidumpPath) { |
+ // The C++ code that calls into this method should be running on a background thread. It's |
+ // important to be off the UI thread for the file operations done below. |
+ ThreadUtils.assertOnBackgroundThread(); |
+ |
+ if (minidumpPath == null) { |
+ Log.e(TAG, "Minidump path should be non-null! Bailing..."); |
+ return; |
+ } |
+ |
+ final File minidump = new File(minidumpPath); |
+ if (!minidump.exists() || !minidump.isFile()) { |
+ Log.e(TAG, |
+ "Minidump path '" + minidumpPath |
+ + "' should describe a file that exists! Bailing..."); |
+ return; |
+ } |
+ |
+ // The callback should only be accessed on the UI thread. |
+ ThreadUtils.postOnUiThread(new Runnable() { |
+ @Override |
+ public void run() { |
+ if (sCallback == null) { |
+ Log.w(TAG, "Ignoring crash observed before a callback was registered..."); |
+ return; |
+ } |
+ sCallback.tryToUploadMinidump(minidump); |
+ } |
+ }); |
+ } |
+} |