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)