- Revision
- 198457
- Author
- achristen...@apple.com
- Date
- 2016-03-18 17:05:17 -0700 (Fri, 18 Mar 2016)
Log Message
Give NSURLSessionConfiguration information about parent process
https://bugs.webkit.org/show_bug.cgi?id=155661
Source/WebCore:
Reviewed by Anders Carlsson.
* platform/spi/cf/CFNetworkSPI.h:
Add newly-used SPI declarations.
Source/WebKit2:
rdar://problem/25225850
Reviewed by Anders Carlsson.
* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::initializeNetworkProcess):
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkSession.h:
(WebKit::NetworkSession::sessionID):
* NetworkProcess/cocoa/NetworkProcessCocoa.mm:
(WebKit::partitionName):
(WebKit::NetworkProcess::sourceApplicationAuditData):
(WebKit::NetworkProcess::cfURLCacheOrigins):
* NetworkProcess/cocoa/NetworkSessionCocoa.mm:
(WebKit::globalCustomProtocolManager):
(WebKit::globalSourceApplicationAuditTokenData):
(WebKit::NetworkSession::setCustomProtocolManager):
(WebKit::NetworkSession::setSourceApplicationAuditTokenData):
(WebKit::NetworkSession::defaultSession):
(WebKit::NetworkSession::NetworkSession):
Tell the NSURLSessionConfiguration what the source application bundle identifier
and audit token data are so we can correctly keep track of which application is using data.
This also gives CFNetwork enough information to determine if the application is allowed to
use cell data in Settings, so it seems like we do not need to explicitly set allowsCellularAccess.
* NetworkProcess/mac/RemoteNetworkingContext.mm:
(WebKit::RemoteNetworkingContext::sourceApplicationAuditData):
(WebKit::RemoteNetworkingContext::sourceApplicationIdentifier):
* WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
(WebKit::WebFrameNetworkingContext::sourceApplicationAuditData):
(WebKit::WebFrameNetworkingContext::sourceApplicationIdentifier):
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::initializeWebProcess):
* WebProcess/WebProcess.h:
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::platformTerminate):
(WebKit::WebProcess::sourceApplicationAuditData):
(WebKit::WebProcess::initializeSandbox):
I moved the calls to getAuditToken from RemoteNetworkingContext.mm and WebFrameNetworkingContext.mm
to NetworkProcessCocoa.mm and WebProcessCocoa.mm, respectively, to share with NetworkSession code,
which does not use NetworkingContexts.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (198456 => 198457)
--- trunk/Source/WebCore/ChangeLog 2016-03-19 00:04:03 UTC (rev 198456)
+++ trunk/Source/WebCore/ChangeLog 2016-03-19 00:05:17 UTC (rev 198457)
@@ -1,3 +1,13 @@
+2016-03-18 Alex Christensen <achristen...@webkit.org>
+
+ Give NSURLSessionConfiguration information about parent process
+ https://bugs.webkit.org/show_bug.cgi?id=155661
+
+ Reviewed by Anders Carlsson.
+
+ * platform/spi/cf/CFNetworkSPI.h:
+ Add newly-used SPI declarations.
+
2016-03-18 Simon Fraser <simon.fra...@apple.com>
Sideways-scrollable RTL document has wrong initial and reload offset in WKWebView
Modified: trunk/Source/WebCore/platform/spi/cf/CFNetworkSPI.h (198456 => 198457)
--- trunk/Source/WebCore/platform/spi/cf/CFNetworkSPI.h 2016-03-19 00:04:03 UTC (rev 198456)
+++ trunk/Source/WebCore/platform/spi/cf/CFNetworkSPI.h 2016-03-19 00:05:17 UTC (rev 198457)
@@ -97,9 +97,11 @@
- (NSDictionary *)_timingData;
@end
-#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
+#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000)
@interface NSURLSessionConfiguration ()
@property (assign) _TimingDataOptions _timingDataOptions;
+@property (copy) NSData *_sourceApplicationAuditTokenData;
+@property (copy) NSString *_sourceApplicationBundleIdentifier;
@end
#endif
Modified: trunk/Source/WebKit2/ChangeLog (198456 => 198457)
--- trunk/Source/WebKit2/ChangeLog 2016-03-19 00:04:03 UTC (rev 198456)
+++ trunk/Source/WebKit2/ChangeLog 2016-03-19 00:05:17 UTC (rev 198457)
@@ -1,3 +1,48 @@
+2016-03-18 Alex Christensen <achristen...@webkit.org>
+
+ Give NSURLSessionConfiguration information about parent process
+ https://bugs.webkit.org/show_bug.cgi?id=155661
+ rdar://problem/25225850
+
+ Reviewed by Anders Carlsson.
+
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::initializeNetworkProcess):
+ * NetworkProcess/NetworkProcess.h:
+ * NetworkProcess/NetworkSession.h:
+ (WebKit::NetworkSession::sessionID):
+ * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
+ (WebKit::partitionName):
+ (WebKit::NetworkProcess::sourceApplicationAuditData):
+ (WebKit::NetworkProcess::cfURLCacheOrigins):
+ * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
+ (WebKit::globalCustomProtocolManager):
+ (WebKit::globalSourceApplicationAuditTokenData):
+ (WebKit::NetworkSession::setCustomProtocolManager):
+ (WebKit::NetworkSession::setSourceApplicationAuditTokenData):
+ (WebKit::NetworkSession::defaultSession):
+ (WebKit::NetworkSession::NetworkSession):
+ Tell the NSURLSessionConfiguration what the source application bundle identifier
+ and audit token data are so we can correctly keep track of which application is using data.
+ This also gives CFNetwork enough information to determine if the application is allowed to
+ use cell data in Settings, so it seems like we do not need to explicitly set allowsCellularAccess.
+ * NetworkProcess/mac/RemoteNetworkingContext.mm:
+ (WebKit::RemoteNetworkingContext::sourceApplicationAuditData):
+ (WebKit::RemoteNetworkingContext::sourceApplicationIdentifier):
+ * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
+ (WebKit::WebFrameNetworkingContext::sourceApplicationAuditData):
+ (WebKit::WebFrameNetworkingContext::sourceApplicationIdentifier):
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::initializeWebProcess):
+ * WebProcess/WebProcess.h:
+ * WebProcess/cocoa/WebProcessCocoa.mm:
+ (WebKit::WebProcess::platformTerminate):
+ (WebKit::WebProcess::sourceApplicationAuditData):
+ (WebKit::WebProcess::initializeSandbox):
+ I moved the calls to getAuditToken from RemoteNetworkingContext.mm and WebFrameNetworkingContext.mm
+ to NetworkProcessCocoa.mm and WebProcessCocoa.mm, respectively, to share with NetworkSession code,
+ which does not use NetworkingContexts.
+
2016-03-18 Simon Fraser <simon.fra...@apple.com>
Build fix after r198455.
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp (198456 => 198457)
--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp 2016-03-19 00:04:03 UTC (rev 198456)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp 2016-03-19 00:05:17 UTC (rev 198457)
@@ -218,6 +218,10 @@
SessionTracker::setIdentifierBase(parameters.uiProcessBundleIdentifier);
#endif
+#if USE(NETWORK_SESSION)
+ NetworkSession::setSourceApplicationAuditTokenData(sourceApplicationAuditData());
+#endif
+
// FIXME: instead of handling this here, a message should be sent later (scales to multiple sessions)
if (parameters.privateBrowsingEnabled)
RemoteNetworkingContext::ensurePrivateBrowsingSession(SessionID::legacyPrivateSessionID());
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h (198456 => 198457)
--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h 2016-03-19 00:04:03 UTC (rev 198456)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h 2016-03-19 00:05:17 UTC (rev 198457)
@@ -36,6 +36,7 @@
#include <memory>
#include <wtf/Forward.h>
#include <wtf/NeverDestroyed.h>
+#include <wtf/RetainPtr.h>
#if PLATFORM(IOS)
#include "WebSQLiteDatabaseTracker.h"
@@ -99,6 +100,7 @@
#endif
#if PLATFORM(COCOA)
+ RetainPtr<CFDataRef> sourceApplicationAuditData() const;
void clearHSTSCache(WebCore::NetworkStorageSession&, std::chrono::system_clock::time_point modifiedSince);
#endif
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkSession.h (198456 => 198457)
--- trunk/Source/WebKit2/NetworkProcess/NetworkSession.h 2016-03-19 00:04:03 UTC (rev 198456)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkSession.h 2016-03-19 00:05:17 UTC (rev 198457)
@@ -65,6 +65,9 @@
WebCore::NetworkStorageSession& networkStorageSession();
static void setCustomProtocolManager(CustomProtocolManager*);
+#if PLATFORM(COCOA)
+ static void setSourceApplicationAuditTokenData(RetainPtr<CFDataRef>&&);
+#endif
#if !USE(CREDENTIAL_STORAGE_WITH_NETWORK_SESSION)
void clearCredentials();
Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkProcessCocoa.mm (198456 => 198457)
--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2016-03-19 00:04:03 UTC (rev 198456)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2016-03-19 00:05:17 UTC (rev 198457)
@@ -179,6 +179,19 @@
#endif
}
+RetainPtr<CFDataRef> NetworkProcess::sourceApplicationAuditData() const
+{
+#if PLATFORM(IOS)
+ audit_token_t auditToken;
+ ASSERT(parentProcessConnection());
+ if (!parentProcessConnection() || !parentProcessConnection()->getAuditToken(auditToken))
+ return nullptr;
+ return adoptCF(CFDataCreate(nullptr, (const UInt8*)&auditToken, sizeof(auditToken)));
+#else
+ return nullptr;
+#endif
+}
+
Vector<Ref<WebCore::SecurityOrigin>> NetworkProcess::cfURLCacheOrigins()
{
Vector<Ref<WebCore::SecurityOrigin>> result;
Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm (198456 => 198457)
--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm 2016-03-19 00:04:03 UTC (rev 198456)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm 2016-03-19 00:05:17 UTC (rev 198457)
@@ -276,10 +276,21 @@
return customProtocolManager.get();
}
+static RetainPtr<CFDataRef>& globalSourceApplicationAuditTokenData()
+{
+ static NeverDestroyed<RetainPtr<CFDataRef>> sourceApplicationAuditTokenData;
+ return sourceApplicationAuditTokenData.get();
+}
+
void NetworkSession::setCustomProtocolManager(CustomProtocolManager* customProtocolManager)
{
globalCustomProtocolManager() = customProtocolManager;
}
+
+void NetworkSession::setSourceApplicationAuditTokenData(RetainPtr<CFDataRef>&& data)
+{
+ globalSourceApplicationAuditTokenData() = data;
+}
Ref<NetworkSession> NetworkSession::create(Type type, WebCore::SessionID sessionID, CustomProtocolManager* customProtocolManager, std::unique_ptr<WebCore::NetworkStorageSession> networkStorageSession)
{
@@ -301,6 +312,11 @@
NSURLSessionConfiguration *configuration = configurationForType(type);
+ if (auto& data = ""
+ configuration._sourceApplicationAuditTokenData = (NSData *)data.get();
+
+ configuration._sourceApplicationBundleIdentifier = SessionTracker::getIdentifierBase();
+
if (customProtocolManager)
customProtocolManager->registerProtocolClass(configuration);
Modified: trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm (198456 => 198457)
--- trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm 2016-03-19 00:04:03 UTC (rev 198456)
+++ trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm 2016-03-19 00:05:17 UTC (rev 198457)
@@ -67,14 +67,7 @@
RetainPtr<CFDataRef> RemoteNetworkingContext::sourceApplicationAuditData() const
{
-#if PLATFORM(IOS)
- audit_token_t auditToken;
- if (!NetworkProcess::singleton().parentProcessConnection()->getAuditToken(auditToken))
- return nullptr;
- return adoptCF(CFDataCreate(0, (const UInt8*)&auditToken, sizeof(auditToken)));
-#else
- return nullptr;
-#endif
+ return NetworkProcess::singleton().sourceApplicationAuditData();
}
String RemoteNetworkingContext::sourceApplicationIdentifier() const
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm (198456 => 198457)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm 2016-03-19 00:04:03 UTC (rev 198456)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm 2016-03-19 00:05:17 UTC (rev 198457)
@@ -93,14 +93,7 @@
RetainPtr<CFDataRef> WebFrameNetworkingContext::sourceApplicationAuditData() const
{
-#if PLATFORM(IOS)
- audit_token_t auditToken;
- if (!WebProcess::singleton().parentProcessConnection()->getAuditToken(auditToken))
- return nullptr;
- return adoptCF(CFDataCreate(0, (const UInt8*)&auditToken, sizeof(auditToken)));
-#else
- return nullptr;
-#endif
+ return WebProcess::singleton().sourceApplicationAuditData();
}
String WebFrameNetworkingContext::sourceApplicationIdentifier() const
Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (198456 => 198457)
--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2016-03-19 00:04:03 UTC (rev 198456)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2016-03-19 00:05:17 UTC (rev 198457)
@@ -376,6 +376,10 @@
}
#endif
+#if USE(NETWORK_SESSION)
+ NetworkSession::setSourceApplicationAuditTokenData(sourceApplicationAuditData());
+#endif
+
#if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC)
for (auto hostIter = parameters.pluginLoadClientPolicies.begin(); hostIter != parameters.pluginLoadClientPolicies.end(); ++hostIter) {
for (auto bundleIdentifierIter = hostIter->value.begin(); bundleIdentifierIter != hostIter->value.end(); ++bundleIdentifierIter) {
Modified: trunk/Source/WebKit2/WebProcess/WebProcess.h (198456 => 198457)
--- trunk/Source/WebKit2/WebProcess/WebProcess.h 2016-03-19 00:04:03 UTC (rev 198456)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.h 2016-03-19 00:05:17 UTC (rev 198457)
@@ -174,6 +174,7 @@
void statisticsChangedTimerFired();
#if PLATFORM(COCOA)
+ RetainPtr<CFDataRef> sourceApplicationAuditData() const;
void destroyRenderingResources();
#endif
Modified: trunk/Source/WebKit2/WebProcess/cocoa/WebProcessCocoa.mm (198456 => 198457)
--- trunk/Source/WebKit2/WebProcess/cocoa/WebProcessCocoa.mm 2016-03-19 00:04:03 UTC (rev 198456)
+++ trunk/Source/WebKit2/WebProcess/cocoa/WebProcessCocoa.mm 2016-03-19 00:05:17 UTC (rev 198457)
@@ -304,6 +304,19 @@
{
}
+RetainPtr<CFDataRef> WebProcess::sourceApplicationAuditData() const
+{
+#if PLATFORM(IOS)
+ audit_token_t auditToken;
+ ASSERT(parentProcessConnection());
+ if (!parentProcessConnection() || !parentProcessConnection()->getAuditToken(auditToken))
+ return nullptr;
+ return adoptCF(CFDataCreate(nullptr, (const UInt8*)&auditToken, sizeof(auditToken)));
+#else
+ return nullptr;
+#endif
+}
+
void WebProcess::initializeSandbox(const ChildProcessInitializationParameters& parameters, SandboxInitializationParameters& sandboxParameters)
{
#if ENABLE(WEB_PROCESS_SANDBOX)