Title: [237261] trunk
Revision
237261
Author
you...@apple.com
Date
2018-10-18 11:15:19 -0700 (Thu, 18 Oct 2018)

Log Message

Handle MDNS resolution of candidates through libwebrtc directly
https://bugs.webkit.org/show_bug.cgi?id=190681

Reviewed by Eric Carlson.

Source/ThirdParty/libwebrtc:

* Configurations/libwebrtc.iOS.exp:
* Configurations/libwebrtc.iOSsim.exp:
* Configurations/libwebrtc.mac.exp:

Source/WebCore:

Remove the previous MDNS resolution mechanism.
Instead, add support for the AsyncResolver mechanism added to libwebrtc.
Covered by current mdns webrtc test that is unflaked.

* Modules/mediastream/PeerConnectionBackend.cpp:
(WebCore::PeerConnectionBackend::addIceCandidate):
* platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
(WebCore::LibWebRTCProvider::createPeerConnection):
* platform/mediastream/libwebrtc/LibWebRTCProvider.h:
* testing/MockLibWebRTCPeerConnection.cpp:
(WebCore::MockLibWebRTCPeerConnectionFactory::CreatePeerConnection):
* testing/MockLibWebRTCPeerConnection.h:

Source/WebKit:

Add support for AsyncResolver to resolve MDNS.
This basically reuse the code path used to resolve STUN server addresses.
Removed MDNS specific resolution.
Use existing CFHost resolution mechanism to do the actual resolution.

* NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
(WebKit::NetworkMDNSRegister::registerMDNSName):
* NetworkProcess/webrtc/NetworkMDNSRegister.messages.in:
* WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
(WebKit::LibWebRTCProvider::createPeerConnection):
* WebProcess/Network/webrtc/LibWebRTCProvider.h:
* WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:
* WebProcess/Network/webrtc/WebMDNSRegister.cpp:
* WebProcess/Network/webrtc/WebMDNSRegister.h:
* WebProcess/Network/webrtc/WebMDNSRegister.messages.in:

LayoutTests:

* TestExpectations:
Test should no longer be flaky as we no longer enforce a timer for resolving MDNS candidates.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (237260 => 237261)


--- trunk/LayoutTests/ChangeLog	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/LayoutTests/ChangeLog	2018-10-18 18:15:19 UTC (rev 237261)
@@ -1,3 +1,13 @@
+2018-10-18  Youenn Fablet  <you...@apple.com>
+
+        Handle MDNS resolution of candidates through libwebrtc directly
+        https://bugs.webkit.org/show_bug.cgi?id=190681
+
+        Reviewed by Eric Carlson.
+
+        * TestExpectations:
+        Test should no longer be flaky as we no longer enforce a timer for resolving MDNS candidates.
+
 2018-10-18  Ross Kirsling  <ross.kirsl...@sony.com>
 
         delete _expression_ should not throw without a reference

Modified: trunk/LayoutTests/TestExpectations (237260 => 237261)


--- trunk/LayoutTests/TestExpectations	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/LayoutTests/TestExpectations	2018-10-18 18:15:19 UTC (rev 237261)
@@ -1216,7 +1216,6 @@
 
 webrtc/simulcast-h264.html [ Slow ]
 webrtc/datachannel/multiple-connections.html [ Slow ]
-webkit.org/b/187180 webrtc/datachannel/mdns-ice-candidates.html [ Pass Failure ]
 webkit.org/b/171094 imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-idl.html [ Failure ]
 webkit.org/b/172f21 imported/w3c/web-platform-tests/webrtc/getstats.html [ Failure ]
 imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-ontrack.https.html [ Skip ]

Modified: trunk/Source/ThirdParty/libwebrtc/ChangeLog (237260 => 237261)


