Changeset 230290 in webkit


Ignore:
Timestamp:
Apr 4, 2018 7:05:01 PM (6 years ago)
Author:
youenn@apple.com
Message:

WebRTC data channel only applications require capture permissions for direct connections
https://bugs.webkit.org/show_bug.cgi?id=174500
<rdar://problem/34134281>

Reviewed by Eric Carlson.

Source/WebCore:

Test: webrtc/datachannel/mdns-ice-candidates.html

Add support at PeerConnectionBackend to obfuscate any gathered host candidate
by replacing the IP address with an opaque name that can be resolved by MDNS.
An opaque name is generated for each IP address and is scoped by the document owning the peer connection object.

Add support to resolve any such MDNS ICE candidate.
A limit of 250 ms is fixed for the resolution to happen.
After 250 ms, the candidate is discarded.

Add an experimental flag around this feature, off by default.

  • Modules/mediastream/PeerConnectionBackend.cpp:

(WebCore::extractIPAddres):
(WebCore::PeerConnectionBackend::addIceCandidate):
(WebCore::PeerConnectionBackend::addIceCandidateSucceeded):
(WebCore::PeerConnectionBackend::addIceCandidateFailed):
(WebCore::PeerConnectionBackend::newICECandidate):
(WebCore::PeerConnectionBackend::doneGatheringCandidates):
(WebCore::PeerConnectionBackend::registerMDNSName):
(WebCore::PeerConnectionBackend::finishedRegisteringMDNSName):

  • Modules/mediastream/PeerConnectionBackend.h:
  • Modules/mediastream/RTCIceCandidate.h:

(WebCore::RTCIceCandidate::setCandidate):

  • Modules/mediastream/RTCPeerConnection.h:
  • dom/Document.cpp:

(WebCore::Document::prepareForDestruction):
(WebCore::Document::suspend):

  • page/RuntimeEnabledFeatures.h:

(WebCore::RuntimeEnabledFeatures::mdnsICECandidatesEnabled const):
(WebCore::RuntimeEnabledFeatures::setMDNSICECandidatesEnabled):

  • platform/mediastream/libwebrtc/LibWebRTCProvider.h:

Source/WebKit:

Add support for MDNS registration and resolution by NetworkProcess.
WebProcess gives instruction to do the actual registrations/resolutions.

  • CMakeLists.txt:
  • DerivedSources.make:
  • NetworkProcess/NetworkConnectionToWebProcess.cpp:

(WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
(WebKit::NetworkConnectionToWebProcess::didReceiveMessage):

  • NetworkProcess/NetworkConnectionToWebProcess.h:

(WebKit::NetworkConnectionToWebProcess::mdnsRegister):

  • NetworkProcess/webrtc/NetworkMDNSRegister.cpp: Added.

(WebKit::NetworkMDNSRegister::NetworkMDNSRegister):
(WebKit::NetworkMDNSRegister::~NetworkMDNSRegister):
(WebKit::NetworkMDNSRegister::unregisterMDNSNames):
(WebKit::PendingRegistrationRequest::PendingRegistrationRequest):
(WebKit::registerMDNSNameCallback):
(WebKit::NetworkMDNSRegister::registerMDNSName):
(WebKit::PendingResolutionRequest::PendingResolutionRequest):
(WebKit::PendingResolutionRequest::~PendingResolutionRequest):
(WebKit::PendingResolutionRequest::timeout):
(WebKit::resolveMDNSNameCallback):
(WebKit::NetworkMDNSRegister::resolveMDNSName):

  • NetworkProcess/webrtc/NetworkMDNSRegister.h: Added.
  • NetworkProcess/webrtc/NetworkMDNSRegister.messages.in: Added.
  • Shared/WebPreferences.yaml:
  • UIProcess/API/C/WKPreferences.cpp:

(WKPreferencesSetWebRTCMDNSICECandidatesEnabled):
(WKPreferencesGetWebRTCMDNSICECandidatesEnabled):

  • UIProcess/API/C/WKPreferencesRef.h:
  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/InjectedBundle/InjectedBundle.cpp:

(WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

  • WebProcess/Network/NetworkProcessConnection.cpp:

(WebKit::NetworkProcessConnection::didReceiveMessage):

  • WebProcess/Network/webrtc/LibWebRTCNetwork.h:

(WebKit::LibWebRTCNetwork::mdnsRegister):

  • WebProcess/Network/webrtc/LibWebRTCProvider.cpp:

(WebKit::LibWebRTCProvider::unregisterMDNSNames):
(WebKit::LibWebRTCProvider::registerMDNSName):
(WebKit::LibWebRTCProvider::resolveMDNSName):

  • WebProcess/Network/webrtc/LibWebRTCProvider.h:
  • WebProcess/Network/webrtc/WebMDNSRegister.cpp: Added.

(WebKit::WebMDNSRegister::finishedRegisteringMDNSName):
(WebKit::WebMDNSRegister::finishedResolvingMDNSName):
(WebKit::WebMDNSRegister::unregisterMDNSNames):
(WebKit::WebMDNSRegister::registerMDNSName):
(WebKit::WebMDNSRegister::resolveMDNSName):

  • WebProcess/Network/webrtc/WebMDNSRegister.h: Added.
  • WebProcess/Network/webrtc/WebMDNSRegister.messages.in: Added.

Tools:

Adding options to enable MDNS ICE candidates.

  • WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
  • WebKitTestRunner/InjectedBundle/TestRunner.cpp:

(WTR::TestRunner::setMediaDevicesEnabled):
(WTR::TestRunner::setMDNSICECandidatesEnabled):

  • WebKitTestRunner/InjectedBundle/TestRunner.h:
  • WebKitTestRunner/TestController.cpp:

(WTR::TestController::resetPreferencesToConsistentValues):

LayoutTests:

  • webrtc/datachannel/mdns-ice-candidates-expected.txt: Added.
  • webrtc/datachannel/mdns-ice-candidates.html: Added.
Location:
trunk
Files:
7 added
31 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r230289 r230290  
     12018-04-04  Youenn Fablet  <youenn@apple.com>
     2
     3        WebRTC data channel only applications require capture permissions for direct connections
     4        https://bugs.webkit.org/show_bug.cgi?id=174500
     5        <rdar://problem/34134281>
     6
     7        Reviewed by Eric Carlson.
     8
     9        * webrtc/datachannel/mdns-ice-candidates-expected.txt: Added.
     10        * webrtc/datachannel/mdns-ice-candidates.html: Added.
     11
    1122018-04-04  Ryan Haddad  <ryanhaddad@apple.com>
    213
  • trunk/LayoutTests/platform/mac-wk1/TestExpectations

    r230224 r230290  
    151151http/wpt/webrtc [ Skip ]
    152152webrtc/datachannel [ Pass ]
     153webrtc/datachannel/mdns-ice-candidates.html [ Skip ]
    153154webrtc/datachannel/bufferedAmountLowThreshold.html [ Pass Failure ]
    154155webrtc/datachannel/bufferedAmountLowThreshold-default.html [ Pass Failure ]
  • trunk/Source/WebCore/ChangeLog

    r230286 r230290  
     12018-04-04  Youenn Fablet  <youenn@apple.com>
     2
     3        WebRTC data channel only applications require capture permissions for direct connections
     4        https://bugs.webkit.org/show_bug.cgi?id=174500
     5        <rdar://problem/34134281>
     6
     7        Reviewed by Eric Carlson.
     8
     9        Test: webrtc/datachannel/mdns-ice-candidates.html
     10
     11        Add support at PeerConnectionBackend to obfuscate any gathered host candidate
     12        by replacing the IP address with an opaque name that can be resolved by MDNS.
     13        An opaque name is generated for each IP address and is scoped by the document owning the peer connection object.
     14
     15        Add support to resolve any such MDNS ICE candidate.
     16        A limit of 250 ms is fixed for the resolution to happen.
     17        After 250 ms, the candidate is discarded.
     18
     19        Add an experimental flag around this feature, off by default.
     20
     21        * Modules/mediastream/PeerConnectionBackend.cpp:
     22        (WebCore::extractIPAddres):
     23        (WebCore::PeerConnectionBackend::addIceCandidate):
     24        (WebCore::PeerConnectionBackend::addIceCandidateSucceeded):
     25        (WebCore::PeerConnectionBackend::addIceCandidateFailed):
     26        (WebCore::PeerConnectionBackend::newICECandidate):
     27        (WebCore::PeerConnectionBackend::doneGatheringCandidates):
     28        (WebCore::PeerConnectionBackend::registerMDNSName):
     29        (WebCore::PeerConnectionBackend::finishedRegisteringMDNSName):
     30        * Modules/mediastream/PeerConnectionBackend.h:
     31        * Modules/mediastream/RTCIceCandidate.h:
     32        (WebCore::RTCIceCandidate::setCandidate):
     33        * Modules/mediastream/RTCPeerConnection.h:
     34        * dom/Document.cpp:
     35        (WebCore::Document::prepareForDestruction):
     36        (WebCore::Document::suspend):
     37        * page/RuntimeEnabledFeatures.h:
     38        (WebCore::RuntimeEnabledFeatures::mdnsICECandidatesEnabled const):
     39        (WebCore::RuntimeEnabledFeatures::setMDNSICECandidatesEnabled):
     40        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
     41
    1422018-04-04  Brian Burg  <bburg@apple.com>
    243
  • trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp

    r225955 r230290  
    4141#include "RTCPeerConnection.h"
    4242#include "RTCPeerConnectionIceEvent.h"
     43#include "RuntimeEnabledFeatures.h"
    4344#include <wtf/text/StringBuilder.h>
     45#include <wtf/text/StringConcatenateNumbers.h>
    4446
    4547namespace WebCore {
     
    255257}
    256258
     259static String extractIPAddres(const String& sdp)
     260{
     261    ASSERT(sdp.contains(" host "));
     262    unsigned counter = 0;
     263    for (auto item : StringView { sdp }.split(' ')) {
     264        if (++counter == 5)
     265            return item.toString();
     266    }
     267    return { };
     268}
     269
    257270void PeerConnectionBackend::addIceCandidate(RTCIceCandidate* iceCandidate, DOMPromiseDeferred<void>&& promise)
    258271{
     
    260273
    261274    if (!iceCandidate) {
     275        if (m_waitingForMDNSResolution) {
     276            m_finishedReceivingCandidates = true;
     277            m_endOfIceCandidatePromise = WTFMove(promise);
     278            return;
     279        }
    262280        endOfIceCandidates(WTFMove(promise));
    263281        return;
     282    }
     283
     284    if (RuntimeEnabledFeatures::sharedFeatures().mdnsICECandidatesEnabled()) {
     285        auto name = extractIPAddres(iceCandidate->candidate());
     286        if (name.endsWith(".local")) {
     287            ++m_waitingForMDNSResolution;
     288            auto& document = downcast<Document>(*m_peerConnection.scriptExecutionContext());
     289            auto& provider = document.page()->libWebRTCProvider();
     290            provider.resolveMDNSName(document.sessionID(), name, [peerConnection = makeRef(m_peerConnection), this, name, iceCandidate = makeRef(*iceCandidate), promise = WTFMove(promise)] (LibWebRTCProvider::IPAddressOrError&& result) mutable {
     291                if (peerConnection->isStopped())
     292                    return;
     293
     294                --m_waitingForMDNSResolution;
     295                if (!result.has_value()) {
     296                    if (result.error() != MDNSRegisterError::Timeout)
     297                        peerConnection->scriptExecutionContext()->addConsoleMessage(MessageSource::JS, MessageLevel::Warning, makeString("MDNS resolution of a host candidate failed with error", (unsigned)result.error()));
     298                    return;
     299                }
     300
     301                auto candidate = iceCandidate->candidate();
     302                candidate.replace(name, result.value());
     303                iceCandidate->setCandidate(WTFMove(candidate));
     304                m_addIceCandidatePromise = WTFMove(promise);
     305                this->doAddIceCandidate(iceCandidate);
     306            });
     307            return;
     308        }
    264309    }
    265310
     
    286331    m_addIceCandidatePromise->resolve();
    287332    m_addIceCandidatePromise = std::nullopt;
     333
     334    if (!m_waitingForMDNSResolution && m_finishedReceivingCandidates)
     335        endOfIceCandidates(WTFMove(*m_endOfIceCandidatePromise));
    288336}
    289337
     
    300348    m_addIceCandidatePromise->reject(WTFMove(exception));
    301349    m_addIceCandidatePromise = std::nullopt;
     350
     351    if (!m_waitingForMDNSResolution && m_finishedReceivingCandidates)
     352        endOfIceCandidates(WTFMove(*m_endOfIceCandidatePromise));
    302353}
    303354
     
    377428{
    378429    ALWAYS_LOG(LOGIDENTIFIER, "Gathered ice candidate:", sdp);
     430    m_finishedGatheringCandidates = false;
    379431
    380432    if (!m_shouldFilterICECandidates) {
     
    383435    }
    384436    if (sdp.find(" host ", 0) != notFound) {
    385         m_pendingICECandidates.append(PendingICECandidate { WTFMove(sdp), WTFMove(mid), sdpMLineIndex});
     437        // FIXME: We might need to clear all pending candidates when setting again local description.
     438        m_pendingICECandidates.append(PendingICECandidate { String { sdp }, WTFMove(mid), sdpMLineIndex});
     439        if (RuntimeEnabledFeatures::sharedFeatures().mdnsICECandidatesEnabled()) {
     440            auto ipAddress = extractIPAddres(sdp);
     441            // We restrict to IPv4 candidates for now.
     442            if (ipAddress.contains('.'))
     443                registerMDNSName(ipAddress);
     444        }
    386445        return;
    387446    }
     
    393452    ASSERT(isMainThread());
    394453    ALWAYS_LOG(LOGIDENTIFIER, "Finished ice candidate gathering");
     454    m_finishedGatheringCandidates = true;
     455
     456    if (m_waitingForMDNSRegistration)
     457        return;
    395458
    396459    m_peerConnection.fireEvent(RTCPeerConnectionIceEvent::create(false, false, nullptr));
    397460    m_peerConnection.updateIceGatheringState(RTCIceGatheringState::Complete);
     461    m_pendingICECandidates.clear();
     462}
     463
     464void PeerConnectionBackend::registerMDNSName(const String& ipAddress)
     465{
     466    ++m_waitingForMDNSRegistration;
     467    auto& document = downcast<Document>(*m_peerConnection.scriptExecutionContext());
     468    auto& provider = document.page()->libWebRTCProvider();
     469    provider.registerMDNSName(document.sessionID(), document.identifier().toUInt64(), ipAddress, [peerConnection = makeRef(m_peerConnection), this, ipAddress] (LibWebRTCProvider::MDNSNameOrError&& result) {
     470        if (peerConnection->isStopped())
     471            return;
     472
     473        --m_waitingForMDNSRegistration;
     474        if (!result.has_value()) {
     475            m_peerConnection.scriptExecutionContext()->addConsoleMessage(MessageSource::JS, MessageLevel::Warning, makeString("MDNS registration of a host candidate failed with error", (unsigned)result.error()));
     476            return;
     477        }
     478
     479        this->finishedRegisteringMDNSName(ipAddress, result.value());
     480    });
     481}
     482
     483void PeerConnectionBackend::finishedRegisteringMDNSName(const String& ipAddress, const String& name)
     484{
     485    Vector<PendingICECandidate*> candidates;
     486    for (auto& candidate : m_pendingICECandidates) {
     487        if (candidate.sdp.find(ipAddress) != notFound) {
     488            auto sdp = candidate.sdp;
     489            sdp.replace(ipAddress, name);
     490            fireICECandidateEvent(RTCIceCandidate::create(String(sdp), String(candidate.mid), candidate.sdpMLineIndex));
     491            candidates.append(&candidate);
     492        }
     493    }
     494    m_pendingICECandidates.removeAllMatching([&] (const auto& candidate) {
     495        return candidates.contains(&candidate);
     496    });
     497
     498    if (!m_waitingForMDNSRegistration && m_finishedGatheringCandidates)
     499        doneGatheringCandidates();
    398500}
    399501
  • trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h

    r229645 r230290  
    3535
    3636#include "JSDOMPromiseDeferred.h"
     37#include "LibWebRTCProvider.h"
    3738#include "RTCRtpParameters.h"
    3839#include "RTCSessionDescription.h"
     
    128129    virtual bool isLocalDescriptionSet() const = 0;
    129130
     131    void finishedRegisteringMDNSName(const String& ipAddress, const String& name);
     132
    130133protected:
    131134    void fireICECandidateEvent(RefPtr<RTCIceCandidate>&&);
     
    160163    virtual void doStop() = 0;
    161164
     165    void registerMDNSName(const String& ipAddress);
     166
    162167protected:
    163168    RTCPeerConnection& m_peerConnection;
     
    167172    std::optional<DOMPromiseDeferred<void>> m_setDescriptionPromise;
    168173    std::optional<DOMPromiseDeferred<void>> m_addIceCandidatePromise;
     174    std::optional<DOMPromiseDeferred<void>> m_endOfIceCandidatePromise;
    169175
    170176    bool m_shouldFilterICECandidates { true };
     
    182188#endif
    183189    bool m_negotiationNeeded { false };
     190    bool m_finishedGatheringCandidates { false };
     191    uint64_t m_waitingForMDNSRegistration { 0 };
     192
     193    bool m_finishedReceivingCandidates { false };
     194    uint64_t m_waitingForMDNSResolution { 0 };
     195
     196    HashMap<String, String> m_mdnsMapping;
    184197};
    185198
  • trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.h

    r209695 r230290  
    5353    std::optional<unsigned short> sdpMLineIndex() const { return m_sdpMLineIndex; }
    5454
     55    void setCandidate(String&& candidate) { m_candidate = WTFMove(candidate); }
     56
    5557private:
    5658    RTCIceCandidate(const String& candidate, const String& sdpMid, std::optional<unsigned short> sdpMLineIndex);
  • trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h

    r225696 r230290  
    108108
    109109    bool isClosed() const { return m_connectionState == RTCPeerConnectionState::Closed; }
     110    bool isStopped() const { return m_isStopped; }
    110111
    111112    // 5.1 RTCPeerConnection extensions
  • trunk/Source/WebCore/dom/Document.cpp

    r230226 r230290  
    115115#include "KeyframeEffectReadOnly.h"
    116116#include "LayoutDisallowedScope.h"
     117#include "LibWebRTCProvider.h"
    117118#include "LoaderStrategy.h"
    118119#include "Logging.h"
     
    23502351        m_frame->animation().detachFromDocument(this);
    23512352
     2353#if USE(LIBWEBRTC)
     2354    if (auto* page = this->page())
     2355        page->libWebRTCProvider().unregisterMDNSNames(identifier().toUInt64());
     2356#endif
     2357
    23522358#if ENABLE(SERVICE_WORKER)
    23532359    setActiveServiceWorker(nullptr);
     
    48784884    }
    48794885
     4886#if USE(LIBWEBRTC)
     4887    if (auto* page = this->page())
     4888        page->libWebRTCProvider().unregisterMDNSNames(identifier().toUInt64());
     4889#endif
     4890
    48804891#if ENABLE(SERVICE_WORKER)
    48814892    if (RuntimeEnabledFeatures::sharedFeatures().serviceWorkerEnabled() && reason == ActiveDOMObject::ReasonForSuspension::PageCache) {
  • trunk/Source/WebCore/page/RuntimeEnabledFeatures.h

    r230224 r230290  
    121121    bool webRTCLegacyAPIEnabled() const { return m_webRTCLegacyAPIEnabled; }
    122122    void setWebRTCLegacyAPIEnabled(bool isEnabled) { m_webRTCLegacyAPIEnabled = isEnabled; }
     123    bool mdnsICECandidatesEnabled() const { return m_mdnsICECandidatesEnabled; }
     124    void setMDNSICECandidatesEnabled(bool isEnabled) { m_mdnsICECandidatesEnabled = isEnabled; }
    123125#endif
    124126
     
    291293    bool m_isPeerConnectionEnabled { true };
    292294    bool m_webRTCLegacyAPIEnabled { false };
     295    bool m_mdnsICECandidatesEnabled { false };
    293296#endif
    294297
  • trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h

    r229378 r230290  
    2727
    2828#include "LibWebRTCMacros.h"
    29 #include <wtf/Forward.h>
     29#include <pal/SessionID.h>
     30#include <wtf/CompletionHandler.h>
     31#include <wtf/EnumTraits.h>
     32#include <wtf/Expected.h>
    3033#include <wtf/UniqueRef.h>
     34#include <wtf/text/WTFString.h>
    3135
    3236#if USE(LIBWEBRTC)
     
    5458class LibWebRTCAudioModule;
    5559
     60enum class MDNSRegisterError { NotImplemented, BadParameter, DNSSD, Internal, Timeout };
     61
    5662class WEBCORE_EXPORT LibWebRTCProvider {
    5763public:
     
    6571
    6672    virtual void setH264HardwareEncoderAllowed(bool) { }
     73
     74    using IPAddressOrError = Expected<String, MDNSRegisterError>;
     75    using MDNSNameOrError = Expected<String, MDNSRegisterError>;
     76
     77    virtual void unregisterMDNSNames(uint64_t documentIdentifier)
     78    {
     79        UNUSED_PARAM(documentIdentifier);
     80    }
     81
     82    virtual void registerMDNSName(PAL::SessionID, uint64_t documentIdentifier, const String& ipAddress, CompletionHandler<void(MDNSNameOrError&&)>&& callback)
     83    {
     84        UNUSED_PARAM(documentIdentifier);
     85        UNUSED_PARAM(ipAddress);
     86        callback(makeUnexpected(MDNSRegisterError::NotImplemented));
     87    }
     88
     89    virtual void resolveMDNSName(PAL::SessionID, const String& name, CompletionHandler<void(IPAddressOrError&&)>&& callback)
     90    {
     91        UNUSED_PARAM(name);
     92        callback(makeUnexpected(MDNSRegisterError::NotImplemented));
     93    }
    6794
    6895#if USE(LIBWEBRTC)
     
    99126
    100127} // namespace WebCore
     128
     129namespace WTF {
     130template<> struct EnumTraits<WebCore::MDNSRegisterError> {
     131    using values = EnumValues<
     132        WebCore::MDNSRegisterError,
     133        WebCore::MDNSRegisterError::NotImplemented,
     134        WebCore::MDNSRegisterError::BadParameter,
     135        WebCore::MDNSRegisterError::DNSSD,
     136        WebCore::MDNSRegisterError::Internal,
     137        WebCore::MDNSRegisterError::Timeout
     138    >;
     139};
     140}
  • trunk/Source/WebKit/CMakeLists.txt

    r230223 r230290  
    147147    NetworkProcess/capture/NetworkDataTaskReplay.cpp
    148148
     149    NetworkProcess/webrtc/NetworkMDNSRegister.cpp
     150
    149151    Platform/Logging.cpp
    150152    Platform/Module.cpp
     
    534536    WebProcess/Network/webrtc/LibWebRTCSocket.cpp
    535537    WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp
     538    WebProcess/Network/webrtc/WebMDNSRegister.cpp
    536539    WebProcess/Network/webrtc/WebRTCMonitor.cpp
    537540    WebProcess/Network/webrtc/WebRTCResolver.cpp
     
    628631    NetworkProcess/cache/CacheStorageEngineConnection.messages.in
    629632
     633    NetworkProcess/webrtc/NetworkMDNSRegister.messages.in
    630634    NetworkProcess/webrtc/NetworkRTCMonitor.messages.in
    631635    NetworkProcess/webrtc/NetworkRTCProvider.messages.in
     
    690694    WebProcess/Geolocation/WebGeolocationManager.messages.in
    691695
     696    WebProcess/Network/webrtc/WebMDNSRegister.messages.in
    692697    WebProcess/Network/webrtc/WebRTCMonitor.messages.in
    693698    WebProcess/Network/webrtc/WebRTCResolver.messages.in
  • trunk/Source/WebKit/ChangeLog

    r230283 r230290  
     12018-04-04  Youenn Fablet  <youenn@apple.com>
     2
     3        WebRTC data channel only applications require capture permissions for direct connections
     4        https://bugs.webkit.org/show_bug.cgi?id=174500
     5        <rdar://problem/34134281>
     6
     7        Reviewed by Eric Carlson.
     8
     9        Add support for MDNS registration and resolution by NetworkProcess.
     10        WebProcess gives instruction to do the actual registrations/resolutions.
     11
     12        * CMakeLists.txt:
     13        * DerivedSources.make:
     14        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
     15        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
     16        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
     17        * NetworkProcess/NetworkConnectionToWebProcess.h:
     18        (WebKit::NetworkConnectionToWebProcess::mdnsRegister):
     19        * NetworkProcess/webrtc/NetworkMDNSRegister.cpp: Added.
     20        (WebKit::NetworkMDNSRegister::NetworkMDNSRegister):
     21        (WebKit::NetworkMDNSRegister::~NetworkMDNSRegister):
     22        (WebKit::NetworkMDNSRegister::unregisterMDNSNames):
     23        (WebKit::PendingRegistrationRequest::PendingRegistrationRequest):
     24        (WebKit::registerMDNSNameCallback):
     25        (WebKit::NetworkMDNSRegister::registerMDNSName):
     26        (WebKit::PendingResolutionRequest::PendingResolutionRequest):
     27        (WebKit::PendingResolutionRequest::~PendingResolutionRequest):
     28        (WebKit::PendingResolutionRequest::timeout):
     29        (WebKit::resolveMDNSNameCallback):
     30        (WebKit::NetworkMDNSRegister::resolveMDNSName):
     31        * NetworkProcess/webrtc/NetworkMDNSRegister.h: Added.
     32        * NetworkProcess/webrtc/NetworkMDNSRegister.messages.in: Added.
     33        * Shared/WebPreferences.yaml:
     34        * UIProcess/API/C/WKPreferences.cpp:
     35        (WKPreferencesSetWebRTCMDNSICECandidatesEnabled):
     36        (WKPreferencesGetWebRTCMDNSICECandidatesEnabled):
     37        * UIProcess/API/C/WKPreferencesRef.h:
     38        * WebKit.xcodeproj/project.pbxproj:
     39        * WebProcess/InjectedBundle/InjectedBundle.cpp:
     40        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
     41        * WebProcess/Network/NetworkProcessConnection.cpp:
     42        (WebKit::NetworkProcessConnection::didReceiveMessage):
     43        * WebProcess/Network/webrtc/LibWebRTCNetwork.h:
     44        (WebKit::LibWebRTCNetwork::mdnsRegister):
     45        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
     46        (WebKit::LibWebRTCProvider::unregisterMDNSNames):
     47        (WebKit::LibWebRTCProvider::registerMDNSName):
     48        (WebKit::LibWebRTCProvider::resolveMDNSName):
     49        * WebProcess/Network/webrtc/LibWebRTCProvider.h:
     50        * WebProcess/Network/webrtc/WebMDNSRegister.cpp: Added.
     51        (WebKit::WebMDNSRegister::finishedRegisteringMDNSName):
     52        (WebKit::WebMDNSRegister::finishedResolvingMDNSName):
     53        (WebKit::WebMDNSRegister::unregisterMDNSNames):
     54        (WebKit::WebMDNSRegister::registerMDNSName):
     55        (WebKit::WebMDNSRegister::resolveMDNSName):
     56        * WebProcess/Network/webrtc/WebMDNSRegister.h: Added.
     57        * WebProcess/Network/webrtc/WebMDNSRegister.messages.in: Added.
     58
    1592018-04-04  Alex Christensen  <achristensen@webkit.org>
    260
  • trunk/Source/WebKit/DerivedSources.make

    r230223 r230290  
    108108    NPObjectMessageReceiver \
    109109    NetworkConnectionToWebProcess \
     110    NetworkMDNSRegister\
    110111    NetworkProcess \
    111112    NetworkProcessConnection \
     
    161162    WebInspectorProxy \
    162163    WebInspectorUI \
     164    WebMDNSRegister\
    163165    WebNotificationManager \
    164166    WebPage \
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp

    r230283 r230290  
    3434#include "NetworkConnectionToWebProcessMessages.h"
    3535#include "NetworkLoad.h"
     36#include "NetworkMDNSRegisterMessages.h"
    3637#include "NetworkProcess.h"
    3738#include "NetworkProcessConnectionMessages.h"
     
    6869NetworkConnectionToWebProcess::NetworkConnectionToWebProcess(IPC::Connection::Identifier connectionIdentifier)
    6970    : m_connection(IPC::Connection::createServerConnection(connectionIdentifier, *this))
     71#if ENABLE(WEB_RTC)
     72    , m_mdnsRegister(*this)
     73#endif
    7074{
    7175    m_connection->open();
     
    126130    }
    127131#endif
     132#if ENABLE(WEB_RTC)
     133    if (decoder.messageReceiverName() == Messages::NetworkMDNSRegister::messageReceiverName()) {
     134        mdnsRegister().didReceiveMessage(connection, decoder);
     135        return;
     136    }
     137#endif
    128138
    129139    if (decoder.messageReceiverName() == Messages::CacheStorageEngineConnection::messageReceiverName()) {
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h

    r230283 r230290  
    3131#include "DownloadID.h"
    3232#include "NetworkConnectionToWebProcessMessages.h"
     33#include "NetworkMDNSRegister.h"
    3334#include "NetworkRTCProvider.h"
    34 
    3535#include <WebCore/ResourceLoadPriority.h>
    3636#include <wtf/RefCounted.h>
     
    132132    NetworkRTCProvider& rtcProvider();
    133133#endif
     134#if ENABLE(WEB_RTC)
     135    NetworkMDNSRegister& mdnsRegister() { return m_mdnsRegister; }
     136#endif
    134137
    135138    CacheStorageEngineConnection& cacheStorageConnection();
     
    147150    RefPtr<NetworkRTCProvider> m_rtcProvider;
    148151#endif
     152#if ENABLE(WEB_RTC)
     153    NetworkMDNSRegister m_mdnsRegister;
     154#endif
    149155
    150156    bool m_captureExtraNetworkLoadMetricsEnabled { false };
  • trunk/Source/WebKit/NetworkProcess/webrtc/NetworkMDNSRegister.h

    r230289 r230290  
    11/*
    2  * Copyright (C) 2017 Apple Inc. All rights reserved.
     2 * Copyright (C) 2018 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2626#pragma once
    2727
    28 #if PLATFORM(COCOA)
    29 #include <WebCore/LibWebRTCProviderCocoa.h>
     28#if ENABLE(WEB_RTC)
     29
     30#include "RTCNetwork.h"
     31#include <WebCore/DocumentIdentifier.h>
     32#include <wtf/Expected.h>
     33#include <wtf/Forward.h>
     34#include <wtf/HashMap.h>
     35
     36#if defined __has_include && __has_include(<dns_sd.h>)
     37#define ENABLE_MDNS 1
    3038#else
    31 #include <WebCore/LibWebRTCProvider.h>
     39#define ENABLE_MDNS 0
    3240#endif
     41
     42#if ENABLE_MDNS
     43#include <dns_sd.h>
     44#endif
     45
     46namespace IPC {
     47class Connection;
     48class Decoder;
     49}
     50
     51namespace PAL {
     52class SessionID;
     53}
    3354
    3455namespace WebKit {
    3556
    36 #if USE(LIBWEBRTC)
     57class NetworkConnectionToWebProcess;
    3758
    38 #if PLATFORM(COCOA)
    39 using LibWebRTCProviderBase = WebCore::LibWebRTCProviderCocoa;
    40 #else
    41 using LibWebRTCProviderBase = WebCore::LibWebRTCProvider;
    42 #endif
     59class NetworkMDNSRegister {
     60public:
     61    NetworkMDNSRegister(NetworkConnectionToWebProcess&);
     62    ~NetworkMDNSRegister();
    4363
    44 class LibWebRTCProvider final : public LibWebRTCProviderBase {
    45 public:
    46     LibWebRTCProvider() { m_useNetworkThreadWithSocketServer = false; }
     64    void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
    4765
    4866private:
    49     rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, webrtc::PeerConnectionInterface::RTCConfiguration&&) final;
     67    void unregisterMDNSNames(WebCore::DocumentIdentifier);
     68    void registerMDNSName(uint64_t requestIdentifier, PAL::SessionID, WebCore::DocumentIdentifier, const String& ipAddress);
     69    void resolveMDNSName(uint64_t requestIdentifier, PAL::SessionID, const String& name);
     70
     71    NetworkConnectionToWebProcess& m_connection;
     72#if ENABLE_MDNS
     73    HashMap<WebCore::DocumentIdentifier, DNSServiceRef> m_services;
     74
     75    uint64_t m_registrationCount { 0 };
     76#endif
    5077};
    51 #else
    52 using LibWebRTCProvider = WebCore::LibWebRTCProvider;
    53 #endif // USE(LIBWEBRTC)
    5478
    5579} // namespace WebKit
     80
     81#endif // ENABLE(WEB_RTC)
  • trunk/Source/WebKit/Shared/WebPreferences.yaml

    r230224 r230290  
    11151115  condition: ENABLE(WEB_RTC)
    11161116
     1117MDNSICECandidatesEnabled:
     1118  type: bool
     1119  defaultValue: false
     1120  humanReadableName: "Enable MDNS ICE candidates"
     1121  humanReadableDescription: "Enable MDNS ICE candidates"
     1122  webcoreBinding: RuntimeEnabledFeatures
     1123  category: experimental
     1124  condition: ENABLE(WEB_RTC)
     1125
    11171126IsSecureContextAttributeEnabled:
    11181127  type: bool
  • trunk/Source/WebKit/UIProcess/API/C/WKPreferences.cpp

    r230224 r230290  
    14151415}
    14161416
     1417void WKPreferencesSetWebRTCMDNSICECandidatesEnabled(WKPreferencesRef preferencesRef, bool enabled)
     1418{
     1419    toImpl(preferencesRef)->setMDNSICECandidatesEnabled(enabled);
     1420}
     1421
     1422bool WKPreferencesGetWebRTCMDNSICECandidatesEnabled(WKPreferencesRef preferencesRef)
     1423{
     1424    return toImpl(preferencesRef)->mDNSICECandidatesEnabled();
     1425}
     1426
    14171427void WKPreferencesSetSpatialNavigationEnabled(WKPreferencesRef preferencesRef, bool enabled)
    14181428{
  • trunk/Source/WebKit/UIProcess/API/C/WKPreferencesRef.h

    r230224 r230290  
    269269WK_EXPORT bool WKPreferencesGetWebRTCLegacyAPIEnabled(WKPreferencesRef preferencesRef);
    270270
     271// Defaults to false
     272WK_EXPORT void WKPreferencesSetWebRTCMDNSICECandidatesEnabled(WKPreferencesRef preferencesRef, bool enabled);
     273WK_EXPORT bool WKPreferencesGetWebRTCMDNSICECandidatesEnabled(WKPreferencesRef preferencesRef);
     274
    271275// Defaults to false.
    272276WK_EXPORT void WKPreferencesSetSpatialNavigationEnabled(WKPreferencesRef preferencesRef, bool enabled);
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r230261 r230290  
    951951                41DC459F1E3DBDA500B11F51 /* WebRTCSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 41FAF5F31E3BFE7F001AE678 /* WebRTCSocket.h */; };
    952952                41DC45A11E3DC53F00B11F51 /* WebRTCResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41DC45A01E3DC53C00B11F51 /* WebRTCResolver.cpp */; };
     953                41F12A9E2069BB4400FF26E8 /* WebMDNSRegister.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41B7ED6E20681DCF0087D853 /* WebMDNSRegister.cpp */; };
     954                41F12A9F2069BB4C00FF26E8 /* NetworkMDNSRegister.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41B7ED6F206965900087D853 /* NetworkMDNSRegister.cpp */; };
    953955                41FABD2A1F4DE001006A6C97 /* CacheStorageEngineCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 41FABD281F4DDFDC006A6C97 /* CacheStorageEngineCache.h */; };
    954956                41FAF5F51E3C0649001AE678 /* WebRTCResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 41FAF5F41E3C0641001AE678 /* WebRTCResolver.h */; };
     
    11741176                51F060E11654318500F3282C /* WebRTCResolverMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F060DD1654317500F3282C /* WebRTCResolverMessageReceiver.cpp */; };
    11751177                51F060E11654318500F3282E /* NetworkRTCProviderMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F060DD1654317500F3282E /* NetworkRTCProviderMessageReceiver.cpp */; };
     1178                51F060E11654318500F3282F /* WebMDNSRegisterMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F060DD1654317500F3282F /* WebMDNSRegisterMessageReceiver.cpp */; };
     1179                51F060E11654318500F3283F /* NetworkMDNSRegisterMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F060DD1654317500F3283F /* NetworkMDNSRegisterMessageReceiver.cpp */; };
    11761180                51F7DC41180CC93600212CA3 /* XPCServiceMain.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC82839616B47EC400A278FE /* XPCServiceMain.mm */; };
    11771181                51F7DC43180CC93600212CA3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC3DE46815A91763008D26FC /* Foundation.framework */; };
     
    33233327                41B28B081F83AD3E00FB52AC /* RTCPacketOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCPacketOptions.h; sourceTree = "<group>"; };
    33243328                41B28B091F83AD3E00FB52AC /* RTCPacketOptions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCPacketOptions.cpp; sourceTree = "<group>"; };
     3329                41B7ED6C20681DCE0087D853 /* WebMDNSRegister.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebMDNSRegister.h; path = Network/webrtc/WebMDNSRegister.h; sourceTree = "<group>"; };
     3330                41B7ED6D20681DCF0087D853 /* WebMDNSRegister.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = WebMDNSRegister.messages.in; path = Network/webrtc/WebMDNSRegister.messages.in; sourceTree = "<group>"; };
     3331                41B7ED6E20681DCF0087D853 /* WebMDNSRegister.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebMDNSRegister.cpp; path = Network/webrtc/WebMDNSRegister.cpp; sourceTree = "<group>"; };
     3332                41B7ED6F206965900087D853 /* NetworkMDNSRegister.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkMDNSRegister.cpp; path = NetworkProcess/webrtc/NetworkMDNSRegister.cpp; sourceTree = "<group>"; };
     3333                41B7ED70206965900087D853 /* NetworkMDNSRegister.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkMDNSRegister.h; path = NetworkProcess/webrtc/NetworkMDNSRegister.h; sourceTree = "<group>"; };
     3334                41B7ED71206965900087D853 /* NetworkMDNSRegister.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = NetworkMDNSRegister.messages.in; path = NetworkProcess/webrtc/NetworkMDNSRegister.messages.in; sourceTree = "<group>"; };
    33253335                41C858191F510DEE0065E085 /* CacheStorageEngineCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CacheStorageEngineCache.cpp; sourceTree = "<group>"; };
    33263336                41D129D91F3D101400D15E47 /* WebCacheStorageProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebCacheStorageProvider.h; sourceTree = "<group>"; };
     
    36003610                51F060DD1654317500F3282C /* WebRTCResolverMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebRTCResolverMessageReceiver.cpp; sourceTree = "<group>"; };
    36013611                51F060DD1654317500F3282E /* NetworkRTCProviderMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkRTCProviderMessageReceiver.cpp; sourceTree = "<group>"; };
     3612                51F060DD1654317500F3282F /* WebMDNSRegisterMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebMDNSRegisterMessageReceiver.cpp; sourceTree = "<group>"; };
     3613                51F060DD1654317500F3283F /* NetworkMDNSRegisterMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkMDNSRegisterMessageReceiver.cpp; sourceTree = "<group>"; };
    36023614                51F060DE1654317500F3281B /* WebResourceLoaderMessages.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebResourceLoaderMessages.h; sourceTree = "<group>"; };
    36033615                51F7DC4A180CC93600212CA3 /* com.apple.WebKit.Storage.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = com.apple.WebKit.Storage.xpc; sourceTree = BUILT_PRODUCTS_DIR; };
     
    62476259                                41DC45991E3DBB2400B11F51 /* LibWebRTCSocketClient.cpp */,
    62486260                                41DC459A1E3DBB2400B11F51 /* LibWebRTCSocketClient.h */,
     6261                                41B7ED6F206965900087D853 /* NetworkMDNSRegister.cpp */,
     6262                                41B7ED70206965900087D853 /* NetworkMDNSRegister.h */,
     6263                                41B7ED71206965900087D853 /* NetworkMDNSRegister.messages.in */,
    62496264                                4130759A1DE84FB00039EC69 /* NetworkRTCMonitor.cpp */,
    62506265                                4130759B1DE84FB00039EC69 /* NetworkRTCMonitor.h */,
     
    62766291                                413075A51DE85EE70039EC69 /* LibWebRTCSocketFactory.cpp */,
    62776292                                413075A61DE85EE70039EC69 /* LibWebRTCSocketFactory.h */,
     6293                                41B7ED6E20681DCF0087D853 /* WebMDNSRegister.cpp */,
     6294                                41B7ED6C20681DCE0087D853 /* WebMDNSRegister.h */,
     6295                                41B7ED6D20681DCF0087D853 /* WebMDNSRegister.messages.in */,
    62786296                                413075A21DE85EE70039EC69 /* WebRTCMonitor.cpp */,
    62796297                                413075A31DE85EE70039EC69 /* WebRTCMonitor.h */,
     
    82498267                                51DD9F2716367DA2001578E9 /* NetworkConnectionToWebProcessMessages.h */,
    82508268                                52F060DD1654317500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp */,
     8269                                51F060DD1654317500F3283F /* NetworkMDNSRegisterMessageReceiver.cpp */,
    82518270                                517CF0E1163A486C00C2950E /* NetworkProcessConnectionMessageReceiver.cpp */,
    82528271                                517CF0E2163A486C00C2950E /* NetworkProcessConnectionMessages.h */,
     
    83588377                                1CBBE49E19B66C53006B7D81 /* WebInspectorUIMessageReceiver.cpp */,
    83598378                                1CBBE49F19B66C53006B7D81 /* WebInspectorUIMessages.h */,
     8379                                51F060DD1654317500F3282F /* WebMDNSRegisterMessageReceiver.cpp */,
    83608380                                31BA9248148830810062EDB5 /* WebNotificationManagerMessageReceiver.cpp */,
    83618381                                31BA9249148830810062EDB5 /* WebNotificationManagerMessages.h */,
     
    1066710687                                839902021BE9A02B000F3653 /* NetworkLoad.cpp in Sources */,
    1066810688                                4103FBA52061C8FE00C2EAF8 /* NetworkLoadChecker.cpp in Sources */,
     10689                                41F12A9F2069BB4C00FF26E8 /* NetworkMDNSRegister.cpp in Sources */,
     10690                                51F060E11654318500F3283F /* NetworkMDNSRegisterMessageReceiver.cpp in Sources */,
    1066910691                                51795568162876CF00FA43B6 /* NetworkProcess.cpp in Sources */,
    1067010692                                7EC4F0FB18E4ACBB008056AF /* NetworkProcessCocoa.mm in Sources */,
     
    1101711039                                465250E61ECF52DC002025CB /* WebKit2InitializeCocoa.mm in Sources */,
    1101811040                                51FB08FF1639DE1A00EC324A /* WebLoaderStrategy.cpp in Sources */,
     11041                                41F12A9E2069BB4400FF26E8 /* WebMDNSRegister.cpp in Sources */,
     11042                                51F060E11654318500F3282F /* WebMDNSRegisterMessageReceiver.cpp in Sources */,
    1101911043                                CD003A5219D49B5D005ABCE0 /* WebMediaKeyStorageManager.cpp in Sources */,
    1102011044                                C98C48A51B6FD4C300145103 /* WebMediaSessionFocusManager.cpp in Sources */,
  • trunk/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp

    r230211 r230290  
    239239    if (preference == "WebKitWebRTCLegacyAPIEnabled")
    240240        RuntimeEnabledFeatures::sharedFeatures().setWebRTCLegacyAPIEnabled(enabled);
     241    if (preference == "WebKitMDNSICECandidatesEnabled")
     242        RuntimeEnabledFeatures::sharedFeatures().setMDNSICECandidatesEnabled(enabled);
    241243#endif
    242244
  • trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp

    r230007 r230290  
    3535#include "WebCoreArgumentCoders.h"
    3636#include "WebLoaderStrategy.h"
     37#include "WebMDNSRegisterMessages.h"
    3738#include "WebProcess.h"
    3839#include "WebRTCMonitor.h"
     
    8788    if (decoder.messageReceiverName() == Messages::WebRTCResolver::messageReceiverName()) {
    8889        WebProcess::singleton().libWebRTCNetwork().resolver(decoder.destinationID()).didReceiveMessage(connection, decoder);
     90        return;
     91    }
     92#endif
     93#if ENABLE(WEB_RTC)
     94    if (decoder.messageReceiverName() == Messages::WebMDNSRegister::messageReceiverName()) {
     95        WebProcess::singleton().libWebRTCNetwork().mdnsRegister().didReceiveMessage(connection, decoder);
    8996        return;
    9097    }
  • trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCNetwork.h

    r211441 r230290  
    2727
    2828#if USE(LIBWEBRTC)
    29 
    3029#include "LibWebRTCSocketFactory.h"
    3130#include "WebRTCMonitor.h"
    3231#include "WebRTCResolver.h"
    3332#include "WebRTCSocket.h"
     33#endif
     34
     35#include "WebMDNSRegister.h"
    3436
    3537namespace WebKit {
     
    3941    LibWebRTCNetwork() = default;
    4042
     43#if USE(LIBWEBRTC)
    4144    WebRTCMonitor& monitor() { return m_webNetworkMonitor; }
    4245    LibWebRTCSocketFactory& socketFactory() { return m_socketFactory; }
     
    4447    WebRTCSocket socket(uint64_t identifier) { return WebRTCSocket(socketFactory(), identifier); }
    4548    WebRTCResolver resolver(uint64_t identifier) { return WebRTCResolver(socketFactory(), identifier); }
     49#endif
     50
     51#if ENABLE(WEB_RTC)
     52    WebMDNSRegister& mdnsRegister() { return m_mdnsRegister; }
     53#endif
    4654
    4755private:
     56#if USE(LIBWEBRTC)
    4857    LibWebRTCSocketFactory m_socketFactory;
    4958    WebRTCMonitor m_webNetworkMonitor;
     59#endif
     60#if ENABLE(WEB_RTC)
     61    WebMDNSRegister m_mdnsRegister;
     62#endif
    5063};
    5164
    5265} // namespace WebKit
    53 
    54 #endif // USE(LIBWEBRTC)
  • trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp

    r218994 r230290  
    3333#include <webrtc/pc/peerconnectionfactory.h>
    3434
     35using namespace WebCore;
     36
    3537namespace WebKit {
    3638
     
    4042}
    4143
     44void LibWebRTCProvider::unregisterMDNSNames(uint64_t documentIdentifier)
     45{
     46    WebProcess::singleton().libWebRTCNetwork().mdnsRegister().unregisterMDNSNames(documentIdentifier);
     47}
     48
     49    void LibWebRTCProvider::registerMDNSName(PAL::SessionID sessionID, uint64_t documentIdentifier, const String& ipAddress, CompletionHandler<void(MDNSNameOrError&&)>&& callback)
     50{
     51    WebProcess::singleton().libWebRTCNetwork().mdnsRegister().registerMDNSName(sessionID, documentIdentifier, ipAddress, WTFMove(callback));
     52}
     53
     54void LibWebRTCProvider::resolveMDNSName(PAL::SessionID sessionID, const String& name, CompletionHandler<void(IPAddressOrError&&)>&& callback)
     55{
     56    WebProcess::singleton().libWebRTCNetwork().mdnsRegister().resolveMDNSName(sessionID, name, WTFMove(callback));
     57}
     58
    4259} // namespace WebKit
    4360
  • trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.h

    r222902 r230290  
    4848private:
    4949    rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(webrtc::PeerConnectionObserver&, webrtc::PeerConnectionInterface::RTCConfiguration&&) final;
     50
     51    void unregisterMDNSNames(uint64_t documentIdentifier) final;
     52    void registerMDNSName(PAL::SessionID, uint64_t documentIdentifier, const String& ipAddress, CompletionHandler<void(MDNSNameOrError&&)>&&) final;
     53    void resolveMDNSName(PAL::SessionID, const String& name, CompletionHandler<void(IPAddressOrError&&)>&&) final;
    5054};
    5155#else
  • trunk/Source/WebKit/WebProcess/WebProcess.cpp

    r230211 r230290  
    16731673}
    16741674
    1675 #if USE(LIBWEBRTC)
    16761675LibWebRTCNetwork& WebProcess::libWebRTCNetwork()
    16771676{
     
    16801679    return *m_libWebRTCNetwork;
    16811680}
    1682 #endif
    16831681
    16841682#if ENABLE(SERVICE_WORKER)
  • trunk/Source/WebKit/WebProcess/WebProcess.h

    r230269 r230290  
    175175    WebLoaderStrategy& webLoaderStrategy();
    176176
    177 #if USE(LIBWEBRTC)
    178177    LibWebRTCNetwork& libWebRTCNetwork();
    179 #endif
    180178
    181179    void webToStorageProcessConnectionClosed(WebToStorageProcessConnection*);
     
    415413    Ref<WebCacheStorageProvider> m_cacheStorageProvider;
    416414
    417 #if USE(LIBWEBRTC)
    418415    std::unique_ptr<LibWebRTCNetwork> m_libWebRTCNetwork;
    419 #endif
    420416
    421417    HashSet<String> m_dnsPrefetchedHosts;
  • trunk/Tools/ChangeLog

    r230288 r230290  
     12018-04-04  Youenn Fablet  <youenn@apple.com>
     2
     3        WebRTC data channel only applications require capture permissions for direct connections
     4        https://bugs.webkit.org/show_bug.cgi?id=174500
     5        <rdar://problem/34134281>
     6
     7        Reviewed by Eric Carlson.
     8
     9        Adding options to enable MDNS ICE candidates.
     10
     11        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
     12        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
     13        (WTR::TestRunner::setMediaDevicesEnabled):
     14        (WTR::TestRunner::setMDNSICECandidatesEnabled):
     15        * WebKitTestRunner/InjectedBundle/TestRunner.h:
     16        * WebKitTestRunner/TestController.cpp:
     17        (WTR::TestController::resetPreferencesToConsistentValues):
     18
    1192018-04-04  Ryan Haddad  <ryanhaddad@apple.com>
    220
  • trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl

    r230224 r230290  
    318318
    319319    void setWebRTCLegacyAPIEnabled(boolean value);
     320    void setMDNSICECandidatesEnabled(boolean value);
    320321
    321322    void terminateNetworkProcess();
  • trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp

    r229349 r230290  
    371371}
    372372
     373void TestRunner::setMDNSICECandidatesEnabled(bool enabled)
     374{
     375    WKRetainPtr<WKStringRef> key(AdoptWK, WKStringCreateWithUTF8CString("WebKitMDNSICECandidatesEnabled"));
     376    auto& injectedBundle = InjectedBundle::singleton();
     377    WKBundleOverrideBoolPreferenceForTestRunner(injectedBundle.bundle(), injectedBundle.pageGroup(), key.get(), enabled);
     378}
     379
    373380void TestRunner::setWebRTCLegacyAPIEnabled(bool enabled)
    374381{
  • trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h

    r230224 r230290  
    130130    void setMediaDevicesEnabled(bool);
    131131    void setWebRTCLegacyAPIEnabled(bool);
     132    void setMDNSICECandidatesEnabled(bool);
    132133
    133134    // Special DOM functions.
  • trunk/Tools/WebKitTestRunner/TestController.cpp

    r230224 r230290  
    669669    WKPreferencesSetMediaDevicesEnabled(preferences, true);
    670670    WKPreferencesSetWebRTCLegacyAPIEnabled(preferences, true);
     671    WKPreferencesSetWebRTCMDNSICECandidatesEnabled(preferences, false);
    671672    WKPreferencesSetDeveloperExtrasEnabled(preferences, true);
    672673    WKPreferencesSetJavaScriptRuntimeFlags(preferences, kWKJavaScriptRuntimeFlagsAllEnabled);
Note: See TracChangeset for help on using the changeset viewer.