[FIX] web: crash manager correctly formats error message in Firefox
Have a piece of code that throws an Error In browsers not powered by V8, the stack trace won't be formatted and the Error type won't appear in the crash manager modal report. This happens because Error.prototype.stack is non-standard, although most browsers have an implementation of it. Chrome for example automatically formats the Error. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error https://v8.dev/docs/stack-trace-api\#compatibility After this commit, the Error is formatted in the crash manager report, the same way as Chrome does it. task-2191727 closes odoo/odoo#56318 X-original-commit: dbf670f2e0ec797aeaf998aa28b32afbdd2c3b4c Signed-off-by: Lucas Perais (lpe) <lpe@odoo.com> Signed-off-by: Christophe Monniez (moc) <moc@odoo.com> Co-authored-by: Lucas Perais <lpe@odoo.com> Co-authored-by: Hardik Prajapati <hap@odoo.com>
This commit is contained in:
committed by
Lucas Perais (lpe)
co-authored by
Lucas Perais
Hardik Prajapati
parent
6a5ee406d8
commit
1ca3a590f7
@@ -27,6 +27,14 @@ window.addEventListener('unhandledrejection', ev =>
|
||||
|
||||
let active = true;
|
||||
|
||||
// Note: we already have this function in browser_detection.js but browser_detection.js
|
||||
// is in assets_backend while crash_managere.js is in common so it will have dependency
|
||||
// of file browser_detection.js which will not be available in frontend, so copy function here
|
||||
const isBrowserChrome = function () {
|
||||
return $.browser.chrome && // depends on jquery 1.x, removed in jquery 2 and above
|
||||
navigator.userAgent.toLocaleLowerCase().indexOf('edge') === -1; // as far as jquery is concerned, Edge is chrome
|
||||
};
|
||||
|
||||
/**
|
||||
* An extension of Dialog Widget to render the warnings and errors on the website.
|
||||
* Extend it with your template of choice like ErrorDialog/WarningDialog
|
||||
@@ -141,7 +149,17 @@ var CrashManager = AbstractService.extend({
|
||||
// promise has been rejected due to a crash
|
||||
core.bus.on('crash_manager_unhandledrejection', this, function (ev) {
|
||||
if (ev.reason && ev.reason instanceof Error) {
|
||||
var traceback = ev.reason.stack;
|
||||
// Error.prototype.stack is non-standard.
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error
|
||||
// However, most engines provide an implementation.
|
||||
// In particular, Chrome formats the contents of Error.stack
|
||||
// https://v8.dev/docs/stack-trace-api#compatibility
|
||||
let traceback;
|
||||
if (isBrowserChrome()) {
|
||||
traceback = ev.reason.stack;
|
||||
} else {
|
||||
traceback = `${_t("Error:")} ${ev.reason.message}\n${ev.reason.stack}`;
|
||||
}
|
||||
self.show_error({
|
||||
type: _t("Odoo Client Error"),
|
||||
message: '',
|
||||
|
||||
Reference in New Issue
Block a user