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