Title: [275037] trunk
Revision
275037
Author
[email protected]
Date
2021-03-25 09:33:06 -0700 (Thu, 25 Mar 2021)

Log Message

Switch from PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION to filtering interfaces in Network process
https://bugs.webkit.org/show_bug.cgi?id=223679

Reviewed by Eric Carlson.

Source/ThirdParty/libwebrtc:

* Configurations/libwebrtc.iOS.exp:
* Configurations/libwebrtc.iOSsim.exp:
* Configurations/libwebrtc.mac.exp:

Source/WebCore:

Covered by webrtc/datachannel/filter-ice-candidate.html.

* platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
(WebCore::LibWebRTCProvider::createPeerConnection):
* platform/mediastream/libwebrtc/LibWebRTCProvider.h:
Use set_allow_tcp_listen instead of PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION.

Source/WebKit:

When starting to monitor, pass whether to enumerate all interfaces from WebProcess to NetworkProcess as a boolean.
In NetworkProcess, do network interface enumeration as usual, but use the boolean to decide whether to send the full list or the list that is related to the default IP addresses to WebProcess.

* NetworkProcess/webrtc/NetworkRTCMonitor.cpp:
(WebKit::NetworkManagerWrapper::addListener):
(WebKit::NetworkManagerWrapper::onNetworksChanged):
(WebKit::NetworkRTCMonitor::startUpdatingIfNeeded):
(WebKit::NetworkRTCMonitor::onNetworksChanged):
* NetworkProcess/webrtc/NetworkRTCMonitor.h:
* NetworkProcess/webrtc/NetworkRTCMonitor.messages.in:
* WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
(WebKit::LibWebRTCProvider::createPeerConnection):
* WebProcess/Network/webrtc/WebRTCMonitor.cpp:
(WebKit::WebRTCMonitor::setEnumeratingAllNetworkInterfacesEnabled):
(WebKit::WebRTCMonitor::StartUpdating):
* WebProcess/Network/webrtc/WebRTCMonitor.h:

Modified Paths

Diff

Modified: trunk/LayoutTests/webrtc/datachannel/filter-ice-candidate-expected.txt (275036 => 275037)


--- trunk/LayoutTests/webrtc/datachannel/filter-ice-candidate-expected.txt	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/LayoutTests/webrtc/datachannel/filter-ice-candidate-expected.txt	2021-03-25 16:33:06 UTC (rev 275037)
@@ -1,4 +1,6 @@
 
 PASS Gathering ICE candidates from a data channel peer connection with ICE candidate filtering on
 PASS Gathering ICE candidates from a data channel peer connection with ICE candidate filtering off
+PASS Verify TCP candidates with filtering
+PASS Verify TCP candidates without filtering
 

Modified: trunk/LayoutTests/webrtc/datachannel/filter-ice-candidate.html (275036 => 275037)


--- trunk/LayoutTests/webrtc/datachannel/filter-ice-candidate.html	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/LayoutTests/webrtc/datachannel/filter-ice-candidate.html	2021-03-25 16:33:06 UTC (rev 275037)
@@ -71,6 +71,60 @@
         pc.createOffer().then((offer) => { pc.setLocalDescription(offer); });
     });
 }, "Gathering ICE candidates from a data channel peer connection with ICE candidate filtering off");
