diff --git a/addons/mail/static/src/core/common/relative_time.js b/addons/mail/static/src/core/common/relative_time.js index 9441ef8e8c3..47b317f1634 100644 --- a/addons/mail/static/src/core/common/relative_time.js +++ b/addons/mail/static/src/core/common/relative_time.js @@ -12,8 +12,8 @@ export class RelativeTime extends Component { static template = xml``; setup() { - this.computeRelativeTime(); this.timeout = null; + this.computeRelativeTime(); onWillDestroy(() => clearTimeout(this.timeout)); } diff --git a/addons/mail/static/src/core/web/activity_service.js b/addons/mail/static/src/core/web/activity_service.js index 140114981dd..c2c733004b5 100644 --- a/addons/mail/static/src/core/web/activity_service.js +++ b/addons/mail/static/src/core/web/activity_service.js @@ -5,12 +5,13 @@ import { assignDefined } from "@mail/utils/common/misc"; import { _t } from "@web/core/l10n/translation"; import { registry } from "@web/core/registry"; +import { browser } from "@web/core/browser/browser"; export class ActivityService { constructor(env, services) { try { // useful for synchronizing activity data between multiple tabs - this.broadcastChannel = new BroadcastChannel("mail.activity.channel"); + this.broadcastChannel = new browser.BroadcastChannel("mail.activity.channel"); this.broadcastChannel.onmessage = this._onBroadcastChannelMessage.bind(this); } catch { // BroadcastChannel API is not supported (e.g. Safari < 15.4), so disabling it. diff --git a/addons/web/static/src/core/browser/browser.js b/addons/web/static/src/core/browser/browser.js index b0e03aad509..fc7562c04c2 100644 --- a/addons/web/static/src/core/browser/browser.js +++ b/addons/web/static/src/core/browser/browser.js @@ -45,6 +45,7 @@ export const browser = { innerHeight: window.innerHeight, innerWidth: window.innerWidth, ontouchstart: window.ontouchstart, + BroadcastChannel: window.BroadcastChannel, }; Object.defineProperty(browser, "location", { diff --git a/addons/web/static/tests/setup.js b/addons/web/static/tests/setup.js index 5c5dc7084d8..43f0bf257ff 100644 --- a/addons/web/static/tests/setup.js +++ b/addons/web/static/tests/setup.js @@ -192,6 +192,13 @@ function patchBrowserWithCleanup() { cancelAnimationFrame: (handle) => { animationFrameHandles.delete(handle); }, + // BroadcastChannels need to be closed to be garbage collected + BroadcastChannel: class SelfClosingBroadcastChannel extends BroadcastChannel { + constructor() { + super(...arguments); + registerCleanup(() => this.close()); + } + }, }, { pure: true } );