From 081966e8b0d711c3c3d6861e943fca618fbc682b Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Fri, 24 Nov 2023 09:46:47 +0100 Subject: [PATCH] [FIX] website_event_track: no crash if serviceWorker unavailable PR [1] removed the legacy error handler that swallowed promise rejection errors with anything else than an error (namely, the "legacyRejectPromiseHandler"). As a consequence, promise rejections done as "control flow" now lead to error dialogs being displayed. In particular, it happened on the website (with website_event_track installed), if the browser doesn't support service workers. This commit simply leaves the promise pending if the feature is unavailable. [1] https://github.com/odoo/odoo/pull/137702 closes odoo/odoo#143516 Signed-off-by: Samuel Degueldre (sad) --- .../static/src/js/website_event_pwa_widget.js | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/addons/website_event_track/static/src/js/website_event_pwa_widget.js b/addons/website_event_track/static/src/js/website_event_pwa_widget.js index 0bd94c4dc64..d13b47220bf 100644 --- a/addons/website_event_track/static/src/js/website_event_pwa_widget.js +++ b/addons/website_event_track/static/src/js/website_event_pwa_widget.js @@ -6,13 +6,14 @@ * to avoid missed-events (as the browser can trigger it very early in the page lifecycle). */ var deferredPrompt = new Promise(function (resolve, reject) { - if (!("serviceWorker" in navigator)) { - return reject(); + if ("serviceWorker" in navigator) { + window.addEventListener("beforeinstallprompt", function (ev) { + ev.preventDefault(); + resolve(ev); + }); + } else { + console.log("ServiceWorker not supported"); } - window.addEventListener("beforeinstallprompt", function (ev) { - ev.preventDefault(); - resolve(ev); - }); }); import publicWidget from "@web/legacy/js/public/public_widget"; @@ -57,9 +58,7 @@ .then(this._registerServiceWorker.bind(this)) .then(function () { // Don't wait for the prompt's Promise as it may never resolve. - deferredPrompt.then(self._showInstallBanner.bind(self)).catch(function () { - console.log("ServiceWorker not supported"); - }); + deferredPrompt.then(self._showInstallBanner.bind(self)); }) .then(this._prefetch.bind(this)); }, @@ -195,9 +194,6 @@ console.log("User dismissed the install prompt"); } }); - }) - .catch(function () { - console.log("ServiceWorker not supported"); }); }, });