From 39409438b21cce0d9aaac17c1a22b7995b0e8111 Mon Sep 17 00:00:00 2001 From: Michiel Visser Date: Thu, 17 Feb 2022 11:19:19 +0100 Subject: [PATCH] LibWeb: Send Origin on WebSocket connection Some services using WebSockets require that the request contains the Origin header, otherwise these services will return a 403 Forbidden response. WebSocketServer already supports sending the Origin header, however LibWeb did not send the origin with the IPC request. --- Userland/Libraries/LibWeb/WebSockets/WebSocket.cpp | 7 ++++--- Userland/Libraries/LibWeb/WebSockets/WebSocket.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibWeb/WebSockets/WebSocket.cpp b/Userland/Libraries/LibWeb/WebSockets/WebSocket.cpp index ec1e89a349..220a3e2ad8 100644 --- a/Userland/Libraries/LibWeb/WebSockets/WebSocket.cpp +++ b/Userland/Libraries/LibWeb/WebSockets/WebSocket.cpp @@ -47,9 +47,9 @@ WebSocketClientManager::WebSocketClientManager(NonnullRefPtr WebSocketClientManager::connect(const AK::URL& url) +RefPtr WebSocketClientManager::connect(const AK::URL& url, String const& origin) { - return m_websocket_client->connect(url); + return m_websocket_client->connect(url, origin); } // https://websockets.spec.whatwg.org/#dom-websocket-websocket @@ -72,7 +72,8 @@ WebSocket::WebSocket(DOM::Window& window, AK::URL& url) , m_window(window) { // FIXME: Integrate properly with FETCH as per https://fetch.spec.whatwg.org/#websocket-opening-handshake - m_websocket = WebSocketClientManager::the().connect(url); + auto origin_string = m_window->associated_document().origin().serialize(); + m_websocket = WebSocketClientManager::the().connect(url, origin_string); m_websocket->on_open = [weak_this = make_weak_ptr()] { if (!weak_this) return; diff --git a/Userland/Libraries/LibWeb/WebSockets/WebSocket.h b/Userland/Libraries/LibWeb/WebSockets/WebSocket.h index 79c93192bd..93273f40c5 100644 --- a/Userland/Libraries/LibWeb/WebSockets/WebSocket.h +++ b/Userland/Libraries/LibWeb/WebSockets/WebSocket.h @@ -35,7 +35,7 @@ class WebSocketClientManager : public Core::Object { public: static WebSocketClientManager& the(); - RefPtr connect(const AK::URL&); + RefPtr connect(const AK::URL&, String const& origin); private: static ErrorOr> try_create();