diff options
Diffstat (limited to 'remote/webdriver-bidi/NewSessionHandler.sys.mjs')
-rw-r--r-- | remote/webdriver-bidi/NewSessionHandler.sys.mjs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/remote/webdriver-bidi/NewSessionHandler.sys.mjs b/remote/webdriver-bidi/NewSessionHandler.sys.mjs new file mode 100644 index 0000000000..342419033f --- /dev/null +++ b/remote/webdriver-bidi/NewSessionHandler.sys.mjs @@ -0,0 +1,57 @@ +/* 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"]); + } +} |