--- trunk/Source/ThirdParty/libwebrtc/ChangeLog	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/ThirdParty/libwebrtc/ChangeLog	2018-10-18 18:15:19 UTC (rev 237261)
@@ -1,3 +1,14 @@
+2018-10-18  Youenn Fablet  <you...@apple.com>
+
+        Handle MDNS resolution of candidates through libwebrtc directly
+        https://bugs.webkit.org/show_bug.cgi?id=190681
+
+        Reviewed by Eric Carlson.
+
+        * Configurations/libwebrtc.iOS.exp:
+        * Configurations/libwebrtc.iOSsim.exp:
+        * Configurations/libwebrtc.mac.exp:
+
 2018-10-17  Youenn Fablet  <you...@apple.com>
 
         Remove unneeded .rej files from libwebrtc

Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp (237260 => 237261)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp	2018-10-18 18:15:19 UTC (rev 237261)
@@ -229,3 +229,5 @@
 __ZNK3rtc14RTCCertificate5ToPEMEv
 __ZNK3rtc14SSLCertificate8GetStatsEv
 __ZN3rtc14RTCCertificate7FromPEMERKNS_17RTCCertificatePEME
+__ZN6webrtc26PeerConnectionDependenciesC1EPNS_22PeerConnectionObserverE
+__ZN6webrtc30PeerConnectionFactoryInterface20CreatePeerConnectionERKNS_23PeerConnectionInterface16RTCConfigurationENSt3__110unique_ptrIN7cricket13PortAllocatorENS5_14default_deleteIS8_EEEENS6_IN3rtc32RTCCertificateGeneratorInterfaceENS9_ISD_EEEEPNS_22PeerConnectionObserverE

Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp (237260 => 237261)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp	2018-10-18 18:15:19 UTC (rev 237261)
@@ -230,3 +230,5 @@
 __ZNK3rtc14RTCCertificate5ToPEMEv
 __ZNK3rtc14SSLCertificate8GetStatsEv
 __ZN3rtc14RTCCertificate7FromPEMERKNS_17RTCCertificatePEME
+__ZN6webrtc26PeerConnectionDependenciesC1EPNS_22PeerConnectionObserverE
+__ZN6webrtc30PeerConnectionFactoryInterface20CreatePeerConnectionERKNS_23PeerConnectionInterface16RTCConfigurationENSt3__110unique_ptrIN7cricket13PortAllocatorENS5_14default_deleteIS8_EEEENS6_IN3rtc32RTCCertificateGeneratorInterfaceENS9_ISD_EEEEPNS_22PeerConnectionObserverE

Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp (237260 => 237261)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp	2018-10-18 18:15:19 UTC (rev 237261)
@@ -230,3 +230,5 @@
 __ZNK3rtc14RTCCertificate5ToPEMEv
 __ZNK3rtc14SSLCertificate8GetStatsEv
 __ZN3rtc14RTCCertificate7FromPEMERKNS_17RTCCertificatePEME
+__ZN6webrtc26PeerConnectionDependenciesC1EPNS_22PeerConnectionObserverE
+__ZN6webrtc30PeerConnectionFactoryInterface20CreatePeerConnectionERKNS_23PeerConnectionInterface16RTCConfigurationENSt3__110unique_ptrIN7cricket13PortAllocatorENS5_14default_deleteIS8_EEEENS6_IN3rtc32RTCCertificateGeneratorInterfaceENS9_ISD_EEEEPNS_22PeerConnectionObserverE

Modified: trunk/Source/WebCore/ChangeLog (237260 => 237261)


--- trunk/Source/WebCore/ChangeLog	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebCore/ChangeLog	2018-10-18 18:15:19 UTC (rev 237261)
@@ -1,3 +1,23 @@
+2018-10-18  Youenn Fablet  <you...@apple.com>
+
+        Handle MDNS resolution of candidates through libwebrtc directly
+        https://bugs.webkit.org/show_bug.cgi?id=190681
+
+        Reviewed by Eric Carlson.
+
+        Remove the previous MDNS resolution mechanism.
+        Instead, add support for the AsyncResolver mechanism added to libwebrtc.
+        Covered by current mdns webrtc test that is unflaked.
+
+        * Modules/mediastream/PeerConnectionBackend.cpp:
+        (WebCore::PeerConnectionBackend::addIceCandidate):
+        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
+        (WebCore::LibWebRTCProvider::createPeerConnection):
+        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
+        * testing/MockLibWebRTCPeerConnection.cpp:
+        (WebCore::MockLibWebRTCPeerConnectionFactory::CreatePeerConnection):
+        * testing/MockLibWebRTCPeerConnection.h:
+
 2018-10-18  Ali Juma  <aj...@chromium.org>
 
         [IntersectionObserver] Factor out rect mapping and clipping logic from computeRectForRepaint

