Title: [223791] trunk/Source
Revision
223791
Author
[email protected]
Date
2017-10-20 13:39:34 -0700 (Fri, 20 Oct 2017)

Log Message

Expose _boundInterfaceIdentifier and _allowsCellularAccess to WKWebsiteDataStorePrivate
https://bugs.webkit.org/show_bug.cgi?id=178418
<rdar://problem/29599569>

Patch by Alex Christensen <[email protected]> on 2017-10-20
Reviewed by Tim Horton.
Source/WebCore/PAL:

* pal/spi/cf/CFNetworkSPI.h:

Source/WebKit:

In r213747 I introduced allowsCellularAccess to _WKProcessPoolConfiguration because there
was no way to add parameters to the default (and other) NetworkSession constructors.  Since
clients have not adopted this SPI, we can introduce such a way in NetworkSessionCreationParameters
and move the SPI to WKWebsiteDataStore, which is where it and other NetworkSession properties
ought to be instead of making them WKProcessPool global.

We also need to expose access to NSURLRequest.boundInterfaceIdentifier.  Instead of serializing and
deserializing that property for each NSURLRequest and then having subresources mysteriously jump back
to having no bound interface identifiers, I'm adding this to WKWebsiteDataStore, too, to make it a
session networking property.

I manually verified that these properties are being set properly with a custom test app and added logs.
Unfortunately, these properties don't do anything under circumstances anywhere close to what we test.
The architecture change of having NetworkSessionCreationParameters is verified to not have a change in
behavior by existing tests, such as any test that uses TestProtocol (which we should eventually remove).

* NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::ensureLegacyPrivateBrowsingSession):
* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::NetworkProcess):
(WebKit::NetworkProcess::initializeNetworkProcess):
(WebKit::NetworkProcess::clearCachedCredentials):
* NetworkProcess/NetworkProcessCreationParameters.cpp:
(WebKit::NetworkProcessCreationParameters::encode const):
(WebKit::NetworkProcessCreationParameters::decode):
* NetworkProcess/NetworkProcessCreationParameters.h:
* NetworkProcess/NetworkSession.cpp:
(WebKit::NetworkSession::create):
(WebKit::NetworkSession::defaultSession): Deleted.
* NetworkProcess/NetworkSession.h:
* NetworkProcess/NetworkSessionCreationParameters.h: Added.
(WebKit::NetworkSessionCreationParameters::encode const):
(WebKit::NetworkSessionCreationParameters::decode):
* NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
(WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
* NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
(WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
* NetworkProcess/cocoa/NetworkProcessCocoa.mm:
(WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
* NetworkProcess/cocoa/NetworkSessionCocoa.h:
* NetworkProcess/cocoa/NetworkSessionCocoa.mm:
(WebKit::NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier):
(WebKit::NetworkSessionCocoa::create):
(WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
(WebKit::NetworkSessionCocoa::setLegacyCustomProtocolManager): Deleted.
(WebKit::NetworkSessionCocoa::setAllowsCellularAccess): Deleted.
(WebKit::NetworkSessionCocoa::defaultSession): Deleted.
* NetworkProcess/mac/RemoteNetworkingContext.mm:
(WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
(WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
* Shared/SessionTracker.cpp:
(WebKit::SessionTracker::networkSession):
(WebKit::SessionTracker::setSession):
* Shared/WebsiteDataStoreParameters.cpp:
(WebKit::WebsiteDataStoreParameters::encode const):
(WebKit::WebsiteDataStoreParameters::decode):
* Shared/WebsiteDataStoreParameters.h:
* UIProcess/API/APIProcessPoolConfiguration.cpp:
(API::ProcessPoolConfiguration::copy):
* UIProcess/API/APIProcessPoolConfiguration.h:
* UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
(-[WKWebsiteDataStore _setBoundInterfaceIdentifier:]):
(-[WKWebsiteDataStore _boundInterfaceIdentifier]):
(-[WKWebsiteDataStore _setAllowsCellularAccess:]):
(-[WKWebsiteDataStore _allowsCellularAccess]):
* UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
* UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
(-[_WKProcessPoolConfiguration allowsCellularAccess]):
(-[_WKProcessPoolConfiguration setAllowsCellularAccess:]):
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::ensureNetworkProcess):
(WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
* UIProcess/WebsiteData/WebsiteDataStore.h:
(WebKit::WebsiteDataStore::setBoundInterfaceIdentifier):
(WebKit::WebsiteDataStore::boundInterfaceIdentifier):
(WebKit::WebsiteDataStore::setAllowsCellularAccess):
(WebKit::WebsiteDataStore::allowsCellularAccess):
* WebKit.xcodeproj/project.pbxproj:
* WebProcess/InjectedBundle/InjectedBundle.cpp:
(WebKit::InjectedBundle::setPrivateBrowsingEnabled):
* WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
* WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
(WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
(WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::ensurePrivateBrowsingSession):
(WebKit::WebProcess::clearCachedCredentials):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/PAL/ChangeLog (223790 => 223791)


--- trunk/Source/WebCore/PAL/ChangeLog	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebCore/PAL/ChangeLog	2017-10-20 20:39:34 UTC (rev 223791)
@@ -1,3 +1,13 @@
+2017-10-20  Alex Christensen  <[email protected]>
+
+        Expose _boundInterfaceIdentifier and _allowsCellularAccess to WKWebsiteDataStorePrivate
+        https://bugs.webkit.org/show_bug.cgi?id=178418
+        <rdar://problem/29599569>
+
+        Reviewed by Tim Horton.
+
+        * pal/spi/cf/CFNetworkSPI.h:
+
 2017-10-20  Antoine Quint  <[email protected]>
 
         [Web Animations] Provide basic timeline and animation interfaces

Modified: trunk/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h (223790 => 223791)


--- trunk/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h	2017-10-20 20:39:34 UTC (rev 223791)
@@ -101,6 +101,7 @@
 
 @interface NSMutableURLRequest ()
 - (void)setContentDispositionEncodingFallbackArray:(NSArray *)theEncodingFallbackArray;
+- (void)setBoundInterfaceIdentifier:(NSString *)identifier;
 @end
 
 @interface NSURLResponse ()

Modified: trunk/Source/WebKit/ChangeLog (223790 => 223791)


--- trunk/Source/WebKit/ChangeLog	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/ChangeLog	2017-10-20 20:39:34 UTC (rev 223791)
@@ -1,5 +1,101 @@
 2017-10-20  Alex Christensen  <[email protected]>
 
+        Expose _boundInterfaceIdentifier and _allowsCellularAccess to WKWebsiteDataStorePrivate
+        https://bugs.webkit.org/show_bug.cgi?id=178418
+        <rdar://problem/29599569>
+
+        Reviewed by Tim Horton.
+        
+        In r213747 I introduced allowsCellularAccess to _WKProcessPoolConfiguration because there
+        was no way to add parameters to the default (and other) NetworkSession constructors.  Since
+        clients have not adopted this SPI, we can introduce such a way in NetworkSessionCreationParameters
+        and move the SPI to WKWebsiteDataStore, which is where it and other NetworkSession properties
+        ought to be instead of making them WKProcessPool global.
+
+        We also need to expose access to NSURLRequest.boundInterfaceIdentifier.  Instead of serializing and
+        deserializing that property for each NSURLRequest and then having subresources mysteriously jump back
+        to having no bound interface identifiers, I'm adding this to WKWebsiteDataStore, too, to make it a
+        session networking property.
+        
+        I manually verified that these properties are being set properly with a custom test app and added logs.
+        Unfortunately, these properties don't do anything under circumstances anywhere close to what we test.
+        The architecture change of having NetworkSessionCreationParameters is verified to not have a change in
+        behavior by existing tests, such as any test that uses TestProtocol (which we should eventually remove).
+
+        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+        (WebKit::NetworkConnectionToWebProcess::ensureLegacyPrivateBrowsingSession):
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::NetworkProcess):
+        (WebKit::NetworkProcess::initializeNetworkProcess):
+        (WebKit::NetworkProcess::clearCachedCredentials):
+        * NetworkProcess/NetworkProcessCreationParameters.cpp:
+        (WebKit::NetworkProcessCreationParameters::encode const):
+        (WebKit::NetworkProcessCreationParameters::decode):
+        * NetworkProcess/NetworkProcessCreationParameters.h:
+        * NetworkProcess/NetworkSession.cpp:
+        (WebKit::NetworkSession::create):
+        (WebKit::NetworkSession::defaultSession): Deleted.
+        * NetworkProcess/NetworkSession.h:
+        * NetworkProcess/NetworkSessionCreationParameters.h: Added.
+        (WebKit::NetworkSessionCreationParameters::encode const):
+        (WebKit::NetworkSessionCreationParameters::decode):
+        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
+        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
+        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
+        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
+        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
+        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
+        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
+        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
+        (WebKit::NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier):
+        (WebKit::NetworkSessionCocoa::create):
+        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
+        (WebKit::NetworkSessionCocoa::setLegacyCustomProtocolManager): Deleted.
+        (WebKit::NetworkSessionCocoa::setAllowsCellularAccess): Deleted.
+        (WebKit::NetworkSessionCocoa::defaultSession): Deleted.
+        * NetworkProcess/mac/RemoteNetworkingContext.mm:
+        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
+        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
+        * Shared/SessionTracker.cpp:
+        (WebKit::SessionTracker::networkSession):
+        (WebKit::SessionTracker::setSession):
+        * Shared/WebsiteDataStoreParameters.cpp:
+        (WebKit::WebsiteDataStoreParameters::encode const):
+        (WebKit::WebsiteDataStoreParameters::decode):
+        * Shared/WebsiteDataStoreParameters.h:
+        * UIProcess/API/APIProcessPoolConfiguration.cpp:
+        (API::ProcessPoolConfiguration::copy):
+        * UIProcess/API/APIProcessPoolConfiguration.h:
+        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
+        (-[WKWebsiteDataStore _setBoundInterfaceIdentifier:]):
+        (-[WKWebsiteDataStore _boundInterfaceIdentifier]):
+        (-[WKWebsiteDataStore _setAllowsCellularAccess:]):
+        (-[WKWebsiteDataStore _allowsCellularAccess]):
+        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
+        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
+        (-[_WKProcessPoolConfiguration allowsCellularAccess]):
+        (-[_WKProcessPoolConfiguration setAllowsCellularAccess:]):
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::ensureNetworkProcess):
+        (WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
+        * UIProcess/WebsiteData/WebsiteDataStore.h:
+        (WebKit::WebsiteDataStore::setBoundInterfaceIdentifier):
+        (WebKit::WebsiteDataStore::boundInterfaceIdentifier):
+        (WebKit::WebsiteDataStore::setAllowsCellularAccess):
+        (WebKit::WebsiteDataStore::allowsCellularAccess):
+        * WebKit.xcodeproj/project.pbxproj:
+        * WebProcess/InjectedBundle/InjectedBundle.cpp:
+        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
+        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
+        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
+        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
+        (WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::ensurePrivateBrowsingSession):
+        (WebKit::WebProcess::clearCachedCredentials):
+
+2017-10-20  Alex Christensen  <[email protected]>
+
         Add ObjC SPI to _WKDownloadDelegate missing from WKContextDownloadClient
         https://bugs.webkit.org/show_bug.cgi?id=178566
         <rdar://problem/23041906>

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -468,7 +468,7 @@
 
 void NetworkConnectionToWebProcess::ensureLegacyPrivateBrowsingSession()
 {
-    NetworkProcess::singleton().ensurePrivateBrowsingSession({PAL::SessionID::legacyPrivateSessionID(), { }, { }, { }, { }, WebsiteDataStore::defaultCacheStoragePerOriginQuota, { }});
+    NetworkProcess::singleton().ensurePrivateBrowsingSession({ { }, { }, { }, { }, WebsiteDataStore::defaultCacheStoragePerOriginQuota, { }, { PAL::SessionID::legacyPrivateSessionID(), { }, { }, AllowsCellularAccess::Yes }});
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -115,9 +115,6 @@
     addSupplement<AuthenticationManager>();
     addSupplement<WebCookieManager>();
     addSupplement<LegacyCustomProtocolManager>();
-#if USE(NETWORK_SESSION) && PLATFORM(COCOA)
-    NetworkSessionCocoa::setLegacyCustomProtocolManager(supplement<LegacyCustomProtocolManager>());
-#endif
 }
 
 NetworkProcess::~NetworkProcess()
@@ -241,11 +238,16 @@
 
     // FIXME: instead of handling this here, a message should be sent later (scales to multiple sessions)
     if (parameters.privateBrowsingEnabled)
-        RemoteNetworkingContext::ensurePrivateBrowsingSession({PAL::SessionID::legacyPrivateSessionID(), { }, { }, { }, { }, WebsiteDataStore::defaultCacheStoragePerOriginQuota, { }});
+        RemoteNetworkingContext::ensurePrivateBrowsingSession({ { }, { }, { }, { }, WebsiteDataStore::defaultCacheStoragePerOriginQuota, { }, { PAL::SessionID::legacyPrivateSessionID(), { }, { },  AllowsCellularAccess::Yes }});
 
     if (parameters.shouldUseTestingNetworkSession)
         NetworkStorageSession::switchToNewTestingSession();
 
+#if USE(NETWORK_SESSION)
+    parameters.defaultSessionParameters.legacyCustomProtocolManager = supplement<LegacyCustomProtocolManager>();
+    SessionTracker::setSession(PAL::SessionID::defaultSessionID(), NetworkSession::create(WTFMove(parameters.defaultSessionParameters)));
+#endif
+
     for (auto& supplement : m_supplements.values())
         supplement->initialize(parameters);
 }
@@ -288,7 +290,10 @@
 {
     NetworkStorageSession::defaultStorageSession().credentialStorage().clearCredentials();
 #if USE(NETWORK_SESSION)
-    NetworkSession::defaultSession().clearCredentials();
+    if (auto* networkSession = SessionTracker::networkSession(PAL::SessionID::defaultSessionID()))
+        networkSession->clearCredentials();
+    else
+        ASSERT_NOT_REACHED();
 #endif
 }
 

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -41,6 +41,7 @@
 
 void NetworkProcessCreationParameters::encode(IPC::Encoder& encoder) const
 {
+    encoder << defaultSessionParameters;
     encoder << privateBrowsingEnabled;
     encoder.encodeEnum(cacheModel);
     encoder << diskCacheSizeOverride;
@@ -75,7 +76,6 @@
     encoder << nsURLCacheDiskCapacity;
     encoder << sourceApplicationBundleIdentifier;
     encoder << sourceApplicationSecondaryIdentifier;
-    encoder << allowsCellularAccess;
 #if PLATFORM(IOS)
     encoder << ctDataConnectionServiceType;
 #endif
@@ -105,6 +105,12 @@
 
 bool NetworkProcessCreationParameters::decode(IPC::Decoder& decoder, NetworkProcessCreationParameters& result)
 {
+    std::optional<NetworkSessionCreationParameters> defaultSessionParameters;
+    decoder >> defaultSessionParameters;
+    if (!defaultSessionParameters)
+        return false;
+    result.defaultSessionParameters = WTFMove(*defaultSessionParameters);
+
     if (!decoder.decode(result.privateBrowsingEnabled))
         return false;
     if (!decoder.decodeEnum(result.cacheModel))
@@ -166,8 +172,6 @@
         return false;
     if (!decoder.decode(result.sourceApplicationSecondaryIdentifier))
         return false;
-    if (!decoder.decode(result.allowsCellularAccess))
-        return false;
 #if PLATFORM(IOS)
     if (!decoder.decode(result.ctDataConnectionServiceType))
         return false;

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h	2017-10-20 20:39:34 UTC (rev 223791)
@@ -27,6 +27,7 @@
 
 #include "Attachment.h"
 #include "CacheModel.h"
+#include "NetworkSessionCreationParameters.h"
 #include "SandboxExtension.h"
 #include <wtf/ProcessID.h>
 #include <wtf/Vector.h>
@@ -50,6 +51,7 @@
     void encode(IPC::Encoder&) const;
     static bool decode(IPC::Decoder&, NetworkProcessCreationParameters&);
 
+    NetworkSessionCreationParameters defaultSessionParameters;
     bool privateBrowsingEnabled { false };
     CacheModel cacheModel { CacheModelDocumentViewer };
     int64_t diskCacheSizeOverride { -1 };
@@ -87,7 +89,6 @@
     uint64_t nsURLCacheDiskCapacity;
     String sourceApplicationBundleIdentifier;
     String sourceApplicationSecondaryIdentifier;
-    bool allowsCellularAccess { true };
 #if PLATFORM(IOS)
     String ctDataConnectionServiceType;
 #endif

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -45,28 +45,16 @@
 
 namespace WebKit {
 
-Ref<NetworkSession> NetworkSession::create(PAL::SessionID sessionID, LegacyCustomProtocolManager* customProtocolManager)
+Ref<NetworkSession> NetworkSession::create(NetworkSessionCreationParameters&& parameters)
 {
 #if PLATFORM(COCOA)
-    return NetworkSessionCocoa::create(sessionID, customProtocolManager);
+    return NetworkSessionCocoa::create(WTFMove(parameters));
 #endif
 #if USE(SOUP)
-    UNUSED_PARAM(customProtocolManager);
-    return NetworkSessionSoup::create(sessionID);
+    return NetworkSessionSoup::create(WTFMove(parameters));
 #endif
 }
 
-NetworkSession& NetworkSession::defaultSession()
-{
-#if PLATFORM(COCOA)
-    return NetworkSessionCocoa::defaultSession();
-#else
-    ASSERT(RunLoop::isMain());
-    static NetworkSession* session = &NetworkSession::create(PAL::SessionID::defaultSessionID()).leakRef();
-    return *session;
-#endif
-}
-
 NetworkStorageSession& NetworkSession::networkStorageSession() const
 {
     auto* storageSession = NetworkStorageSession::storageSession(m_sessionID);

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.h (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/NetworkSession.h	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.h	2017-10-20 20:39:34 UTC (rev 223791)
@@ -39,13 +39,12 @@
 
 namespace WebKit {
 
-class LegacyCustomProtocolManager;
 class NetworkDataTask;
+struct NetworkSessionCreationParameters;
 
 class NetworkSession : public RefCounted<NetworkSession> {
 public:
-    static Ref<NetworkSession> create(PAL::SessionID, LegacyCustomProtocolManager* = nullptr);
-    static NetworkSession& defaultSession();
+    static Ref<NetworkSession> create(NetworkSessionCreationParameters&&);
     virtual ~NetworkSession();
 
     virtual void invalidateAndCancel();

Added: trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h (0 => 223791)


--- trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h	                        (rev 0)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h	2017-10-20 20:39:34 UTC (rev 223791)
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "ArgumentCoders.h"
+#include <pal/SessionID.h>
+#include <wtf/EnumTraits.h>
+#include <wtf/text/WTFString.h>
+
+namespace WebKit {
+
+class LegacyCustomProtocolManager;
+
+enum class AllowsCellularAccess { No, Yes };
+    
+struct NetworkSessionCreationParameters {
+    void encode(IPC::Encoder&) const;
+    static std::optional<NetworkSessionCreationParameters> decode(IPC::Decoder&);
+    
+    PAL::SessionID sessionID { PAL::SessionID::defaultSessionID() };
+    LegacyCustomProtocolManager* legacyCustomProtocolManager { nullptr };
+    String boundInterfaceIdentifier;
+    AllowsCellularAccess allowsCellularAccess { AllowsCellularAccess::Yes };
+};
+
+inline void NetworkSessionCreationParameters::encode(IPC::Encoder& encoder) const
+{
+    encoder << sessionID;
+    encoder << boundInterfaceIdentifier;
+    encoder << allowsCellularAccess;
+}
+
+inline std::optional<NetworkSessionCreationParameters> NetworkSessionCreationParameters::decode(IPC::Decoder& decoder)
+{
+    PAL::SessionID sessionID;
+    if (!decoder.decode(sessionID))
+        return std::nullopt;
+
+    std::optional<String> boundInterfaceIdentifier;
+    decoder >> boundInterfaceIdentifier;
+    if (!boundInterfaceIdentifier)
+        return std::nullopt;
+
+    std::optional<AllowsCellularAccess> allowsCellularAccess;
+    decoder >> allowsCellularAccess;
+    if (!allowsCellularAccess)
+        return std::nullopt;
+
+    return {{ sessionID, nullptr, WTFMove(*boundInterfaceIdentifier), WTFMove(*allowsCellularAccess) }};
+}
+
+} // namespace WebKit
+
+namespace WTF {
+template<> struct EnumTraits<WebKit::AllowsCellularAccess> {
+    using values = EnumValues<
+        WebKit::AllowsCellularAccess,
+        WebKit::AllowsCellularAccess::No,
+        WebKit::AllowsCellularAccess::Yes
+    >;
+};
+}

Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -32,6 +32,7 @@
 #include "NetworkCache.h"
 #include "NetworkLoad.h"
 #include "NetworkSession.h"
+#include "SessionTracker.h"
 #include <pal/SessionID.h>
 #include <wtf/CurrentTime.h>
 #include <wtf/RunLoop.h>
@@ -57,7 +58,7 @@
     parameters.contentSniffingPolicy = DoNotSniffContent;
     parameters.request = m_originalRequest;
 #if USE(NETWORK_SESSION)
-    m_networkLoad = std::make_unique<NetworkLoad>(*this, WTFMove(parameters), NetworkSession::defaultSession());
+    m_networkLoad = std::make_unique<NetworkLoad>(*this, WTFMove(parameters), *SessionTracker::networkSession(PAL::SessionID::defaultSessionID()));
 #else
     m_networkLoad = std::make_unique<NetworkLoad>(*this, WTFMove(parameters));
 #endif

Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm	2017-10-20 20:39:34 UTC (rev 223791)
@@ -116,6 +116,12 @@
         m_storedCredentialsPolicy = WebCore::StoredCredentialsPolicy::DoNotUse;
     }
 
+    if (!cocoaSession.m_boundInterfaceIdentifier.isNull()) {
+        NSMutableURLRequest *mutableRequest = [[nsRequest mutableCopy] autorelease];
+        [mutableRequest setBoundInterfaceIdentifier:cocoaSession.m_boundInterfaceIdentifier];
+        nsRequest = mutableRequest;
+    }
+
     if (storedCredentialsPolicy == WebCore::StoredCredentialsPolicy::Use) {
         m_task = [cocoaSession.m_sessionWithCredentialStorage dataTaskWithRequest:nsRequest];
         ASSERT(!cocoaSession.m_dataTaskMapWithCredentials.contains([m_task taskIdentifier]));

Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm	2017-10-20 20:39:34 UTC (rev 223791)
@@ -83,7 +83,6 @@
     NetworkSessionCocoa::setSourceApplicationAuditTokenData(sourceApplicationAuditData());
     NetworkSessionCocoa::setSourceApplicationBundleIdentifier(parameters.sourceApplicationBundleIdentifier);
     NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier(parameters.sourceApplicationSecondaryIdentifier);
-    NetworkSessionCocoa::setAllowsCellularAccess(parameters.allowsCellularAccess);
     NetworkSessionCocoa::setUsesNetworkCache(parameters.shouldEnableNetworkCache);
 #if PLATFORM(IOS)
     NetworkSessionCocoa::setCTDataConnectionServiceType(parameters.ctDataConnectionServiceType);

Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h	2017-10-20 20:39:34 UTC (rev 223791)
@@ -41,19 +41,19 @@
 
 namespace WebKit {
 
+class LegacyCustomProtocolManager;
+
 class NetworkSessionCocoa final : public NetworkSession {
     friend class NetworkDataTaskCocoa;
 public:
-    static Ref<NetworkSession> create(PAL::SessionID, LegacyCustomProtocolManager*);
-    static NetworkSession& defaultSession();
+    static Ref<NetworkSession> create(NetworkSessionCreationParameters&&);
     ~NetworkSessionCocoa();
 
     // Must be called before any NetworkSession has been created.
-    static void setLegacyCustomProtocolManager(LegacyCustomProtocolManager*);
+    // FIXME: Move these to NetworkSessionCreationParameters.
     static void setSourceApplicationAuditTokenData(RetainPtr<CFDataRef>&&);
     static void setSourceApplicationBundleIdentifier(const String&);
     static void setSourceApplicationSecondaryIdentifier(const String&);
-    static void setAllowsCellularAccess(bool);
     static void setUsesNetworkCache(bool);
 #if PLATFORM(IOS)
     static void setCTDataConnectionServiceType(const String&);
@@ -69,7 +69,7 @@
     static bool allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&);
 
 private:
-    NetworkSessionCocoa(PAL::SessionID, LegacyCustomProtocolManager*);
+    NetworkSessionCocoa(NetworkSessionCreationParameters&&);
 
     void invalidateAndCancel() override;
     void clearCredentials() override;
@@ -82,6 +82,8 @@
     RetainPtr<WKNetworkSessionDelegate> m_sessionWithCredentialStorageDelegate;
     RetainPtr<NSURLSession> m_statelessSession;
     RetainPtr<WKNetworkSessionDelegate> m_statelessSessionDelegate;
+
+    String m_boundInterfaceIdentifier;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm	2017-10-20 20:39:34 UTC (rev 223791)
@@ -35,6 +35,7 @@
 #import "Logging.h"
 #import "NetworkLoad.h"
 #import "NetworkProcess.h"
+#import "NetworkSessionCreationParameters.h"
 #import "SessionTracker.h"
 #import <Foundation/NSURLSession.h>
 #import <WebCore/Credential.h>
@@ -483,9 +484,7 @@
 
 namespace WebKit {
     
-static bool allowsCellularAccess { true };
 static bool usesNetworkCache { false };
-static LegacyCustomProtocolManager* legacyCustomProtocolManager;
 
 #if !ASSERT_DISABLED
 static bool sessionsCreated = false;
@@ -526,12 +525,6 @@
     return ctDataConnectionServiceType.get();
 }
 #endif
-
-void NetworkSessionCocoa::setLegacyCustomProtocolManager(LegacyCustomProtocolManager* customProtocolManager)
-{
-    ASSERT(!sessionsCreated);
-    legacyCustomProtocolManager = customProtocolManager;
-}
     
 void NetworkSessionCocoa::setSourceApplicationAuditTokenData(RetainPtr<CFDataRef>&& data)
 {
@@ -550,11 +543,6 @@
     ASSERT(!sessionsCreated);
     globalSourceApplicationSecondaryIdentifier() = identifier;
 }
-    
-void NetworkSessionCocoa::setAllowsCellularAccess(bool value)
-{
-    allowsCellularAccess = value;
-}
 
 void NetworkSessionCocoa::setUsesNetworkCache(bool value)
 {
@@ -569,21 +557,15 @@
 }
 #endif
 
-Ref<NetworkSession> NetworkSessionCocoa::create(PAL::SessionID sessionID, LegacyCustomProtocolManager* customProtocolManager)
+Ref<NetworkSession> NetworkSessionCocoa::create(NetworkSessionCreationParameters&& parameters)
 {
-    return adoptRef(*new NetworkSessionCocoa(sessionID, customProtocolManager));
+    return adoptRef(*new NetworkSessionCocoa(WTFMove(parameters)));
 }
 
-NetworkSession& NetworkSessionCocoa::defaultSession()
+NetworkSessionCocoa::NetworkSessionCocoa(NetworkSessionCreationParameters&& parameters)
+    : NetworkSession(parameters.sessionID)
+    , m_boundInterfaceIdentifier(parameters.boundInterfaceIdentifier)
 {
-    ASSERT(RunLoop::isMain());
-    static NetworkSession* session = &NetworkSessionCocoa::create(PAL::SessionID::defaultSessionID(), legacyCustomProtocolManager).leakRef();
-    return *session;
-}
-
-NetworkSessionCocoa::NetworkSessionCocoa(PAL::SessionID sessionID, LegacyCustomProtocolManager* customProtocolManager)
-    : NetworkSession(sessionID)
-{
     relaxAdoptionRequirement();
 
 #if !ASSERT_DISABLED
@@ -598,7 +580,7 @@
         configuration._suppressedAutoAddedHTTPHeaders = [NSSet setWithObject:@"Content-Type"];
 #endif
 
-    if (!allowsCellularAccess)
+    if (parameters.allowsCellularAccess == AllowsCellularAccess::No)
         configuration.allowsCellularAccess = NO;
 
     if (usesNetworkCache)
@@ -623,8 +605,8 @@
         configuration._CTDataConnectionServiceType = ctDataConnectionServiceType;
 #endif
 
-    if (customProtocolManager)
-        customProtocolManager->registerProtocolClass(configuration);
+    if (parameters.legacyCustomProtocolManager)
+        parameters.legacyCustomProtocolManager->registerProtocolClass(configuration);
     
 #if HAVE(TIMINGDATAOPTIONS)
     configuration._timingDataOptions = _TimingDataOptionsEnableW3CNavigationTiming;
@@ -632,7 +614,7 @@
     setCollectsTimingData();
 #endif
 
-    auto* storageSession = WebCore::NetworkStorageSession::storageSession(sessionID);
+    auto* storageSession = WebCore::NetworkStorageSession::storageSession(parameters.sessionID);
     RELEASE_ASSERT(storageSession);
     if (CFHTTPCookieStorageRef storage = storageSession->cookieStorage().get())
         configuration.HTTPCookieStorage = [[[NSHTTPCookieStorage alloc] _initWithCFHTTPCookieStorage:storage] autorelease];

Modified: trunk/Source/WebKit/NetworkProcess/mac/RemoteNetworkingContext.mm (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/mac/RemoteNetworkingContext.mm	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/mac/RemoteNetworkingContext.mm	2017-10-20 20:39:34 UTC (rev 223791)
@@ -30,6 +30,7 @@
 #import "LegacyCustomProtocolManager.h"
 #import "NetworkProcess.h"
 #import "NetworkSession.h"
+#import "NetworkSessionCreationParameters.h"
 #import "SessionTracker.h"
 #import "WebErrors.h"
 #import "WebsiteDataStoreParameters.h"
@@ -82,9 +83,10 @@
 
 void RemoteNetworkingContext::ensurePrivateBrowsingSession(WebsiteDataStoreParameters&& parameters)
 {
-    ASSERT(parameters.sessionID.isEphemeral());
+    auto sessionID = parameters.networkSessionParameters.sessionID;
+    ASSERT(sessionID.isEphemeral());
 
-    if (NetworkStorageSession::storageSession(parameters.sessionID))
+    if (NetworkStorageSession::storageSession(sessionID))
         return;
 
     String base;
@@ -93,21 +95,22 @@
     else
         base = SessionTracker::getIdentifierBase();
 
-    NetworkStorageSession::ensurePrivateBrowsingSession(parameters.sessionID, base + '.' + String::number(parameters.sessionID.sessionID()));
+    NetworkStorageSession::ensurePrivateBrowsingSession(sessionID, base + '.' + String::number(sessionID.sessionID()));
 
-    auto* session = NetworkStorageSession::storageSession(parameters.sessionID);
+    auto* session = NetworkStorageSession::storageSession(sessionID);
     for (const auto& cookie : parameters.pendingCookies)
         session->setCookie(cookie);
 
 #if USE(NETWORK_SESSION)
-    auto networkSession = NetworkSession::create(parameters.sessionID, NetworkProcess::singleton().supplement<LegacyCustomProtocolManager>());
-    SessionTracker::setSession(parameters.sessionID, WTFMove(networkSession));
+    parameters.networkSessionParameters.legacyCustomProtocolManager = NetworkProcess::singleton().supplement<LegacyCustomProtocolManager>();
+    SessionTracker::setSession(sessionID, NetworkSession::create(WTFMove(parameters.networkSessionParameters)));
 #endif
 }
 
 void RemoteNetworkingContext::ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&& parameters)
 {
-    if (NetworkStorageSession::storageSession(parameters.sessionID))
+    auto sessionID = parameters.networkSessionParameters.sessionID;
+    if (NetworkStorageSession::storageSession(sessionID))
         return;
 
     String base;
@@ -122,9 +125,9 @@
     if (!parameters.uiProcessCookieStorageIdentifier.isEmpty())
         uiProcessCookieStorage = cookieStorageFromIdentifyingData(parameters.uiProcessCookieStorageIdentifier);
 
-    NetworkStorageSession::ensureSession(parameters.sessionID, base + '.' + String::number(parameters.sessionID.sessionID()), WTFMove(uiProcessCookieStorage));
+    NetworkStorageSession::ensureSession(sessionID, base + '.' + String::number(sessionID.sessionID()), WTFMove(uiProcessCookieStorage));
 
-    auto* session = NetworkStorageSession::storageSession(parameters.sessionID);
+    auto* session = NetworkStorageSession::storageSession(sessionID);
     for (const auto& cookie : parameters.pendingCookies)
         session->setCookie(cookie);
 
@@ -135,8 +138,8 @@
     }
 
 #if USE(NETWORK_SESSION)
-    auto networkSession = NetworkSession::create(parameters.sessionID, NetworkProcess::singleton().supplement<LegacyCustomProtocolManager>());
-    SessionTracker::setSession(parameters.sessionID, WTFMove(networkSession));
+    parameters.networkSessionParameters.legacyCustomProtocolManager = NetworkProcess::singleton().supplement<LegacyCustomProtocolManager>();
+    SessionTracker::setSession(sessionID, NetworkSession::create(WTFMove(parameters.networkSessionParameters)));
 #endif
 }
 

Modified: trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -27,6 +27,7 @@
 #include "NetworkSessionSoup.h"
 
 #include "NetworkProcess.h"
+#include "NetworkSessionCreationParameters.h"
 #include "WebCookieManager.h"
 #include <WebCore/NetworkStorageSession.h>
 #include <WebCore/SoupNetworkSession.h>
@@ -36,8 +37,8 @@
 
 namespace WebKit {
 
-NetworkSessionSoup::NetworkSessionSoup(PAL::SessionID sessionID)
-    : NetworkSession(sessionID)
+NetworkSessionSoup::NetworkSessionSoup(NetworkSessionCreationParameters&& parameters)
+    : NetworkSession(parameters.sessionID)
 {
     networkStorageSession().setCookieObserverHandler([this] {
         NetworkProcess::singleton().supplement<WebCookieManager>()->notifyCookiesDidChange(m_sessionID);

Modified: trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.h (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.h	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.h	2017-10-20 20:39:34 UTC (rev 223791)
@@ -31,11 +31,13 @@
 
 namespace WebKit {
 
+struct NetworkSessionCreationParameters;
+
 class NetworkSessionSoup final : public NetworkSession {
 public:
-    static Ref<NetworkSession> create(PAL::SessionID sessionID)
+    static Ref<NetworkSession> create(NetworkSessionCreationParameters&& parameters)
     {
-        return adoptRef(*new NetworkSessionSoup(sessionID));
+        return adoptRef(*new NetworkSessionSoup(WTFMove(parameters)));
     }
     ~NetworkSessionSoup();
 
@@ -42,7 +44,7 @@
     SoupSession* soupSession() const;
 
 private:
-    NetworkSessionSoup(PAL::SessionID);
+    NetworkSessionSoup(NetworkSessionCreationParameters&&);
 
     void clearCredentials() override;
 };

Modified: trunk/Source/WebKit/NetworkProcess/soup/RemoteNetworkingContextSoup.cpp (223790 => 223791)


--- trunk/Source/WebKit/NetworkProcess/soup/RemoteNetworkingContextSoup.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/NetworkProcess/soup/RemoteNetworkingContextSoup.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -50,13 +50,14 @@
 
 void RemoteNetworkingContext::ensurePrivateBrowsingSession(WebsiteDataStoreParameters&& parameters)
 {
-    ASSERT(parameters.sessionID.isEphemeral());
+    auto sessionID = parameters.networkSessionParameters.sessionID;
+    ASSERT(sessionID.isEphemeral());
 
-    if (NetworkStorageSession::storageSession(parameters.sessionID))
+    if (NetworkStorageSession::storageSession(sessionID))
         return;
 
-    NetworkStorageSession::ensurePrivateBrowsingSession(parameters.sessionID, String::number(parameters.sessionID.sessionID()));
-    SessionTracker::setSession(parameters.sessionID, NetworkSession::create(parameters.sessionID));
+    NetworkStorageSession::ensurePrivateBrowsingSession(sessionID, String::number(sessionID.sessionID()));
+    SessionTracker::setSession(sessionID, NetworkSession::create(WTFMove(parameters.networkSessionParameters)));
 }
 
 void RemoteNetworkingContext::ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&&)

Modified: trunk/Source/WebKit/Shared/SessionTracker.cpp (223790 => 223791)


--- trunk/Source/WebKit/Shared/SessionTracker.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/Shared/SessionTracker.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -66,14 +66,11 @@
 
 NetworkSession* SessionTracker::networkSession(PAL::SessionID sessionID)
 {
-    if (sessionID == PAL::SessionID::defaultSessionID())
-        return &NetworkSession::defaultSession();
     return staticSessionMap().get(sessionID);
 }
 
 void SessionTracker::setSession(PAL::SessionID sessionID, Ref<NetworkSession>&& session)
 {
-    ASSERT(sessionID != PAL::SessionID::defaultSessionID());
     staticSessionMap().set(sessionID, WTFMove(session));
 }
 #endif

Modified: trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.cpp (223790 => 223791)


--- trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -36,7 +36,7 @@
 
 void WebsiteDataStoreParameters::encode(IPC::Encoder& encoder) const
 {
-    encoder << sessionID;
+    encoder << networkSessionParameters;
     encoder << uiProcessCookieStorageIdentifier;
     encoder << cookieStoragePathExtensionHandle;
     encoder << pendingCookies;
@@ -47,8 +47,11 @@
 
 bool WebsiteDataStoreParameters::decode(IPC::Decoder& decoder, WebsiteDataStoreParameters& parameters)
 {
-    if (!decoder.decode(parameters.sessionID))
+    std::optional<NetworkSessionCreationParameters> networkSessionParameters;
+    decoder >> networkSessionParameters;
+    if (!networkSessionParameters)
         return false;
+    parameters.networkSessionParameters = WTFMove(*networkSessionParameters);
 
     if (!decoder.decode(parameters.uiProcessCookieStorageIdentifier))
         return false;

Modified: trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.h (223790 => 223791)


--- trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.h	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.h	2017-10-20 20:39:34 UTC (rev 223791)
@@ -25,6 +25,7 @@
 
 #pragma once
 
+#include "NetworkSessionCreationParameters.h"
 #include "SandboxExtension.h"
 #include <WebCore/Cookie.h>
 #include <pal/SessionID.h>
@@ -46,7 +47,6 @@
     void encode(IPC::Encoder&) const;
     static bool decode(IPC::Decoder&, WebsiteDataStoreParameters&);
 
-    PAL::SessionID sessionID;
     Vector<uint8_t> uiProcessCookieStorageIdentifier;
     SandboxExtension::Handle cookieStoragePathExtensionHandle;
     Vector<WebCore::Cookie> pendingCookies;
@@ -53,6 +53,7 @@
     String cacheStorageDirectory;
     uint64_t cacheStoragePerOriginQuota { 0 };
     SandboxExtension::Handle cacheStorageDirectoryExtensionHandle;
+    NetworkSessionCreationParameters networkSessionParameters;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp (223790 => 223791)


--- trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -117,7 +117,6 @@
     copy->m_fullySynchronousModeIsAllowedForTesting = this->m_fullySynchronousModeIsAllowedForTesting;
     copy->m_ignoreSynchronousMessagingTimeoutsForTesting = this->m_ignoreSynchronousMessagingTimeoutsForTesting;
     copy->m_overrideLanguages = this->m_overrideLanguages;
-    copy->m_allowsCellularAccess = this->m_allowsCellularAccess;
     copy->m_sourceApplicationBundleIdentifier = this->m_sourceApplicationBundleIdentifier;
     copy->m_sourceApplicationSecondaryIdentifier = this->m_sourceApplicationSecondaryIdentifier;
     copy->m_alwaysRunsAtBackgroundPriority = this->m_alwaysRunsAtBackgroundPriority;

Modified: trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h (223790 => 223791)


--- trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h	2017-10-20 20:39:34 UTC (rev 223791)
@@ -117,9 +117,6 @@
 
     const WTF::String& sourceApplicationSecondaryIdentifier() const { return m_sourceApplicationSecondaryIdentifier; }
     void setSourceApplicationSecondaryIdentifier(const WTF::String& sourceApplicationSecondaryIdentifier) { m_sourceApplicationSecondaryIdentifier = sourceApplicationSecondaryIdentifier; }
-
-    bool allowsCellularAccess() const { return m_allowsCellularAccess; }
-    void setAllowsCellularAccess(bool allowsCellularAccess) { m_allowsCellularAccess = allowsCellularAccess; }
     
     bool alwaysRunsAtBackgroundPriority() const { return m_alwaysRunsAtBackgroundPriority; }
     void setAlwaysRunsAtBackgroundPriority(bool alwaysRunsAtBackgroundPriority) { m_alwaysRunsAtBackgroundPriority = alwaysRunsAtBackgroundPriority; }
@@ -165,7 +162,6 @@
     Vector<WTF::String> m_overrideLanguages;
     WTF::String m_sourceApplicationBundleIdentifier;
     WTF::String m_sourceApplicationSecondaryIdentifier;
-    bool m_allowsCellularAccess { true };
     bool m_alwaysRunsAtBackgroundPriority { false };
     bool m_shouldTakeUIBackgroundAssertion { true };
     bool m_shouldCaptureAudioInUIProcess { false };

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm (223790 => 223791)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm	2017-10-20 20:39:34 UTC (rev 223791)
@@ -251,6 +251,26 @@
     _websiteDataStore->websiteDataStore().setCacheStorageDirectory(directory);
 }
 
+- (void)_setBoundInterfaceIdentifier:(NSString *)identifier
+{
+    _websiteDataStore->websiteDataStore().setBoundInterfaceIdentifier(identifier);
+}
+
+- (NSString *)_boundInterfaceIdentifier
+{
+    return _websiteDataStore->websiteDataStore().boundInterfaceIdentifier();
+}
+
+- (void)_setAllowsCellularAccess:(BOOL)allows
+{
+    _websiteDataStore->websiteDataStore().setAllowsCellularAccess(allows ? WebKit::AllowsCellularAccess::Yes : WebKit::AllowsCellularAccess::No);
+}
+
+- (BOOL)_allowsCellularAccess
+{
+    return _websiteDataStore->websiteDataStore().allowsCellularAccess() == WebKit::AllowsCellularAccess::Yes;
+}
+
 - (void)_resourceLoadStatisticsSetLastSeen:(double)seconds forHost:(NSString *)host
 {
     auto* store = _websiteDataStore->websiteDataStore().resourceLoadStatistics();

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h (223790 => 223791)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h	2017-10-20 20:39:34 UTC (rev 223791)
@@ -48,6 +48,9 @@
 @property (nonatomic, setter=_setCacheStoragePerOriginQuota:) NSUInteger _cacheStoragePerOriginQuota WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_MAC_TBA));
 @property (nonatomic, setter=_setCacheStorageDirectory:) NSString* _cacheStorageDirectory WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_MAC_TBA));
 
+@property (nonatomic, setter=_setBoundInterfaceIdentifier:) NSString *_boundInterfaceIdentifier WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_MAC_TBA));
+@property (nonatomic, setter=_setAllowsCellularAccess:) BOOL _allowsCellularAccess WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_MAC_TBA));
+
 // ResourceLoadStatistics SPI for testing.
 - (void)_resourceLoadStatisticsSetLastSeen:(double)seconds forHost:(NSString *)host WK_API_AVAILABLE(macosx(10.13), ios(11.0));
 - (void)_resourceLoadStatisticsSetIsPrevalentResource:(BOOL)value forHost:(NSString *)host WK_API_AVAILABLE(macosx(10.13), ios(11.0));

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h (223790 => 223791)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h	2017-10-20 20:39:34 UTC (rev 223791)
@@ -49,7 +49,7 @@
 @property (nonatomic) BOOL diskCacheSpeculativeValidationEnabled WK_API_AVAILABLE(macosx(10.12), ios(10.0));
 @property (nonatomic, nullable, copy) NSString *sourceApplicationBundleIdentifier WK_API_AVAILABLE(macosx(10.12.3), ios(10.3));
 @property (nonatomic, nullable, copy) NSString *sourceApplicationSecondaryIdentifier WK_API_AVAILABLE(macosx(10.12.3), ios(10.3));
-@property (nonatomic) BOOL allowsCellularAccess WK_API_AVAILABLE(macosx(10.13), ios(11.0));
+@property (nonatomic) BOOL allowsCellularAccess WK_API_DEPRECATED_WITH_REPLACEMENT("WKWebsiteDataStore._allowsCellularAccess", macosx(10.13, WK_MAC_TBA), ios(11.0, WK_IOS_TBA));
 @property (nonatomic) BOOL shouldCaptureAudioInUIProcess WK_API_AVAILABLE(macosx(10.13), ios(11.0));
 #if TARGET_OS_IPHONE
 @property (nonatomic, nullable, copy) NSString *CTDataConnectionServiceType WK_API_AVAILABLE(ios(10.3));

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm (223790 => 223791)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm	2017-10-20 20:39:34 UTC (rev 223791)
@@ -200,12 +200,11 @@
 
 - (BOOL)allowsCellularAccess
 {
-    return _processPoolConfiguration->allowsCellularAccess();
+    return YES;
 }
 
 - (void)setAllowsCellularAccess:(BOOL)allowsCellularAccess
 {
-    _processPoolConfiguration->setAllowsCellularAccess(allowsCellularAccess);
 }
 
 - (BOOL)shouldCaptureAudioInUIProcess

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (223790 => 223791)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -424,6 +424,11 @@
 
     NetworkProcessCreationParameters parameters;
 
+    if (withWebsiteDataStore) {
+        auto websiteDataStoreParameters = withWebsiteDataStore->parameters();
+        parameters.defaultSessionParameters = websiteDataStoreParameters.networkSessionParameters;
+    }
+    
     parameters.privateBrowsingEnabled = WebPreferences::anyPagesAreUsingPrivateBrowsing();
 
     parameters.cacheModel = cacheModel();
@@ -460,8 +465,6 @@
     String parentBundleDirectory = this->parentBundleDirectory();
     if (!parentBundleDirectory.isEmpty())
         SandboxExtension::createHandle(parentBundleDirectory, SandboxExtension::Type::ReadOnly, parameters.parentBundleDirectoryExtensionHandle);
-
-    parameters.allowsCellularAccess = m_configuration->allowsCellularAccess();
 #endif
 
 #if OS(LINUX)
@@ -623,7 +626,7 @@
 {
     if (networkProcess()) {
         if (privateBrowsingEnabled)
-            networkProcess()->send(Messages::NetworkProcess::EnsurePrivateBrowsingSession({PAL::SessionID::legacyPrivateSessionID(), { }, { }, { }, { }, WebsiteDataStore::defaultCacheStoragePerOriginQuota, { }}), 0);
+            networkProcess()->send(Messages::NetworkProcess::EnsurePrivateBrowsingSession({ { }, { }, { }, { }, WebsiteDataStore::defaultCacheStoragePerOriginQuota, { }, { PAL::SessionID::legacyPrivateSessionID(), { }, { }, AllowsCellularAccess::Yes }}), 0);
         else
             networkProcess()->send(Messages::NetworkProcess::DestroySession(PAL::SessionID::legacyPrivateSessionID()), 0);
     }
@@ -679,7 +682,7 @@
 
 WebProcessProxy& WebProcessPool::createNewWebProcess(WebsiteDataStore& websiteDataStore)
 {
-    ensureNetworkProcess();
+    ensureNetworkProcess(&websiteDataStore);
 
     Ref<WebProcessProxy> process = WebProcessProxy::create(*this, websiteDataStore);
 
@@ -1000,7 +1003,7 @@
     if (sessionID.isEphemeral()) {
         // FIXME: Merge NetworkProcess::EnsurePrivateBrowsingSession and NetworkProcess::AddWebsiteDataStore into one message type.
         // They do basically the same thing.
-        ASSERT(page.websiteDataStore().parameters().sessionID == sessionID);
+        ASSERT(page.websiteDataStore().parameters().networkSessionParameters.sessionID == sessionID);
         sendToNetworkingProcess(Messages::NetworkProcess::EnsurePrivateBrowsingSession(page.websiteDataStore().parameters()));
         page.process().send(Messages::WebProcess::EnsurePrivateBrowsingSession(sessionID), 0);
     } else if (sessionID != PAL::SessionID::defaultSessionID()) {

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm (223790 => 223791)


--- trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm	2017-10-20 20:39:34 UTC (rev 223791)
@@ -55,7 +55,7 @@
     resolveDirectoriesIfNecessary();
 
     WebsiteDataStoreParameters parameters;
-    parameters.sessionID = m_sessionID;
+    parameters.networkSessionParameters = { m_sessionID, nullptr, m_boundInterfaceIdentifier, m_allowsCellularAccess };
 
     auto cookieFile = resolvedCookieStorageFile();
 

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (223790 => 223791)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -1401,7 +1401,7 @@
 {
     // FIXME: Implement cookies.
     WebsiteDataStoreParameters parameters;
-    parameters.sessionID = m_sessionID;
+    parameters.networkSessionParameters.sessionID = m_sessionID;
     return parameters;
 }
 #endif

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (223790 => 223791)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2017-10-20 20:39:34 UTC (rev 223791)
@@ -25,6 +25,7 @@
 
 #pragma once
 
+#include "NetworkSessionCreationParameters.h"
 #include "WebProcessLifetimeObserver.h"
 #include <WebCore/Cookie.h>
 #include <WebCore/SecurityOriginData.h>
@@ -141,6 +142,12 @@
     void enableResourceLoadStatisticsAndSetTestingCallback(Function<void (const String&)>&& callback);
 
     void requestStorageAccess(String&& subFrameHost, String&& topFrameHost, WTF::Function<void (bool)>&& callback);
+    
+    void setBoundInterfaceIdentifier(String&& identifier) { m_boundInterfaceIdentifier = WTFMove(identifier); }
+    const String& boundInterfaceIdentifier() { return m_boundInterfaceIdentifier; }
+    
+    void setAllowsCellularAccess(AllowsCellularAccess allows) { m_allowsCellularAccess = allows; }
+    AllowsCellularAccess allowsCellularAccess() { return m_allowsCellularAccess; }
 
 private:
     explicit WebsiteDataStore(PAL::SessionID);
@@ -186,6 +193,9 @@
     RetainPtr<CFHTTPCookieStorageRef> m_cfCookieStorage;
 #endif
     HashSet<WebCore::Cookie> m_pendingCookies;
+    
+    String m_boundInterfaceIdentifier;
+    AllowsCellularAccess m_allowsCellularAccess { AllowsCellularAccess::Yes };
 };
 
 }

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (223790 => 223791)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2017-10-20 20:39:34 UTC (rev 223791)
@@ -3544,6 +3544,7 @@
 		5C6CE6D31F59EA350007C6CB /* PageClientImplCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageClientImplCocoa.h; sourceTree = "<group>"; };
 		5C7706731D111D8B0012700F /* WebSocketProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebSocketProvider.cpp; path = Network/WebSocketProvider.cpp; sourceTree = "<group>"; };
 		5C7C88DC1D0F41A0009D2F6D /* WebSocketProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebSocketProvider.h; path = Network/WebSocketProvider.h; sourceTree = "<group>"; };
+		5C84CF901F96AC4E00B6705A /* NetworkSessionCreationParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkSessionCreationParameters.h; path = NetworkProcess/NetworkSessionCreationParameters.h; sourceTree = "<group>"; };
 		5C85C7861C3F23C50061A4FA /* PendingDownload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PendingDownload.cpp; path = NetworkProcess/Downloads/PendingDownload.cpp; sourceTree = "<group>"; };
 		5C9E567F1DF7930900C9EE33 /* WebsitePolicies.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebsitePolicies.h; sourceTree = "<group>"; };
 		5C9E56801DF7F05500C9EE33 /* WKWebsitePolicies.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKWebsitePolicies.cpp; sourceTree = "<group>"; };
@@ -6147,6 +6148,7 @@
 				5C1426E61C23F80500D41183 /* NetworkResourceLoadParameters.h */,
 				532159521DBAE6FC0054AA3C /* NetworkSession.cpp */,
 				5C20CB9E1BB0DD1800895BB1 /* NetworkSession.h */,
+				5C84CF901F96AC4E00B6705A /* NetworkSessionCreationParameters.h */,
 				5C0B177D1E7C886700E9123C /* NetworkSocketStream.cpp */,
 				5C0B177E1E7C886700E9123C /* NetworkSocketStream.h */,
 				5C0B177F1E7C886700E9123C /* NetworkSocketStream.messages.in */,

Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp (223790 => 223791)


--- trunk/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -29,6 +29,7 @@
 #include "APIArray.h"
 #include "APIData.h"
 #include "InjectedBundleScriptWorld.h"
+#include "NetworkSessionCreationParameters.h"
 #include "NotificationPermissionRequestManager.h"
 #include "SessionTracker.h"
 #include "UserData.h"
@@ -46,6 +47,7 @@
 #include "WebProcessMessages.h"
 #include "WebProcessPoolMessages.h"
 #include "WebUserContentController.h"
+#include "WebsiteDataStoreParameters.h"
 #include <_javascript_Core/APICast.h>
 #include <_javascript_Core/Exception.h>
 #include <_javascript_Core/JSLock.h>
@@ -319,7 +321,7 @@
 {
     if (enabled) {
         WebProcess::singleton().ensureLegacyPrivateBrowsingSessionInNetworkProcess();
-        WebFrameNetworkingContext::ensurePrivateBrowsingSession(PAL::SessionID::legacyPrivateSessionID());
+        WebFrameNetworkingContext::ensurePrivateBrowsingSession({ { }, { }, { }, { }, { }, { }, { PAL::SessionID::legacyPrivateSessionID(), { }, { }, AllowsCellularAccess::Yes }});
     } else
         SessionTracker::destroySession(PAL::SessionID::legacyPrivateSessionID());
 

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h (223790 => 223791)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h	2017-10-20 20:39:34 UTC (rev 223791)
@@ -23,8 +23,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef WebFrameNetworkingContext_h
-#define WebFrameNetworkingContext_h
+#pragma once
 
 #include "HTTPCookieAcceptPolicy.h"
 #include "WebFrame.h"
@@ -43,7 +42,7 @@
     }
 
     // FIXME: remove platform-specific code and use SessionTracker
-    static void ensurePrivateBrowsingSession(PAL::SessionID);
+    static void ensurePrivateBrowsingSession(WebsiteDataStoreParameters&&);
     static void ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&&);
 
     static void setCookieAcceptPolicyForAllContexts(HTTPCookieAcceptPolicy);
@@ -65,5 +64,3 @@
 };
 
 }
-
-#endif

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm (223790 => 223791)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm	2017-10-20 20:39:34 UTC (rev 223791)
@@ -46,8 +46,9 @@
 
 namespace WebKit {
     
-void WebFrameNetworkingContext::ensurePrivateBrowsingSession(PAL::SessionID sessionID)
+void WebFrameNetworkingContext::ensurePrivateBrowsingSession(WebsiteDataStoreParameters&& parameters)
 {
+    auto sessionID = parameters.networkSessionParameters.sessionID;
     ASSERT(sessionID.isEphemeral());
 
     if (WebCore::NetworkStorageSession::storageSession(sessionID))
@@ -61,14 +62,14 @@
 
     NetworkStorageSession::ensurePrivateBrowsingSession(sessionID, base + '.' + String::number(sessionID.sessionID()));
 #if USE(NETWORK_SESSION)
-    auto networkSession = NetworkSession::create(sessionID);
-    SessionTracker::setSession(sessionID, WTFMove(networkSession));
+    SessionTracker::setSession(sessionID, NetworkSession::create(WTFMove(parameters.networkSessionParameters)));
 #endif
 }
 
 void WebFrameNetworkingContext::ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&& parameters)
 {
-    if (NetworkStorageSession::storageSession(parameters.sessionID))
+    auto sessionID = parameters.networkSessionParameters.sessionID;
+    if (NetworkStorageSession::storageSession(sessionID))
         return;
 
     String base;
@@ -81,11 +82,10 @@
 
     RetainPtr<CFHTTPCookieStorageRef> uiProcessCookieStorage = cookieStorageFromIdentifyingData(parameters.uiProcessCookieStorageIdentifier);
 
-    NetworkStorageSession::ensureSession(parameters.sessionID, base + '.' + String::number(parameters.sessionID.sessionID()), WTFMove(uiProcessCookieStorage));
+    NetworkStorageSession::ensureSession(sessionID, base + '.' + String::number(sessionID.sessionID()), WTFMove(uiProcessCookieStorage));
 
 #if USE(NETWORK_SESSION)
-    auto networkSession = NetworkSession::create(parameters.sessionID);
-    SessionTracker::setSession(parameters.sessionID, WTFMove(networkSession));
+    SessionTracker::setSession(sessionID, NetworkSession::create(WTFMove(parameters.networkSessionParameters)));
 #endif
 }
 

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp (223790 => 223791)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -28,9 +28,11 @@
 #include "WebFrameNetworkingContext.h"
 
 #include "NetworkSession.h"
+#include "NetworkSessionCreationParameters.h"
 #include "SessionTracker.h"
 #include "WebFrame.h"
 #include "WebPage.h"
+#include "WebsiteDataStoreParameters.h"
 #include <WebCore/FrameLoader.h>
 #include <WebCore/NetworkStorageSession.h>
 #include <WebCore/Settings.h>
@@ -41,8 +43,9 @@
 
 namespace WebKit {
 
-void WebFrameNetworkingContext::ensurePrivateBrowsingSession(PAL::SessionID sessionID)
+void WebFrameNetworkingContext::ensurePrivateBrowsingSession(WebsiteDataStoreParameters&& parameters)
 {
+    auto sessionID = parameters.networkSessionParameters.sessionID;
     ASSERT(RunLoop::isMain());
     ASSERT(sessionID.isEphemeral());
 
@@ -50,7 +53,7 @@
         return;
 
     NetworkStorageSession::ensurePrivateBrowsingSession(sessionID, String::number(sessionID.sessionID()));
-    SessionTracker::setSession(sessionID, NetworkSession::create(sessionID));
+    SessionTracker::setSession(sessionID, NetworkSession::create(WTFMove(parameters.networkSessionParameters)));
 }
 
 void WebFrameNetworkingContext::ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&&)

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h (223790 => 223791)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h	2017-10-20 20:39:34 UTC (rev 223791)
@@ -43,7 +43,7 @@
         return adoptRef(*new WebFrameNetworkingContext(frame));
     }
 
-    static void ensurePrivateBrowsingSession(PAL::SessionID);
+    static void ensurePrivateBrowsingSession(WebsiteDataStoreParameters&&);
     static void ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&&);
 
     WebFrameLoaderClient* webFrameLoaderClient() const;

Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (223790 => 223791)


--- trunk/Source/WebKit/WebProcess/WebProcess.cpp	2017-10-20 20:38:41 UTC (rev 223790)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp	2017-10-20 20:39:34 UTC (rev 223791)
@@ -39,6 +39,7 @@
 #include "NetworkConnectionToWebProcessMessages.h"
 #include "NetworkProcessConnection.h"
 #include "NetworkSession.h"
+#include "NetworkSessionCreationParameters.h"
 #include "PluginProcessConnectionManager.h"
 #include "ServiceWorkerContextManager.h"
 #include "ServiceWorkerContextManagerMessages.h"
@@ -71,6 +72,7 @@
 #include "WebSocketStream.h"
 #include "WebToStorageProcessConnection.h"
 #include "WebsiteData.h"
+#include "WebsiteDataStoreParameters.h"
 #include "WebsiteDataType.h"
 #include <_javascript_Core/JSLock.h>
 #include <_javascript_Core/MemoryStatistics.h>
@@ -265,6 +267,10 @@
 
     platformInitializeWebProcess(WTFMove(parameters));
 
+#if USE(NETWORK_SESSION)
+    SessionTracker::setSession(PAL::SessionID::defaultSessionID(), NetworkSession::create({ }));
+#endif
+
     // Match the QoS of the UIProcess and the scrolling thread but use a slightly lower priority.
     WTF::Thread::setCurrentThreadIsUserInteractive(-1);
 
@@ -511,7 +517,7 @@
 
 void WebProcess::ensurePrivateBrowsingSession(PAL::SessionID sessionID)
 {
-    WebFrameNetworkingContext::ensurePrivateBrowsingSession(sessionID);
+    WebFrameNetworkingContext::ensurePrivateBrowsingSession({ { }, { }, { }, { }, { }, { }, { sessionID, { }, { }, AllowsCellularAccess::Yes }});
 }
 
 void WebProcess::addWebsiteDataStore(WebsiteDataStoreParameters&& parameters)
@@ -565,7 +571,10 @@
 {
     NetworkStorageSession::defaultStorageSession().credentialStorage().clearCredentials();
 #if USE(NETWORK_SESSION)
-    NetworkSession::defaultSession().clearCredentials();
+    if (auto* networkSession = SessionTracker::networkSession(PAL::SessionID::defaultSessionID()))
+        networkSession->clearCredentials();
+    else
+        ASSERT_NOT_REACHED();
 #endif
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to