Title: [198457] trunk/Source
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)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to