Modified: trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp (237260 => 237261)


--- trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp	2018-10-18 18:15:19 UTC (rev 237261)
@@ -274,42 +274,10 @@
     ASSERT(!m_peerConnection.isClosed());
 
     if (!iceCandidate) {
-        if (m_waitingForMDNSResolution) {
-            m_finishedReceivingCandidates = true;
-            m_endOfIceCandidatePromise = WTFMove(promise);
-            return;
-        }
         endOfIceCandidates(WTFMove(promise));
         return;
     }
 
-    if (RuntimeEnabledFeatures::sharedFeatures().mdnsICECandidatesEnabled()) {
-        auto name = extractIPAddres(iceCandidate->candidate());
-        if (name.endsWith(".local")) {
-            ++m_waitingForMDNSResolution;
-            auto& document = downcast<Document>(*m_peerConnection.scriptExecutionContext());
-            auto& provider = document.page()->libWebRTCProvider();
-            provider.resolveMDNSName(document.sessionID(), name, [peerConnection = makeRef(m_peerConnection), this, name, iceCandidate = makeRef(*iceCandidate), promise = WTFMove(promise)] (LibWebRTCProvider::IPAddressOrError&& result) mutable {
-                if (peerConnection->isStopped())
-                    return;
-
-                --m_waitingForMDNSResolution;
-                if (!result.has_value()) {
-                    if (result.error() != MDNSRegisterError::Timeout)
-                        peerConnection->scriptExecutionContext()->addConsoleMessage(MessageSource::JS, MessageLevel::Warning, makeString("MDNS resolution of a host candidate failed with error", (unsigned)result.error()));
-                    return;
-                }
-
-                auto candidate = iceCandidate->candidate();
-                candidate.replace(name, result.value());
-                iceCandidate->setCandidate(WTFMove(candidate));
-                m_addIceCandidatePromise = WTFMove(promise);
-                this->doAddIceCandidate(iceCandidate);
-            });
-            return;
-        }
-    }
-
     // FIXME: As per https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-addicecandidate(), this check should be done before enqueuing the task.
     if (iceCandidate->sdpMid().isNull() && !iceCandidate->sdpMLineIndex()) {
         promise.reject(Exception { TypeError, "Trying to add a candidate that is missing both sdpMid and sdpMLineIndex"_s });

Modified: trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp (237260 => 237261)


--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp	2018-10-18 18:15:19 UTC (rev 237261)
@@ -33,6 +33,7 @@
 
 ALLOW_UNUSED_PARAMETERS_BEGIN
 
+#include <webrtc/api/asyncresolverfactory.h>
 #include <webrtc/api/audio_codecs/builtin_audio_decoder_factory.h>
 #include <webrtc/api/audio_codecs/builtin_audio_encoder_factory.h>
 #include <webrtc/api/peerconnectionfactoryproxy.h>
@@ -244,10 +245,10 @@
         factoryAndThreads.packetSocketFactory = std::make_unique<BasicPacketSocketFactory>(*factoryAndThreads.networkThread);
     factoryAndThreads.packetSocketFactory->setDisableNonLocalhostConnections(m_disableNonLocalhostConnections);
 
-    return createPeerConnection(observer, *factoryAndThreads.networkManager, *factoryAndThreads.packetSocketFactory, WTFMove(configuration));
+    return createPeerConnection(observer, *factoryAndThreads.networkManager, *factoryAndThreads.packetSocketFactory, WTFMove(configuration), nullptr);
 }
 
