Changeset 237568 in webkit
- Timestamp:
- Oct 29, 2018 2:31:16 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r237566 r237568 1 2018-10-29 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 1 11 2018-10-29 Tim Horton <timothy_horton@apple.com> 2 12 -
trunk/LayoutTests/TestExpectations
r237556 r237568 1217 1217 webrtc/simulcast-h264.html [ Slow ] 1218 1218 webrtc/datachannel/multiple-connections.html [ Slow ] 1219 webkit.org/b/187180 webrtc/datachannel/mdns-ice-candidates.html [ Pass Failure ]1220 1219 webkit.org/b/171094 imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-idl.html [ Failure ] 1221 1220 webkit.org/b/172f21 imported/w3c/web-platform-tests/webrtc/getstats.html [ Failure ] -
trunk/Source/ThirdParty/libwebrtc/ChangeLog
r237367 r237568 1 2018-10-29 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 1 12 2018-10-23 Ryan Haddad <ryanhaddad@apple.com> 2 13 -
trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp
r237367 r237568 230 230 __ZNK3rtc14SSLCertificate8GetStatsEv 231 231 __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
r237367 r237568 231 231 __ZNK3rtc14SSLCertificate8GetStatsEv 232 232 __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
r237367 r237568 231 231 __ZNK3rtc14SSLCertificate8GetStatsEv 232 232 __ZN3rtc14RTCCertificate7FromPEMERKNS_17RTCCertificatePEME 233 __ZN6webrtc26PeerConnectionDependenciesC1EPNS_22PeerConnectionObserverE 234 __ZN6webrtc30PeerConnectionFactoryInterface20CreatePeerConnectionERKNS_23PeerConnectionInterface16RTCConfigurationENSt3__110unique_ptrIN7cricket13PortAllocatorENS5_14default_deleteIS8_EEEENS6_IN3rtc32RTCCertificateGeneratorInterfaceENS9_ISD_EEEEPNS_22PeerConnectionObserverE -
trunk/Source/WebCore/ChangeLog
r237567 r237568 1 2018-10-29 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 1 21 2018-10-29 Devin Rousso <drousso@apple.com> 2 22 -
trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp
r237367 r237568 275 275 276 276 if (!iceCandidate) { 277 if (m_waitingForMDNSResolution) {278 m_finishedReceivingCandidates = true;279 m_endOfIceCandidatePromise = WTFMove(promise);280 return;281 }282 277 endOfIceCandidates(WTFMove(promise)); 283 278 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 }311 279 } 312 280 -
trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp
r237367 r237568 34 34 ALLOW_UNUSED_PARAMETERS_BEGIN 35 35 36 #include <webrtc/api/asyncresolverfactory.h> 36 37 #include <webrtc/api/audio_codecs/builtin_audio_decoder_factory.h> 37 38 #include <webrtc/api/audio_codecs/builtin_audio_encoder_factory.h> … … 245 246 factoryAndThreads.packetSocketFactory->setDisableNonLocalhostConnections(m_disableNonLocalhostConnections); 246 247 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 251 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) 251 252 { 252 253 auto& factoryAndThreads = getStaticFactoryAndThreads(m_useNetworkThreadWithSocketServer); … … 264 265 return nullptr; 265 266 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)); 267 272 } 268 273 -
trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h
r237367 r237568 52 52 53 53 namespace webrtc { 54 class AsyncResolverFactory; 54 55 class PeerConnectionFactoryInterface; 55 56 } … … 89 90 } 90 91 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 97 92 #if USE(LIBWEBRTC) 98 93 virtual rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, webrtc::PeerConnectionInterface::RTCConfiguration&&); … … 118 113 LibWebRTCProvider() = default; 119 114 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>&&); 121 116 122 117 rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> createPeerConnectionFactory(rtc::Thread* networkThread, rtc::Thread* signalingThread, LibWebRTCAudioModule*); -
trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp
r237367 r237568 173 173 } 174 174 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)175 rtc::scoped_refptr<webrtc::PeerConnectionInterface> MockLibWebRTCPeerConnectionFactory::CreatePeerConnection(const webrtc::PeerConnectionInterface::RTCConfiguration&, webrtc::PeerConnectionDependencies dependencies) 176 176 { 177 177 if (m_testCase == "ICECandidates") 178 return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionForIceCandidates>(* observer);178 return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionForIceCandidates>(*dependencies.observer); 179 179 180 180 if (m_testCase == "ICEConnectionState") 181 return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionForIceConnectionState>(* observer);181 return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionForIceConnectionState>(*dependencies.observer); 182 182 183 183 if (m_testCase == "LibWebRTCReleasingWhileCreatingOffer") 184 return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileCreatingOffer>(* observer);184 return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileCreatingOffer>(*dependencies.observer); 185 185 186 186 if (m_testCase == "LibWebRTCReleasingWhileGettingStats") 187 return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileGettingStats>(* observer);187 return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionReleasedInNetworkThreadWhileGettingStats>(*dependencies.observer); 188 188 189 189 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); 193 193 } 194 194 -
trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.h
r237367 r237568 242 242 243 243 private: 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; 245 245 246 246 rtc::scoped_refptr<webrtc::MediaStreamInterface> CreateLocalMediaStream(const std::string&) final; -
trunk/Source/WebKit/ChangeLog
r237566 r237568 1 2018-10-29 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 Make sure that a resolver is kept alive while iterating through its clients when signaling done. 14 Some of its clients may indeed call Destroy() on the resolver during that iteration. 15 16 * NetworkProcess/webrtc/NetworkMDNSRegister.cpp: 17 (WebKit::NetworkMDNSRegister::registerMDNSName): 18 * NetworkProcess/webrtc/NetworkMDNSRegister.messages.in: 19 * WebProcess/Network/webrtc/LibWebRTCProvider.cpp: 20 (WebKit::LibWebRTCResolver::Destroy): 21 (WebKit::LibWebRTCResolver::doDestroy): 22 (WebKit::LibWebRTCResolver::setResolvedAddress): 23 (WebKit::LibWebRTCResolver::setError): 24 (WebKit::LibWebRTCProvider::createPeerConnection): 25 * WebProcess/Network/webrtc/LibWebRTCProvider.h: 26 * WebProcess/Network/webrtc/LibWebRTCSocketFactory.h: 27 * WebProcess/Network/webrtc/WebMDNSRegister.cpp: 28 * WebProcess/Network/webrtc/WebMDNSRegister.h: 29 * WebProcess/Network/webrtc/WebMDNSRegister.messages.in: 30 1 31 2018-10-29 Tim Horton <timothy_horton@apple.com> 2 32 -
trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.cpp
r237367 r237568 157 157 pendingRegistrationRequests().add(pendingRegistrationRequestCount++, WTFMove(pendingRequest)); 158 158 } 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 }250 159 #else 251 160 void NetworkMDNSRegister::unregisterMDNSNames(WebCore::DocumentIdentifier) … … 259 168 } 260 169 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 267 170 #endif 268 171 -
trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.messages.in
r237367 r237568 26 26 UnregisterMDNSNames(WebCore::DocumentIdentifier documentIdentifier) 27 27 RegisterMDNSName(uint64_t requestIdentifier, PAL::SessionID sessionID, WebCore::DocumentIdentifier documentIdentifier, String ipAddress) 28 ResolveMDNSName(uint64_t requestIdentifier, PAL::SessionID sessionID, String name)29 28 } 30 29 -
trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp
r237367 r237568 31 31 #include "LibWebRTCNetwork.h" 32 32 #include "WebProcess.h" 33 #include <webrtc/api/asyncresolverfactory.h> 33 34 #include <webrtc/pc/peerconnectionfactory.h> 34 35 … … 36 37 using namespace WebCore; 37 38 39 class AsyncResolverFactory : public webrtc::AsyncResolverFactory { 40 private: 41 rtc::AsyncResolverInterface* Create() final 42 { 43 return WebProcess::singleton().libWebRTCNetwork().socketFactory().createAsyncResolver(); 44 } 45 }; 46 38 47 rtc::scoped_refptr<webrtc::PeerConnectionInterface> LibWebRTCProvider::createPeerConnection(webrtc::PeerConnectionObserver& observer, webrtc::PeerConnectionInterface::RTCConfiguration&& configuration) 39 48 { 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>()); 41 50 } 42 51 … … 56 65 } 57 66 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 63 67 } // namespace WebKit 64 68 -
trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h
r237367 r237568 55 55 void unregisterMDNSNames(uint64_t documentIdentifier) final; 56 56 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;58 57 void disableNonLocalhostConnections() final; 59 58 }; -
trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCResolver.cpp
r235205 r237568 78 78 return; 79 79 80 if (m_isProvidingResults) { 81 m_shouldDestroy = true; 82 return; 83 } 84 80 85 auto identifier = m_identifier; 81 86 sendOnMainThread([identifier](IPC::Connection& connection) { … … 83 88 }); 84 89 90 doDestroy(); 91 } 92 93 void LibWebRTCResolver::doDestroy() 94 { 85 95 // Let's take the resolver so that it gets destroyed at the end of this function. 86 96 auto resolver = WebProcess::singleton().libWebRTCNetwork().socketFactory().takeResolver(m_identifier); … … 91 101 { 92 102 m_addresses = addresses; 103 m_isProvidingResults = true; 93 104 SignalDone(this); 105 m_isProvidingResults = false; 106 if (m_shouldDestroy) 107 doDestroy(); 94 108 } 95 109 … … 97 111 { 98 112 m_error = error; 113 m_isProvidingResults = true; 99 114 SignalDone(this); 115 m_isProvidingResults = false; 116 if (m_shouldDestroy) 117 doDestroy(); 100 118 } 101 119 -
trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCResolver.h
r235205 r237568 56 56 void Destroy(bool) final; 57 57 58 void doDestroy(); 58 59 void setError(int); 59 60 void setResolvedAddress(const Vector<rtc::IPAddress>&); … … 67 68 uint16_t m_port { 0 }; 68 69 bool m_isResolving { false }; 70 bool m_isProvidingResults { false }; 71 bool m_shouldDestroy { false }; 69 72 }; 70 73 -
trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocketFactory.h
r237367 r237568 52 52 void disableNonLocalhostConnections() { m_disableNonLocalhostConnections = true; } 53 53 54 rtc::AsyncResolverInterface* createAsyncResolver() { return CreateAsyncResolver(); } 55 54 56 private: 55 57 rtc::AsyncPacketSocket* CreateUdpSocket(const rtc::SocketAddress&, uint16_t minPort, uint16_t maxPort) final; -
trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.cpp
r237367 r237568 53 53 } 54 54 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 62 55 void WebMDNSRegister::unregisterMDNSNames(uint64_t documentIdentifier) 63 56 { … … 90 83 } 91 84 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 101 85 } // namespace WebKit 102 86 -
trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.h
r237367 r237568 47 47 void unregisterMDNSNames(uint64_t documentIdentifier); 48 48 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&&)>&&);50 49 51 50 void didReceiveMessage(IPC::Connection&, IPC::Decoder&); … … 53 52 private: 54 53 void finishedRegisteringMDNSName(uint64_t, WebCore::LibWebRTCProvider::MDNSNameOrError&&); 55 void finishedResolvingMDNSName(uint64_t, WebCore::LibWebRTCProvider::IPAddressOrError&&);56 54 57 55 struct PendingRegistration { -
trunk/Source/WebKit/WebProcess/Network/webrtc/WebMDNSRegister.messages.in
r237367 r237568 25 25 messages -> WebMDNSRegister { 26 26 void FinishedRegisteringMDNSName(uint64_t identifier, WebCore::LibWebRTCProvider::MDNSNameOrError result) 27 void FinishedResolvingMDNSName(uint64_t identifier, WebCore::LibWebRTCProvider::IPAddressOrError result)28 27 } 29 28
Note: See TracChangeset
for help on using the changeset viewer.