+
+promise_test(async (test) => {
+    if (window.internals)
+        internals.setICECandidateFiltering(true);
+
+    const pc = new RTCPeerConnection();
+
+    let resolve;
+    const promise = new Promise(r => resolve = r);
+
+    pc.createDataChannel('sendDataChannel');
+    pc._onicecandidate_ = (event) => {
+        if (event.candidate) {
+            if (event.candidate.protocol !== "tcp")
+                return;
+            assert_equals(event.candidate.port, 9);
+            assert_true(event.candidate.address.indexOf(".local") !== -1);
+            return;
+        }
+        resolve();
+    }
+    pc.createOffer().then((offer) => { pc.setLocalDescription(offer); });
+
+    await promise;
+
+    pc._onicecandidate_ = null;
+}, "Verify TCP candidates with filtering");
+
+promise_test(async (test) => {
+    if (window.internals)
+        internals.setICECandidateFiltering(false);
+
+    const pc = new RTCPeerConnection();
+
+    let resolve;
+    const promise = new Promise(r => resolve = r);
+
+    pc.createDataChannel('sendDataChannel');
+    pc._onicecandidate_ = (event) => {
+        if (event.candidate) {
+            if (event.candidate.protocol !== "tcp")
+                return;
+            assert_equals(event.candidate.port, 9);
+            assert_true(event.candidate.address.indexOf(".local") === -1);
+            return;
+        }
+        resolve();
+    }
+    pc.createOffer().then((offer) => { pc.setLocalDescription(offer); });
+
+    await promise;
+
+    pc._onicecandidate_ = null;
+}, "Verify TCP candidates without filtering");
     </script>
   </body>
 </html>

Modified: trunk/Source/ThirdParty/libwebrtc/ChangeLog (275036 => 275037)


--- trunk/Source/ThirdParty/libwebrtc/ChangeLog	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/ThirdParty/libwebrtc/ChangeLog	2021-03-25 16:33:06 UTC (rev 275037)
@@ -1,5 +1,16 @@
 2021-03-25  Youenn Fablet  <[email protected]>
 
+        Switch from PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION to filtering interfaces in Network process
+        https://bugs.webkit.org/show_bug.cgi?id=223679
+
+        Reviewed by Eric Carlson.
+
+        * Configurations/libwebrtc.iOS.exp:
+        * Configurations/libwebrtc.iOSsim.exp:
+        * Configurations/libwebrtc.mac.exp:
+
+2021-03-25  Youenn Fablet  <[email protected]>
+
         Align RemoteVideoDecoder destruction strategy with RemoteVideoEncoder
         https://bugs.webkit.org/show_bug.cgi?id=223745
 

Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp (275036 => 275037)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp	2021-03-25 16:33:06 UTC (rev 275037)
@@ -317,3 +317,4 @@
 __ZN6webrtc23RtpTransceiverInterface4StopEv
 __ZNK6webrtc23RtpTransceiverInterface23HeaderExtensionsToOfferEv
 __ZNK6webrtc23RtpTransceiverInterface8stoppingEv
+__ZNK3rtc9IPAddresseqERKS0_

Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp (275036 => 275037)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp	2021-03-25 16:33:06 UTC (rev 275037)
@@ -317,3 +317,4 @@
 __ZN6webrtc23RtpTransceiverInterface4StopEv
 __ZNK6webrtc23RtpTransceiverInterface23HeaderExtensionsToOfferEv
 __ZNK6webrtc23RtpTransceiverInterface8stoppingEv
+__ZNK3rtc9IPAddresseqERKS0_

Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp (275036 => 275037)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp	2021-03-25 16:33:06 UTC (rev 275037)
@@ -317,3 +317,4 @@
 __ZN6webrtc23RtpTransceiverInterface4StopEv
 __ZNK6webrtc23RtpTransceiverInterface23HeaderExtensionsToOfferEv
 __ZNK6webrtc23RtpTransceiverInterface8stoppingEv
+__ZNK3rtc9IPAddresseqERKS0_

Modified: trunk/Source/WebCore/ChangeLog (275036 => 275037)


--- trunk/Source/WebCore/ChangeLog	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/WebCore/ChangeLog	2021-03-25 16:33:06 UTC (rev 275037)
@@ -1,3 +1,17 @@
+2021-03-25  Youenn Fablet  <[email protected]>
+
+        Switch from PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION to filtering interfaces in Network process
+        https://bugs.webkit.org/show_bug.cgi?id=223679
+
+        Reviewed by Eric Carlson.
+
+        Covered by webrtc/datachannel/filter-ice-candidate.html.
+
+        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
+        (WebCore::LibWebRTCProvider::createPeerConnection):
+        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
+        Use set_allow_tcp_listen instead of PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION.
+
 2021-03-25  Ben Nham  <[email protected]>
 
         Only preheat MTLCopyAllDevices on Mac