-rtc::scoped_refptr<webrtc::PeerConnectionInterface> LibWebRTCProvider::createPeerConnection(webrtc::PeerConnectionObserver& observer, rtc::NetworkManager& networkManager, rtc::PacketSocketFactory& packetSocketFactory, webrtc::PeerConnectionInterface::RTCConfiguration&& configuration)
+rtc::scoped_refptr<webrtc::PeerConnectionInterface> LibWebRTCProvider::createPeerConnection(webrtc::PeerConnectionObserver& observer, rtc::NetworkManager& networkManager, rtc::PacketSocketFactory& packetSocketFactory, webrtc::PeerConnectionInterface::RTCConfiguration&& configuration, std::unique_ptr<webrtc::AsyncResolverFactory>&& asyncResolveFactory)
 {
     auto& factoryAndThreads = getStaticFactoryAndThreads(m_useNetworkThreadWithSocketServer);
 
@@ -263,7 +264,11 @@
     if (!factory)
         return nullptr;
 
-    return m_factory->CreatePeerConnection(configuration, WTFMove(portAllocator), nullptr, &observer);
+    webrtc::PeerConnectionDependencies dependencies { &observer };
+    dependencies.allocator = WTFMove(portAllocator);
+    dependencies.async_resolver_factory = WTFMove(asyncResolveFactory);
+
+    return m_factory->CreatePeerConnection(configuration, WTFMove(dependencies));
 }
 
 rtc::RTCCertificateGenerator& LibWebRTCProvider::certificateGenerator()

Modified: trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h (237260 => 237261)


--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h	2018-10-18 18:15:19 UTC (rev 237261)
@@ -51,6 +51,7 @@
 }
 
 namespace webrtc {
+class AsyncResolverFactory;
 class PeerConnectionFactoryInterface;
 }
 #endif
@@ -88,12 +89,6 @@
         callback(makeUnexpected(MDNSRegisterError::NotImplemented));
     }
 
-    virtual void resolveMDNSName(PAL::SessionID, const String& name, CompletionHandler<void(IPAddressOrError&&)>&& callback)
-    {
-        UNUSED_PARAM(name);
-        callback(makeUnexpected(MDNSRegisterError::NotImplemented));
-    }
-
 #if USE(LIBWEBRTC)
     virtual rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, webrtc::PeerConnectionInterface::RTCConfiguration&&);
 
@@ -117,7 +112,7 @@
 protected:
     LibWebRTCProvider() = default;
 
-    rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, rtc::NetworkManager&, rtc::PacketSocketFactory&, webrtc::PeerConnectionInterface::RTCConfiguration&&);
+    rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, rtc::NetworkManager&, rtc::PacketSocketFactory&, webrtc::PeerConnectionInterface::RTCConfiguration&&, std::unique_ptr<webrtc::AsyncResolverFactory>&&);
 
     rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> createPeerConnectionFactory(rtc::Thread* networkThread, rtc::Thread* signalingThread, LibWebRTCAudioModule*);
     virtual std::unique_ptr<webrtc::VideoDecoderFactory> createDecoderFactory();

Modified: trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp (237260 => 237261)


--- trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp	2018-10-18 18:15:19 UTC (rev 237261)
@@ -172,24 +172,24 @@
 {
 }
 
