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)