Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import { Module } from "chrome://remote/content/shared/messagehandler/Module.sys.mjs";
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
WindowGlobalMessageHandler:
"chrome://remote/content/shared/messagehandler/WindowGlobalMessageHandler.sys.mjs",
});
// The test is supposed to trigger the command and then destroy the
// JSWindowActor pair by any mean (eg a navigation) in order to trigger an
// AbortError and a retry.
class RetryModule extends Module {
destroy() {}
/**
* Commands
*/
async waitForDiscardedBrowsingContext(params = {}) {
const { browsingContext, retryOnAbort } = params;
// Wait for the browsing context to be discarded (replaced or destroyed)
// before calling the internal command.
await new Promise(resolve => {
const observe = (_subject, _topic, _data) => {
Services.obs.removeObserver(observe, "browsing-context-discarded");
resolve();
};
Services.obs.addObserver(observe, "browsing-context-discarded");
});
return this.messageHandler.forwardCommand({
moduleName: "retry",
commandName: "_internalForward",
destination: {
type: lazy.WindowGlobalMessageHandler.type,
id: browsingContext.id,
},
retryOnAbort,
});
}
}
export const retry = RetryModule;