Changeset 261163 in webkit


Ignore:
Timestamp:
May 5, 2020 6:40:04 AM (4 years ago)
Author:
youenn@apple.com
Message:

Receiving WebRTC network packets should not go through the main thread
https://bugs.webkit.org/show_bug.cgi?id=211290

Reviewed by Alex Christensen.

Instead of going to main thread before going to rtc network thread, we register a message receiver and dispatch directly to rtc network thread.
This ensures rtc packets are not blocked if main thread is busy.

  • DerivedSources-input.xcfilelist:
  • DerivedSources-output.xcfilelist:
  • DerivedSources.make:
  • NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:

(WebKit::LibWebRTCSocketClient::signalReadPacket):
(WebKit::LibWebRTCSocketClient::signalSentPacket):
(WebKit::LibWebRTCSocketClient::signalAddressReady):
(WebKit::LibWebRTCSocketClient::signalConnect):
(WebKit::LibWebRTCSocketClient::signalClose):

  • NetworkProcess/webrtc/NetworkRTCProvider.cpp:

(WebKit::NetworkRTCProvider::createSocket):
(WebKit::NetworkRTCProvider::createServerTCPSocket):
(WebKit::NetworkRTCProvider::createClientTCPSocket):
(WebKit::NetworkRTCProvider::newConnection):
(WebKit::NetworkRTCProvider::closeListeningSockets):

  • Sources.txt:
  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/Network/NetworkProcessConnection.cpp:

(WebKit::NetworkProcessConnection::NetworkProcessConnection):
(WebKit::NetworkProcessConnection::didReceiveMessage):

  • WebProcess/Network/webrtc/LibWebRTCNetwork.cpp: Added
  • WebProcess/Network/webrtc/LibWebRTCNetwork.h:

(WebKit::LibWebRTCNetwork::connection):
(WebKit::LibWebRTCNetwork::~LibWebRTCNetwork):
(WebKit::LibWebRTCNetwork::networkProcessCrashed):
(WebKit::LibWebRTCNetwork::setConnection):
(WebKit::LibWebRTCNetwork::dispatchToThread):
(WebKit::LibWebRTCNetwork::signalAddressReady):
(WebKit::LibWebRTCNetwork::signalReadPacket):
(WebKit::LibWebRTCNetwork::signalSentPacket):
(WebKit::LibWebRTCNetwork::signalConnect):
(WebKit::LibWebRTCNetwork::signalClose):
(WebKit::LibWebRTCNetwork::signalNewConnection):

  • WebProcess/Network/webrtc/LibWebRTCNetwork.messages.in: Added.
  • WebProcess/Network/webrtc/LibWebRTCSocket.h:
  • WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
  • WebProcess/Network/webrtc/WebRTCSocket.cpp: Removed.
  • WebProcess/Network/webrtc/WebRTCSocket.h: Removed.