Modified: trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp (275036 => 275037)


--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp	2021-03-25 16:33:06 UTC (rev 275037)
@@ -349,8 +349,8 @@
     std::unique_ptr<cricket::BasicPortAllocator> portAllocator;
     factoryAndThreads.signalingThread->Invoke<void>(RTC_FROM_HERE, [&]() {
         auto basicPortAllocator = makeUniqueWithoutFastMallocCheck<cricket::BasicPortAllocator>(&networkManager, &packetSocketFactory);
-        if (!m_enableEnumeratingAllNetworkInterfaces)
-            basicPortAllocator->set_flags(basicPortAllocator->flags() | cricket::PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION);
+
+        basicPortAllocator->set_allow_tcp_listen(false);
         portAllocator = WTFMove(basicPortAllocator);
     });
 

Modified: trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h (275036 => 275037)


--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h	2021-03-25 16:33:06 UTC (rev 275037)
@@ -109,6 +109,7 @@
 
     void disableEnumeratingAllNetworkInterfaces();
     void enableEnumeratingAllNetworkInterfaces();
+    bool isEnumeratingAllNetworkInterfacesEnabled() const { return m_enableEnumeratingAllNetworkInterfaces; }
 
     void setH265Support(bool value) { m_supportsH265 = value; }
     void setVP9Support(bool supportsVP9Profile0, bool supportsVP9Profile2);

Modified: trunk/Source/WebKit/ChangeLog (275036 => 275037)


--- trunk/Source/WebKit/ChangeLog	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/WebKit/ChangeLog	2021-03-25 16:33:06 UTC (rev 275037)
@@ -1,3 +1,27 @@
+2021-03-25  Youenn Fablet  <[email protected]>
+
+        Switch from PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION to filtering interfaces in Network process
+        https://bugs.webkit.org/show_bug.cgi?id=223679
+
+        Reviewed by Eric Carlson.
+
+        When starting to monitor, pass whether to enumerate all interfaces from WebProcess to NetworkProcess as a boolean.
+        In NetworkProcess, do network interface enumeration as usual, but use the boolean to decide whether to send the full list or the list that is related to the default IP addresses to WebProcess.
+
+        * NetworkProcess/webrtc/NetworkRTCMonitor.cpp:
+        (WebKit::NetworkManagerWrapper::addListener):
+        (WebKit::NetworkManagerWrapper::onNetworksChanged):
+        (WebKit::NetworkRTCMonitor::startUpdatingIfNeeded):
+        (WebKit::NetworkRTCMonitor::onNetworksChanged):
+        * NetworkProcess/webrtc/NetworkRTCMonitor.h:
+        * NetworkProcess/webrtc/NetworkRTCMonitor.messages.in:
+        * WebProcess/Network/webrtc/LibWebRTCProvider.cpp:
+        (WebKit::LibWebRTCProvider::createPeerConnection):
+        * WebProcess/Network/webrtc/WebRTCMonitor.cpp:
+        (WebKit::WebRTCMonitor::setEnumeratingAllNetworkInterfacesEnabled):
+        (WebKit::WebRTCMonitor::StartUpdating):
+        * WebProcess/Network/webrtc/WebRTCMonitor.h:
+
 2021-03-25  Tim Horton  <[email protected]>
 
         All Books quirks are flakily not applied in modern WebKit

Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCMonitor.cpp (275036 => 275037)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCMonitor.cpp	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCMonitor.cpp	2021-03-25 16:33:06 UTC (rev 275037)
@@ -55,6 +55,7 @@
 
     bool m_didReceiveResults { false };
     Vector<RTCNetwork> m_networkList;
+    Vector<RTCNetwork> m_filteredNetworkList;
     RTCNetwork::IPAddress m_ipv4;
     RTCNetwork::IPAddress m_ipv6;
 };
@@ -71,7 +72,7 @@
     m_observers.add(monitor);
     if (!shouldStart) {
         if (m_didReceiveResults)
-            monitor.onNetworksChanged(m_networkList, m_ipv4, m_ipv6);
+            monitor.onNetworksChanged(m_networkList, m_filteredNetworkList, m_ipv4, m_ipv6);
         return;
     }
 
