- Revision
- 280481
- Author
- [email protected]
- Date
- 2021-07-30 10:30:58 -0700 (Fri, 30 Jul 2021)
Log Message
Attribute nw connections to the source application
https://bugs.webkit.org/show_bug.cgi?id=228641
<rdar://81039713>
Reviewed by Alex Christensen.
Add source application token for every nw connection/listener, like done for WebSocket or NSURLSession tasks.
This will allow the nw layer to do custom processing based on the application doing the loads.
Introduce an audit_token_t getter on NetworkProcess.
* NetworkProcess/cocoa/NetworkProcessCocoa.mm:
(WebKit::NetworkProcess::sourceApplicationAuditData const):
(WebKit::NetworkProcess::sourceApplicationAuditToken const):
* NetworkProcess/webrtc/NetworkRTCProvider.cpp:
(WebKit::NetworkRTCProvider::NetworkRTCProvider):
* NetworkProcess/webrtc/NetworkRTCProvider.h:
(WebKit::NetworkRTCProvider::sourceApplicationAuditToken const):
* NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:
(WebKit::NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa):
* NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
(WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):
(WebKit::NetworkRTCUDPSocketCocoaConnections::configureParameters):
* Platform/spi/Cocoa/NWParametersSPI.h:
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (280480 => 280481)
--- trunk/Source/WebKit/ChangeLog 2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/ChangeLog 2021-07-30 17:30:58 UTC (rev 280481)
@@ -1,3 +1,29 @@
+2021-07-30 Youenn Fablet <[email protected]>
+
+ Attribute nw connections to the source application
+ https://bugs.webkit.org/show_bug.cgi?id=228641
+ <rdar://81039713>
+
+ Reviewed by Alex Christensen.
+
+ Add source application token for every nw connection/listener, like done for WebSocket or NSURLSession tasks.
+ This will allow the nw layer to do custom processing based on the application doing the loads.
+ Introduce an audit_token_t getter on NetworkProcess.
+
+ * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
+ (WebKit::NetworkProcess::sourceApplicationAuditData const):
+ (WebKit::NetworkProcess::sourceApplicationAuditToken const):
+ * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
+ (WebKit::NetworkRTCProvider::NetworkRTCProvider):
+ * NetworkProcess/webrtc/NetworkRTCProvider.h:
+ (WebKit::NetworkRTCProvider::sourceApplicationAuditToken const):
+ * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:
+ (WebKit::NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa):
+ * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
+ (WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):
+ (WebKit::NetworkRTCUDPSocketCocoaConnections::configureParameters):
+ * Platform/spi/Cocoa/NWParametersSPI.h:
+
2021-07-29 Myles C. Maxfield <[email protected]>
Stop building WebGPU and the WHLSL compiler to decrease binary size
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (280480 => 280481)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2021-07-30 17:30:58 UTC (rev 280481)
@@ -197,6 +197,7 @@
#if PLATFORM(COCOA)
RetainPtr<CFDataRef> sourceApplicationAuditData() const;
+ std::optional<audit_token_t> sourceApplicationAuditToken() const;
#endif
#if PLATFORM(COCOA) || USE(SOUP)
HashSet<String> hostNamesWithHSTSCache(PAL::SessionID) const;
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm (280480 => 280481)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2021-07-30 17:30:58 UTC (rev 280481)
@@ -109,15 +109,22 @@
RetainPtr<CFDataRef> NetworkProcess::sourceApplicationAuditData() const
{
#if USE(SOURCE_APPLICATION_AUDIT_DATA)
+ if (auto auditToken = sourceApplicationAuditToken())
+ return adoptCF(CFDataCreate(nullptr, (const UInt8*)&*auditToken, sizeof(*auditToken)));
+#endif
+
+ return nullptr;
+}
+
+std::optional<audit_token_t> NetworkProcess::sourceApplicationAuditToken() const
+{
+#if USE(SOURCE_APPLICATION_AUDIT_DATA)
ASSERT(parentProcessConnection());
if (!parentProcessConnection())
- return nullptr;
- std::optional<audit_token_t> auditToken = parentProcessConnection()->getAuditToken();
- if (!auditToken)
- return nullptr;
- return adoptCF(CFDataCreate(nullptr, (const UInt8*)&*auditToken, sizeof(*auditToken)));
+ return { };
+ return parentProcessConnection()->getAuditToken();
#else
- return nullptr;
+ return { };
#endif
}
Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp (280480 => 280481)
--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp 2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp 2021-07-30 17:30:58 UTC (rev 280481)
@@ -86,6 +86,9 @@
, m_rtcMonitor(*this)
, m_rtcNetworkThread(rtcNetworkThread())
, m_packetSocketFactory(makeUniqueRefWithoutFastMallocCheck<rtc::BasicPacketSocketFactory>(&m_rtcNetworkThread))
+#if PLATFORM(COCOA)
+ , m_sourceApplicationAuditToken(connection.networkProcess().sourceApplicationAuditToken())
+#endif
{
#if !RELEASE_LOG_DISABLED
rtc::LogMessage::SetLogOutput(WebKit2LogWebRTC.state == WTFLogChannelState::On ? rtc::LS_INFO : rtc::LS_WARNING, doReleaseLogging);
Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h (280480 => 280481)
--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h 2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h 2021-07-30 17:30:58 UTC (rev 280481)
@@ -105,6 +105,10 @@
void closeSocket(WebCore::LibWebRTCSocketIdentifier);
void doSocketTaskOnRTCNetworkThread(WebCore::LibWebRTCSocketIdentifier, Function<void(Socket&)>&&);
+#if PLATFORM(COCOA)
+ const std::optional<audit_token_t>& sourceApplicationAuditToken() const { return m_sourceApplicationAuditToken; }
+#endif
+
private:
explicit NetworkRTCProvider(NetworkConnectionToWebProcess&);
void startListeningForIPC();
@@ -147,6 +151,11 @@
bool m_isListeningSocketAuthorized { true };
bool m_platformTCPSocketsEnabled { false };
bool m_platformUDPSocketsEnabled { false };
+
+#if PLATFORM(COCOA)
+ std::optional<audit_token_t> m_sourceApplicationAuditToken;
+#endif
+
};
} // namespace WebKit
Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm (280480 => 280481)
--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm 2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm 2021-07-30 17:30:58 UTC (rev 280481)
@@ -31,6 +31,7 @@
#include "DataReference.h"
#include "LibWebRTCNetworkMessages.h"
#include "Logging.h"
+#include "NWParametersSPI.h"
#include <WebCore/STUNMessageParsing.h>
#include <dispatch/dispatch.h>
#include <wtf/BlockPtr.h>
@@ -95,6 +96,9 @@
nw_tcp_options_set_no_delay(tcp_options, true);
}));
+ if (auto token = rtcProvider.sourceApplicationAuditToken())
+ nw_parameters_set_source_application(tcpTLS.get(), *token);
+
m_nwConnection = adoptNS(nw_connection_create(host.get(), tcpTLS.get()));
nw_connection_set_queue(m_nwConnection.get(), tcpSocketQueue());
Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm (280480 => 280481)
--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm 2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm 2021-07-30 17:30:58 UTC (rev 280481)
@@ -74,6 +74,9 @@
bool m_isKnownTracker { false };
#endif
bool m_shouldBypassRelay { false };
+
+ std::optional<audit_token_t> m_sourceApplicationAuditToken;
+
rtc::SocketAddress m_address;
RetainPtr<nw_listener_t> m_nwListener;
Lock m_nwConnectionsLock;
@@ -159,6 +162,7 @@
, m_isKnownTracker(isKnownTracker(domain))
#endif
, m_shouldBypassRelay(isRelayDisabled)
+ , m_sourceApplicationAuditToken(rtcProvider.sourceApplicationAuditToken())
{
auto parameters = adoptNS(nw_parameters_create_secure_udp(NW_PARAMETERS_DISABLE_PROTOCOL, NW_PARAMETERS_DEFAULT_CONFIGURATION));
{
@@ -233,6 +237,9 @@
nw_parameters_set_is_known_tracker(parameters, m_isKnownTracker);
#endif
+ if (m_sourceApplicationAuditToken)
+ nw_parameters_set_source_application(parameters, *m_sourceApplicationAuditToken);
+
nw_parameters_set_reuse_local_address(parameters, true);
}
Modified: trunk/Source/WebKit/Platform/spi/Cocoa/NWParametersSPI.h (280480 => 280481)
--- trunk/Source/WebKit/Platform/spi/Cocoa/NWParametersSPI.h 2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/Platform/spi/Cocoa/NWParametersSPI.h 2021-07-30 17:30:58 UTC (rev 280481)
@@ -34,6 +34,7 @@
WTF_EXTERN_C_BEGIN
void nw_parameters_set_account_id(nw_parameters_t, const char * account_id);
+void nw_parameters_set_source_application(nw_parameters_t, audit_token_t);
#if HAVE(NWPARAMETERS_TRACKER_API)
void nw_parameters_set_is_third_party_web_content(nw_parameters_t, bool is_third_party_web_content);