Changeset 246878 in webkit


Ignore:
Timestamp:
Jun 27, 2019 1:58:52 AM (5 years ago)
Author:
Carlos Garcia Campos
Message:

[SOUP] WebSockets: handle TLS certificate and errors
https://bugs.webkit.org/show_bug.cgi?id=199223

Reviewed by Michael Catanzaro.

Connect to accept-certificate signal on the WebSocket message connection to decide what to do in case of TLS errors.

  • NetworkProcess/soup/NetworkSessionSoup.cpp:

(WebKit::webSocketAcceptCertificateCallback):
(WebKit::webSocketMessageNetworkEventCallback):
(WebKit::NetworkSessionSoup::createWebSocketTask):

Location:
trunk/Source/WebKit
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r246877 r246878  
     12019-06-27  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [SOUP] WebSockets: handle TLS certificate and errors
     4        https://bugs.webkit.org/show_bug.cgi?id=199223
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        Connect to accept-certificate signal on the WebSocket message connection to decide what to do in case of TLS errors.
     9
     10        * NetworkProcess/soup/NetworkSessionSoup.cpp:
     11        (WebKit::webSocketAcceptCertificateCallback):
     12        (WebKit::webSocketMessageNetworkEventCallback):
     13        (WebKit::NetworkSessionSoup::createWebSocketTask):
     14
    1152019-06-27  Carlos Garcia Campos  <cgarcia@igalia.com>
    216
  • trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp

    r246877 r246878  
    3131#include "WebCookieManager.h"
    3232#include "WebSocketTaskSoup.h"
     33#include <WebCore/DeprecatedGlobalSettings.h>
    3334#include <WebCore/NetworkStorageSession.h>
    3435#include <WebCore/ResourceRequest.h>
     
    6869}
    6970
     71static gboolean webSocketAcceptCertificateCallback(GTlsConnection*, GTlsCertificate* certificate, GTlsCertificateFlags errors, SoupMessage* soupMessage)
     72{
     73    if (DeprecatedGlobalSettings::allowsAnySSLCertificate())
     74        return TRUE;
     75
     76    return !SoupNetworkSession::checkTLSErrors(soupURIToURL(soup_message_get_uri(soupMessage)), certificate, errors);
     77}
     78
     79static void webSocketMessageNetworkEventCallback(SoupMessage* soupMessage, GSocketClientEvent event, GIOStream* connection)
     80{
     81    if (event != G_SOCKET_CLIENT_TLS_HANDSHAKING)
     82        return;
     83
     84    g_signal_connect(connection, "accept-certificate", G_CALLBACK(webSocketAcceptCertificateCallback), soupMessage);
     85}
     86
    7087std::unique_ptr<WebSocketTask> NetworkSessionSoup::createWebSocketTask(NetworkSocketChannel& channel, const ResourceRequest& request, const String& protocol)
    7188{
     
    7693    GRefPtr<SoupMessage> soupMessage = adoptGRef(soup_message_new_from_uri(SOUP_METHOD_GET, soupURI.get()));
    7794    request.updateSoupMessage(soupMessage.get());
     95    if (request.url().protocolIs("wss"))
     96        g_signal_connect(soupMessage.get(), "network-event", G_CALLBACK(webSocketMessageNetworkEventCallback), nullptr);
    7897    return std::make_unique<WebSocketTask>(channel, soupSession(), soupMessage.get(), protocol);
    7998}
Note: See TracChangeset for help on using the changeset viewer.