-rtc::scoped_refptr<webrtc::PeerConnectionInterface> MockLibWebRTCPeerConnectionFactory::CreatePeerConnection(const webrtc::PeerConnectionInterface::RTCConfiguration&, std::unique_ptr<cricket::PortAllocator>, std::unique_ptr<rtc::RTCCertificateGeneratorInterface>, webrtc::PeerConnectionObserver* observer)
+rtc::scoped_refptr<webrtc::PeerConnectionInterface> MockLibWebRTCPeerConnectionFactory::CreatePeerConnection(const webrtc::PeerConnectionInterface::RTCConfiguration&, webrtc::PeerConnectionDependencies dependencies)
 {
     if (m_testCase == "ICECandidates")
-        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionForIceCandidates>(*observer);
+        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionForIceCandidates>(*dependencies.observer);
 
     if (m_testCase == "ICEConnectionState")
-        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionForIceConnectionState>(*observer);
+        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionForIceConnectionState>(*dependencies.observer);
 
     if (m_testCase == "LibWebRTCReleasingWhileCreatingOffer")
-        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileCreatingOffer>(*observer);
+        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileCreatingOffer>(*dependencies.observer);
 
     if (m_testCase == "LibWebRTCReleasingWhileGettingStats")
-        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileGettingStats>(*observer);
+        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileGettingStats>(*dependencies.observer);
 
     if (m_testCase == "LibWebRTCReleasingWhileSettingDescription")
-        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileSettingDescription>(*observer);
+        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileSettingDescription>(*dependencies.observer);
 
-    return new rtc::RefCountedObject<MockLibWebRTCPeerConnection>(*observer);
+    return new rtc::RefCountedObject<MockLibWebRTCPeerConnection>(*dependencies.observer);
 }
 
 rtc::scoped_refptr<webrtc::VideoTrackInterface> MockLibWebRTCPeerConnectionFactory::CreateVideoTrack(const std::string& id, webrtc::VideoTrackSourceInterface* source)

Modified: trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.h (237260 => 237261)


--- trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.h	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.h	2018-10-18 18:15:19 UTC (rev 237261)
@@ -241,7 +241,7 @@
     MockLibWebRTCPeerConnectionFactory(String&&);
 
 private:
-    rtc::scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection(const webrtc::PeerConnectionInterface::RTCConfiguration&, std::unique_ptr<cricket::PortAllocator>, std::unique_ptr<rtc::RTCCertificateGeneratorInterface>, webrtc::PeerConnectionObserver*) final;
+    rtc::scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection(const webrtc::PeerConnectionInterface::RTCConfiguration&, webrtc::PeerConnectionDependencies) final;
 
     rtc::scoped_refptr<webrtc::MediaStreamInterface> CreateLocalMediaStream(const std::string&) final;
 

Modified: trunk/Source/WebKit/ChangeLog (237260 => 237261)


--- trunk/Source/WebKit/ChangeLog	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebKit/ChangeLog	2018-10-18 18:15:19 UTC (rev 237261)
@@ -1,3 +1,26 @@
+2018-10-18  Youenn Fablet  <you...@apple.com>
+
+        Handle MDNS resolution of candidates through libwebrtc directly
+        https://bugs.webkit.org/show_bug.cgi?id=190681
+
+        Reviewed by Eric Carlson.
+
+        Add support for AsyncResolver to resolve MDNS.
+        This basically reuse the code path used to resolve STUN server addresses.
+        Removed MDNS specific resolution.
+        Use existing CFHost resolution mechanism to do the actual resolution.
+
+        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
+        (WebKit::NetworkMDNSRegister::registerMDNSName):
+        * NetworkProcess/webrtc/NetworkMDNSRegister.messages.in:
+        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
+        (WebKit::LibWebRTCProvider::createPeerConnection):
+        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
+        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:
+        * WebProcess/Network/webrtc/WebMDNSRegister.cpp:
+        * WebProcess/Network/webrtc/WebMDNSRegister.h:
+        * WebProcess/Network/webrtc/WebMDNSRegister.messages.in:
+
 2018-10-18  Chris Dumez  <cdu...@apple.com>
 
         [PSON] Cap number of SuspendedPageProxy objects and allow a WebPageProxy to have more than one

Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp (237260 => 237261)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp	2018-10-18 18:15:19 UTC (rev 237261)
@@ -156,97 +156,6 @@
     }
     pendingRegistrationRequests().add(pendingRegistrationRequestCount++, WTFMove(pendingRequest));
 }