@@ -107,8 +108,6 @@
     RELEASE_LOG(WebRTC, "NetworkManagerWrapper::onNetworksChanged");
 
     rtc::BasicNetworkManager::NetworkList networks;
-    m_manager->GetNetworks(&networks);
-    auto networkList = WTF::map(networks, [](auto& network) { return RTCNetwork { *network }; });
 
     RTCNetwork::IPAddress ipv4;
     m_manager->GetDefaultLocalAddress(AF_INET, &ipv4.value);
@@ -115,15 +114,26 @@
     RTCNetwork::IPAddress ipv6;
     m_manager->GetDefaultLocalAddress(AF_INET6, &ipv6.value);
 
-    callOnMainRunLoop([this, networkList = WTFMove(networkList), ipv4 = WTFMove(ipv4), ipv6 = WTFMove(ipv6)]() mutable {
+    m_manager->GetNetworks(&networks);
+
+    auto networkList = WTF::map(networks, [](auto& network) { return RTCNetwork { *network }; });
+    Vector<RTCNetwork> filteredNetworkList;
+    for (auto& network : networks) {
+        const auto& ips = network->GetIPs();
+        if (WTF::anyOf(ips, [&](const auto& ip) { return ipv4.value == ip || ipv6.value == ip; }))
+            filteredNetworkList.append(RTCNetwork { *network });
+    }
+
+    callOnMainRunLoop([this, networkList = WTFMove(networkList), filteredNetworkList = WTFMove(filteredNetworkList), ipv4 = WTFMove(ipv4), ipv6 = WTFMove(ipv6)]() mutable {
         m_didReceiveResults = true;
 
         m_networkList = WTFMove(networkList);
+        m_filteredNetworkList = WTFMove(filteredNetworkList);
         m_ipv4 = WTFMove(ipv4);
         m_ipv6 = WTFMove(ipv6);
 
         m_observers.forEach([this](auto& observer) {
-            observer.onNetworksChanged(m_networkList, m_ipv4, m_ipv6);
+            observer.onNetworksChanged(m_networkList, m_filteredNetworkList, m_ipv4, m_ipv6);
         });
     });
 }
@@ -133,9 +143,10 @@
     ASSERT(!m_manager);
 }
 
-void NetworkRTCMonitor::startUpdatingIfNeeded()
+void NetworkRTCMonitor::startUpdatingIfNeeded(bool enableEnumeratingAllNetworkInterfaces)
 {
     RELEASE_LOG_IF_ALLOWED("startUpdatingIfNeeded %d", m_isStarted);
+    m_enableEnumeratingAllNetworkInterfaces = enableEnumeratingAllNetworkInterfaces;
     networkManager().addListener(*this);
 }
 
@@ -145,10 +156,10 @@
     networkManager().removeListener(*this);
 }
 
