fix(mobile): record xprem_js_crash only for fatal JS errors

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
jjbruntonandClaude Fable 5 committed 2026-08-31 11:13:55 +01:00
1 parent 659cee76b6
commit 5c4a4608b1
2 files changed
+21 -4

No files matched your search

+17 -3
View File
@@ -75,12 +75,26 @@ describe('observe', () => {
expect.objectContaining({
severity: 'fatal',
body: 'boom',
attributes: { isFatal: true },
})
);
expect(previousHandler).toHaveBeenCalledWith(error, true);
});
it('does not log xprem_js_crash for non-fatal errors but still delegates', () => {
const previousHandler = jest.fn();
const getInstalledHandler = installFakeErrorUtils(previousHandler);
withFreshObserveModule(({ installObserveGlobalErrorHandler }) => {
installObserveGlobalErrorHandler();
});
const error = new Error('handled');
getInstalledHandler()(error, false);
expect(logEventMock).not.toHaveBeenCalled();
expect(previousHandler).toHaveBeenCalledWith(error, false);
});
it('still calls the previous handler when Observe.logEvent throws', () => {
const previousHandler = jest.fn();
const getInstalledHandler = installFakeErrorUtils(previousHandler);
@@ -92,8 +106,8 @@ describe('observe', () => {
installObserveGlobalErrorHandler();
});
getInstalledHandler()(new Error('boom'), false);
getInstalledHandler()(new Error('boom'), true);
expect(previousHandler).toHaveBeenCalledWith(expect.any(Error), false);
expect(previousHandler).toHaveBeenCalledWith(expect.any(Error), true);
});
});
+4 -1
View File
@@ -50,16 +50,19 @@ export function installObserveGlobalErrorHandler() {
const previousHandler = errorUtils.getGlobalHandler();
errorUtils.setGlobalHandler((error, isFatal) => {
// Only fatal errors count as a crash; non-fatal handled errors would
// otherwise skew update-health tracking.
if (isFatal) {
try {
const message = error instanceof Error ? error.message : String(error);
Observe.logEvent("xprem_js_crash", {
severity: "fatal",
body: message,
attributes: { isFatal: Boolean(isFatal) },
});
} catch (observeError) {
console.warn("[Observe] Failed to log xprem_js_crash:", observeError);
}
}
previousHandler(error, isFatal);
});