-
-struct PendingResolutionRequest {
-    PendingResolutionRequest(Ref<IPC::Connection> connection, uint64_t requestIdentifier, PAL::SessionID sessionID)
-        : connection(WTFMove(connection))
-        , requestIdentifier(requestIdentifier)
-        , timeoutTimer(*this, &PendingResolutionRequest::timeout)
-        , sessionID(sessionID)
-    {
-        timeoutTimer.startOneShot(500_ms);
-    }
-
-    ~PendingResolutionRequest()
-    {
-        if (service)
-            DNSServiceRefDeallocate(service);
-        if (operationService)
-            DNSServiceRefDeallocate(operationService);
-    }
-
-    void timeout()
-    {
-        connection->send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { requestIdentifier, makeUnexpected(MDNSRegisterError::Timeout) }, 0);
-        requestIdentifier = 0;
-    }
-
-    Ref<IPC::Connection> connection;
-    uint64_t requestIdentifier { 0 };
-    DNSServiceRef service { nullptr };
-    DNSServiceRef operationService { nullptr };
-    Timer timeoutTimer;
-    PAL::SessionID sessionID;
-};
-
-static void resolveMDNSNameCallback(DNSServiceRef, DNSServiceFlags, uint32_t, DNSServiceErrorType errorCode, const char *hostname, const struct sockaddr *socketAddress, uint32_t ttl, void *context)
-{
-    std::unique_ptr<PendingResolutionRequest> request { static_cast<PendingResolutionRequest*>(context) };
-
-    if (!request->requestIdentifier)
-        return;
-
-    if (errorCode) {
-        RELEASE_LOG_IF_ALLOWED_IN_CALLBACK(request->sessionID, "resolveMDNSNameCallback MDNS error %d", errorCode);
-        request->connection->send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { request->requestIdentifier, makeUnexpected(MDNSRegisterError::DNSSD) }, 0);
-        return;
-    }
-
-    const void* address = socketAddress->sa_family == AF_INET6 ? (const void*) &((const struct sockaddr_in6*)socketAddress)->sin6_addr : (const void*)&((const struct sockaddr_in*)socketAddress)->sin_addr;
-
-    char buffer[INET6_ADDRSTRLEN] = { 0 };
-    if (!inet_ntop(socketAddress->sa_family, address, buffer, sizeof(buffer))) {
-        RELEASE_LOG_IF_ALLOWED_IN_CALLBACK(request->sessionID, "resolveMDNSNameCallback inet_ntop error");
-        request->connection->send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { request->requestIdentifier, makeUnexpected(MDNSRegisterError::DNSSD) }, 0);
-        return;
-    }
-
-    request->connection->send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { request->requestIdentifier, String { buffer } }, 0);
-}
-
-void NetworkMDNSRegister::resolveMDNSName(uint64_t requestIdentifier, PAL::SessionID sessionID, const String& name)
-{
-    UNUSED_PARAM(sessionID);
-    auto pendingRequest = std::make_unique<PendingResolutionRequest>(makeRef(m_connection.connection()), requestIdentifier, sessionID);
-
-    if (auto error = DNSServiceCreateConnection(&pendingRequest->service)) {
-        RELEASE_LOG_IF_ALLOWED(sessionID, "resolveMDNSName DNSServiceCreateConnection error %d", error);
-        m_connection.connection().send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { requestIdentifier, makeUnexpected(MDNSRegisterError::DNSSD) }, 0);
-        return;
-    }
-
-    DNSServiceRef service;
-    auto error = DNSServiceGetAddrInfo(&service,
-        kDNSServiceFlagsUnique,
-        0,
-        kDNSServiceProtocol_IPv4,
-        name.utf8().data(),
-        resolveMDNSNameCallback,
-        pendingRequest.get());
-    pendingRequest->operationService = service;
-    if (error) {
-        RELEASE_LOG_IF_ALLOWED(sessionID, "resolveMDNSName DNSServiceGetAddrInfo error %d", error);
-        m_connection.connection().send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { requestIdentifier, makeUnexpected(MDNSRegisterError::DNSSD) }, 0);
-        return;
-    }
-    pendingRequest.release();
-
-    error = DNSServiceSetDispatchQueue(service, dispatch_get_main_queue());
-    if (error) {
-        RELEASE_LOG_IF_ALLOWED(sessionID, "resolveMDNSName DNSServiceSetDispatchQueue error %d", error);
-        m_connection.connection().send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { requestIdentifier, makeUnexpected(MDNSRegisterError::DNSSD) }, 0);
-    }
-}
 #else
 void NetworkMDNSRegister::unregisterMDNSNames(WebCore::DocumentIdentifier)
 {
@@ -258,12 +167,6 @@
     m_connection.connection().send(Messages::WebMDNSRegister::FinishedRegisteringMDNSName { requestIdentifier, makeUnexpected(MDNSRegisterError::NotImplemented) }, 0);
 }
 