-void NetworkRTCMonitor::onNetworksChanged(const Vector<RTCNetwork>& networkList, const RTCNetwork::IPAddress& ipv4, const RTCNetwork::IPAddress& ipv6)
+void NetworkRTCMonitor::onNetworksChanged(const Vector<RTCNetwork>& networkList, const Vector<RTCNetwork>& filteredNetworkList, const RTCNetwork::IPAddress& ipv4, const RTCNetwork::IPAddress& ipv6)
 {
     RELEASE_LOG_IF_ALLOWED("onNetworksChanged sent");
-    m_rtcProvider.connection().send(Messages::WebRTCMonitor::NetworksChanged(networkList, ipv4, ipv6), 0);
+    m_rtcProvider.connection().send(Messages::WebRTCMonitor::NetworksChanged(m_enableEnumeratingAllNetworkInterfaces ? networkList : filteredNetworkList, ipv4, ipv6), 0);
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCMonitor.h (275036 => 275037)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCMonitor.h	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCMonitor.h	2021-03-25 16:33:06 UTC (rev 275037)
@@ -52,14 +52,15 @@
     bool isStarted() const { return m_isStarted; }
     NetworkRTCProvider& rtcProvider() { return m_rtcProvider; }
 
-    void onNetworksChanged(const Vector<RTCNetwork>&, const RTCNetwork::IPAddress&, const RTCNetwork::IPAddress&);
+    void onNetworksChanged(const Vector<RTCNetwork>&, const Vector<RTCNetwork>&, const RTCNetwork::IPAddress&, const RTCNetwork::IPAddress&);
 
 private:
-    void startUpdatingIfNeeded();
+    void startUpdatingIfNeeded(bool);
 
     NetworkRTCProvider& m_rtcProvider;
     std::unique_ptr<rtc::BasicNetworkManager> m_manager;
     bool m_isStarted { false };
+    bool m_enableEnumeratingAllNetworkInterfaces { false };
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCMonitor.messages.in (275036 => 275037)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCMonitor.messages.in	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCMonitor.messages.in	2021-03-25 16:33:06 UTC (rev 275037)
@@ -23,7 +23,7 @@
 #if USE(LIBWEBRTC)
 
 messages -> NetworkRTCMonitor NotRefCounted {
-    void StartUpdatingIfNeeded()
+    void StartUpdatingIfNeeded(bool enumerateAllInterfaces)
     void StopUpdating()
 }
 

Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp (275036 => 275037)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCProvider.cpp	2021-03-25 16:33:06 UTC (rev 275037)
@@ -64,7 +64,9 @@
     }
 #endif
 
-    return WebCore::LibWebRTCProvider::createPeerConnection(observer, WebProcess::singleton().libWebRTCNetwork().monitor(), *socketFactory, WTFMove(configuration), makeUnique<AsyncResolverFactory>());
+    auto& networkMonitor = WebProcess::singleton().libWebRTCNetwork().monitor();
+    networkMonitor.setEnumeratingAllNetworkInterfacesEnabled(isEnumeratingAllNetworkInterfacesEnabled());
+    return WebCore::LibWebRTCProvider::createPeerConnection(observer, networkMonitor, *socketFactory, WTFMove(configuration), makeUnique<AsyncResolverFactory>());
 }
 
 void LibWebRTCProvider::disableNonLocalhostConnections()

Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/WebRTCMonitor.cpp (275036 => 275037)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/WebRTCMonitor.cpp	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/WebRTCMonitor.cpp	2021-03-25 16:33:06 UTC (rev 275037)
@@ -48,6 +48,11 @@
     });
 }
 
+void WebRTCMonitor::setEnumeratingAllNetworkInterfacesEnabled(bool enabled)
+{
+    m_enableEnumeratingAllNetworkInterfaces = enabled;
+}
+
 void WebRTCMonitor::StartUpdating()
 {
     RELEASE_LOG_IF_ALLOWED("StartUpdating");
@@ -59,7 +64,7 @@
 
     sendOnMainThread([this](auto& connection) {
         RELEASE_LOG_IF_ALLOWED("StartUpdating - Asking network process to start updating");
-        connection.send(Messages::NetworkRTCMonitor::StartUpdatingIfNeeded(), 0);
+        connection.send(Messages::NetworkRTCMonitor::StartUpdatingIfNeeded(m_enableEnumeratingAllNetworkInterfaces), 0);
     });
     ++m_clientCount;
 }

Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/WebRTCMonitor.h (275036 => 275037)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/WebRTCMonitor.h	2021-03-25 16:19:39 UTC (rev 275036)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/WebRTCMonitor.h	2021-03-25 16:33:06 UTC (rev 275037)
@@ -46,6 +46,7 @@
 
     void networkProcessCrashed();
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
+    void setEnumeratingAllNetworkInterfacesEnabled(bool);
 
 private:
     void networksChanged(const Vector<RTCNetwork>& networkList, const RTCNetwork::IPAddress&, const RTCNetwork::IPAddress&);
@@ -58,6 +59,7 @@
 
     unsigned m_clientCount { 0 };
     bool m_receivedNetworkList { false };
+    bool m_enableEnumeratingAllNetworkInterfaces { false };
 };
 
 } // namespace WebKit
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to