Title: [237367] trunk
Revision
237367
Author
[email protected]
Date
2018-10-23 14:07:14 -0700 (Tue, 23 Oct 2018)

Log Message

Unreviewed, rolling out r237261.

The layout test for this change crashes under GuardMalloc.

Reverted changeset:

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

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (237366 => 237367)


--- trunk/LayoutTests/ChangeLog	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/LayoutTests/ChangeLog	2018-10-23 21:07:14 UTC (rev 237367)
@@ -1,3 +1,16 @@
+2018-10-23  Ryan Haddad  <[email protected]>
+
+        Unreviewed, rolling out r237261.
+
+        The layout test for this change crashes under GuardMalloc.
+
+        Reverted changeset:
+
+        "Handle MDNS resolution of candidates through libwebrtc
+        directly"
+        https://bugs.webkit.org/show_bug.cgi?id=190681
+        https://trac.webkit.org/changeset/237261
+
 2018-10-23  Joseph Pecoraro  <[email protected]>
 
         Web Inspector: Remove unused css-rules pretty printing test expectation

Modified: trunk/LayoutTests/TestExpectations (237366 => 237367)


--- trunk/LayoutTests/TestExpectations	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/LayoutTests/TestExpectations	2018-10-23 21:07:14 UTC (rev 237367)
@@ -1215,6 +1215,7 @@
 
 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 (237366 => 237367)


--- trunk/Source/ThirdParty/libwebrtc/ChangeLog	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/ThirdParty/libwebrtc/ChangeLog	2018-10-23 21:07:14 UTC (rev 237367)
@@ -1,3 +1,16 @@
+2018-10-23  Ryan Haddad  <[email protected]>
+
+        Unreviewed, rolling out r237261.
+
+        The layout test for this change crashes under GuardMalloc.
+
+        Reverted changeset:
+
+        "Handle MDNS resolution of candidates through libwebrtc
+        directly"
+        https://bugs.webkit.org/show_bug.cgi?id=190681
+        https://trac.webkit.org/changeset/237261
+
 2018-10-18  Youenn Fablet  <[email protected]>
 
         Handle MDNS resolution of candidates through libwebrtc directly

Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp (237366 => 237367)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp	2018-10-23 21:07:14 UTC (rev 237367)
@@ -229,5 +229,3 @@
 __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 (237366 => 237367)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp	2018-10-23 21:07:14 UTC (rev 237367)
@@ -230,5 +230,3 @@
 __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 (237366 => 237367)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp	2018-10-23 21:07:14 UTC (rev 237367)
@@ -230,5 +230,3 @@
 __ZNK3rtc14RTCCertificate5ToPEMEv
 __ZNK3rtc14SSLCertificate8GetStatsEv
 __ZN3rtc14RTCCertificate7FromPEMERKNS_17RTCCertificatePEME
-__ZN6webrtc26PeerConnectionDependenciesC1EPNS_22PeerConnectionObserverE
-__ZN6webrtc30PeerConnectionFactoryInterface20CreatePeerConnectionERKNS_23PeerConnectionInterface16RTCConfigurationENSt3__110unique_ptrIN7cricket13PortAllocatorENS5_14default_deleteIS8_EEEENS6_IN3rtc32RTCCertificateGeneratorInterfaceENS9_ISD_EEEEPNS_22PeerConnectionObserverE

Modified: trunk/Source/WebCore/ChangeLog (237366 => 237367)


--- trunk/Source/WebCore/ChangeLog	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebCore/ChangeLog	2018-10-23 21:07:14 UTC (rev 237367)
@@ -1,3 +1,16 @@
+2018-10-23  Ryan Haddad  <[email protected]>
+
+        Unreviewed, rolling out r237261.
+
+        The layout test for this change crashes under GuardMalloc.
+
+        Reverted changeset:
+
+        "Handle MDNS resolution of candidates through libwebrtc
+        directly"
+        https://bugs.webkit.org/show_bug.cgi?id=190681
+        https://trac.webkit.org/changeset/237261
+
 2018-10-23  Truitt Savell  <[email protected]>
 
         Unreviewed, rolling out r237357.

Modified: trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp (237366 => 237367)


--- trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp	2018-10-23 21:07:14 UTC (rev 237367)
@@ -274,10 +274,42 @@
     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 (237366 => 237367)


--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp	2018-10-23 21:07:14 UTC (rev 237367)
@@ -33,7 +33,6 @@
 
 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>
@@ -245,10 +244,10 @@
         factoryAndThreads.packetSocketFactory = std::make_unique<BasicPacketSocketFactory>(*factoryAndThreads.networkThread);
     factoryAndThreads.packetSocketFactory->setDisableNonLocalhostConnections(m_disableNonLocalhostConnections);
 
