Changeset 280523 in webkit
- Timestamp:
- Aug 1, 2021 9:02:21 AM (12 months ago)
- Location:
- trunk/Source
- Files:
-
- 12 edited
-
WTF/ChangeLog (modified) (1 diff)
-
WTF/Scripts/Preferences/WebPreferencesExperimental.yaml (modified) (1 diff)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp (modified) (2 diffs)
-
WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h (modified) (1 diff)
-
WebKit/NetworkProcess/webrtc/NetworkRTCProvider.messages.in (modified) (1 diff)
-
WebKit/NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.h (modified) (1 diff)
-
WebKit/NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm (modified) (3 diffs)
-
WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp (modified) (4 diffs)
-
WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h (modified) (2 diffs)
-
WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp (modified) (2 diffs)
-
WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r280520 r280523 1 2021-08-01 Youenn Fablet <youenn@apple.com> 2 3 Introduce an experimental feature to toggle WebRTC socket proxying 4 https://bugs.webkit.org/show_bug.cgi?id=228681 5 6 Reviewed by Eric Carlson. 7 8 * Scripts/Preferences/WebPreferencesExperimental.yaml: 9 1 10 2021-07-31 Yusuke Suzuki <ysuzuki@apple.com> 2 11 -
trunk/Source/WTF/Scripts/Preferences/WebPreferencesExperimental.yaml
r280509 r280523 1358 1358 default: false 1359 1359 1360 WebRTCSocketsProxyingEnabled: 1361 type: bool 1362 humanReadableName: "WebRTC Sockets Proxying" 1363 humanReadableDescription: "Enable WebRTC Sockets Proxying" 1364 condition: ENABLE(WEB_RTC) 1365 defaultValue: 1366 WebKitLegacy: 1367 default: false 1368 WebKit: 1369 default: false 1370 WebCore: 1371 default: false 1372 1360 1373 WebRTCVP9Profile0CodecEnabled: 1361 1374 type: bool -
trunk/Source/WebKit/ChangeLog
r280518 r280523 1 2021-08-01 Youenn Fablet <youenn@apple.com> 2 3 Introduce an experimental feature to toggle WebRTC socket proxying 4 https://bugs.webkit.org/show_bug.cgi?id=228681 5 6 Reviewed by Eric Carlson. 7 8 Decide whether to disable proxying based on experimental feature in WebProcess. 9 Send the disable relay value from WebProcess to NetworkProcess for TCP sockets. 10 Manually tested. 11 12 * NetworkProcess/webrtc/NetworkRTCProvider.cpp: 13 (WebKit::NetworkRTCProvider::createClientTCPSocket): 14 * NetworkProcess/webrtc/NetworkRTCProvider.h: 15 * NetworkProcess/webrtc/NetworkRTCProvider.messages.in: 16 * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.h: 17 * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm: 18 (WebKit::NetworkRTCTCPSocketCocoa::createClientTCPSocket): 19 (WebKit::NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa): 20 * WebProcess/Network/webrtc/LibWebRTCProvider.cpp: 21 (WebKit::RTCSocketFactory::CreateClientTcpSocket): 22 (WebKit::LibWebRTCProvider::createSocketFactory): 23 * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp: 24 (WebKit::LibWebRTCSocketFactory::createClientTcpSocket): 25 * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h: 26 1 27 2021-07-31 Youenn Fablet <youenn@apple.com> 2 28 -
trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp
r280481 r280523 178 178 #endif 179 179 180 void NetworkRTCProvider::createClientTCPSocket(LibWebRTCSocketIdentifier identifier, const RTCNetwork::SocketAddress& localAddress, const RTCNetwork::SocketAddress& remoteAddress, String&& userAgent, int options )181 { 182 callOnMainRunLoop([this, protectedThis = makeRef(*this), identifier, localAddress, remoteAddress, userAgent = WTFMove(userAgent).isolatedCopy(), options ]() mutable {180 void NetworkRTCProvider::createClientTCPSocket(LibWebRTCSocketIdentifier identifier, const RTCNetwork::SocketAddress& localAddress, const RTCNetwork::SocketAddress& remoteAddress, String&& userAgent, int options, bool isRelayDisabled) 181 { 182 callOnMainRunLoop([this, protectedThis = makeRef(*this), identifier, localAddress, remoteAddress, userAgent = WTFMove(userAgent).isolatedCopy(), options, isRelayDisabled]() mutable { 183 183 if (!m_connection) 184 184 return; … … 189 189 return; 190 190 } 191 callOnRTCNetworkThread([this, identifier, localAddress = RTCNetwork::isolatedCopy(localAddress.value), remoteAddress = RTCNetwork::isolatedCopy(remoteAddress.value), proxyInfo = proxyInfoFromSession(remoteAddress, *session), userAgent = WTFMove(userAgent).isolatedCopy(), options ]() mutable {191 callOnRTCNetworkThread([this, identifier, localAddress = RTCNetwork::isolatedCopy(localAddress.value), remoteAddress = RTCNetwork::isolatedCopy(remoteAddress.value), proxyInfo = proxyInfoFromSession(remoteAddress, *session), userAgent = WTFMove(userAgent).isolatedCopy(), options, isRelayDisabled]() mutable { 192 192 #if PLATFORM(COCOA) 193 193 if (m_platformTCPSocketsEnabled) { 194 if (auto socket = NetworkRTCTCPSocketCocoa::createClientTCPSocket(identifier, *this, remoteAddress, options, m_ipcConnection.copyRef())) {194 if (auto socket = NetworkRTCTCPSocketCocoa::createClientTCPSocket(identifier, *this, remoteAddress, options, isRelayDisabled, m_ipcConnection.copyRef())) { 195 195 addSocket(identifier, WTFMove(socket)); 196 196 return; -
trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h
r280481 r280523 115 115 116 116 void createUDPSocket(WebCore::LibWebRTCSocketIdentifier, const RTCNetwork::SocketAddress&, uint16_t, uint16_t, bool isFirstParty, bool isRelayDisabled, WebCore::RegistrableDomain&&); 117 void createClientTCPSocket(WebCore::LibWebRTCSocketIdentifier, const RTCNetwork::SocketAddress&, const RTCNetwork::SocketAddress&, String&& userAgent, int );117 void createClientTCPSocket(WebCore::LibWebRTCSocketIdentifier, const RTCNetwork::SocketAddress&, const RTCNetwork::SocketAddress&, String&& userAgent, int, bool isRelayDisabled); 118 118 void createServerTCPSocket(WebCore::LibWebRTCSocketIdentifier, const RTCNetwork::SocketAddress&, uint16_t minPort, uint16_t maxPort, int); 119 119 void wrapNewTCPConnection(WebCore::LibWebRTCSocketIdentifier identifier, WebCore::LibWebRTCSocketIdentifier newConnectionSocketIdentifier); -
trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.messages.in
r279483 r280523 26 26 CreateUDPSocket(WebCore::LibWebRTCSocketIdentifier identifier, WebKit::RTCNetwork::SocketAddress localAddress, uint16_t minPort, uint16_t maxPort, bool isFirstParty, bool isRelayDisabled, WebCore::RegistrableDomain domain) 27 27 CreateServerTCPSocket(WebCore::LibWebRTCSocketIdentifier identifier, WebKit::RTCNetwork::SocketAddress localAddress, uint16_t minPort, uint16_t maxPort, int options) 28 CreateClientTCPSocket(WebCore::LibWebRTCSocketIdentifier identifier, WebKit::RTCNetwork::SocketAddress localAddress, WebKit::RTCNetwork::SocketAddress remoteAddress, String userAgent, int options )28 CreateClientTCPSocket(WebCore::LibWebRTCSocketIdentifier identifier, WebKit::RTCNetwork::SocketAddress localAddress, WebKit::RTCNetwork::SocketAddress remoteAddress, String userAgent, int options, bool isRelayDisabled) 29 29 WrapNewTCPConnection(WebCore::LibWebRTCSocketIdentifier identifier, WebCore::LibWebRTCSocketIdentifier newConnectionSocketIdentifier) 30 30 -
trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.h
r279461 r280523 40 40 WTF_MAKE_FAST_ALLOCATED; 41 41 public: 42 static std::unique_ptr<NetworkRTCProvider::Socket> createClientTCPSocket(WebCore::LibWebRTCSocketIdentifier, NetworkRTCProvider&, const rtc::SocketAddress&, int options, Ref<IPC::Connection>&&);42 static std::unique_ptr<NetworkRTCProvider::Socket> createClientTCPSocket(WebCore::LibWebRTCSocketIdentifier, NetworkRTCProvider&, const rtc::SocketAddress&, int options, bool isRelayDisabled, Ref<IPC::Connection>&&); 43 43 44 NetworkRTCTCPSocketCocoa(WebCore::LibWebRTCSocketIdentifier, NetworkRTCProvider&, const rtc::SocketAddress&, int options, Ref<IPC::Connection>&&);44 NetworkRTCTCPSocketCocoa(WebCore::LibWebRTCSocketIdentifier, NetworkRTCProvider&, const rtc::SocketAddress&, int options, bool isRelayDisabled, Ref<IPC::Connection>&&); 45 45 46 46 private: -
trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm
r280481 r280523 51 51 } 52 52 53 std::unique_ptr<NetworkRTCProvider::Socket> NetworkRTCTCPSocketCocoa::createClientTCPSocket(LibWebRTCSocketIdentifier identifier, NetworkRTCProvider& rtcProvider, const rtc::SocketAddress& remoteAddress, int tcpOptions, Ref<IPC::Connection>&& connection)53 std::unique_ptr<NetworkRTCProvider::Socket> NetworkRTCTCPSocketCocoa::createClientTCPSocket(LibWebRTCSocketIdentifier identifier, NetworkRTCProvider& rtcProvider, const rtc::SocketAddress& remoteAddress, int tcpOptions, bool isRelayDisabled, Ref<IPC::Connection>&& connection) 54 54 { 55 55 // FIXME: We should migrate ssltcp candidates, maybe support OPT_TLS_INSECURE as well. 56 56 if ((tcpOptions & rtc::PacketSocketFactory::OPT_TLS_FAKE) || (tcpOptions & rtc::PacketSocketFactory::OPT_TLS_INSECURE)) 57 57 return nullptr; 58 return makeUnique<NetworkRTCTCPSocketCocoa>(identifier, rtcProvider, remoteAddress, tcpOptions, WTFMove(connection));58 return makeUnique<NetworkRTCTCPSocketCocoa>(identifier, rtcProvider, remoteAddress, tcpOptions, isRelayDisabled, WTFMove(connection)); 59 59 } 60 60 … … 81 81 } 82 82 83 NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa(LibWebRTCSocketIdentifier identifier, NetworkRTCProvider& rtcProvider, const rtc::SocketAddress& remoteAddress, int options, Ref<IPC::Connection>&& connection)83 NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa(LibWebRTCSocketIdentifier identifier, NetworkRTCProvider& rtcProvider, const rtc::SocketAddress& remoteAddress, int options, bool isRelayDisabled, Ref<IPC::Connection>&& connection) 84 84 : m_identifier(identifier) 85 85 , m_rtcProvider(rtcProvider) … … 99 99 if (auto token = rtcProvider.sourceApplicationAuditToken()) 100 100 nw_parameters_set_source_application(tcpTLS.get(), *token); 101 if (isRelayDisabled) 102 nw_parameters_set_account_id(tcpTLS.get(), "com.apple.safari.peertopeer"); 101 103 102 104 m_nwConnection = adoptNS(nw_connection_create(host.get(), tcpTLS.get())); -
trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp
r279483 r280523 91 91 RTCSocketFactory(String&& userAgent, bool isFirstParty, RegistrableDomain&&); 92 92 93 void disableRelay() final { m_isRelayDisabled = true; } 94 93 95 private: 94 96 // SuspendableSocketFactory … … 99 101 void suspend() final; 100 102 void resume() final; 101 void disableRelay() final { m_isRelayDisabled = true; }102 103 103 104 private: … … 127 128 rtc::AsyncPacketSocket* RTCSocketFactory::CreateClientTcpSocket(const rtc::SocketAddress& localAddress, const rtc::SocketAddress& remoteAddress, const rtc::ProxyInfo&, const std::string&, const rtc::PacketSocketTcpOptions& options) 128 129 { 129 return WebProcess::singleton().libWebRTCNetwork().socketFactory().createClientTcpSocket(this, localAddress, remoteAddress, String { m_userAgent }, options );130 return WebProcess::singleton().libWebRTCNetwork().socketFactory().createClientTcpSocket(this, localAddress, remoteAddress, String { m_userAgent }, options, m_isRelayDisabled); 130 131 } 131 132 … … 160 161 std::unique_ptr<LibWebRTCProvider::SuspendableSocketFactory> LibWebRTCProvider::createSocketFactory(String&& userAgent, bool isFirstParty, RegistrableDomain&& domain) 161 162 { 162 return makeUnique<RTCSocketFactory>(WTFMove(userAgent), isFirstParty, WTFMove(domain)); 163 auto factory = makeUnique<RTCSocketFactory>(WTFMove(userAgent), isFirstParty, WTFMove(domain)); 164 165 auto* page = m_webPage.corePage(); 166 if (!page || !page->settings().webRTCSocketsProxyingEnabled()) 167 factory->disableRelay(); 168 169 return factory; 163 170 } 164 171 -
trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h
r279483 r280523 64 64 void setLoggingLevel(WTFLogLevel) final; 65 65 66 WebPage& m_webPage; 66 67 #if ENABLE(GPU_PROCESS) && PLATFORM(COCOA) && !PLATFORM(MACCATALYST) 67 WebPage& m_webPage;68 68 bool m_didInitializeCallback { false }; 69 69 #endif … … 71 71 72 72 inline LibWebRTCProvider::LibWebRTCProvider(WebPage& webPage) 73 #if ENABLE(GPU_PROCESS) && PLATFORM(COCOA) && !PLATFORM(MACCATALYST)74 73 : m_webPage(webPage) 75 #endif76 74 { 77 75 m_useNetworkThreadWithSocketServer = false; -
trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp
r279483 r280523 105 105 } 106 106 107 rtc::AsyncPacketSocket* LibWebRTCSocketFactory::createClientTcpSocket(const void* socketGroup, const rtc::SocketAddress& localAddress, const rtc::SocketAddress& remoteAddress, String&& userAgent, const rtc::PacketSocketTcpOptions& options )107 rtc::AsyncPacketSocket* LibWebRTCSocketFactory::createClientTcpSocket(const void* socketGroup, const rtc::SocketAddress& localAddress, const rtc::SocketAddress& remoteAddress, String&& userAgent, const rtc::PacketSocketTcpOptions& options, bool isRelayDisabled) 108 108 { 109 109 ASSERT(!WTF::isMainRunLoop()); … … 114 114 // FIXME: We only transfer options.opts but should also handle other members. 115 115 if (m_connection) 116 m_connection->send(Messages::NetworkRTCProvider::CreateClientTCPSocket(socket->identifier(), RTCNetwork::SocketAddress(prepareSocketAddress(localAddress, m_disableNonLocalhostConnections)), RTCNetwork::SocketAddress(prepareSocketAddress(remoteAddress, m_disableNonLocalhostConnections)), userAgent, options.opts ), 0);116 m_connection->send(Messages::NetworkRTCProvider::CreateClientTCPSocket(socket->identifier(), RTCNetwork::SocketAddress(prepareSocketAddress(localAddress, m_disableNonLocalhostConnections)), RTCNetwork::SocketAddress(prepareSocketAddress(remoteAddress, m_disableNonLocalhostConnections)), userAgent, options.opts, isRelayDisabled), 0); 117 117 else { 118 118 callOnMainRunLoop([] { 119 119 WebProcess::singleton().ensureNetworkProcessConnection(); 120 120 }); 121 m_pendingMessageTasks.append([identifier = socket->identifier(), localAddress = RTCNetwork::SocketAddress(prepareSocketAddress(localAddress, m_disableNonLocalhostConnections)), remoteAddress = RTCNetwork::SocketAddress(prepareSocketAddress(remoteAddress, m_disableNonLocalhostConnections)), userAgent, opts = options.opts ](auto& connection) {122 connection.send(Messages::NetworkRTCProvider::CreateClientTCPSocket(identifier, localAddress, remoteAddress, userAgent, opts ), 0);121 m_pendingMessageTasks.append([identifier = socket->identifier(), localAddress = RTCNetwork::SocketAddress(prepareSocketAddress(localAddress, m_disableNonLocalhostConnections)), remoteAddress = RTCNetwork::SocketAddress(prepareSocketAddress(remoteAddress, m_disableNonLocalhostConnections)), userAgent, opts = options.opts, isRelayDisabled](auto& connection) { 122 connection.send(Messages::NetworkRTCProvider::CreateClientTCPSocket(identifier, localAddress, remoteAddress, userAgent, opts, isRelayDisabled), 0); 123 123 }); 124 124 } -
trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.h
r279483 r280523 54 54 rtc::AsyncPacketSocket* createUdpSocket(const void* socketGroup, const rtc::SocketAddress&, uint16_t minPort, uint16_t maxPort, bool isFirstParty, bool isRelayDisabled, const WebCore::RegistrableDomain&); 55 55 rtc::AsyncPacketSocket* createServerTcpSocket(const void* socketGroup, const rtc::SocketAddress&, uint16_t minPort, uint16_t maxPort, int options); 56 rtc::AsyncPacketSocket* createClientTcpSocket(const void* socketGroup, const rtc::SocketAddress& localAddress, const rtc::SocketAddress& remoteAddress, String&& userAgent, const rtc::PacketSocketTcpOptions& );56 rtc::AsyncPacketSocket* createClientTcpSocket(const void* socketGroup, const rtc::SocketAddress& localAddress, const rtc::SocketAddress& remoteAddress, String&& userAgent, const rtc::PacketSocketTcpOptions&, bool isRelayDisabled); 57 57 rtc::AsyncPacketSocket* createNewConnectionSocket(LibWebRTCSocket&, WebCore::LibWebRTCSocketIdentifier newConnectionSocketIdentifier, const rtc::SocketAddress&); 58 58
Note: See TracChangeset
for help on using the changeset viewer.