Diff
Modified: trunk/Source/ThirdParty/libwebrtc/ChangeLog (248591 => 248592)
--- trunk/Source/ThirdParty/libwebrtc/ChangeLog 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/ThirdParty/libwebrtc/ChangeLog 2019-08-13 08:54:27 UTC (rev 248592)
@@ -1,3 +1,16 @@
+2019-08-13 Youenn Fablet <[email protected]>
+
+ User Agent and SessionID should be given to NetworkRTCProvider to set up the correct proxy information
+ https://bugs.webkit.org/show_bug.cgi?id=200583
+
+ Reviewed by Eric Carlson.
+
+ Export of some symbols.
+
+ * Configurations/libwebrtc.iOS.exp:
+ * Configurations/libwebrtc.iOSsim.exp:
+ * Configurations/libwebrtc.mac.exp:
+
2019-08-02 Youenn Fablet <[email protected]>
Add build check for libwebrtc ObjectiveC names
Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp (248591 => 248592)
--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp 2019-08-13 08:54:27 UTC (rev 248592)
@@ -248,3 +248,8 @@
__ZN6webrtc16RtpRtxParametersD1Ev
__ZN3rtc10LogMessage12SetLogOutputENS_15LoggingSeverityEPFvS1_PKcE
__ZN6webrtc13CryptoOptions5NoGcmEv
+__ZTVN3rtc23InsecureCryptStringImplE
+__ZN3rtc11CryptStringC1ERKNS_15CryptStringImplE
+__ZN3rtc13SocketAddressC1ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEi
+__ZN3rtc11CryptStringD1Ev
+__ZN3rtc11CryptStringC1ERKS0_
Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp (248591 => 248592)
--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp 2019-08-13 08:54:27 UTC (rev 248592)
@@ -249,3 +249,8 @@
__ZN6webrtc16RtpRtxParametersD1Ev
__ZN3rtc10LogMessage12SetLogOutputENS_15LoggingSeverityEPFvS1_PKcE
__ZN6webrtc13CryptoOptions5NoGcmEv
+__ZTVN3rtc23InsecureCryptStringImplE
+__ZN3rtc11CryptStringC1ERKNS_15CryptStringImplE
+__ZN3rtc13SocketAddressC1ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEi
+__ZN3rtc11CryptStringD1Ev
+__ZN3rtc11CryptStringC1ERKS0_
Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp (248591 => 248592)
--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp 2019-08-13 08:54:27 UTC (rev 248592)
@@ -249,3 +249,8 @@
__ZN6webrtc16RtpRtxParametersD1Ev
__ZN3rtc10LogMessage12SetLogOutputENS_15LoggingSeverityEPFvS1_PKcE
__ZN6webrtc13CryptoOptions5NoGcmEv
+__ZTVN3rtc23InsecureCryptStringImplE
+__ZN3rtc11CryptStringC1ERKNS_15CryptStringImplE
+__ZN3rtc13SocketAddressC1ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEi
+__ZN3rtc11CryptStringD1Ev
+__ZN3rtc11CryptStringC1ERKS0_
Modified: trunk/Source/WebCore/ChangeLog (248591 => 248592)
--- trunk/Source/WebCore/ChangeLog 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebCore/ChangeLog 2019-08-13 08:54:27 UTC (rev 248592)
@@ -1,3 +1,21 @@
+2019-08-13 Youenn Fablet <[email protected]>
+
+ User Agent and SessionID should be given to NetworkRTCProvider to set up the correct proxy information
+ https://bugs.webkit.org/show_bug.cgi?id=200583
+
+ Reviewed by Eric Carlson.
+
+ Use a socket factory that is specific to the user agent and session ID.
+ This factory is stored in the media endpoint.
+ Not testable without proxy infrastructure.
+
+ * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
+ (WebCore::LibWebRTCMediaEndpoint::setConfiguration):
+ * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
+ * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
+ (WebCore::LibWebRTCProvider::createPeerConnection):
+ * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
+
2019-08-12 Ryosuke Niwa <[email protected]>
FrameLoader::open can execute scritps via style recalc in Frame::setDocument
Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp (248591 => 248592)
--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp 2019-08-13 08:54:27 UTC (rev 248592)
@@ -86,7 +86,11 @@
configuration.sdp_semantics = webrtc::SdpSemantics::kUnifiedPlan;
if (!m_backend) {
- m_backend = client.createPeerConnection(*this, WTFMove(configuration));
+ if (!m_rtcSocketFactory) {
+ auto& document = downcast<Document>(*m_peerConnectionBackend.connection().scriptExecutionContext());
+ m_rtcSocketFactory = client.createSocketFactory(document.sessionID(), document.userAgent(document.url()));
+ }
+ m_backend = client.createPeerConnection(*this, m_rtcSocketFactory.get(), WTFMove(configuration));
return !!m_backend;
}
auto oldConfiguration = m_backend->GetConfiguration();
Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h (248591 => 248592)
--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h 2019-08-13 08:54:27 UTC (rev 248592)
@@ -198,6 +198,7 @@
HashMap<String, rtc::scoped_refptr<webrtc::MediaStreamInterface>> m_localStreams;
+ std::unique_ptr<rtc::PacketSocketFactory> m_rtcSocketFactory;
#if !RELEASE_LOG_DISABLED
int64_t m_statsFirstDeliveredTimestamp { 0 };
Ref<const Logger> m_logger;
Modified: trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp (248591 => 248592)
--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp 2019-08-13 08:54:27 UTC (rev 248592)
@@ -281,7 +281,7 @@
m_enableEnumeratingAllNetworkInterfaces = true;
}
-rtc::scoped_refptr<webrtc::PeerConnectionInterface> LibWebRTCProvider::createPeerConnection(webrtc::PeerConnectionObserver& observer, webrtc::PeerConnectionInterface::RTCConfiguration&& configuration)
+rtc::scoped_refptr<webrtc::PeerConnectionInterface> LibWebRTCProvider::createPeerConnection(webrtc::PeerConnectionObserver& observer, rtc::PacketSocketFactory*, webrtc::PeerConnectionInterface::RTCConfiguration&& configuration)
{
// Default WK1 implementation.
ASSERT(m_useNetworkThreadWithSocketServer);
Modified: trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h (248591 => 248592)
--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h 2019-08-13 08:54:27 UTC (rev 248592)
@@ -91,7 +91,7 @@
}
#if USE(LIBWEBRTC)
- virtual rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, webrtc::PeerConnectionInterface::RTCConfiguration&&);
+ virtual rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, rtc::PacketSocketFactory*, webrtc::PeerConnectionInterface::RTCConfiguration&&);
webrtc::PeerConnectionFactoryInterface* factory();
@@ -118,6 +118,8 @@
void setEnableLogging(bool);
void setEnableWebRTCEncryption(bool);
+ virtual std::unique_ptr<rtc::PacketSocketFactory> createSocketFactory(PAL::SessionID, String&& /* userAgent */) { return nullptr; }
+
protected:
LibWebRTCProvider() = default;
Modified: trunk/Source/WebKit/ChangeLog (248591 => 248592)
--- trunk/Source/WebKit/ChangeLog 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebKit/ChangeLog 2019-08-13 08:54:27 UTC (rev 248592)
@@ -1,3 +1,33 @@
+2019-08-13 Youenn Fablet <[email protected]>
+
+ User Agent and SessionID should be given to NetworkRTCProvider to set up the correct proxy information
+ https://bugs.webkit.org/show_bug.cgi?id=200583
+
+ Reviewed by Eric Carlson.
+
+ Pass session id and user agent whenever creating a TCP client socket.
+ Use this information to get the proxy information from NetworkSession and pass it to libwebrtc socket creation.
+
+ * NetworkProcess/cocoa/NetworkSessionCocoa.h:
+ * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
+ (WebKit::NetworkRTCProvider::proxyInfoFromSession):
+ (WebKit::NetworkRTCProvider::createClientTCPSocket):
+ * NetworkProcess/webrtc/NetworkRTCProvider.h:
+ * NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
+ * WebKit.xcodeproj/project.pbxproj:
+ * NetworkProcess/webrtc/NetworkRTCProvider.mm: Added.
+ (WebKit::NetworkRTCProvider::proxyInfoFromSession):
+ * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
+ (WebKit::LibWebRTCProvider::createPeerConnection):
+ (WebKit::LibWebRTCProvider::createSocketFactory):
+ * WebProcess/Network/webrtc/LibWebRTCProvider.h:
+ * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
+ (WebKit::LibWebRTCSocketFactory::createServerTcpSocket):
+ (WebKit::LibWebRTCSocketFactory::createUdpSocket):
+ (WebKit::LibWebRTCSocketFactory::createClientTcpSocket):
+ (WebKit::LibWebRTCSocketFactory::createAsyncResolver):
+ * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:
+
2019-08-12 Chris Dumez <[email protected]>
Fix bad RELEASE_LOG_ERROR under ProvisionalPageProxy::ProvisionalPageProxy()
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h (248591 => 248592)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h 2019-08-13 08:54:27 UTC (rev 248592)
@@ -81,6 +81,8 @@
bool allLoadsBlockedByDeviceManagementRestrictionsForTesting() const { return m_allLoadsBlockedByDeviceManagementRestrictionsForTesting; }
DMFWebsitePolicyMonitor *deviceManagementPolicyMonitor();
+ CFDictionaryRef proxyConfiguration() const { return m_proxyConfiguration.get(); }
+
private:
void invalidateAndCancel() override;
void clearCredentials() override;
Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp (248591 => 248592)
--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp 2019-08-13 08:54:27 UTC (rev 248592)
@@ -129,10 +129,22 @@
});
}
-void NetworkRTCProvider::createClientTCPSocket(uint64_t identifier, const RTCNetwork::SocketAddress& localAddress, const RTCNetwork::SocketAddress& remoteAddress, int options)
+#if !PLATFORM(COCOA)
+rtc::ProxyInfo NetworkRTCProvider::proxyInfoFromSession(const RTCNetwork::SocketAddress&, NetworkSession&)
{
- callOnRTCNetworkThread([this, identifier, localAddress = RTCNetwork::isolatedCopy(localAddress.value), remoteAddress = RTCNetwork::isolatedCopy(remoteAddress.value), options]() {
- std::unique_ptr<rtc::AsyncPacketSocket> socket(m_packetSocketFactory->CreateClientTcpSocket(localAddress, remoteAddress, { }, { }, options));
+ return { };
+}
+#endif
+
+void NetworkRTCProvider::createClientTCPSocket(uint64_t identifier, const RTCNetwork::SocketAddress& localAddress, const RTCNetwork::SocketAddress& remoteAddress, PAL::SessionID sessionID, String&& userAgent, int options)
+{
+ auto* session = m_connection->networkProcess().networkSession(sessionID);
+ if (!session) {
+ m_connection->connection().send(Messages::WebRTCSocket::SignalClose(1), identifier);
+ return;
+ }
+ callOnRTCNetworkThread([this, identifier, localAddress = RTCNetwork::isolatedCopy(localAddress.value), remoteAddress = RTCNetwork::isolatedCopy(remoteAddress.value), proxyInfo = proxyInfoFromSession(remoteAddress, *session), userAgent = WTFMove(userAgent).isolatedCopy(), options]() {
+ std::unique_ptr<rtc::AsyncPacketSocket> socket(m_packetSocketFactory->CreateClientTcpSocket(localAddress, remoteAddress, proxyInfo, userAgent.utf8().data(), options));
createSocket(identifier, WTFMove(socket), LibWebRTCSocketClient::Type::ClientTCP);
});
}
Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h (248591 => 248592)
--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h 2019-08-13 08:54:27 UTC (rev 248592)
@@ -31,6 +31,7 @@
#include "NetworkRTCMonitor.h"
#include "RTCNetwork.h"
#include <WebCore/LibWebRTCMacros.h>
+#include <pal/SessionID.h>
#include <webrtc/p2p/base/basicpacketsocketfactory.h>
#include <webrtc/rtc_base/third_party/sigslot/sigslot.h>
#include <wtf/HashMap.h>
@@ -47,6 +48,7 @@
class NetworkConnectionToWebProcess;
class NetworkRTCResolver;
class NetworkRTCSocket;
+class NetworkSession;
class NetworkRTCProvider : public ThreadSafeRefCounted<NetworkRTCProvider>, public rtc::MessageHandler {
public:
@@ -75,7 +77,7 @@
explicit NetworkRTCProvider(NetworkConnectionToWebProcess&);
void createUDPSocket(uint64_t, const RTCNetwork::SocketAddress&, uint16_t, uint16_t);
- void createClientTCPSocket(uint64_t, const RTCNetwork::SocketAddress&, const RTCNetwork::SocketAddress&, int);
+ void createClientTCPSocket(uint64_t, const RTCNetwork::SocketAddress&, const RTCNetwork::SocketAddress&, PAL::SessionID, String&& userAgent, int);
void createServerTCPSocket(uint64_t, const RTCNetwork::SocketAddress&, uint16_t minPort, uint16_t maxPort, int);
void wrapNewTCPConnection(uint64_t identifier, uint64_t newConnectionSocketIdentifier);
@@ -88,6 +90,8 @@
void OnMessage(rtc::Message*);
+ static rtc::ProxyInfo proxyInfoFromSession(const RTCNetwork::SocketAddress&, NetworkSession&);
+
HashMap<uint64_t, std::unique_ptr<NetworkRTCResolver>> m_resolvers;
HashMap<uint64_t, std::unique_ptr<LibWebRTCSocketClient>> m_sockets;
NetworkConnectionToWebProcess* m_connection;
Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.messages.in (248591 => 248592)
--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.messages.in 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.messages.in 2019-08-13 08:54:27 UTC (rev 248592)
@@ -25,7 +25,7 @@
messages -> NetworkRTCProvider {
CreateUDPSocket(int identifier, WebKit::RTCNetwork::SocketAddress localAddress, uint16_t minPort, uint16_t maxPort)
CreateServerTCPSocket(int identifier, WebKit::RTCNetwork::SocketAddress localAddress, uint16_t minPort, uint16_t maxPort, int options)
- CreateClientTCPSocket(int identifier, WebKit::RTCNetwork::SocketAddress localAddress, WebKit::RTCNetwork::SocketAddress remoteAddress, int options)
+ CreateClientTCPSocket(int identifier, WebKit::RTCNetwork::SocketAddress localAddress, WebKit::RTCNetwork::SocketAddress remoteAddress, PAL::SessionID sessionID, String userAgent, int options)
CreateResolver(uint64_t identifier, String address)
StopResolver(uint64_t identifier)
WrapNewTCPConnection(uint64_t identifier, uint64_t newConnectionSocketIdentifier)
Added: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.mm (0 => 248592)
--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.mm (rev 0)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.mm 2019-08-13 08:54:27 UTC (rev 248592)
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "NetworkRTCProvider.h"
+
+#if USE(LIBWEBRTC)
+
+#include "NetworkSessionCocoa.h"
+#include <WebCore/LibWebRTCMacros.h>
+#include <webrtc/rtc_base/asyncpacketsocket.h>
+#include <webrtc/rtc_base/logging.h>
+
+namespace WebKit {
+
+static inline bool isEnabled(CFDictionaryRef proxy, CFStringRef key)
+{
+ auto enabled = static_cast<CFNumberRef>(CFDictionaryGetValue(proxy, key));
+
+ if (!enabled)
+ return false;
+
+ int result;
+ return CFNumberGetValue(enabled, kCFNumberIntType, &result);
+ return !!result;
+}
+
+static inline rtc::ProxyInfo createRTCProxy(CFDictionaryRef proxy, rtc::ProxyType type, CFStringRef nameKey, CFStringRef portKey)
+{
+ rtc::ProxyInfo info;
+ info.type = type;
+
+ auto proxyHostName = static_cast<CFStringRef>(CFDictionaryGetValue(proxy, nameKey));
+ if (!proxyHostName)
+ return { };
+ auto portNumber = static_cast<CFNumberRef>(CFDictionaryGetValue(proxy, portKey));
+ if (!portNumber)
+ return { };
+
+ int proxyPort;
+ if (!CFNumberGetValue(portNumber, kCFNumberSInt32Type, &proxyPort))
+ return { };
+
+ info.address = { std::string([(__bridge NSString *)proxyHostName UTF8String]), proxyPort };
+ info.autodetect = false;
+ return info;
+}
+
+rtc::ProxyInfo NetworkRTCProvider::proxyInfoFromSession(const RTCNetwork::SocketAddress&, NetworkSession& session)
+{
+ // FIXME: We should check for kCFNetworkProxiesExceptionsList to decide whether to use proxy or not.
+ // FIXME: We should also get username/password for authentication cases.
+ auto proxyDictionary = static_cast<NetworkSessionCocoa&>(session).proxyConfiguration();
+ if (!proxyDictionary)
+ proxyDictionary = CFNetworkCopySystemProxySettings();
+#if PLATFORM(MAC)
+ if (isEnabled(proxyDictionary, kCFNetworkProxiesHTTPSEnable))
+ return createRTCProxy(proxyDictionary, rtc::PROXY_HTTPS, kCFNetworkProxiesHTTPSProxy, kCFNetworkProxiesHTTPSPort);
+
+ if (isEnabled(proxyDictionary, kCFNetworkProxiesSOCKSEnable))
+ return createRTCProxy(proxyDictionary, rtc::PROXY_SOCKS5, kCFNetworkProxiesSOCKSProxy, kCFNetworkProxiesSOCKSPort);
+#endif
+#if PLATFORM(IOS)
+ if (isEnabled(proxyDictionary, kCFNetworkProxiesHTTPEnable))
+ return createRTCProxy(proxyDictionary, rtc::PROXY_HTTPS, kCFNetworkProxiesHTTPProxy, kCFNetworkProxiesHTTPPort);
+#endif
+ return { };
+}
+
+} // namespace WebKit
+
+#endif // USE(LIBWEBRTC)
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (248591 => 248592)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2019-08-13 08:54:27 UTC (rev 248592)
@@ -883,6 +883,7 @@
414DD37A20BF49A5006959FB /* com.cisco.webex.plugin.gpc64.sb in Copy Plug-in Sandbox Profiles */ = {isa = PBXBuildFile; fileRef = 414DD37820BF43EA006959FB /* com.cisco.webex.plugin.gpc64.sb */; };
414DEDD71F9EDDE50047C40D /* ServiceWorkerProcessProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 414DEDD51F9EDDDF0047C40D /* ServiceWorkerProcessProxy.h */; };
4157E4B020E2ECDF00A6C0D7 /* com.google.o1dbrowserplugin.sb in Copy Plug-in Sandbox Profiles */ = {isa = PBXBuildFile; fileRef = 4157E4AF20E2EC9800A6C0D7 /* com.google.o1dbrowserplugin.sb */; };
+ 4176901422FDD41B00B1576D /* NetworkRTCProvider.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4176901322FDD41B00B1576D /* NetworkRTCProvider.mm */; };
417915AF2256BB7500D6F97E /* WebSocketChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 417915AD2256BB7400D6F97E /* WebSocketChannel.h */; };
417915B12256C0D600D6F97E /* WebSocketChannelManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 417915B02256C0D600D6F97E /* WebSocketChannelManager.h */; };
417915B92257046F00D6F97E /* NetworkSocketChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 417915B62257046E00D6F97E /* NetworkSocketChannel.h */; };
@@ -3127,6 +3128,7 @@
4151E5C31FBB90A900E47E2D /* FormDataReference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormDataReference.h; sourceTree = "<group>"; };
4157853021276B6F00DD3800 /* copy-webcontent-resources-to-private-headers.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "copy-webcontent-resources-to-private-headers.sh"; sourceTree = "<group>"; };
4157E4AF20E2EC9800A6C0D7 /* com.google.o1dbrowserplugin.sb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = com.google.o1dbrowserplugin.sb; sourceTree = "<group>"; };
+ 4176901322FDD41B00B1576D /* NetworkRTCProvider.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetworkRTCProvider.mm; sourceTree = "<group>"; };
417915AC2256BB7400D6F97E /* WebSocketChannel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebSocketChannel.cpp; path = Network/WebSocketChannel.cpp; sourceTree = "<group>"; };
417915AD2256BB7400D6F97E /* WebSocketChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebSocketChannel.h; path = Network/WebSocketChannel.h; sourceTree = "<group>"; };
417915B02256C0D600D6F97E /* WebSocketChannelManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebSocketChannelManager.h; path = Network/WebSocketChannelManager.h; sourceTree = "<group>"; };
@@ -6550,6 +6552,7 @@
41DC45951E3D6E1E00B11F51 /* NetworkRTCProvider.cpp */,
41DC45941E3D6E1E00B11F51 /* NetworkRTCProvider.h */,
41DC45981E3D6ED600B11F51 /* NetworkRTCProvider.messages.in */,
+ 4176901322FDD41B00B1576D /* NetworkRTCProvider.mm */,
4112B5471F9FD3AB00E67875 /* NetworkRTCResolver.cpp */,
4112B5481F9FD3AC00E67875 /* NetworkRTCResolver.h */,
4112B5471F9FD3AB00E67986 /* NetworkRTCResolverCocoa.cpp */,
@@ -11143,6 +11146,7 @@
513A163C163088F6005D7D22 /* NetworkProcessProxyMessageReceiver.cpp in Sources */,
E152551A17011819003D7ADB /* NetworkResourceLoaderMessageReceiver.cpp in Sources */,
51F060E11654318500F3281E /* NetworkRTCMonitorMessageReceiver.cpp in Sources */,
+ 4176901422FDD41B00B1576D /* NetworkRTCProvider.mm in Sources */,
51F060E11654318500F3282E /* NetworkRTCProviderMessageReceiver.cpp in Sources */,
51F060E11654318500F3281D /* NetworkRTCSocketMessageReceiver.cpp in Sources */,
31F060E11654318500F3281C /* NetworkSocketChannelMessageReceiver.cpp in Sources */,
Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp (248591 => 248592)
--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp 2019-08-13 08:54:27 UTC (rev 248592)
@@ -44,9 +44,9 @@
}
};
-rtc::scoped_refptr<webrtc::PeerConnectionInterface> LibWebRTCProvider::createPeerConnection(webrtc::PeerConnectionObserver& observer, webrtc::PeerConnectionInterface::RTCConfiguration&& configuration)
+rtc::scoped_refptr<webrtc::PeerConnectionInterface> LibWebRTCProvider::createPeerConnection(webrtc::PeerConnectionObserver& observer, rtc::PacketSocketFactory* socketFactory, webrtc::PeerConnectionInterface::RTCConfiguration&& configuration)
{
- return WebCore::LibWebRTCProvider::createPeerConnection(observer, WebProcess::singleton().libWebRTCNetwork().monitor(), WebProcess::singleton().libWebRTCNetwork().socketFactory(), WTFMove(configuration), std::make_unique<AsyncResolverFactory>());
+ return WebCore::LibWebRTCProvider::createPeerConnection(observer, WebProcess::singleton().libWebRTCNetwork().monitor(), *socketFactory, WTFMove(configuration), std::make_unique<AsyncResolverFactory>());
}
void LibWebRTCProvider::disableNonLocalhostConnections()
@@ -64,6 +64,47 @@
WebProcess::singleton().libWebRTCNetwork().mdnsRegister().registerMDNSName(sessionID, documentIdentifier, ipAddress, WTFMove(callback));
}
+class RTCSocketFactory final : public rtc::PacketSocketFactory {
+public:
+ RTCSocketFactory(PAL::SessionID sessionID, String&& userAgent)
+ : m_sessionID(sessionID)
+ , m_userAgent(WTFMove(userAgent))
+ {
+ }
+
+private:
+ rtc::AsyncPacketSocket* CreateUdpSocket(const rtc::SocketAddress& address, uint16_t minPort, uint16_t maxPort) final
+ {
+ return factory().createUdpSocket(address, minPort, maxPort);
+ }
+
+ rtc::AsyncPacketSocket* CreateServerTcpSocket(const rtc::SocketAddress& address, uint16_t minPort, uint16_t maxPort, int options) final
+ {
+ return factory().createServerTcpSocket(address, minPort, maxPort, options);
+ }
+
+ rtc::AsyncPacketSocket* CreateClientTcpSocket(const rtc::SocketAddress& localAddress, const rtc::SocketAddress& remoteAddress, const rtc::ProxyInfo&, const std::string&, int options) final
+ {
+ return factory().createClientTcpSocket(localAddress, remoteAddress, m_sessionID, String { m_userAgent }, options);
+ }
+
+ rtc::AsyncResolverInterface* CreateAsyncResolver() final
+ {
+ return factory().createAsyncResolver();
+ }
+
+ LibWebRTCSocketFactory& factory() { return WebProcess::singleton().libWebRTCNetwork().socketFactory(); }
+
+private:
+ PAL::SessionID m_sessionID;
+ String m_userAgent;
+};
+
+std::unique_ptr<rtc::PacketSocketFactory> LibWebRTCProvider::createSocketFactory(PAL::SessionID sessionID, String&& userAgent)
+{
+ return std::make_unique<RTCSocketFactory>(sessionID, WTFMove(userAgent));
+}
+
} // namespace WebKit
#endif // USE(LIBWEBRTC)
Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h (248591 => 248592)
--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h 2019-08-13 08:54:27 UTC (rev 248592)
@@ -50,8 +50,10 @@
LibWebRTCProvider() { m_useNetworkThreadWithSocketServer = false; }
private:
- rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, webrtc::PeerConnectionInterface::RTCConfiguration&&) final;
+ std::unique_ptr<rtc::PacketSocketFactory> createSocketFactory(PAL::SessionID, String&& /* userAgent */) final;
+ rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, rtc::PacketSocketFactory*, webrtc::PeerConnectionInterface::RTCConfiguration&&) final;
+
void unregisterMDNSNames(uint64_t documentIdentifier) final;
void registerMDNSName(PAL::SessionID, uint64_t documentIdentifier, const String& ipAddress, CompletionHandler<void(MDNSNameOrError&&)>&&) final;
void disableNonLocalhostConnections() final;
Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp (248591 => 248592)
--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp 2019-08-13 08:54:27 UTC (rev 248592)
@@ -48,7 +48,7 @@
return result;
}
-rtc::AsyncPacketSocket* LibWebRTCSocketFactory::CreateServerTcpSocket(const rtc::SocketAddress& address, uint16_t minPort, uint16_t maxPort, int options)
+rtc::AsyncPacketSocket* LibWebRTCSocketFactory::createServerTcpSocket(const rtc::SocketAddress& address, uint16_t minPort, uint16_t maxPort, int options)
{
auto socket = std::make_unique<LibWebRTCSocket>(*this, ++s_uniqueSocketIdentifier, LibWebRTCSocket::Type::ServerTCP, address, rtc::SocketAddress());
m_sockets.set(socket->identifier(), socket.get());
@@ -64,7 +64,7 @@
return socket.release();
}
-rtc::AsyncPacketSocket* LibWebRTCSocketFactory::CreateUdpSocket(const rtc::SocketAddress& address, uint16_t minPort, uint16_t maxPort)
+rtc::AsyncPacketSocket* LibWebRTCSocketFactory::createUdpSocket(const rtc::SocketAddress& address, uint16_t minPort, uint16_t maxPort)
{
auto socket = std::make_unique<LibWebRTCSocket>(*this, ++s_uniqueSocketIdentifier, LibWebRTCSocket::Type::UDP, address, rtc::SocketAddress());
m_sockets.set(socket->identifier(), socket.get());
@@ -78,14 +78,14 @@
return socket.release();
}
-rtc::AsyncPacketSocket* LibWebRTCSocketFactory::CreateClientTcpSocket(const rtc::SocketAddress& localAddress, const rtc::SocketAddress& remoteAddress, const rtc::ProxyInfo&, const std::string&, int options)
+rtc::AsyncPacketSocket* LibWebRTCSocketFactory::createClientTcpSocket(const rtc::SocketAddress& localAddress, const rtc::SocketAddress& remoteAddress, PAL::SessionID sessionID, String&& userAgent, int options)
{
auto socket = std::make_unique<LibWebRTCSocket>(*this, ++s_uniqueSocketIdentifier, LibWebRTCSocket::Type::ClientTCP, localAddress, remoteAddress);
socket->setState(LibWebRTCSocket::STATE_CONNECTING);
m_sockets.set(socket->identifier(), socket.get());
- callOnMainThread([identifier = socket->identifier(), localAddress = prepareSocketAddress(localAddress, m_disableNonLocalhostConnections), remoteAddress = prepareSocketAddress(remoteAddress, m_disableNonLocalhostConnections), options]() {
- if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkRTCProvider::CreateClientTCPSocket(identifier, RTCNetwork::SocketAddress(localAddress), RTCNetwork::SocketAddress(remoteAddress), options), 0)) {
+ callOnMainThread([identifier = socket->identifier(), localAddress = prepareSocketAddress(localAddress, m_disableNonLocalhostConnections), remoteAddress = prepareSocketAddress(remoteAddress, m_disableNonLocalhostConnections), sessionID, userAgent = WTFMove(userAgent).isolatedCopy(), options]() {
+ if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkRTCProvider::CreateClientTCPSocket(identifier, RTCNetwork::SocketAddress(localAddress), RTCNetwork::SocketAddress(remoteAddress), sessionID, userAgent, options), 0)) {
// FIXME: Set error back to socket
return;
}
@@ -115,7 +115,7 @@
m_sockets.remove(socket.identifier());
}
-rtc::AsyncResolverInterface* LibWebRTCSocketFactory::CreateAsyncResolver()
+rtc::AsyncResolverInterface* LibWebRTCSocketFactory::createAsyncResolver()
{
auto resolver = std::make_unique<LibWebRTCResolver>(++s_uniqueResolverIdentifier);
auto* resolverPointer = resolver.get();
Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.h (248591 => 248592)
--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.h 2019-08-13 05:18:11 UTC (rev 248591)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.h 2019-08-13 08:54:27 UTC (rev 248592)
@@ -36,7 +36,7 @@
namespace WebKit {
-class LibWebRTCSocketFactory final : public rtc::PacketSocketFactory {
+class LibWebRTCSocketFactory {
public:
LibWebRTCSocketFactory() { }
@@ -51,13 +51,12 @@
void disableNonLocalhostConnections() { m_disableNonLocalhostConnections = true; }
- rtc::AsyncResolverInterface* createAsyncResolver() { return CreateAsyncResolver(); }
+ rtc::AsyncPacketSocket* createUdpSocket(const rtc::SocketAddress&, uint16_t minPort, uint16_t maxPort);
+ rtc::AsyncPacketSocket* createServerTcpSocket(const rtc::SocketAddress&, uint16_t minPort, uint16_t maxPort, int options);
+ rtc::AsyncPacketSocket* createClientTcpSocket(const rtc::SocketAddress& localAddress, const rtc::SocketAddress& remoteAddress, PAL::SessionID, String&& userAgent, int options);
+ rtc::AsyncResolverInterface* createAsyncResolver();
private:
- rtc::AsyncPacketSocket* CreateUdpSocket(const rtc::SocketAddress&, uint16_t minPort, uint16_t maxPort) final;
- rtc::AsyncPacketSocket* CreateServerTcpSocket(const rtc::SocketAddress&, uint16_t min_port, uint16_t max_port, int options) final;
- rtc::AsyncPacketSocket* CreateClientTcpSocket(const rtc::SocketAddress& localAddress, const rtc::SocketAddress& remoteAddress, const rtc::ProxyInfo&, const std::string&, int options);
- rtc::AsyncResolverInterface* CreateAsyncResolver() final;
// We cannot own sockets, clients of the factory are responsible to free them.
HashMap<uint64_t, LibWebRTCSocket*> m_sockets;