-void NetworkMDNSRegister::resolveMDNSName(uint64_t requestIdentifier, PAL::SessionID sessionID, const String& name)
-{
-    RELEASE_LOG_IF_ALLOWED(sessionID, "resolveMDNSName not implemented");
-    m_connection.connection().send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { requestIdentifier, makeUnexpected(MDNSRegisterError::NotImplemented) }, 0);
-}
-
 #endif
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.messages.in (237260 => 237261)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.messages.in	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.messages.in	2018-10-18 18:15:19 UTC (rev 237261)
@@ -25,7 +25,6 @@
 messages -> NetworkMDNSRegister {
     UnregisterMDNSNames(WebCore::DocumentIdentifier documentIdentifier)
     RegisterMDNSName(uint64_t requestIdentifier, PAL::SessionID sessionID, WebCore::DocumentIdentifier documentIdentifier, String ipAddress)
-    ResolveMDNSName(uint64_t requestIdentifier, PAL::SessionID sessionID, String name)
 }
 
 #endif // ENABLE(WEB_RTC)

Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp (237260 => 237261)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp	2018-10-18 18:15:19 UTC (rev 237261)
@@ -30,14 +30,23 @@
 
 #include "LibWebRTCNetwork.h"
 #include "WebProcess.h"
+#include <webrtc/api/asyncresolverfactory.h>
 #include <webrtc/pc/peerconnectionfactory.h>
 
 namespace WebKit {
 using namespace WebCore;
 
+class AsyncResolverFactory : public webrtc::AsyncResolverFactory {
+private:
+    rtc::AsyncResolverInterface* Create() final
+    {
+        return WebProcess::singleton().libWebRTCNetwork().socketFactory().createAsyncResolver();
+    }
+};
+
 rtc::scoped_refptr<webrtc::PeerConnectionInterface> LibWebRTCProvider::createPeerConnection(webrtc::PeerConnectionObserver& observer, webrtc::PeerConnectionInterface::RTCConfiguration&& configuration)
 {
-    return WebCore::LibWebRTCProvider::createPeerConnection(observer, WebProcess::singleton().libWebRTCNetwork().monitor(), WebProcess::singleton().libWebRTCNetwork().socketFactory(), WTFMove(configuration));
+    return WebCore::LibWebRTCProvider::createPeerConnection(observer, WebProcess::singleton().libWebRTCNetwork().monitor(), WebProcess::singleton().libWebRTCNetwork().socketFactory(), WTFMove(configuration), std::make_unique<AsyncResolverFactory>());
 }
 
 void LibWebRTCProvider::disableNonLocalhostConnections()
@@ -55,11 +64,6 @@
     WebProcess::singleton().libWebRTCNetwork().mdnsRegister().registerMDNSName(sessionID, documentIdentifier, ipAddress, WTFMove(callback));
 }
 
-void LibWebRTCProvider::resolveMDNSName(PAL::SessionID sessionID, const String& name, CompletionHandler<void(IPAddressOrError&&)>&& callback)
-{
-    WebProcess::singleton().libWebRTCNetwork().mdnsRegister().resolveMDNSName(sessionID, name, WTFMove(callback));
-}
-
 } // namespace WebKit
 
 #endif // USE(LIBWEBRTC)

Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h (237260 => 237261)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h	2018-10-18 18:15:19 UTC (rev 237261)
@@ -54,7 +54,6 @@
 
     void unregisterMDNSNames(uint64_t documentIdentifier) final;
     void registerMDNSName(PAL::SessionID, uint64_t documentIdentifier, const String& ipAddress, CompletionHandler<void(MDNSNameOrError&&)>&&) final;
