gecko-dev/remote/webdriver-bidi/NewSessionHandler.sys.mjs

58 lines
1.6 KiB
JavaScript

/* 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, {
WebDriverBiDiConnection:
"chrome://remote/content/webdriver-bidi/WebDriverBiDiConnection.sys.mjs",
WebSocketHandshake:
"chrome://remote/content/server/WebSocketHandshake.sys.mjs",
});
/**
* httpd.js JSON handler for direct BiDi connections.
*/
export class WebDriverNewSessionHandler {
/**
* Construct a new JSON handler.
*
* @param {WebDriverBiDi} webDriverBiDi
* Reference to the WebDriver BiDi protocol implementation.
*/
constructor(webDriverBiDi) {
this.webDriverBiDi = webDriverBiDi;
}
// nsIHttpRequestHandler
/**
* Handle new direct WebSocket connection requests.
*
* WebSocket clients not using the WebDriver BiDi opt-in mechanism via the
* WebDriver HTTP implementation will attempt to directly connect at
* `/session`. Hereby a WebSocket upgrade will automatically be performed.
*
* @param {Request} request
* HTTP request (httpd.js)
* @param {Response} response
* Response to an HTTP request (httpd.js)
*/
async handle(request, response) {
const webSocket = await lazy.WebSocketHandshake.upgrade(request, response);
const conn = new lazy.WebDriverBiDiConnection(
webSocket,
response._connection
);
this.webDriverBiDi.addSessionlessConnection(conn);
}
// XPCOM
get QueryInterface() {
return ChromeUtils.generateQI(["nsIHttpRequestHandler"]);
}
}