diff --git a/remote/domains/ContentProcessDomain.jsm b/remote/domains/ContentProcessDomain.jsm index 997691acaae3..9ef2622805bb 100644 --- a/remote/domains/ContentProcessDomain.jsm +++ b/remote/domains/ContentProcessDomain.jsm @@ -10,19 +10,9 @@ const { Domain } = ChromeUtils.import( "chrome://remote/content/domains/Domain.jsm" ); -ChromeUtils.defineModuleGetter( - this, - "ContextObserver", - "chrome://remote/content/observers/ContextObserver.jsm" -); - class ContentProcessDomain extends Domain { destructor() { super.destructor(); - - if (this._contextObserver) { - this._contextObserver.destructor(); - } } // helpers @@ -38,11 +28,4 @@ class ContentProcessDomain extends Domain { get chromeEventHandler() { return this.docShell.chromeEventHandler; } - - get contextObserver() { - if (!this._contextObserver) { - this._contextObserver = new ContextObserver(this.chromeEventHandler); - } - return this._contextObserver; - } } diff --git a/remote/domains/content/Page.jsm b/remote/domains/content/Page.jsm index 5687e22db41e..87c6a4232dfa 100644 --- a/remote/domains/content/Page.jsm +++ b/remote/domains/content/Page.jsm @@ -43,12 +43,12 @@ class Page extends ContentProcessDomain { this._onFrameNavigated = this._onFrameNavigated.bind(this); this._onScriptLoaded = this._onScriptLoaded.bind(this); - this.contextObserver.on("script-loaded", this._onScriptLoaded); + this.session.contextObserver.on("script-loaded", this._onScriptLoaded); } destructor() { this.setLifecycleEventsEnabled({ enabled: false }); - this.contextObserver.off("script-loaded", this._onScriptLoaded); + this.session.contextObserver.off("script-loaded", this._onScriptLoaded); this.disable(); super.destructor(); @@ -59,7 +59,10 @@ class Page extends ContentProcessDomain { async enable() { if (!this.enabled) { this.enabled = true; - this.contextObserver.on("frame-navigated", this._onFrameNavigated); + this.session.contextObserver.on( + "frame-navigated", + this._onFrameNavigated + ); this.chromeEventHandler.addEventListener("readystatechange", this, { mozSystemGroup: true, @@ -87,7 +90,10 @@ class Page extends ContentProcessDomain { disable() { if (this.enabled) { - this.contextObserver.off("frame-navigated", this._onFrameNavigated); + this.session.contextObserver.off( + "frame-navigated", + this._onFrameNavigated + ); this.chromeEventHandler.removeEventListener("readystatechange", this, { mozSystemGroup: true, diff --git a/remote/domains/content/Runtime.jsm b/remote/domains/content/Runtime.jsm index a2a95812d083..ede7c7ca02c0 100644 --- a/remote/domains/content/Runtime.jsm +++ b/remote/domains/content/Runtime.jsm @@ -62,14 +62,20 @@ class Runtime extends ContentProcessDomain { this._onContextCreated = this._onContextCreated.bind(this); this._onContextDestroyed = this._onContextDestroyed.bind(this); // TODO Bug 1602083 - this.contextObserver.on("context-created", this._onContextCreated); - this.contextObserver.on("context-destroyed", this._onContextDestroyed); + this.session.contextObserver.on("context-created", this._onContextCreated); + this.session.contextObserver.on( + "context-destroyed", + this._onContextDestroyed + ); } destructor() { this.disable(); - this.contextObserver.off("context-created", this._onContextCreated); - this.contextObserver.off("context-destroyed", this._onContextDestroyed); + this.session.contextObserver.off("context-created", this._onContextCreated); + this.session.contextObserver.off( + "context-destroyed", + this._onContextDestroyed + ); super.destructor(); } diff --git a/remote/sessions/ContentProcessSession.jsm b/remote/sessions/ContentProcessSession.jsm index 39a9ca98d96d..1aaa822001bd 100644 --- a/remote/sessions/ContentProcessSession.jsm +++ b/remote/sessions/ContentProcessSession.jsm @@ -13,6 +13,12 @@ const { DomainCache } = ChromeUtils.import( "chrome://remote/content/domains/DomainCache.jsm" ); +ChromeUtils.defineModuleGetter( + this, + "ContextObserver", + "chrome://remote/content/observers/ContextObserver.jsm" +); + class ContentProcessSession { constructor(messageManager, browsingContext, content, docShell) { this.messageManager = messageManager; @@ -29,11 +35,22 @@ class ContentProcessSession { } destructor() { + this._contextObserver?.destructor(); + this.messageManager.removeMessageListener("remote:request", this); this.messageManager.removeMessageListener("remote:destroy", this); this.domains.clear(); } + get contextObserver() { + if (!this._contextObserver) { + this._contextObserver = new ContextObserver( + this.docShell.chromeEventHandler + ); + } + return this._contextObserver; + } + // Domain event listener onEvent(eventName, params) {