blob: 4fdfb3eb75f8e83c49d777c7d769dab1e0c40dd1 [file] [log] [blame]
Avi Drissmane4622aa2022-09-08 20:36:061// Copyright 2015 The Chromium Authors
boliu9b51b512017-02-03 15:35:052// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BASE_ANDROID_JAVA_EXCEPTION_REPORTER_H_
6#define BASE_ANDROID_JAVA_EXCEPTION_REPORTER_H_
7
8#include <jni.h>
9
Tobias Sargeant5e78771d2019-09-21 13:49:2310#include "base/android/scoped_java_ref.h"
boliu9b51b512017-02-03 15:35:0511#include "base/base_export.h"
Avi Drissman63e1f992023-01-13 18:54:4312#include "base/functional/callback_forward.h"
boliu9b51b512017-02-03 15:35:0513
14namespace base {
15namespace android {
16
Andrew Grieve6230a512023-12-11 16:47:2117using JavaExceptionCallback = void (*)(const char* exception);
18
boliu9b51b512017-02-03 15:35:0519// Install the exception handler. This should only be called once per process.
20BASE_EXPORT void InitJavaExceptionReporter();
21
boliu328eda132017-02-10 16:39:5722// Same as above except the handler ensures child process exists immediately
23// after an unhandled exception. This is used for child processes because
24// DumpWithoutCrashing does not work for child processes on Android.
25BASE_EXPORT void InitJavaExceptionReporterForChildProcess();
26
Joshua Peraza7814da22018-07-10 21:37:5027// Sets a callback to be called with the contents of a Java exception, which may
28// be nullptr.
Andrew Grieve6230a512023-12-11 16:47:2129BASE_EXPORT void SetJavaExceptionCallback(JavaExceptionCallback callback);
30
31// Returns the value last passed to SetJavaException(), or nullptr if it has
32// not been called.
33BASE_EXPORT JavaExceptionCallback GetJavaExceptionCallback();
Joshua Peraza7814da22018-07-10 21:37:5034
35// Calls the Java exception callback, if any, with exception.
36void SetJavaException(const char* exception);
37
Tobias Sargeant5e78771d2019-09-21 13:49:2338// Sets a filter that determines whether a java exception should cause a crash
39// report. |java_exception_filter| should return true if a crash report should
40// be generated.
Tobias Sargeante3608f82019-09-30 14:10:3241BASE_EXPORT void SetJavaExceptionFilter(
Tobias Sargeant5e78771d2019-09-21 13:49:2342 base::RepeatingCallback<bool(const JavaRef<jthrowable>&)>
43 java_exception_filter);
44
boliu9b51b512017-02-03 15:35:0545} // namespace android
46} // namespace base
47
48#endif // BASE_ANDROID_JAVA_EXCEPTION_REPORTER_H_