summaryrefslogtreecommitdiffstats
path: root/remote/webdriver-bidi/NewSessionHandler.sys.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'remote/webdriver-bidi/NewSessionHandler.sys.mjs')
-rw-r--r--remote/webdriver-bidi/NewSessionHandler.sys.mjs57
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"]);
+ }
+}