[GTK][WPE] QR code not loaded in web.whatsapp.com
authorcarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Jan 2020 10:48:56 +0000 (10:48 +0000)
committercarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Jan 2020 10:48:56 +0000 (10:48 +0000)
https://bugs.webkit.org/show_bug.cgi?id=203404

Reviewed by Michael Catanzaro.

This is a regression of the switch to use libsoup API for the WebSockets implementation. The QR code is loaded
using a WebSocket connection, but the server is always replying with a 400 Bad Request to the Upgrade requests
coming from an existing HTTP connection. We need to ensure a new dedicated connection is used for WebSockets.

* NetworkProcess/soup/WebSocketTaskSoup.cpp:
(WebKit::WebSocketTask::WebSocketTask): Set the SOUP_MESSAGE_NEW_CONNECTION flag to the SoupMessage before
starting the connection.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@255233 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/NetworkProcess/soup/WebSocketTaskSoup.cpp

index 5a1a63e..fa7d96b 100644 (file)
@@ -1,3 +1,18 @@
+2020-01-28  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        [GTK][WPE] QR code not loaded in web.whatsapp.com
+        https://bugs.webkit.org/show_bug.cgi?id=203404
+
+        Reviewed by Michael Catanzaro.
+
+        This is a regression of the switch to use libsoup API for the WebSockets implementation. The QR code is loaded
+        using a WebSocket connection, but the server is always replying with a 400 Bad Request to the Upgrade requests
+        coming from an existing HTTP connection. We need to ensure a new dedicated connection is used for WebSockets.
+
+        * NetworkProcess/soup/WebSocketTaskSoup.cpp:
+        (WebKit::WebSocketTask::WebSocketTask): Set the SOUP_MESSAGE_NEW_CONNECTION flag to the SoupMessage before
+        starting the connection.
+
 2020-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         [GTK] Remote Inspector: add support for service workers targets
index 9a6f243..6a7b798 100644 (file)
@@ -47,6 +47,12 @@ WebSocketTask::WebSocketTask(NetworkSocketChannel& channel, SoupSession* session
         for (auto& subprotocol : protocolList)
             protocols.get()[i++] = g_strdup(WebCore::stripLeadingAndTrailingHTTPSpaces(subprotocol).utf8().data());
     }
+
+    // Ensure a new connection is used for WebSockets.
+    // FIXME: this is done by libsoup since 2.69.1 and 2.68.4, so it can be removed when bumping the libsoup requirement.
+    // See https://bugs.webkit.org/show_bug.cgi?id=203404
+    soup_message_set_flags(msg, static_cast<SoupMessageFlags>(soup_message_get_flags(msg) | SOUP_MESSAGE_NEW_CONNECTION));
+
     soup_session_websocket_connect_async(session, msg, nullptr, protocols.get(), m_cancellable.get(),
         [] (GObject* session, GAsyncResult* result, gpointer userData) {
             GUniqueOutPtr<GError> error;