mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-23 21:01:08 +00:00
3635b10bad
Depends on D158296 Differential Revision: https://phabricator.services.mozilla.com/D158297
58 lines
1.6 KiB
JavaScript
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"]);
|
|
}
|
|
}
|