-    void resolveMDNSName(PAL::SessionID, const String& name, CompletionHandler<void(IPAddressOrError&&)>&&) final;
     void disableNonLocalhostConnections() final;
 };
 #else

Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.h (237260 => 237261)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.h	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.h	2018-10-18 18:15:19 UTC (rev 237261)
@@ -51,6 +51,8 @@
 
     void disableNonLocalhostConnections() { m_disableNonLocalhostConnections = true; }
 
+    rtc::AsyncResolverInterface* createAsyncResolver() { return 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;

Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.cpp (237260 => 237261)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.cpp	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.cpp	2018-10-18 18:15:19 UTC (rev 237261)
@@ -52,13 +52,6 @@
     pendingRegistration.callback(WTFMove(result));
 }
 
-void WebMDNSRegister::finishedResolvingMDNSName(uint64_t identifier, LibWebRTCProvider::IPAddressOrError&& result)
-{
-    auto callback = m_pendingResolutions.take(identifier);
-    if (callback)
-        callback(WTFMove(result));
-}
-
 void WebMDNSRegister::unregisterMDNSNames(uint64_t documentIdentifier)
 {
     auto identifier = makeObjectIdentifier<DocumentIdentifierType>(documentIdentifier);
@@ -89,15 +82,6 @@
         finishedRegisteringMDNSName(m_pendingRequestsIdentifier, makeUnexpected(MDNSRegisterError::Internal));
 }
 
-void WebMDNSRegister::resolveMDNSName(PAL::SessionID sessionID, const String& name, CompletionHandler<void(LibWebRTCProvider::IPAddressOrError&&)>&& callback)
-{
-    m_pendingResolutions.add(++m_pendingRequestsIdentifier, WTFMove(callback));
-
-    auto& connection = WebProcess::singleton().ensureNetworkProcessConnection().connection();
-    if (!connection.send(Messages::NetworkMDNSRegister::ResolveMDNSName { m_pendingRequestsIdentifier, sessionID, name }, 0))
-        finishedResolvingMDNSName(m_pendingRequestsIdentifier, makeUnexpected(MDNSRegisterError::Internal));
-}
-
 } // namespace WebKit
 
 #endif // ENABLE(WEB_RTC)

Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.h (237260 => 237261)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.h	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.h	2018-10-18 18:15:19 UTC (rev 237261)
@@ -46,13 +46,11 @@
 
     void unregisterMDNSNames(uint64_t documentIdentifier);
     void registerMDNSName(PAL::SessionID, uint64_t documentIdentifier, const String& ipAddress, CompletionHandler<void(WebCore::LibWebRTCProvider::MDNSNameOrError&&)>&&);
-    void resolveMDNSName(PAL::SessionID, const String& name, CompletionHandler<void(WebCore::LibWebRTCProvider::IPAddressOrError&&)>&&);
 
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
 
 private:
     void finishedRegisteringMDNSName(uint64_t, WebCore::LibWebRTCProvider::MDNSNameOrError&&);
-    void finishedResolvingMDNSName(uint64_t, WebCore::LibWebRTCProvider::IPAddressOrError&&);
 
     struct PendingRegistration {
         CompletionHandler<void(WebCore::LibWebRTCProvider::MDNSNameOrError&&)> callback;

Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.messages.in (237260 => 237261)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.messages.in	2018-10-18 17:33:53 UTC (rev 237260)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.messages.in	2018-10-18 18:15:19 UTC (rev 237261)
@@ -24,7 +24,6 @@
 
 messages -> WebMDNSRegister {
     void FinishedRegisteringMDNSName(uint64_t identifier, WebCore::LibWebRTCProvider::MDNSNameOrError result)
-    void FinishedResolvingMDNSName(uint64_t identifier, WebCore::LibWebRTCProvider::IPAddressOrError result)
 }
 
 #endif // ENABLE(WEB_RTC)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to