Changeset 237261 in webkit


Ignore:
Timestamp:
Oct 18, 2018 11:15:19 AM (6 years ago)
Author:
youenn@apple.com
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:

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

Location:
trunk
Files:
21 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r237259 r237261  
     12018-10-18  Youenn Fablet  <youenn@apple.com>
     2
     3        Handle MDNS resolution of candidates through libwebrtc directly
     4        https://bugs.webkit.org/show_bug.cgi?id=190681
     5
     6        Reviewed by Eric Carlson.
     7
     8        * TestExpectations:
     9        Test should no longer be flaky as we no longer enforce a timer for resolving MDNS candidates.
     10
    1112018-10-18  Ross Kirsling  <ross.kirsling@sony.com>
    212
  • trunk/LayoutTests/TestExpectations

    r237245 r237261  
    12171217webrtc/simulcast-h264.html [ Slow ]
    12181218webrtc/datachannel/multiple-connections.html [ Slow ]
    1219 webkit.org/b/187180 webrtc/datachannel/mdns-ice-candidates.html [ Pass Failure ]
    12201219webkit.org/b/171094 imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-idl.html [ Failure ]
    12211220webkit.org/b/172f21 imported/w3c/web-platform-tests/webrtc/getstats.html [ Failure ]
  • trunk/Source/ThirdParty/libwebrtc/ChangeLog

    r237227 r237261  
     12018-10-18  Youenn Fablet  <youenn@apple.com>
     2
     3        Handle MDNS resolution of candidates through libwebrtc directly
     4        https://bugs.webkit.org/show_bug.cgi?id=190681
     5
     6        Reviewed by Eric Carlson.
     7
     8        * Configurations/libwebrtc.iOS.exp:
     9        * Configurations/libwebrtc.iOSsim.exp:
     10        * Configurations/libwebrtc.mac.exp:
     11
    1122018-10-17  Youenn Fablet  <youenn@apple.com>
    213
  • trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp

    r237202 r237261  
    230230__ZNK3rtc14SSLCertificate8GetStatsEv
    231231__ZN3rtc14RTCCertificate7FromPEMERKNS_17RTCCertificatePEME
     232__ZN6webrtc26PeerConnectionDependenciesC1EPNS_22PeerConnectionObserverE
     233__ZN6webrtc30PeerConnectionFactoryInterface20CreatePeerConnectionERKNS_23PeerConnectionInterface16RTCConfigurationENSt3__110unique_ptrIN7cricket13PortAllocatorENS5_14default_deleteIS8_EEEENS6_IN3rtc32RTCCertificateGeneratorInterfaceENS9_ISD_EEEEPNS_22PeerConnectionObserverE
  • trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp

    r237202 r237261  
    231231__ZNK3rtc14SSLCertificate8GetStatsEv
    232232__ZN3rtc14RTCCertificate7FromPEMERKNS_17RTCCertificatePEME
     233__ZN6webrtc26PeerConnectionDependenciesC1EPNS_22PeerConnectionObserverE
     234__ZN6webrtc30PeerConnectionFactoryInterface20CreatePeerConnectionERKNS_23PeerConnectionInterface16RTCConfigurationENSt3__110unique_ptrIN7cricket13PortAllocatorENS5_14default_deleteIS8_EEEENS6_IN3rtc32RTCCertificateGeneratorInterfaceENS9_ISD_EEEEPNS_22PeerConnectionObserverE
  • trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp

    r237202 r237261  
    231231__ZNK3rtc14SSLCertificate8GetStatsEv
    232232__ZN3rtc14RTCCertificate7FromPEMERKNS_17RTCCertificatePEME
     233__ZN6webrtc26PeerConnectionDependenciesC1EPNS_22PeerConnectionObserverE
     234__ZN6webrtc30PeerConnectionFactoryInterface20CreatePeerConnectionERKNS_23PeerConnectionInterface16RTCConfigurationENSt3__110unique_ptrIN7cricket13PortAllocatorENS5_14default_deleteIS8_EEEENS6_IN3rtc32RTCCertificateGeneratorInterfaceENS9_ISD_EEEEPNS_22PeerConnectionObserverE
  • trunk/Source/WebCore/ChangeLog

    r237255 r237261  
     12018-10-18  Youenn Fablet  <youenn@apple.com>
     2
     3        Handle MDNS resolution of candidates through libwebrtc directly
     4        https://bugs.webkit.org/show_bug.cgi?id=190681
     5
     6        Reviewed by Eric Carlson.
     7
     8        Remove the previous MDNS resolution mechanism.
     9        Instead, add support for the AsyncResolver mechanism added to libwebrtc.
     10        Covered by current mdns webrtc test that is unflaked.
     11
     12        * Modules/mediastream/PeerConnectionBackend.cpp:
     13        (WebCore::PeerConnectionBackend::addIceCandidate):
     14        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
     15        (WebCore::LibWebRTCProvider::createPeerConnection):
     16        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
     17        * testing/MockLibWebRTCPeerConnection.cpp:
     18        (WebCore::MockLibWebRTCPeerConnectionFactory::CreatePeerConnection):
     19        * testing/MockLibWebRTCPeerConnection.h:
     20
    1212018-10-18  Ali Juma  <ajuma@chromium.org>
    222
  • trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp

    r237140 r237261  
    275275
    276276    if (!iceCandidate) {
    277         if (m_waitingForMDNSResolution) {
    278             m_finishedReceivingCandidates = true;
    279             m_endOfIceCandidatePromise = WTFMove(promise);
    280             return;
    281         }
    282277        endOfIceCandidates(WTFMove(promise));
    283278        return;
    284     }
    285 
    286     if (RuntimeEnabledFeatures::sharedFeatures().mdnsICECandidatesEnabled()) {
    287         auto name = extractIPAddres(iceCandidate->candidate());
    288         if (name.endsWith(".local")) {
    289             ++m_waitingForMDNSResolution;
    290             auto& document = downcast<Document>(*m_peerConnection.scriptExecutionContext());
    291             auto& provider = document.page()->libWebRTCProvider();
    292             provider.resolveMDNSName(document.sessionID(), name, [peerConnection = makeRef(m_peerConnection), this, name, iceCandidate = makeRef(*iceCandidate), promise = WTFMove(promise)] (LibWebRTCProvider::IPAddressOrError&& result) mutable {
    293                 if (peerConnection->isStopped())
    294                     return;
    295 
    296                 --m_waitingForMDNSResolution;
    297                 if (!result.has_value()) {
    298                     if (result.error() != MDNSRegisterError::Timeout)
    299                         peerConnection->scriptExecutionContext()->addConsoleMessage(MessageSource::JS, MessageLevel::Warning, makeString("MDNS resolution of a host candidate failed with error", (unsigned)result.error()));
    300                     return;
    301                 }
    302 
    303                 auto candidate = iceCandidate->candidate();
    304                 candidate.replace(name, result.value());
    305                 iceCandidate->setCandidate(WTFMove(candidate));
    306                 m_addIceCandidatePromise = WTFMove(promise);
    307                 this->doAddIceCandidate(iceCandidate);
    308             });
    309             return;
    310         }
    311279    }
    312280
  • trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp

    r237140 r237261  
    3434ALLOW_UNUSED_PARAMETERS_BEGIN
    3535
     36#include <webrtc/api/asyncresolverfactory.h>
    3637#include <webrtc/api/audio_codecs/builtin_audio_decoder_factory.h>
    3738#include <webrtc/api/audio_codecs/builtin_audio_encoder_factory.h>
     
    245246    factoryAndThreads.packetSocketFactory->setDisableNonLocalhostConnections(m_disableNonLocalhostConnections);
    246247
    247     return createPeerConnection(observer, *factoryAndThreads.networkManager, *factoryAndThreads.packetSocketFactory, WTFMove(configuration));
    248 }
    249 
    250 rtc::scoped_refptr<webrtc::PeerConnectionInterface> LibWebRTCProvider::createPeerConnection(webrtc::PeerConnectionObserver& observer, rtc::NetworkManager& networkManager, rtc::PacketSocketFactory& packetSocketFactory, webrtc::PeerConnectionInterface::RTCConfiguration&& configuration)
     248    return createPeerConnection(observer, *factoryAndThreads.networkManager, *factoryAndThreads.packetSocketFactory, WTFMove(configuration), nullptr);
     249}
     250
     251rtc::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)
    251252{
    252253    auto& factoryAndThreads = getStaticFactoryAndThreads(m_useNetworkThreadWithSocketServer);
     
    264265        return nullptr;
    265266
    266     return m_factory->CreatePeerConnection(configuration, WTFMove(portAllocator), nullptr, &observer);
     267    webrtc::PeerConnectionDependencies dependencies { &observer };
     268    dependencies.allocator = WTFMove(portAllocator);
     269    dependencies.async_resolver_factory = WTFMove(asyncResolveFactory);
     270
     271    return m_factory->CreatePeerConnection(configuration, WTFMove(dependencies));
    267272}
    268273
  • trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h

    r237140 r237261  
    5252
    5353namespace webrtc {
     54class AsyncResolverFactory;
    5455class PeerConnectionFactoryInterface;
    5556}
     
    8990    }
    9091
    91     virtual void resolveMDNSName(PAL::SessionID, const String& name, CompletionHandler<void(IPAddressOrError&&)>&& callback)
    92     {
    93         UNUSED_PARAM(name);
    94         callback(makeUnexpected(MDNSRegisterError::NotImplemented));
    95     }
    96 
    9792#if USE(LIBWEBRTC)
    9893    virtual rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, webrtc::PeerConnectionInterface::RTCConfiguration&&);
     
    118113    LibWebRTCProvider() = default;
    119114
    120     rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, rtc::NetworkManager&, rtc::PacketSocketFactory&, webrtc::PeerConnectionInterface::RTCConfiguration&&);
     115    rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, rtc::NetworkManager&, rtc::PacketSocketFactory&, webrtc::PeerConnectionInterface::RTCConfiguration&&, std::unique_ptr<webrtc::AsyncResolverFactory>&&);
    121116
    122117    rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> createPeerConnectionFactory(rtc::Thread* networkThread, rtc::Thread* signalingThread, LibWebRTCAudioModule*);
  • trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp

    r237075 r237261  
    173173}
    174174
    175 rtc::scoped_refptr<webrtc::PeerConnectionInterface> MockLibWebRTCPeerConnectionFactory::CreatePeerConnection(const webrtc::PeerConnectionInterface::RTCConfiguration&, std::unique_ptr<cricket::PortAllocator>, std::unique_ptr<rtc::RTCCertificateGeneratorInterface>, webrtc::PeerConnectionObserver* observer)
     175rtc::scoped_refptr<webrtc::PeerConnectionInterface> MockLibWebRTCPeerConnectionFactory::CreatePeerConnection(const webrtc::PeerConnectionInterface::RTCConfiguration&, webrtc::PeerConnectionDependencies dependencies)
    176176{
    177177    if (m_testCase == "ICECandidates")
    178         return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionForIceCandidates>(*observer);
     178        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionForIceCandidates>(*dependencies.observer);
    179179
    180180    if (m_testCase == "ICEConnectionState")
    181         return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionForIceConnectionState>(*observer);
     181        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionForIceConnectionState>(*dependencies.observer);
    182182
    183183    if (m_testCase == "LibWebRTCReleasingWhileCreatingOffer")
    184         return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileCreatingOffer>(*observer);
     184        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileCreatingOffer>(*dependencies.observer);
    185185
    186186    if (m_testCase == "LibWebRTCReleasingWhileGettingStats")
    187         return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileGettingStats>(*observer);
     187        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileGettingStats>(*dependencies.observer);
    188188
    189189    if (m_testCase == "LibWebRTCReleasingWhileSettingDescription")
    190         return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileSettingDescription>(*observer);
    191 
    192     return new rtc::RefCountedObject<MockLibWebRTCPeerConnection>(*observer);
     190        return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileSettingDescription>(*dependencies.observer);
     191
     192    return new rtc::RefCountedObject<MockLibWebRTCPeerConnection>(*dependencies.observer);
    193193}
    194194
  • trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.h

    r237075 r237261  
    242242
    243243private:
    244     rtc::scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection(const webrtc::PeerConnectionInterface::RTCConfiguration&, std::unique_ptr<cricket::PortAllocator>, std::unique_ptr<rtc::RTCCertificateGeneratorInterface>, webrtc::PeerConnectionObserver*) final;
     244    rtc::scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection(const webrtc::PeerConnectionInterface::RTCConfiguration&, webrtc::PeerConnectionDependencies) final;
    245245
    246246    rtc::scoped_refptr<webrtc::MediaStreamInterface> CreateLocalMediaStream(const std::string&) final;
  • trunk/Source/WebKit/ChangeLog

    r237257 r237261  
     12018-10-18  Youenn Fablet  <youenn@apple.com>
     2
     3        Handle MDNS resolution of candidates through libwebrtc directly
     4        https://bugs.webkit.org/show_bug.cgi?id=190681
     5
     6        Reviewed by Eric Carlson.
     7
     8        Add support for AsyncResolver to resolve MDNS.
     9        This basically reuse the code path used to resolve STUN server addresses.
     10        Removed MDNS specific resolution.
     11        Use existing CFHost resolution mechanism to do the actual resolution.
     12
     13        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp:
     14        (WebKit::NetworkMDNSRegister::registerMDNSName):
     15        * NetworkProcess/webrtc/NetworkMDNSRegister.messages.in:
     16        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
     17        (WebKit::LibWebRTCProvider::createPeerConnection):
     18        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
     19        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h:
     20        * WebProcess/Network/webrtc/WebMDNSRegister.cpp:
     21        * WebProcess/Network/webrtc/WebMDNSRegister.h:
     22        * WebProcess/Network/webrtc/WebMDNSRegister.messages.in:
     23
    1242018-10-18  Chris Dumez  <cdumez@apple.com>
    225
  • trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp

    r235101 r237261  
    157157    pendingRegistrationRequests().add(pendingRegistrationRequestCount++, WTFMove(pendingRequest));
    158158}
    159 
    160 struct PendingResolutionRequest {
    161     PendingResolutionRequest(Ref<IPC::Connection> connection, uint64_t requestIdentifier, PAL::SessionID sessionID)
    162         : connection(WTFMove(connection))
    163         , requestIdentifier(requestIdentifier)
    164         , timeoutTimer(*this, &PendingResolutionRequest::timeout)
    165         , sessionID(sessionID)
    166     {
    167         timeoutTimer.startOneShot(500_ms);
    168     }
    169 
    170     ~PendingResolutionRequest()
    171     {
    172         if (service)
    173             DNSServiceRefDeallocate(service);
    174         if (operationService)
    175             DNSServiceRefDeallocate(operationService);
    176     }
    177 
    178     void timeout()
    179     {
    180         connection->send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { requestIdentifier, makeUnexpected(MDNSRegisterError::Timeout) }, 0);
    181         requestIdentifier = 0;
    182     }
    183 
    184     Ref<IPC::Connection> connection;
    185     uint64_t requestIdentifier { 0 };
    186     DNSServiceRef service { nullptr };
    187     DNSServiceRef operationService { nullptr };
    188     Timer timeoutTimer;
    189     PAL::SessionID sessionID;
    190 };
    191 
    192 static void resolveMDNSNameCallback(DNSServiceRef, DNSServiceFlags, uint32_t, DNSServiceErrorType errorCode, const char *hostname, const struct sockaddr *socketAddress, uint32_t ttl, void *context)
    193 {
    194     std::unique_ptr<PendingResolutionRequest> request { static_cast<PendingResolutionRequest*>(context) };
    195 
    196     if (!request->requestIdentifier)
    197         return;
    198 
    199     if (errorCode) {
    200         RELEASE_LOG_IF_ALLOWED_IN_CALLBACK(request->sessionID, "resolveMDNSNameCallback MDNS error %d", errorCode);
    201         request->connection->send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { request->requestIdentifier, makeUnexpected(MDNSRegisterError::DNSSD) }, 0);
    202         return;
    203     }
    204 
    205     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;
    206 
    207     char buffer[INET6_ADDRSTRLEN] = { 0 };
    208     if (!inet_ntop(socketAddress->sa_family, address, buffer, sizeof(buffer))) {
    209         RELEASE_LOG_IF_ALLOWED_IN_CALLBACK(request->sessionID, "resolveMDNSNameCallback inet_ntop error");
    210         request->connection->send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { request->requestIdentifier, makeUnexpected(MDNSRegisterError::DNSSD) }, 0);
    211         return;
    212     }
    213 
    214     request->connection->send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { request->requestIdentifier, String { buffer } }, 0);
    215 }
    216 
    217 void NetworkMDNSRegister::resolveMDNSName(uint64_t requestIdentifier, PAL::SessionID sessionID, const String& name)
    218 {
    219     UNUSED_PARAM(sessionID);
    220     auto pendingRequest = std::make_unique<PendingResolutionRequest>(makeRef(m_connection.connection()), requestIdentifier, sessionID);
    221 
    222     if (auto error = DNSServiceCreateConnection(&pendingRequest->service)) {
    223         RELEASE_LOG_IF_ALLOWED(sessionID, "resolveMDNSName DNSServiceCreateConnection error %d", error);
    224         m_connection.connection().send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { requestIdentifier, makeUnexpected(MDNSRegisterError::DNSSD) }, 0);
    225         return;
    226     }
    227 
    228     DNSServiceRef service;
    229     auto error = DNSServiceGetAddrInfo(&service,
    230         kDNSServiceFlagsUnique,
    231         0,
    232         kDNSServiceProtocol_IPv4,
    233         name.utf8().data(),
    234         resolveMDNSNameCallback,
    235         pendingRequest.get());
    236     pendingRequest->operationService = service;
    237     if (error) {
    238         RELEASE_LOG_IF_ALLOWED(sessionID, "resolveMDNSName DNSServiceGetAddrInfo error %d", error);
    239         m_connection.connection().send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { requestIdentifier, makeUnexpected(MDNSRegisterError::DNSSD) }, 0);
    240         return;
    241     }
    242     pendingRequest.release();
    243 
    244     error = DNSServiceSetDispatchQueue(service, dispatch_get_main_queue());
    245     if (error) {
    246         RELEASE_LOG_IF_ALLOWED(sessionID, "resolveMDNSName DNSServiceSetDispatchQueue error %d", error);
    247         m_connection.connection().send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { requestIdentifier, makeUnexpected(MDNSRegisterError::DNSSD) }, 0);
    248     }
    249 }
    250159#else
    251160void NetworkMDNSRegister::unregisterMDNSNames(WebCore::DocumentIdentifier)
     
    259168}
    260169
    261 void NetworkMDNSRegister::resolveMDNSName(uint64_t requestIdentifier, PAL::SessionID sessionID, const String& name)
    262 {
    263     RELEASE_LOG_IF_ALLOWED(sessionID, "resolveMDNSName not implemented");
    264     m_connection.connection().send(Messages::WebMDNSRegister::FinishedResolvingMDNSName { requestIdentifier, makeUnexpected(MDNSRegisterError::NotImplemented) }, 0);
    265 }
    266 
    267170#endif
    268171
  • trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.messages.in

    r230290 r237261  
    2626    UnregisterMDNSNames(WebCore::DocumentIdentifier documentIdentifier)
    2727    RegisterMDNSName(uint64_t requestIdentifier, PAL::SessionID sessionID, WebCore::DocumentIdentifier documentIdentifier, String ipAddress)
    28     ResolveMDNSName(uint64_t requestIdentifier, PAL::SessionID sessionID, String name)
    2928}
    3029
  • trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp

    r235205 r237261  
    3131#include "LibWebRTCNetwork.h"
    3232#include "WebProcess.h"
     33#include <webrtc/api/asyncresolverfactory.h>
    3334#include <webrtc/pc/peerconnectionfactory.h>
    3435
     
    3637using namespace WebCore;
    3738
     39class AsyncResolverFactory : public webrtc::AsyncResolverFactory {
     40private:
     41    rtc::AsyncResolverInterface* Create() final
     42    {
     43        return WebProcess::singleton().libWebRTCNetwork().socketFactory().createAsyncResolver();
     44    }
     45};
     46
    3847rtc::scoped_refptr<webrtc::PeerConnectionInterface> LibWebRTCProvider::createPeerConnection(webrtc::PeerConnectionObserver& observer, webrtc::PeerConnectionInterface::RTCConfiguration&& configuration)
    3948{
    40     return WebCore::LibWebRTCProvider::createPeerConnection(observer, WebProcess::singleton().libWebRTCNetwork().monitor(), WebProcess::singleton().libWebRTCNetwork().socketFactory(), WTFMove(configuration));
     49    return WebCore::LibWebRTCProvider::createPeerConnection(observer, WebProcess::singleton().libWebRTCNetwork().monitor(), WebProcess::singleton().libWebRTCNetwork().socketFactory(), WTFMove(configuration), std::make_unique<AsyncResolverFactory>());
    4150}
    4251
     
    5665}
    5766
    58 void LibWebRTCProvider::resolveMDNSName(PAL::SessionID sessionID, const String& name, CompletionHandler<void(IPAddressOrError&&)>&& callback)
    59 {
    60     WebProcess::singleton().libWebRTCNetwork().mdnsRegister().resolveMDNSName(sessionID, name, WTFMove(callback));
    61 }
    62 
    6367} // namespace WebKit
    6468
  • trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h

    r234138 r237261  
    5555    void unregisterMDNSNames(uint64_t documentIdentifier) final;
    5656    void registerMDNSName(PAL::SessionID, uint64_t documentIdentifier, const String& ipAddress, CompletionHandler<void(MDNSNameOrError&&)>&&) final;
    57     void resolveMDNSName(PAL::SessionID, const String& name, CompletionHandler<void(IPAddressOrError&&)>&&) final;
    5857    void disableNonLocalhostConnections() final;
    5958};
  • trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.h

    r232420 r237261  
    5252    void disableNonLocalhostConnections() { m_disableNonLocalhostConnections = true; }
    5353
     54    rtc::AsyncResolverInterface* createAsyncResolver() { return CreateAsyncResolver(); }
     55
    5456private:
    5557    rtc::AsyncPacketSocket* CreateUdpSocket(const rtc::SocketAddress&, uint16_t minPort, uint16_t maxPort) final;
  • trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.cpp

    r235205 r237261  
    5353}
    5454
    55 void WebMDNSRegister::finishedResolvingMDNSName(uint64_t identifier, LibWebRTCProvider::IPAddressOrError&& result)
    56 {
    57     auto callback = m_pendingResolutions.take(identifier);
    58     if (callback)
    59         callback(WTFMove(result));
    60 }
    61 
    6255void WebMDNSRegister::unregisterMDNSNames(uint64_t documentIdentifier)
    6356{
     
    9083}
    9184
    92 void WebMDNSRegister::resolveMDNSName(PAL::SessionID sessionID, const String& name, CompletionHandler<void(LibWebRTCProvider::IPAddressOrError&&)>&& callback)
    93 {
    94     m_pendingResolutions.add(++m_pendingRequestsIdentifier, WTFMove(callback));
    95 
    96     auto& connection = WebProcess::singleton().ensureNetworkProcessConnection().connection();
    97     if (!connection.send(Messages::NetworkMDNSRegister::ResolveMDNSName { m_pendingRequestsIdentifier, sessionID, name }, 0))
    98         finishedResolvingMDNSName(m_pendingRequestsIdentifier, makeUnexpected(MDNSRegisterError::Internal));
    99 }
    100 
    10185} // namespace WebKit
    10286
  • trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.h

    r230290 r237261  
    4747    void unregisterMDNSNames(uint64_t documentIdentifier);
    4848    void registerMDNSName(PAL::SessionID, uint64_t documentIdentifier, const String& ipAddress, CompletionHandler<void(WebCore::LibWebRTCProvider::MDNSNameOrError&&)>&&);
    49     void resolveMDNSName(PAL::SessionID, const String& name, CompletionHandler<void(WebCore::LibWebRTCProvider::IPAddressOrError&&)>&&);
    5049
    5150    void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
     
    5352private:
    5453    void finishedRegisteringMDNSName(uint64_t, WebCore::LibWebRTCProvider::MDNSNameOrError&&);
    55     void finishedResolvingMDNSName(uint64_t, WebCore::LibWebRTCProvider::IPAddressOrError&&);
    5654
    5755    struct PendingRegistration {
  • trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.messages.in

    r230290 r237261  
    2525messages -> WebMDNSRegister {
    2626    void FinishedRegisteringMDNSName(uint64_t identifier, WebCore::LibWebRTCProvider::MDNSNameOrError result)
    27     void FinishedResolvingMDNSName(uint64_t identifier, WebCore::LibWebRTCProvider::IPAddressOrError result)
    2827}
    2928
Note: See TracChangeset for help on using the changeset viewer.