blob: 06dee855ecc164688fdcde960fbf3f55ab6e0dba [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// 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;
/**
* Assertion handler to report assertions to crash.
*
* R8 has a --force-assertions-handler flag which we use to make this class, and specifically the
* {@link assertionHandler} method, handle every assertion failure.
*/
public class CustomAssertionHandler {
private CustomAssertionHandler() {}
private static PureJavaExceptionHandler.JavaExceptionReporterFactory sReporterFactory;
/**
* The handler that we tell R8 to forward assertions to via --force-assertions-hander.
*
* The R8 docs say that this function must be a static method, taking one argument, of type
* java.lang.Throwable.
*/
public static void assertionHandler(Throwable exception) {
// We've gotten an assertion report before we were ready to report. We drop these assertions
// until we are ready to report them.
if (sReporterFactory != null) {
NativeAndJavaSmartExceptionReporter.postUploadReport(
exception,
(e) -> {
PureJavaExceptionHandler.JavaExceptionReporter reporter =
sReporterFactory.createJavaExceptionReporter();
reporter.createAndUploadReport(e);
});
}
}
public static void installPreNativeHandler(
PureJavaExceptionHandler.JavaExceptionReporterFactory factory) {
sReporterFactory = factory;
}
}