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/. */
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
EventDispatcher: "resource://gre/modules/Messaging.sys.mjs",
GeckoViewUtils: "resource://gre/modules/GeckoViewUtils.sys.mjs",
});
export async function openWindow(uri, aOpenWindowInfo) {
const message = {
type: "GeckoView:ServiceWorkerOpenWindow",
url: uri.spec,
};
const info =
await lazy.EventDispatcher.instance.sendRequestForResult(message);
if (!info) {
throw Components.Exception("", Cr.NS_ERROR_FAILURE);
}
if (info.isOpen) {
const bc = Services.ww.getWindowByName(info.sessionId)?.browser
?.browsingContext;
if (bc) {
return bc;
}
throw Components.Exception(
"Unable to find GeckoView session with ID",
Cr.NS_ERROR_NOT_AVAILABLE
);
}
await lazy.GeckoViewUtils.waitAndSetupWindow(
info.sessionId,
aOpenWindowInfo,
null
);
return null;
}