-    return createPeerConnection(observer, *factoryAndThreads.networkManager, *factoryAndThreads.packetSocketFactory, WTFMove(configuration), nullptr);
+    return createPeerConnection(observer, *factoryAndThreads.networkManager, *factoryAndThreads.packetSocketFactory, WTFMove(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)
+rtc::scoped_refptr<webrtc::PeerConnectionInterface> LibWebRTCProvider::createPeerConnection(webrtc::PeerConnectionObserver& observer, rtc::NetworkManager& networkManager, rtc::PacketSocketFactory& packetSocketFactory, webrtc::PeerConnectionInterface::RTCConfiguration&& configuration)
 {
     auto& factoryAndThreads = getStaticFactoryAndThreads(m_useNetworkThreadWithSocketServer);
 
@@ -264,11 +263,7 @@
     if (!factory)
         return nullptr;
 
-    webrtc::PeerConnectionDependencies dependencies { &observer };
-    dependencies.allocator = WTFMove(portAllocator);
-    dependencies.async_resolver_factory = WTFMove(asyncResolveFactory);
-
-    return m_factory->CreatePeerConnection(configuration, WTFMove(dependencies));
+    return m_factory->CreatePeerConnection(configuration, WTFMove(portAllocator), nullptr, &observer);
 }
 
 rtc::RTCCertificateGenerator& LibWebRTCProvider::certificateGenerator()

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


--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h	2018-10-23 21:07:14 UTC (rev 237367)
@@ -51,7 +51,6 @@
 }
 
 namespace webrtc {
-class AsyncResolverFactory;
 class PeerConnectionFactoryInterface;
 }
 #endif
@@ -89,6 +88,12 @@
         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&&);
 
@@ -112,7 +117,7 @@
 protected:
     LibWebRTCProvider() = default;
 
-    rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, rtc::NetworkManager&, rtc::PacketSocketFactory&, webrtc::PeerConnectionInterface::RTCConfiguration&&, std::unique_ptr<webrtc::AsyncResolverFactory>&&);
+    rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, rtc::NetworkManager&, rtc::PacketSocketFactory&, webrtc::PeerConnectionInterface::RTCConfiguration&&);
 
     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 (237366 => 237367)


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

Modified: trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.h (237366 => 237367)


--- trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.h	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.h	2018-10-23 21:07:14 UTC (rev 237367)
@@ -241,7 +241,7 @@
     MockLibWebRTCPeerConnectionFactory(String&&);
 
 private:
-    rtc::scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection(const webrtc::PeerConnectionInterface::RTCConfiguration&, webrtc::PeerConnectionDependencies) final;
+    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::MediaStreamInterface> CreateLocalMediaStream(const std::string&) final;
 

Modified: trunk/Source/WebKit/ChangeLog (237366 => 237367)


--- trunk/Source/WebKit/ChangeLog	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebKit/ChangeLog	2018-10-23 21:07:14 UTC (rev 237367)
@@ -1,3 +1,16 @@
+2018-10-23  Ryan Haddad  <[email protected]>
+
+        Unreviewed, rolling out r237261.
+
+        The layout test for this change crashes under GuardMalloc.
+
+        Reverted changeset:
+
+        "Handle MDNS resolution of candidates through libwebrtc
+        directly"
+        https://bugs.webkit.org/show_bug.cgi?id=190681
+        https://trac.webkit.org/changeset/237261
+
 2018-10-23  David Kilzer  <[email protected]>
 
         Fix false positive leaks when using custom -init methods that don't start with -init

Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp (237366 => 237367)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp	2018-10-23 21:07:14 UTC (rev 237367)
@@ -156,6 +156,97 @@
     }
     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)
 {
@@ -167,6 +258,12 @@
     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 (237366 => 237367)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.messages.in	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.messages.in	2018-10-23 21:07:14 UTC (rev 237367)
@@ -25,6 +25,7 @@
 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 (237366 => 237367)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp	2018-10-23 21:07:14 UTC (rev 237367)
@@ -30,23 +30,14 @@
 
 #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), std::make_unique<AsyncResolverFactory>());
+    return WebCore::LibWebRTCProvider::createPeerConnection(observer, WebProcess::singleton().libWebRTCNetwork().monitor(), WebProcess::singleton().libWebRTCNetwork().socketFactory(), WTFMove(configuration));
 }
 
 void LibWebRTCProvider::disableNonLocalhostConnections()
@@ -64,6 +55,11 @@
     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 (237366 => 237367)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h	2018-10-23 21:07:14 UTC (rev 237367)
@@ -54,6 +54,7 @@
 
     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 (237366 => 237367)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.h	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.h	2018-10-23 21:07:14 UTC (rev 237367)
@@ -51,8 +51,6 @@
 
     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 (237366 => 237367)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.cpp	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.cpp	2018-10-23 21:07:14 UTC (rev 237367)
@@ -52,6 +52,13 @@
     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);
@@ -82,6 +89,15 @@
         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 (237366 => 237367)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.h	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.h	2018-10-23 21:07:14 UTC (rev 237367)
@@ -46,11 +46,13 @@
 
     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 (237366 => 237367)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.messages.in	2018-10-23 20:53:20 UTC (rev 237366)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.messages.in	2018-10-23 21:07:14 UTC (rev 237367)
@@ -24,6 +24,7 @@
 
 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
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to