Location:
trunk/Source/WebKit
Files:
1 added
2 deleted
14 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/CMakeLists.txt

    r260277 r261163  
    235235    WebProcess/Inspector/WebInspectorUI.messages.in
    236236
     237    WebProcess/Network/webrtc/LibWebRTCNetwork.messages.in
    237238    WebProcess/Network/webrtc/WebMDNSRegister.messages.in
    238239    WebProcess/Network/webrtc/WebRTCMonitor.messages.in
    239240    WebProcess/Network/webrtc/WebRTCResolver.messages.in
    240     WebProcess/Network/webrtc/WebRTCSocket.messages.in
    241241
    242242    WebProcess/Network/NetworkProcessConnection.messages.in
  • trunk/Source/WebKit/ChangeLog

    r261157 r261163  
     12020-05-05  Youenn Fablet  <youenn@apple.com>
     2
     3        Receiving WebRTC network packets should not go through the main thread
     4        https://bugs.webkit.org/show_bug.cgi?id=211290
     5
     6        Reviewed by Alex Christensen.
     7
     8        Instead of going to main thread before going to rtc network thread, we register a message receiver and dispatch directly to rtc network thread.
     9        This ensures rtc packets are not blocked if main thread is busy.
     10
     11        * DerivedSources-input.xcfilelist:
     12        * DerivedSources-output.xcfilelist:
     13        * DerivedSources.make:
     14        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
     15        (WebKit::LibWebRTCSocketClient::signalReadPacket):
     16        (WebKit::LibWebRTCSocketClient::signalSentPacket):
     17        (WebKit::LibWebRTCSocketClient::signalAddressReady):
     18        (WebKit::LibWebRTCSocketClient::signalConnect):
     19        (WebKit::LibWebRTCSocketClient::signalClose):
     20        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
     21        (WebKit::NetworkRTCProvider::createSocket):
     22        (WebKit::NetworkRTCProvider::createServerTCPSocket):
     23        (WebKit::NetworkRTCProvider::createClientTCPSocket):
     24        (WebKit::NetworkRTCProvider::newConnection):
     25        (WebKit::NetworkRTCProvider::closeListeningSockets):
     26        * Sources.txt:
     27        * WebKit.xcodeproj/project.pbxproj:
     28        * WebProcess/Network/NetworkProcessConnection.cpp:
     29        (WebKit::NetworkProcessConnection::NetworkProcessConnection):
     30        (WebKit::NetworkProcessConnection::didReceiveMessage):
     31        * WebProcess/Network/webrtc/LibWebRTCNetwork.cpp: Added
     32        * WebProcess/Network/webrtc/LibWebRTCNetwork.h:
     33        (WebKit::LibWebRTCNetwork::connection):
     34        (WebKit::LibWebRTCNetwork::~LibWebRTCNetwork):
     35        (WebKit::LibWebRTCNetwork::networkProcessCrashed):
     36        (WebKit::LibWebRTCNetwork::setConnection):
     37        (WebKit::LibWebRTCNetwork::dispatchToThread):
     38        (WebKit::LibWebRTCNetwork::signalAddressReady):
     39        (WebKit::LibWebRTCNetwork::signalReadPacket):
     40        (WebKit::LibWebRTCNetwork::signalSentPacket):
     41        (WebKit::LibWebRTCNetwork::signalConnect):
     42        (WebKit::LibWebRTCNetwork::signalClose):
     43        (WebKit::LibWebRTCNetwork::signalNewConnection):
     44        * WebProcess/Network/webrtc/LibWebRTCNetwork.messages.in: Added.
     45        * WebProcess/Network/webrtc/LibWebRTCSocket.h:
     46        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
     47        * WebProcess/Network/webrtc/WebRTCSocket.cpp: Removed.
     48        * WebProcess/Network/webrtc/WebRTCSocket.h: Removed.
     49
    1502020-05-05  Tim Horton  <timothy_horton@apple.com>
    251
  • trunk/Source/WebKit/DerivedSources-input.xcfilelist

    r260102 r261163  
    141141$(PROJECT_DIR)/WebProcess/Network/WebSocketChannel.messages.in
    142142$(PROJECT_DIR)/WebProcess/Network/WebSocketStream.messages.in
     143$(PROJECT_DIR)/WebProcess/Network/webrtc/LibWebRTCNetwork.messages.in
    143144$(PROJECT_DIR)/WebProcess/Network/webrtc/WebMDNSRegister.messages.in
    144145$(PROJECT_DIR)/WebProcess/Network/webrtc/WebRTCMonitor.messages.in
    145146$(PROJECT_DIR)/WebProcess/Network/webrtc/WebRTCResolver.messages.in
    146 $(PROJECT_DIR)/WebProcess/Network/webrtc/WebRTCSocket.messages.in
    147147$(PROJECT_DIR)/WebProcess/Notifications/WebNotificationManager.messages.in
    148148$(PROJECT_DIR)/WebProcess/Plugins/PluginProcessConnection.messages.in
  • trunk/Source/WebKit/DerivedSources-output.xcfilelist

    r260102 r261163  
    5858$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/LibWebRTCCodecsProxyMessages.h
    5959$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/LibWebRTCCodecsProxyMessagesReplies.h
     60$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/LibWebRTCNetworkMessageReceiver.cpp
     61$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/LibWebRTCNetworkMessages.h
     62$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/LibWebRTCNetworkMessagesReplies.h
    6063$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/LibWebRTCRemoteCodecsMessageReceiver.cpp
    6164$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/LibWebRTCRemoteCodecsMessages.h
     
    385388$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/WebRTCResolverMessages.h
    386389$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/WebRTCResolverMessagesReplies.h
    387 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/WebRTCSocketMessageReceiver.cpp
    388 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/WebRTCSocketMessages.h
    389 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/WebRTCSocketMessagesReplies.h
    390390$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/WebResourceLoaderMessageReceiver.cpp
    391391$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/WebResourceLoaderMessages.h
  • trunk/Source/WebKit/DerivedSources.make

    r260717 r261163  
    130130    LibWebRTCCodecs \
    131131    LibWebRTCCodecsProxy \
     132    LibWebRTCNetwork \
    132133    MediaPlayerPrivateRemote \
    133134    NPObjectMessageReceiver \
     
    229230    WebRTCMonitor \
    230231    WebRTCResolver \
    231     WebRTCSocket \
    232232    WebResourceLoader \
    233233    WebSWClientConnection \
  • trunk/Source/WebKit/NetworkProcess/webrtc/LibWebRTCSocketClient.cpp

    r260227 r261163  
    3131#include "Connection.h"
    3232#include "DataReference.h"
     33#include "LibWebRTCNetworkMessages.h"
    3334#include "Logging.h"
    3435#include "NetworkRTCProvider.h"
    35 #include "WebRTCSocketMessages.h"
    3636#include <WebCore/SharedBuffer.h>
    3737#include <wtf/Function.h>
     
    101101    m_rtcProvider.sendFromMainThread([identifier = m_identifier, buffer = WTFMove(buffer), address = RTCNetwork::isolatedCopy(address), packetTime](IPC::Connection& connection) {
    102102        IPC::DataReference data(reinterpret_cast<const uint8_t*>(buffer->data()), buffer->size());
    103         connection.send(Messages::WebRTCSocket::SignalReadPacket(data, RTCNetwork::IPAddress(address.ipaddr()), address.port(), packetTime), identifier);
     103        connection.send(Messages::LibWebRTCNetwork::SignalReadPacket(identifier, data, RTCNetwork::IPAddress(address.ipaddr()), address.port(), packetTime), 0);
    104104    });
    105105}
     
    109109    ASSERT_UNUSED(socket, m_socket.get() == socket);
    110110    m_rtcProvider.sendFromMainThread([identifier = m_identifier, sentPacket](IPC::Connection& connection) {
    111         connection.send(Messages::WebRTCSocket::SignalSentPacket(sentPacket.packet_id, sentPacket.send_time_ms), identifier);
     111        connection.send(Messages::LibWebRTCNetwork::SignalSentPacket(identifier, sentPacket.packet_id, sentPacket.send_time_ms), 0);
    112112    });
    113113}
     
    123123    ASSERT_UNUSED(socket, m_socket.get() == socket);
    124124    m_rtcProvider.sendFromMainThread([identifier = m_identifier, address = RTCNetwork::isolatedCopy(address)](IPC::Connection& connection) {
    125         connection.send(Messages::WebRTCSocket::SignalAddressReady(RTCNetwork::SocketAddress(address)), identifier);
     125        connection.send(Messages::LibWebRTCNetwork::SignalAddressReady(identifier, RTCNetwork::SocketAddress(address)), 0);
    126126    });
    127127}
     
    136136    ASSERT_UNUSED(socket, m_socket.get() == socket);
    137137    m_rtcProvider.sendFromMainThread([identifier = m_identifier](IPC::Connection& connection) {
    138         connection.send(Messages::WebRTCSocket::SignalConnect(), identifier);
     138        connection.send(Messages::LibWebRTCNetwork::SignalConnect(identifier), 0);
    139139    });
    140140}
     
    144144    ASSERT_UNUSED(socket, m_socket.get() == socket);
    145145    m_rtcProvider.sendFromMainThread([identifier = m_identifier, error](IPC::Connection& connection) {
    146         connection.send(Messages::WebRTCSocket::SignalClose(error), identifier);
     146        connection.send(Messages::LibWebRTCNetwork::SignalClose(identifier, error), 0);
    147147    });
    148148    // We want to remove 'this' from the socket map now but we will destroy it asynchronously
  • trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp

    r260260 r261163  
    2929#if USE(LIBWEBRTC)
    3030
     31#include "LibWebRTCNetworkMessages.h"
    3132#include "LibWebRTCSocketClient.h"
    3233#include "Logging.h"
     
    3637#include "NetworkRTCSocket.h"
    3738#include "WebRTCResolverMessages.h"
    38 #include "WebRTCSocketMessages.h"
    3939#include <WebCore/LibWebRTCMacros.h>
    4040#include <webrtc/rtc_base/async_packet_socket.h>
     
    119119        sendFromMainThread([this, identifier, size = m_sockets.size()](IPC::Connection& connection) {
    120120            RELEASE_LOG_ERROR_IF_ALLOWED("createSocket with %u sockets is unable to create a new socket", size);
    121             connection.send(Messages::WebRTCSocket::SignalClose(1), identifier);
     121            connection.send(Messages::LibWebRTCNetwork::SignalClose(identifier, 1), 0);
    122122        });
    123123        return;
     
    138138    if (!m_isListeningSocketAuthorized) {
    139139        if (m_connection)
    140             m_connection->connection().send(Messages::WebRTCSocket::SignalClose(1), identifier);
     140            m_connection->connection().send(Messages::LibWebRTCNetwork::SignalClose(identifier, 1), 0);
    141141        return;
    142142    }
     
    159159    auto* session = m_connection->networkSession();
    160160    if (!session) {
    161         m_connection->connection().send(Messages::WebRTCSocket::SignalClose(1), identifier);
     161        m_connection->connection().send(Messages::LibWebRTCNetwork::SignalClose(identifier, 1), 0);
    162162        return;
    163163    }
     
    194194    auto incomingSocketIdentifier = LibWebRTCSocketIdentifier::generate();
    195195    sendFromMainThread([identifier = serverSocket.identifier(), incomingSocketIdentifier, remoteAddress = RTCNetwork::isolatedCopy(newSocket->GetRemoteAddress())](IPC::Connection& connection) {
    196         connection.send(Messages::WebRTCSocket::SignalNewConnection(incomingSocketIdentifier, RTCNetwork::SocketAddress(remoteAddress)), identifier);
     196        connection.send(Messages::LibWebRTCNetwork::SignalNewConnection(identifier, incomingSocketIdentifier, RTCNetwork::SocketAddress(remoteAddress)), 0);
    197197    });
    198198    m_pendingIncomingSockets.add(incomingSocketIdentifier, WTFMove(newSocket));
     
    265265            if (provider->m_connection) {
    266266                for (auto identifier : listeningSocketIdentifiers)
    267                     provider->m_connection->connection().send(Messages::WebRTCSocket::SignalClose(ECONNABORTED), identifier);
     267                    provider->m_connection->connection().send(Messages::LibWebRTCNetwork::SignalClose(identifier, ECONNABORTED), 0);
    268268            }
    269269            completionHandler();
  • trunk/Source/WebKit/Sources.txt

    r260653 r261163  
    590590WebProcess/Network/WebSocketStream.cpp
    591591
     592WebProcess/Network/webrtc/LibWebRTCNetwork.cpp
    592593WebProcess/Network/webrtc/LibWebRTCProvider.cpp
    593594WebProcess/Network/webrtc/LibWebRTCResolver.cpp
     
    597598WebProcess/Network/webrtc/WebRTCMonitor.cpp
    598599WebProcess/Network/webrtc/WebRTCResolver.cpp
    599 WebProcess/Network/webrtc/WebRTCSocket.cpp
    600600
    601601WebProcess/Notifications/NotificationPermissionRequestManager.cpp
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r260888 r261163  
    10751075                51F060E01654317F00F3281B /* WebResourceLoaderMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F060DE1654317500F3281B /* WebResourceLoaderMessages.h */; };
    10761076                51F060E11654318500F3281B /* WebResourceLoaderMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F060DD1654317500F3281B /* WebResourceLoaderMessageReceiver.cpp */; };
    1077                 51F060E11654318500F3281C /* WebRTCSocketMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F060DD1654317500F3281C /* WebRTCSocketMessageReceiver.cpp */; };
     1077                51F060E11654318500F3281C /* LibWebRTCNetworkMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F060DD1654317500F3281C /* LibWebRTCNetworkMessageReceiver.cpp */; };
    10781078                51F060E11654318500F3281D /* NetworkRTCSocketMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F060DD1654317500F3281D /* NetworkRTCSocketMessageReceiver.cpp */; };
    10791079                51F060E11654318500F3281E /* NetworkRTCMonitorMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F060DD1654317500F3281E /* NetworkRTCMonitorMessageReceiver.cpp */; };
     
    34303430                4158649A23BE092400A0A61E /* RTCEncoderIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCEncoderIdentifier.h; sourceTree = "<group>"; };
    34313431                416CD74523FB178B00661D99 /* MDNSRegisterIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MDNSRegisterIdentifier.h; path = Network/webrtc/MDNSRegisterIdentifier.h; sourceTree = "<group>"; };
     3432                416F8086245B397400B68F02 /* LibWebRTCNetwork.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = LibWebRTCNetwork.messages.in; path = Network/webrtc/LibWebRTCNetwork.messages.in; sourceTree = "<group>"; };
     3433                416F8089245C7FF500B68F02 /* LibWebRTCNetwork.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LibWebRTCNetwork.cpp; path = Network/webrtc/LibWebRTCNetwork.cpp; sourceTree = "<group>"; };
    34323434                4172198923B6128200AE5686 /* LibWebRTCCodecs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LibWebRTCCodecs.h; sourceTree = "<group>"; };
    34333435                4172198A23B6128200AE5686 /* LibWebRTCCodecs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LibWebRTCCodecs.cpp; sourceTree = "<group>"; };
     
    38123814                51E949961D761CC700EC9EB9 /* UIGamepadProviderIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = UIGamepadProviderIOS.mm; sourceTree = "<group>"; };
    38133815                51F060DD1654317500F3281B /* WebResourceLoaderMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = WebResourceLoaderMessageReceiver.cpp; path = DerivedSources/WebKit2/WebResourceLoaderMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
    3814                 51F060DD1654317500F3281C /* WebRTCSocketMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = WebRTCSocketMessageReceiver.cpp; path = DerivedSources/WebKit2/WebRTCSocketMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
     3816                51F060DD1654317500F3281C /* LibWebRTCNetworkMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LibWebRTCNetworkMessageReceiver.cpp; path = DerivedSources/WebKit2/LibWebRTCNetworkMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
    38153817                51F060DD1654317500F3281D /* NetworkRTCSocketMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkRTCSocketMessageReceiver.cpp; path = DerivedSources/WebKit2/NetworkRTCSocketMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
    38163818                51F060DD1654317500F3281E /* NetworkRTCMonitorMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkRTCMonitorMessageReceiver.cpp; path = DerivedSources/WebKit2/NetworkRTCMonitorMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
     
    75867588                        isa = PBXGroup;
    75877589                        children = (
     7590                                416F8089245C7FF500B68F02 /* LibWebRTCNetwork.cpp */,
    75887591                                411B22621E371244004F7363 /* LibWebRTCNetwork.h */,
     7592                                416F8086245B397400B68F02 /* LibWebRTCNetwork.messages.in */,
    75897593                                413075A71DE85EE70039EC69 /* LibWebRTCProvider.cpp */,
    75907594                                413075A81DE85EE70039EC69 /* LibWebRTCProvider.h */,
     
    99849988                                2984F57A164B915F004BC0C6 /* LegacyCustomProtocolManagerProxyMessageReceiver.cpp */,
    99859989                                2984F57B164B915F004BC0C6 /* LegacyCustomProtocolManagerProxyMessages.h */,
     9990                                51F060DD1654317500F3281C /* LibWebRTCNetworkMessageReceiver.cpp */,
    99869991                                07E19EF823D401F00094FFB4 /* MediaPlayerPrivateRemoteMessageReceiver.cpp */,
    99879992                                07E19EF923D401F00094FFB4 /* MediaPlayerPrivateRemoteMessages.h */,
     
    1018510190                                51F060DD1654317500F3281F /* WebRTCMonitorMessageReceiver.cpp */,
    1018610191                                51F060DD1654317500F3282C /* WebRTCResolverMessageReceiver.cpp */,
    10187                                 51F060DD1654317500F3281C /* WebRTCSocketMessageReceiver.cpp */,
    1018810192                                41F060DD1654317500F3281C /* WebSocketChannelMessageReceiver.cpp */,
    1018910193                                5C0B17761E7C879C00E9123C /* WebSocketStreamMessageReceiver.cpp */,
     
    1269012694                                2984F588164BA095004BC0C6 /* LegacyCustomProtocolManagerMessageReceiver.cpp in Sources */,
    1269112695                                2984F57C164B915F004BC0C6 /* LegacyCustomProtocolManagerProxyMessageReceiver.cpp in Sources */,
     12696                                51F060E11654318500F3281C /* LibWebRTCNetworkMessageReceiver.cpp in Sources */,
    1269212697                                449D90DA21FDC30B00F677C0 /* LocalAuthenticationSoftLink.mm in Sources */,
    1269312698                                2D92A779212B6A6100F493FD /* Logging.cpp in Sources */,
     
    1302213027                                51F060E11654318500F3281F /* WebRTCMonitorMessageReceiver.cpp in Sources */,
    1302313028                                51F060E11654318500F3282C /* WebRTCResolverMessageReceiver.cpp in Sources */,
    13024                                 51F060E11654318500F3281C /* WebRTCSocketMessageReceiver.cpp in Sources */,
    1302513029                                41E0A7CB23B645CD00561060 /* WebSocketChannel.cpp in Sources */,
    1302613030                                41F060E11654318500F3281C /* WebSocketChannelMessageReceiver.cpp in Sources */,
  • trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp

    r260068 r261163  
    4747#include "WebRTCMonitorMessages.h"
    4848#include "WebRTCResolverMessages.h"
    49 #include "WebRTCSocketMessages.h"
    5049#include "WebResourceLoaderMessages.h"
    5150#include "WebSWClientConnection.h"
     
    7877{
    7978    m_connection->open();
     79    WebProcess::singleton().libWebRTCNetwork().setConnection(m_connection.copyRef());
    8080}
    8181
     
    113113
    114114#if USE(LIBWEBRTC)
    115     if (decoder.messageReceiverName() == Messages::WebRTCSocket::messageReceiverName()) {
    116         auto& network = WebProcess::singleton().libWebRTCNetwork();
    117         if (network.isActive())
    118             network.socket(makeObjectIdentifier<LibWebRTCSocketIdentifierType>(decoder.destinationID())).didReceiveMessage(connection, decoder);
    119         else
    120             RELEASE_LOG_ERROR(WebRTC, "Received WebRTCSocket message while libWebRTCNetwork is not active");
    121         return;
    122     }
    123115    if (decoder.messageReceiverName() == Messages::WebRTCMonitor::messageReceiverName()) {
    124116        auto& network = WebProcess::singleton().libWebRTCNetwork();
  • trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCNetwork.h

    r258200 r261163  
    2626#pragma once
    2727
    28 #if USE(LIBWEBRTC)
     28#include "Connection.h"
    2929#include "LibWebRTCProvider.h"
    3030#include "LibWebRTCSocketFactory.h"
     31#include "WebMDNSRegister.h"
    3132#include "WebRTCMonitor.h"
    3233#include "WebRTCResolver.h"
    33 #include "WebRTCSocket.h"
    34 #endif
    35 
    36 #include "WebMDNSRegister.h"
    3734#include <WebCore/LibWebRTCSocketIdentifier.h>
    3835
    3936namespace WebKit {
    4037
    41 class LibWebRTCNetwork {
     38class LibWebRTCNetwork : public IPC::Connection::ThreadMessageReceiver {
    4239    WTF_MAKE_FAST_ALLOCATED;
    4340public:
    4441    LibWebRTCNetwork() = default;
     42    ~LibWebRTCNetwork();
    4543
     44    void setConnection(RefPtr<IPC::Connection>&&);
    4645    void networkProcessCrashed();
    4746
     
    4948
    5049#if USE(LIBWEBRTC)
     50    void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
     51
    5152    WebRTCMonitor& monitor() { return m_webNetworkMonitor; }
    5253    LibWebRTCSocketFactory& socketFactory() { return m_socketFactory; }
     
    5455    void disableNonLocalhostConnections() { socketFactory().disableNonLocalhostConnections(); }
    5556
    56     WebRTCSocket socket(WebCore::LibWebRTCSocketIdentifier identifier) { return WebRTCSocket(socketFactory(), identifier); }
    5757    WebRTCResolver resolver(LibWebRTCResolverIdentifier identifier) { return WebRTCResolver(socketFactory(), identifier); }
    5858#endif
     
    6464private:
    6565#if USE(LIBWEBRTC)
     66    void signalReadPacket(WebCore::LibWebRTCSocketIdentifier, const IPC::DataReference&, const RTCNetwork::IPAddress&, uint16_t port, int64_t);
     67    void signalSentPacket(WebCore::LibWebRTCSocketIdentifier, int, int64_t);
     68    void signalAddressReady(WebCore::LibWebRTCSocketIdentifier, const RTCNetwork::SocketAddress&);
     69    void signalConnect(WebCore::LibWebRTCSocketIdentifier);
     70    void signalClose(WebCore::LibWebRTCSocketIdentifier, int);
     71    void signalNewConnection(WebCore::LibWebRTCSocketIdentifier socketIdentifier, WebCore::LibWebRTCSocketIdentifier newSocketIdentifier, const WebKit::RTCNetwork::SocketAddress&);
     72#endif
     73
     74    // IPC::Connection::ThreadMessageReceiver
     75    void dispatchToThread(Function<void()>&&) final;
     76
     77#if USE(LIBWEBRTC)
    6678    LibWebRTCSocketFactory m_socketFactory;
    6779    WebRTCMonitor m_webNetworkMonitor;
     
    7082    WebMDNSRegister m_mdnsRegister;
    7183#endif
     84    RefPtr<IPC::Connection> m_connection;
    7285};
    7386
    74 inline void LibWebRTCNetwork::networkProcessCrashed()
    75 {
    76 #if USE(LIBWEBRTC)
    77     m_webNetworkMonitor.networkProcessCrashed();
    78 #endif
    79 }
    80 
    81 inline bool LibWebRTCNetwork::isActive() const
    82 {
    83 #if USE(LIBWEBRTC)
    84     return WebCore::LibWebRTCProvider::hasWebRTCThreads();
    85 #else
    86     return false;
    87 #endif
    88 }
    89 
    9087} // namespace WebKit
  • trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCNetwork.messages.in

    r261162 r261163  
    2323#if USE(LIBWEBRTC)
    2424
    25 messages -> WebRTCSocket NotRefCounted {
    26     SignalReadPacket(IPC::DataReference data, WebKit::RTCNetwork::IPAddress address, uint16_t port, int64_t timestamp)
    27     SignalSentPacket(int packetSize, int64_t timestamp)
    28     SignalAddressReady(WebKit::RTCNetwork::SocketAddress address)
    29     SignalConnect()
    30     SignalClose(int error)
    31     SignalNewConnection(WebCore::LibWebRTCSocketIdentifier newSocketIdentifier, WebKit::RTCNetwork::SocketAddress remoteAddress)
     25messages -> LibWebRTCNetwork NotRefCounted {
     26    SignalReadPacket(WebCore::LibWebRTCSocketIdentifier socketIdentifier, IPC::DataReference data, WebKit::RTCNetwork::IPAddress address, uint16_t port, int64_t timestamp)
     27    SignalSentPacket(WebCore::LibWebRTCSocketIdentifier socketIdentifier, int packetSize, int64_t timestamp)
     28    SignalAddressReady(WebCore::LibWebRTCSocketIdentifier socketIdentifier, WebKit::RTCNetwork::SocketAddress address)
     29    SignalConnect(WebCore::LibWebRTCSocketIdentifier socketIdentifier)
     30    SignalClose(WebCore::LibWebRTCSocketIdentifier socketIdentifier, int error)
     31    SignalNewConnection(WebCore::LibWebRTCSocketIdentifier socketIdentifier, WebCore::LibWebRTCSocketIdentifier newSocketIdentifier, WebKit::RTCNetwork::SocketAddress remoteAddress)
    3232}
    3333
  • trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocket.cpp

    r250726 r261163  
    8282}
    8383
    84 void LibWebRTCSocket::signalReadPacket(const WebCore::SharedBuffer& buffer, rtc::SocketAddress&& address, int64_t timestamp)
     84void LibWebRTCSocket::signalReadPacket(const uint8_t* data, size_t size, rtc::SocketAddress&& address, int64_t timestamp)
    8585{
    8686    if (m_isSuspended)
     
    8888
    8989    m_remoteAddress = WTFMove(address);
    90     SignalReadPacket(this, buffer.data(), buffer.size(), m_remoteAddress, timestamp);
     90    SignalReadPacket(this, reinterpret_cast<const char*>(data), size, m_remoteAddress, timestamp);
    9191}
    9292
  • trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocket.h

    r252472 r261163  
    4040}
    4141
    42 namespace WebCore {
    43 class SharedBuffer;
    44 }
    45 
    4642namespace WebKit {
    4743
     
    7066    bool willSend(size_t);
    7167
    72     friend class WebRTCSocket;
    73     void signalReadPacket(const WebCore::SharedBuffer&, rtc::SocketAddress&&, int64_t);
     68    friend class LibWebRTCNetwork;
     69    void signalReadPacket(const uint8_t*, size_t, rtc::SocketAddress&&, int64_t);
    7470    void signalSentPacket(int, int64_t);
    7571    void signalAddressReady(const rtc::SocketAddress&);
  • trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp

    r256185 r261163  
    3333#include "NetworkRTCProviderMessages.h"
    3434#include "WebProcess.h"
    35 #include "WebRTCSocket.h"
    3635#include <wtf/MainThread.h>
    3736
Note: See TracChangeset for help on using the changeset viewer.