/* 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"]); } }