Changeset 215941 in webkit


Ignore:
Timestamp:
Apr 28, 2017 1:48:40 PM (7 years ago)
Author:
beidson@apple.com
Message:

Start of support for multiple WebsiteDataStore/SessionIDs per process
https://bugs.webkit.org/show_bug.cgi?id=171422

Reviewed by Geoffrey Garen.

Source/WebCore:

Covered by API tests.

  • platform/network/NetworkStorageSession.h:
  • platform/network/cf/NetworkStorageSessionCFNet.cpp:

(WebCore::NetworkStorageSession::ensureSession):

  • platform/spi/cf/CFNetworkSPI.h:

Source/WebKit2:

  • CMakeLists.txt:
  • WebKit2.xcodeproj/project.pbxproj:
  • NetworkProcess/NetworkProcess.cpp:

(WebKit::NetworkProcess::addWebsiteDataStore):
(WebKit::NetworkProcess::destroySession):
(WebKit::NetworkProcess::destroyPrivateBrowsingSession): Deleted.

  • NetworkProcess/NetworkProcess.h:
  • NetworkProcess/NetworkProcess.messages.in:
  • NetworkProcess/RemoteNetworkingContext.h:
  • NetworkProcess/mac/RemoteNetworkingContext.mm:

(WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):

  • NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:

(WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):

  • Shared/WebsiteDataStoreParameters.cpp: Copied from Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h.

(WebKit::WebsiteDataStoreParameters::WebsiteDataStoreParameters):
(WebKit::WebsiteDataStoreParameters::encode):
(WebKit::WebsiteDataStoreParameters::decode):

  • Shared/WebsiteDataStoreParameters.h: Copied from Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h.
  • UIProcess/API/APIWebsiteDataStore.cpp:

(API::WebsiteDataStore::defaultDataStore):
(API::WebsiteDataStore::createLegacy):
(API::WebsiteDataStore::WebsiteDataStore):
(API::WebsiteDataStore::create): Deleted.

  • UIProcess/API/APIWebsiteDataStore.h:
  • UIProcess/API/Cocoa/WKWebsiteDataStore.mm:

(-[WKWebsiteDataStore _initWithConfiguration:]):

  • UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:

(webkitWebsiteDataManagerCreate):
(webkitWebsiteDataManagerGetDataStore):

  • UIProcess/WebPageProxy.cpp:

(WebKit::m_weakPtrFactory):

  • UIProcess/WebPageProxy.h:
  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::WebProcessPool):
(WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
(WebKit::WebProcessPool::pageAddedToProcess):
(WebKit::WebProcessPool::pageRemovedFromProcess):

  • UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:

(WebKit::WebsiteDataStore::parameters):

  • UIProcess/WebsiteData/WebsiteDataStore.cpp:

(WebKit::WebsiteDataStore::create):
(WebKit::WebsiteDataStore::WebsiteDataStore):
(WebKit::WebsiteDataStore::~WebsiteDataStore):
(WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
(WebKit::WebsiteDataStore::parameters):

  • UIProcess/WebsiteData/WebsiteDataStore.h:
  • WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
  • WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:

(WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):
(WebKit::WebFrameNetworkingContext::storageSession):

  • WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:

(WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):

  • WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:
  • WebProcess/WebProcess.cpp:

(WebKit::WebProcess::addWebsiteDataStore):
(WebKit::WebProcess::destroySession):
(WebKit::WebProcess::destroyPrivateBrowsingSession): Deleted.

  • WebProcess/WebProcess.h:
  • WebProcess/WebProcess.messages.in:
  • WebProcess/cocoa/WebProcessCocoa.mm:

Tools:

  • TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:

(TEST):

Location:
trunk
Files:
34 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r215940 r215941  
     12017-04-28  Brady Eidson  <beidson@apple.com>
     2
     3        Start of support for multiple WebsiteDataStore/SessionIDs per process
     4        https://bugs.webkit.org/show_bug.cgi?id=171422
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Covered by API tests.
     9
     10        * platform/network/NetworkStorageSession.h:
     11        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
     12        (WebCore::NetworkStorageSession::ensureSession):
     13        * platform/spi/cf/CFNetworkSPI.h:
     14
    1152017-04-28  Chris Dumez  <cdumez@apple.com>
    216
  • trunk/Source/WebCore/platform/network/NetworkStorageSession.h

    r215883 r215941  
    7474
    7575#if PLATFORM(COCOA) || USE(CFURLCONNECTION)
     76    WEBCORE_EXPORT static void ensureSession(SessionID, const String& identifierBase, RetainPtr<CFHTTPCookieStorageRef>&&);
    7677    NetworkStorageSession(SessionID, RetainPtr<CFURLStorageSessionRef>&&, RetainPtr<CFHTTPCookieStorageRef>&&);
    7778
  • trunk/Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp

    r215928 r215941  
    116116}
    117117
    118 void NetworkStorageSession::ensureSession(SessionID sessionID, const String& identifierBase)
     118void NetworkStorageSession::ensureSession(SessionID sessionID, const String& identifierBase, RetainPtr<CFHTTPCookieStorageRef>&& cookieStorage)
    119119{
    120120    auto addResult = globalSessionMap().add(sessionID, nullptr);
     
    134134        storageSession = createCFStorageSessionForIdentifier(cfIdentifier.get());
    135135
    136     RetainPtr<CFHTTPCookieStorageRef> cookieStorage = storageSession ? adoptCF(_CFURLStorageSessionCopyCookieStorage(kCFAllocatorDefault, storageSession.get())) : nullptr;
     136    if (!cookieStorage && storageSession)
     137        cookieStorage = adoptCF(_CFURLStorageSessionCopyCookieStorage(kCFAllocatorDefault, storageSession.get()));
     138
    137139    addResult.iterator->value = std::make_unique<NetworkStorageSession>(sessionID, WTFMove(storageSession), WTFMove(cookieStorage));
     140}
     141
     142void NetworkStorageSession::ensureSession(SessionID sessionID, const String& identifierBase)
     143{
     144    ensureSession(sessionID, identifierBase, nullptr);
    138145}
    139146
  • trunk/Source/WebCore/platform/spi/cf/CFNetworkSPI.h

    r215883 r215941  
    185185
    186186CFHTTPCookieStorageRef _CFHTTPCookieStorageGetDefault(CFAllocatorRef);
     187CFHTTPCookieStorageRef CFHTTPCookieStorageCreateFromFile(CFAllocatorRef, CFURLRef, CFHTTPCookieStorageRef);
     188
    187189void CFHTTPCookieStorageSetCookie(CFHTTPCookieStorageRef, CFHTTPCookieRef);
    188190void CFHTTPCookieStorageSetCookieAcceptPolicy(CFHTTPCookieStorageRef, CFHTTPCookieStorageAcceptPolicy);
  • trunk/Source/WebKit2/CMakeLists.txt

    r215606 r215941  
    213213    Shared/WebUserContentControllerDataTypes.cpp
    214214    Shared/WebWheelEvent.cpp
     215    Shared/WebsiteDataStoreParameters.cpp
    215216
    216217    Shared/API/APIArray.cpp
  • trunk/Source/WebKit2/ChangeLog

    r215939 r215941  
     12017-04-28  Brady Eidson  <beidson@apple.com>
     2
     3        Start of support for multiple WebsiteDataStore/SessionIDs per process
     4        https://bugs.webkit.org/show_bug.cgi?id=171422
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        * CMakeLists.txt:
     9        * WebKit2.xcodeproj/project.pbxproj:
     10
     11        * NetworkProcess/NetworkProcess.cpp:
     12        (WebKit::NetworkProcess::addWebsiteDataStore):
     13        (WebKit::NetworkProcess::destroySession):
     14        (WebKit::NetworkProcess::destroyPrivateBrowsingSession): Deleted.
     15        * NetworkProcess/NetworkProcess.h:
     16        * NetworkProcess/NetworkProcess.messages.in:
     17
     18        * NetworkProcess/RemoteNetworkingContext.h:
     19        * NetworkProcess/mac/RemoteNetworkingContext.mm:
     20        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
     21        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
     22        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
     23
     24        * Shared/WebsiteDataStoreParameters.cpp: Copied from Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h.
     25        (WebKit::WebsiteDataStoreParameters::WebsiteDataStoreParameters):
     26        (WebKit::WebsiteDataStoreParameters::encode):
     27        (WebKit::WebsiteDataStoreParameters::decode):
     28        * Shared/WebsiteDataStoreParameters.h: Copied from Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h.
     29
     30        * UIProcess/API/APIWebsiteDataStore.cpp:
     31        (API::WebsiteDataStore::defaultDataStore):
     32        (API::WebsiteDataStore::createLegacy):
     33        (API::WebsiteDataStore::WebsiteDataStore):
     34        (API::WebsiteDataStore::create): Deleted.
     35        * UIProcess/API/APIWebsiteDataStore.h:
     36
     37        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
     38        (-[WKWebsiteDataStore _initWithConfiguration:]):
     39
     40        * UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:
     41        (webkitWebsiteDataManagerCreate):
     42        (webkitWebsiteDataManagerGetDataStore):
     43
     44        * UIProcess/WebPageProxy.cpp:
     45        (WebKit::m_weakPtrFactory):
     46        * UIProcess/WebPageProxy.h:
     47
     48        * UIProcess/WebProcessPool.cpp:
     49        (WebKit::WebProcessPool::WebProcessPool):
     50        (WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
     51        (WebKit::WebProcessPool::pageAddedToProcess):
     52        (WebKit::WebProcessPool::pageRemovedFromProcess):
     53
     54        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
     55        (WebKit::WebsiteDataStore::parameters):
     56        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
     57        (WebKit::WebsiteDataStore::create):
     58        (WebKit::WebsiteDataStore::WebsiteDataStore):
     59        (WebKit::WebsiteDataStore::~WebsiteDataStore):
     60        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
     61        (WebKit::WebsiteDataStore::parameters):
     62        * UIProcess/WebsiteData/WebsiteDataStore.h:
     63
     64        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
     65        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
     66        (WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):
     67        (WebKit::WebFrameNetworkingContext::storageSession):
     68        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
     69        (WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):
     70        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:
     71
     72        * WebProcess/WebProcess.cpp:
     73        (WebKit::WebProcess::addWebsiteDataStore):
     74        (WebKit::WebProcess::destroySession):
     75        (WebKit::WebProcess::destroyPrivateBrowsingSession): Deleted.
     76        * WebProcess/WebProcess.h:
     77        * WebProcess/WebProcess.messages.in:
     78        * WebProcess/cocoa/WebProcessCocoa.mm:
     79
    1802017-04-28  Youenn Fablet  <youenn@apple.com>
    281
  • trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp

    r215104 r215941  
    246246static NetworkStorageSession& storageSession(SessionID sessionID)
    247247{
    248     if (sessionID.isEphemeral()) {
    249         if (auto* privateStorageSession = NetworkStorageSession::storageSession(sessionID))
    250             return *privateStorageSession;
     248    ASSERT(sessionID.isValid());
     249    if (sessionID != SessionID::defaultSessionID()) {
     250        if (auto* storageSession = NetworkStorageSession::storageSession(sessionID))
     251            return *storageSession;
     252
    251253        // Some requests with private browsing mode requested may still be coming shortly after NetworkProcess was told to destroy its session.
    252254        // FIXME: Find a way to track private browsing sessions more rigorously.
    253         LOG_ERROR("Private browsing was requested, but there was no session for it. Please file a bug unless you just disabled private browsing, in which case it's an expected race.");
     255        LOG_ERROR("Non-default storage session was requested, but there was no session for it. Please file a bug unless you just disabled private browsing, in which case it's an expected race.");
    254256    }
    255257    return NetworkStorageSession::defaultStorageSession();
  • trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp

    r215741 r215941  
    292292}
    293293
    294 void NetworkProcess::destroyPrivateBrowsingSession(SessionID sessionID)
     294void NetworkProcess::addWebsiteDataStore(WebsiteDataStoreParameters&& parameters)
     295{
     296    RemoteNetworkingContext::ensureWebsiteDataStoreSession(WTFMove(parameters));
     297}
     298
     299void NetworkProcess::destroySession(SessionID sessionID)
    295300{
    296301    SessionTracker::destroySession(sessionID);
  • trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h

    r215741 r215941  
    6262enum class WebsiteDataType;
    6363struct NetworkProcessCreationParameters;
     64struct WebsiteDataStoreParameters;
    6465
    6566class NetworkProcess : public ChildProcess, private DownloadManager::Client {
     
    160161    void initializeNetworkProcess(NetworkProcessCreationParameters&&);
    161162    void createNetworkConnectionToWebProcess();
    162     void destroyPrivateBrowsingSession(WebCore::SessionID);
     163    void addWebsiteDataStore(WebsiteDataStoreParameters&&);
     164    void destroySession(WebCore::SessionID);
    163165
    164166    void fetchWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, uint64_t callbackID);
  • trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in

    r215741 r215941  
    3737
    3838    EnsurePrivateBrowsingSession(WebCore::SessionID sessionID)
    39     DestroyPrivateBrowsingSession(WebCore::SessionID sessionID)
     39    AddWebsiteDataStore(struct WebKit::WebsiteDataStoreParameters websiteDataStoreParameters);
     40    DestroySession(WebCore::SessionID sessionID)
    4041
    4142    FetchWebsiteData(WebCore::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, OptionSet<WebKit::WebsiteDataFetchOption> fetchOptions, uint64_t callbackID)
  • trunk/Source/WebKit2/NetworkProcess/RemoteNetworkingContext.h

    r213760 r215941  
    3333namespace WebKit {
    3434
     35struct WebsiteDataStoreParameters;
     36
    3537class RemoteNetworkingContext final : public WebCore::NetworkingContext {
    3638public:
     
    4345    // FIXME: Remove platform-specific code and use SessionTracker.
    4446    static void ensurePrivateBrowsingSession(WebCore::SessionID);
     47    static void ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&&);
    4548
    4649    bool shouldClearReferrerOnHTTPSToHTTPRedirect() const override { return m_shouldClearReferrerOnHTTPSToHTTPRedirect; }
  • trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm

    r213760 r215941  
    3232#import "SessionTracker.h"
    3333#import "WebErrors.h"
     34#import "WebsiteDataStoreParameters.h"
    3435#import <WebCore/NetworkStorageSession.h>
    3536#import <WebCore/ResourceError.h>
     
    101102}
    102103
     104void RemoteNetworkingContext::ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&& parameters)
     105{
     106    if (NetworkStorageSession::storageSession(parameters.sessionID))
     107        return;
     108
     109    String base;
     110    if (SessionTracker::getIdentifierBase().isNull())
     111        base = [[NSBundle mainBundle] bundleIdentifier];
     112    else
     113        base = SessionTracker::getIdentifierBase();
     114
     115#if PLATFORM(IOS)
     116    SandboxExtension::consumePermanently(parameters.cookieStorageDirectoryExtensionHandle);
     117#endif
     118
     119    RetainPtr<CFHTTPCookieStorageRef> uiProcessCookieStorage;
     120
     121#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
     122    RetainPtr<CFDataRef> cookieStorageData = adoptCF(CFDataCreate(kCFAllocatorDefault, parameters.uiProcessCookieStorageIdentifier.data(), parameters.uiProcessCookieStorageIdentifier.size()));
     123    uiProcessCookieStorage = adoptCF(CFHTTPCookieStorageCreateFromIdentifyingData(kCFAllocatorDefault, cookieStorageData.get()));
     124#endif
     125
     126    NetworkStorageSession::ensureSession(parameters.sessionID, base + '.' + String::number(parameters.sessionID.sessionID()), WTFMove(uiProcessCookieStorage));
     127
     128#if USE(NETWORK_SESSION)
     129    auto networkSession = NetworkSession::create(parameters.sessionID, NetworkProcess::singleton().supplement<LegacyCustomProtocolManager>());
     130    SessionTracker::setSession(parameters.sessionID, WTFMove(networkSession));
     131#endif
    103132}
     133
     134}
  • trunk/Source/WebKit2/NetworkProcess/soup/RemoteNetworkingContextSoup.cpp

    r213760 r215941  
    3131#include "NetworkSession.h"
    3232#include "SessionTracker.h"
     33#include "WebsiteDataStoreParameters.h"
    3334#include <WebCore/NetworkStorageSession.h>
    3435#include <WebCore/NotImplemented.h>
     
    5960}
    6061
     62void RemoteNetworkingContext::ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&&)
     63{
     64    // FIXME: Implement.
     65}
     66
    6167NetworkStorageSession& RemoteNetworkingContext::storageSession() const
    6268{
  • trunk/Source/WebKit2/Shared/WebsiteDataStoreParameters.cpp

    r215940 r215941  
    11/*
    2  * Copyright (C) 2010 Apple Inc. All rights reserved.
    3  * Portions Copyright (c) 2010 Motorola Mobility, Inc.  All rights reserved.
    4  * Copyright (C) 2012 Igalia S.L.
     2 * Copyright (C) 2017 Apple Inc. All rights reserved.
    53 *
    64 * Redistribution and use in source and binary forms, with or without
     
    2624 */
    2725
    28 #pragma once
     26#include "config.h"
     27#include "WebsiteDataStoreParameters.h"
    2928
    30 #include <WebCore/FrameNetworkingContext.h>
    31 #include <WebCore/SessionID.h>
     29#include "WebCoreArgumentCoders.h"
    3230
    3331namespace WebKit {
    3432
    35 class WebFrame;
    36 class WebFrameLoaderClient;
    3733
    38 class WebFrameNetworkingContext : public WebCore::FrameNetworkingContext {
    39 public:
    40     static Ref<WebFrameNetworkingContext> create(WebFrame* frame)
    41     {
    42         return adoptRef(*new WebFrameNetworkingContext(frame));
    43     }
     34WebsiteDataStoreParameters::WebsiteDataStoreParameters()
     35{
     36}
    4437
    45     static void ensurePrivateBrowsingSession(WebCore::SessionID);
     38void WebsiteDataStoreParameters::encode(IPC::Encoder& encoder) const
     39{
     40    encoder << sessionID;
     41#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
     42    encoder << uiProcessCookieStorageIdentifier;
     43#endif
     44#if PLATFORM(IOS)
     45    encoder << cookieStorageDirectoryExtensionHandle;
     46#endif
     47}
    4648
    47     WebFrameLoaderClient* webFrameLoaderClient() const;
     49bool WebsiteDataStoreParameters::decode(IPC::Decoder& decoder, WebsiteDataStoreParameters& parameters)
     50{
     51    if (!decoder.decode(parameters.sessionID))
     52        return false;
    4853
    49 private:
    50     WebFrameNetworkingContext(WebFrame*);
     54#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
     55    if (!decoder.decode(parameters.uiProcessCookieStorageIdentifier))
     56        return false;
     57#endif
    5158
    52     WebCore::NetworkStorageSession& storageSession() const override;
    53 };
     59#if PLATFORM(IOS)
     60    if (!decoder.decode(parameters.cookieStorageDirectoryExtensionHandle))
     61        return false;
     62#endif
    5463
     64    return true;
    5565}
     66
     67
     68} // namespace WebKit
  • trunk/Source/WebKit2/Shared/WebsiteDataStoreParameters.h

    r215940 r215941  
    11/*
    2  * Copyright (C) 2010 Apple Inc. All rights reserved.
    3  * Portions Copyright (c) 2010 Motorola Mobility, Inc.  All rights reserved.
    4  * Copyright (C) 2012 Igalia S.L.
     2 * Copyright (C) 2017 Apple Inc. All rights reserved.
    53 *
    64 * Redistribution and use in source and binary forms, with or without
     
    2826#pragma once
    2927
    30 #include <WebCore/FrameNetworkingContext.h>
     28#include "SandboxExtension.h"
    3129#include <WebCore/SessionID.h>
     30#include <wtf/Vector.h>
     31#include <wtf/text/WTFString.h>
     32
     33namespace IPC {
     34class Decoder;
     35class Encoder;
     36}
    3237
    3338namespace WebKit {
    3439
    35 class WebFrame;
    36 class WebFrameLoaderClient;
     40struct WebsiteDataStoreParameters {
     41    WebsiteDataStoreParameters();
    3742
    38 class WebFrameNetworkingContext : public WebCore::FrameNetworkingContext {
    39 public:
    40     static Ref<WebFrameNetworkingContext> create(WebFrame* frame)
    41     {
    42         return adoptRef(*new WebFrameNetworkingContext(frame));
    43     }
     43    void encode(IPC::Encoder&) const;
     44    static bool decode(IPC::Decoder&, WebsiteDataStoreParameters&);
    4445
    45     static void ensurePrivateBrowsingSession(WebCore::SessionID);
     46    WebCore::SessionID sessionID;
    4647
    47     WebFrameLoaderClient* webFrameLoaderClient() const;
    48 
    49 private:
    50     WebFrameNetworkingContext(WebFrame*);
    51 
    52     WebCore::NetworkStorageSession& storageSession() const override;
     48#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
     49    Vector<uint8_t> uiProcessCookieStorageIdentifier;
     50#endif
     51#if PLATFORM(IOS)
     52    SandboxExtension::Handle cookieStorageDirectoryExtensionHandle;
     53#endif
    5354};
    5455
    55 }
     56} // namespace WebKit
  • trunk/Source/WebKit2/UIProcess/API/APIWebsiteDataStore.cpp

    r215707 r215941  
    3636    WebKit::InitializeWebKit2();
    3737
    38     static WebsiteDataStore* defaultDataStore = adoptRef(new WebsiteDataStore(defaultDataStoreConfiguration())).leakRef();
     38    static WebsiteDataStore* defaultDataStore = adoptRef(new WebsiteDataStore(defaultDataStoreConfiguration(), WebCore::SessionID::defaultSessionID())).leakRef();
    3939
    4040    return *defaultDataStore;
     
    4646}
    4747
    48 Ref<WebsiteDataStore> WebsiteDataStore::create(WebKit::WebsiteDataStore::Configuration configuration)
     48Ref<WebsiteDataStore> WebsiteDataStore::createLegacy(WebKit::WebsiteDataStore::Configuration configuration)
    4949{
    50     return adoptRef(*new WebsiteDataStore(WTFMove(configuration)));
     50    return adoptRef(*new WebsiteDataStore(WTFMove(configuration), WebCore::SessionID::defaultSessionID()));
    5151}
    5252
     
    5656}
    5757
    58 WebsiteDataStore::WebsiteDataStore(WebKit::WebsiteDataStore::Configuration configuration)
    59     : m_websiteDataStore(WebKit::WebsiteDataStore::create(WTFMove(configuration)))
     58WebsiteDataStore::WebsiteDataStore(WebKit::WebsiteDataStore::Configuration configuration, WebCore::SessionID sessionID)
     59    : m_websiteDataStore(WebKit::WebsiteDataStore::create(WTFMove(configuration), sessionID))
    6060{
    6161}
  • trunk/Source/WebKit2/UIProcess/API/APIWebsiteDataStore.h

    r215707 r215941  
    3838    static Ref<WebsiteDataStore> defaultDataStore();
    3939    static Ref<WebsiteDataStore> createNonPersistentDataStore();
    40     static Ref<WebsiteDataStore> create(WebKit::WebsiteDataStore::Configuration);
     40    static Ref<WebsiteDataStore> createLegacy(WebKit::WebsiteDataStore::Configuration);
    4141
    42     explicit WebsiteDataStore(WebKit::WebsiteDataStore::Configuration);
     42    explicit WebsiteDataStore(WebKit::WebsiteDataStore::Configuration, WebCore::SessionID);
    4343    virtual ~WebsiteDataStore();
    4444
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStore.mm

    r215897 r215941  
    164164        config.cookieStorageDirectory = configuration._cookieStorageDirectory.path;
    165165
    166     API::Object::constructInWrapper<API::WebsiteDataStore>(self, config);
     166    API::Object::constructInWrapper<API::WebsiteDataStore>(self, config, WebCore::SessionID::generatePersistentSessionID());
    167167
    168168    return self;
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp

    r215106 r215941  
    351351{
    352352    WebKitWebsiteDataManager* manager = WEBKIT_WEBSITE_DATA_MANAGER(g_object_new(WEBKIT_TYPE_WEBSITE_DATA_MANAGER, nullptr));
    353     manager->priv->websiteDataStore = API::WebsiteDataStore::create(WTFMove(configuration));
     353    manager->priv->websiteDataStore = API::WebsiteDataStore::createLegacy(WTFMove(configuration));
    354354
    355355    return manager;
     
    370370            API::WebsiteDataStore::defaultWebSQLDatabaseDirectory() : WebCore::stringFromFileSystemRepresentation(priv->webSQLDirectory.get());
    371371        configuration.mediaKeysStorageDirectory = API::WebsiteDataStore::defaultMediaKeysStorageDirectory();
    372         priv->websiteDataStore = API::WebsiteDataStore::create(WTFMove(configuration));
     372        priv->websiteDataStore = API::WebsiteDataStore::createLegacy(WTFMove(configuration));
    373373    }
    374374
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r215923 r215941  
    490490    m_process->addMessageReceiver(Messages::WebPageProxy::messageReceiverName(), m_pageID, *this);
    491491
    492     if (m_sessionID.isEphemeral()) {
    493         m_process->processPool().sendToNetworkingProcess(Messages::NetworkProcess::EnsurePrivateBrowsingSession(m_sessionID));
    494         m_process->processPool().sendToAllProcesses(Messages::WebProcess::EnsurePrivateBrowsingSession(m_sessionID));
    495     }
    496 
    497492#if PLATFORM(COCOA)
    498493    const CFIndex activityStateChangeRunLoopOrder = (CFIndex)RunLoopObserver::WellKnownRunLoopOrders::CoreAnimationCommit - 1;
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r215771 r215941  
    302302
    303303    uint64_t pageID() const { return m_pageID; }
     304
     305    // FIXME: Don't keep a separate sessionID - Rely on the WebsiteDataStore
    304306    WebCore::SessionID sessionID() const { return m_sessionID; }
    305307
     
    18421844
    18431845    const uint64_t m_pageID;
     1846
     1847
     1848    // FIXME: Don't keep a separate sessionID - Rely on the WebsiteDataStore
    18441849    const WebCore::SessionID m_sessionID;
    18451850
  • trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp

    r215923 r215941  
    6969#include "WebProcessProxy.h"
    7070#include "WebsiteDataStore.h"
     71#include "WebsiteDataStoreParameters.h"
    7172#include <WebCore/ApplicationCacheStorage.h>
    7273#include <WebCore/Language.h>
     
    230231    , m_memorySamplerEnabled(false)
    231232    , m_memorySamplerInterval(1400.0)
    232     , m_websiteDataStore(m_configuration->shouldHaveLegacyDataStore() ? API::WebsiteDataStore::create(legacyWebsiteDataStoreConfiguration(m_configuration)) : API::WebsiteDataStore::defaultDataStore())
     233    , m_websiteDataStore(m_configuration->shouldHaveLegacyDataStore() ? API::WebsiteDataStore::createLegacy(legacyWebsiteDataStoreConfiguration(m_configuration)) : API::WebsiteDataStore::defaultDataStore())
    233234#if PLATFORM(MAC)
    234235    , m_highPerformanceGraphicsUsageSampler(std::make_unique<HighPerformanceGraphicsUsageSampler>(*this))
     
    571572            networkProcess()->send(Messages::NetworkProcess::EnsurePrivateBrowsingSession(SessionID::legacyPrivateSessionID()), 0);
    572573        else
    573             networkProcess()->send(Messages::NetworkProcess::DestroyPrivateBrowsingSession(SessionID::legacyPrivateSessionID()), 0);
     574            networkProcess()->send(Messages::NetworkProcess::DestroySession(SessionID::legacyPrivateSessionID()), 0);
    574575    }
    575576
     
    577578        sendToAllProcesses(Messages::WebProcess::EnsurePrivateBrowsingSession(SessionID::legacyPrivateSessionID()));
    578579    else
    579         sendToAllProcesses(Messages::WebProcess::DestroyPrivateBrowsingSession(SessionID::legacyPrivateSessionID()));
     580        sendToAllProcesses(Messages::WebProcess::DestroySession(SessionID::legacyPrivateSessionID()));
    580581}
    581582
     
    930931    auto result = m_sessionToPagesMap.add(page.sessionID(), HashSet<WebPageProxy*>()).iterator->value.add(&page);
    931932    ASSERT_UNUSED(result, result.isNewEntry);
     933
     934    auto sessionID = page.sessionID();
     935    if (sessionID.isEphemeral()) {
     936        sendToNetworkingProcess(Messages::NetworkProcess::EnsurePrivateBrowsingSession(sessionID));
     937        page.process().send(Messages::WebProcess::EnsurePrivateBrowsingSession(sessionID), 0);
     938    } else if (sessionID != SessionID::defaultSessionID()) {
     939        sendToNetworkingProcess(Messages::NetworkProcess::AddWebsiteDataStore(page.websiteDataStore().parameters()));
     940        page.process().send(Messages::WebProcess::AddWebsiteDataStore(page.websiteDataStore().parameters()), 0);
     941    }
    932942}
    933943
     
    948958
    949959        // The last user of this non-default SessionID is gone, so clean it up in the child processes.
    950 
    951         // FIXME: Remove this ASSERT and change these messages once multiple persistent sessions exist.
    952         ASSERT(sessionID.isEphemeral());
    953         networkProcess()->send(Messages::NetworkProcess::DestroyPrivateBrowsingSession(sessionID), 0);
    954         page.process().send(Messages::WebProcess::DestroyPrivateBrowsingSession(sessionID), 0);
     960        networkProcess()->send(Messages::NetworkProcess::DestroySession(sessionID), 0);
     961        page.process().send(Messages::WebProcess::DestroySession(sessionID), 0);
    955962    }
    956963}
  • trunk/Source/WebKit2/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm

    r199088 r215941  
    2929#import "StorageManager.h"
    3030#import "WebResourceLoadStatisticsStore.h"
     31#import "WebsiteDataStoreParameters.h"
     32#import <WebCore/CFNetworkSPI.h>
    3133#import <WebCore/SearchPopupMenuCocoa.h>
    3234#import <wtf/NeverDestroyed.h>
     
    4547
    4648    return dataStoresWithStorageManagers;
     49}
     50
     51WebsiteDataStoreParameters WebsiteDataStore::parameters()
     52{
     53    WebsiteDataStoreParameters parameters;
     54
     55    parameters.sessionID = m_sessionID;
     56
     57#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
     58    if (m_uiProcessCookieStorageIdentifier.isEmpty()) {
     59        auto cookiePath = resolvedCookieStorageDirectory().utf8();
     60        auto url = adoptCF(CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (const UInt8 *)cookiePath.data(), (CFIndex)cookiePath.length(), true));
     61        m_cfCookieStorage = adoptCF(CFHTTPCookieStorageCreateFromFile(kCFAllocatorDefault, url.get(), nullptr));
     62        auto cfData = adoptCF(CFHTTPCookieStorageCreateIdentifyingData(kCFAllocatorDefault, m_cfCookieStorage.get()));
     63
     64        m_uiProcessCookieStorageIdentifier.append(CFDataGetBytePtr(cfData.get()), CFDataGetLength(cfData.get()));
     65    }
     66
     67    parameters.uiProcessCookieStorageIdentifier = m_uiProcessCookieStorageIdentifier;
     68#endif // PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
     69
     70#if PLATFORM(IOS)
     71    String cookieStorageDirectory = resolvedCookieStorageDirectory();
     72    if (!cookieStorageDirectory.isEmpty())
     73        SandboxExtension::createHandleForReadWriteDirectory(cookieStorageDirectory, parameters.cookieStorageDirectoryExtensionHandle);
     74#endif
     75
     76    return parameters;
    4777}
    4878
  • trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp

    r215907 r215941  
    3737#include "WebResourceLoadStatisticsStoreMessages.h"
    3838#include "WebsiteData.h"
     39#include "WebsiteDataStoreParameters.h"
    3940#include <WebCore/ApplicationCacheStorage.h>
    4041#include <WebCore/DatabaseTracker.h>
     
    6465}
    6566
    66 Ref<WebsiteDataStore> WebsiteDataStore::create(Configuration configuration)
    67 {
    68     return adoptRef(*new WebsiteDataStore(WTFMove(configuration)));
    69 }
    70 
    71 WebsiteDataStore::WebsiteDataStore(Configuration configuration)
     67Ref<WebsiteDataStore> WebsiteDataStore::create(Configuration configuration, WebCore::SessionID sessionID)
     68{
     69    return adoptRef(*new WebsiteDataStore(WTFMove(configuration), sessionID));
     70}
     71
     72WebsiteDataStore::WebsiteDataStore(Configuration configuration, WebCore::SessionID sessionID)
    7273    : m_identifier(generateIdentifier())
    73     , m_sessionID(WebCore::SessionID::defaultSessionID())
     74    , m_sessionID(sessionID)
    7475    , m_configuration(WTFMove(configuration))
    7576    , m_storageManager(StorageManager::create(m_configuration.localStorageDirectory))
     
    9394    platformDestroy();
    9495
    95     if (m_sessionID.isEphemeral()) {
     96    if (m_sessionID.isValid() && m_sessionID != WebCore::SessionID::defaultSessionID()) {
    9697        for (auto& processPool : WebProcessPool::allProcessPools())
    97             processPool->sendToNetworkingProcess(Messages::NetworkProcess::DestroyPrivateBrowsingSession(m_sessionID));
     98            processPool->sendToNetworkingProcess(Messages::NetworkProcess::DestroySession(m_sessionID));
    9899    }
    99100}
     
    115116    m_resolvedConfiguration.mediaKeysStorageDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.mediaKeysStorageDirectory);
    116117    m_resolvedConfiguration.webSQLDatabaseDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.webSQLDatabaseDirectory);
     118    m_resolvedConfiguration.cookieStorageDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.cookieStorageDirectory);
    117119
    118120    if (!m_configuration.javaScriptConfigurationDirectory.isEmpty())
     
    12361238}
    12371239
    1238 }
     1240#if !PLATFORM(COCOA)
     1241WebsiteDataStoreParameters WebsiteDataStore::parameters()
     1242{
     1243    // FIXME: Implement.
     1244
     1245    return { };
     1246}
     1247#endif
     1248
     1249}
  • trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h

    r215897 r215941  
    3838#include <wtf/text/WTFString.h>
    3939
     40#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
     41#include <WebCore/CFNetworkSPI.h>
     42#endif
     43
    4044namespace WebCore {
    4145class SecurityOrigin;
     
    5155enum class WebsiteDataType;
    5256struct WebsiteDataRecord;
     57struct WebsiteDataStoreParameters;
    5358
    5459#if ENABLE(NETSCAPE_PLUGIN_API)
     
    7378    };
    7479    static Ref<WebsiteDataStore> createNonPersistent();
    75     static Ref<WebsiteDataStore> create(Configuration);
     80    static Ref<WebsiteDataStore> create(Configuration, WebCore::SessionID);
    7681    virtual ~WebsiteDataStore();
    7782
     
    109114    bool isAssociatedProcessPool(WebProcessPool&) const;
    110115
     116    WebsiteDataStoreParameters parameters();
     117
    111118private:
    112119    explicit WebsiteDataStore(WebCore::SessionID);
    113     explicit WebsiteDataStore(Configuration);
     120    explicit WebsiteDataStore(Configuration, WebCore::SessionID);
    114121
    115122    // WebProcessLifetimeObserver.
     
    146153
    147154    Ref<WorkQueue> m_queue;
     155
     156#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
     157    Vector<uint8_t> m_uiProcessCookieStorageIdentifier;
     158    RetainPtr<CFHTTPCookieStorageRef> m_cfCookieStorage;
     159#endif
    148160};
    149161
  • trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r215653 r215941  
    934934                511B24AA132E097200065A0C /* WebIconDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511B24A8132E097200065A0C /* WebIconDatabase.cpp */; };
    935935                511B24AB132E097200065A0C /* WebIconDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 511B24A9132E097200065A0C /* WebIconDatabase.h */; };
     936                511F7D411EB1BCF500E47B83 /* WebsiteDataStoreParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 511F7D401EB1BCEE00E47B83 /* WebsiteDataStoreParameters.h */; };
     937                511F7D421EB1BCF800E47B83 /* WebsiteDataStoreParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511F7D3F1EB1BCEE00E47B83 /* WebsiteDataStoreParameters.cpp */; };
    936938                511F8A7B138B460900A95F44 /* SecItemShimLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 511F8A77138B460900A95F44 /* SecItemShimLibrary.h */; };
    937939                511F8A81138B485D00A95F44 /* SecItemShimLibrary.mm in Sources */ = {isa = PBXBuildFile; fileRef = 511F8A78138B460900A95F44 /* SecItemShimLibrary.mm */; };
     
    31653167                511B24A8132E097200065A0C /* WebIconDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebIconDatabase.cpp; sourceTree = "<group>"; };
    31663168                511B24A9132E097200065A0C /* WebIconDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebIconDatabase.h; sourceTree = "<group>"; };
     3169                511F7D3F1EB1BCEE00E47B83 /* WebsiteDataStoreParameters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebsiteDataStoreParameters.cpp; sourceTree = "<group>"; };
     3170                511F7D401EB1BCEE00E47B83 /* WebsiteDataStoreParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebsiteDataStoreParameters.h; sourceTree = "<group>"; };
    31673171                511F8A77138B460900A95F44 /* SecItemShimLibrary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SecItemShimLibrary.h; path = ../../WebProcess/mac/SecItemShimLibrary.h; sourceTree = "<group>"; };
    31683172                511F8A78138B460900A95F44 /* SecItemShimLibrary.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SecItemShimLibrary.mm; path = ../../WebProcess/mac/SecItemShimLibrary.mm; sourceTree = "<group>"; };
     
    50095013                                3760881D150413E900FC82C7 /* WebRenderObject.h */,
    50105014                                5C9E567F1DF7930900C9EE33 /* WebsitePolicies.h */,
     5015                                511F7D3F1EB1BCEE00E47B83 /* WebsiteDataStoreParameters.cpp */,
     5016                                511F7D401EB1BCEE00E47B83 /* WebsiteDataStoreParameters.h */,
    50115017                                8360349D1ACB34D600626549 /* WebSQLiteDatabaseTracker.cpp */,
    50125018                                8360349E1ACB34D600626549 /* WebSQLiteDatabaseTracker.h */,
     
    80598065                        name = cache;
    80608066                        path = NetworkProcess/cache;
    8061                         sourceTree = "<group>";
    8062                 };
    8063                 F4D7BCCA1EA494FA00C421D3 /* Recovered References */ = {
    8064                         isa = PBXGroup;
    8065                         children = (
    8066                                 C58CDF281887548B00871536 /* InteractionInformationAtPosition.h */,
    8067                         );
    8068                         name = "Recovered References";
    80698067                        sourceTree = "<group>";
    80708068                };
     
    84288426                                5C1426F01C23F80900D41183 /* NetworkResourceLoadParameters.h in Headers */,
    84298427                                413075AC1DE85F370039EC69 /* NetworkRTCMonitor.h in Headers */,
     8428                                511F7D411EB1BCF500E47B83 /* WebsiteDataStoreParameters.h in Headers */,
    84308429                                41DC45961E3D6E2200B11F51 /* NetworkRTCProvider.h in Headers */,
    84318430                                413075AB1DE85F330039EC69 /* NetworkRTCSocket.h in Headers */,
     
    1013210131                                1A64245F12DE29A100CAAE2C /* UpdateInfo.cpp in Sources */,
    1013310132                                1AC1336718565B5700F3EC05 /* UserData.cpp in Sources */,
     10133                                511F7D421EB1BCF800E47B83 /* WebsiteDataStoreParameters.cpp in Sources */,
    1013410134                                07297F9E1C17BBEA003F0735 /* UserMediaPermissionCheckProxy.cpp in Sources */,
    1013510135                                15739BBC1B42040300D258C1 /* UserMediaPermissionRequestManager.cpp in Sources */,
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h

    r197563 r215941  
    3434namespace WebKit {
    3535
     36struct WebsiteDataStoreParameters;
     37
    3638class WebFrameNetworkingContext : public WebCore::FrameNetworkingContext {
    3739public:
     
    4345    // FIXME: remove platform-specific code and use SessionTracker
    4446    static void ensurePrivateBrowsingSession(WebCore::SessionID);
     47    static void ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&&);
    4548
    4649    static void setCookieAcceptPolicyForAllContexts(HTTPCookieAcceptPolicy);
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm

    r207813 r215941  
    3232#include "WebPage.h"
    3333#include "WebProcess.h"
     34#include "WebsiteDataStoreParameters.h"
    3435#include <WebCore/CFNetworkSPI.h>
    3536#include <WebCore/Frame.h>
     
    6364    auto networkSession = NetworkSession::create(sessionID);
    6465    SessionTracker::setSession(sessionID, WTFMove(networkSession));
     66#endif
     67}
     68
     69void WebFrameNetworkingContext::ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&& parameters)
     70{
     71    if (NetworkStorageSession::storageSession(parameters.sessionID))
     72        return;
     73
     74    String base;
     75    if (SessionTracker::getIdentifierBase().isNull())
     76        base = [[NSBundle mainBundle] bundleIdentifier];
     77    else
     78        base = SessionTracker::getIdentifierBase();
     79
     80#if PLATFORM(IOS)
     81    SandboxExtension::consumePermanently(parameters.cookieStorageDirectoryExtensionHandle);
     82#endif
     83
     84    RetainPtr<CFHTTPCookieStorageRef> uiProcessCookieStorage;
     85
     86#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
     87    RetainPtr<CFDataRef> cookieStorageData = adoptCF(CFDataCreate(kCFAllocatorDefault, parameters.uiProcessCookieStorageIdentifier.data(), parameters.uiProcessCookieStorageIdentifier.size()));
     88    uiProcessCookieStorage = adoptCF(CFHTTPCookieStorageCreateFromIdentifyingData(kCFAllocatorDefault, cookieStorageData.get()));
     89#endif
     90
     91    NetworkStorageSession::ensureSession(parameters.sessionID, base + '.' + String::number(parameters.sessionID.sessionID()), WTFMove(uiProcessCookieStorage));
     92
     93#if USE(NETWORK_SESSION)
     94    auto networkSession = NetworkSession::create(parameters.sessionID);
     95    SessionTracker::setSession(parameters.sessionID, WTFMove(networkSession));
    6596#endif
    6697}
     
    110141            return *storageSession;
    111142        // Some requests may still be coming shortly after WebProcess was told to destroy its session.
    112         LOG_ERROR("Invalid session ID. Please file a bug unless you just disabled private browsing, in which case it's an expected race.");
     143        LOG_ERROR("WEB Invalid session ID. Please file a bug unless you just disabled private browsing, in which case it's an expected race.");
    113144    }
    114145    return NetworkStorageSession::defaultStorageSession();
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp

    r212626 r215941  
    5353}
    5454
     55void WebFrameNetworkingContext::ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&&)
     56{
     57    // FIXME: Implement
     58}
     59
    5560WebFrameNetworkingContext::WebFrameNetworkingContext(WebFrame* frame)
    5661    : FrameNetworkingContext(frame->coreFrame())
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h

    r212626 r215941  
    3535class WebFrame;
    3636class WebFrameLoaderClient;
     37struct WebsiteDataStoreParameters;
    3738
    3839class WebFrameNetworkingContext : public WebCore::FrameNetworkingContext {
     
    4445
    4546    static void ensurePrivateBrowsingSession(WebCore::SessionID);
     47    static void ensureWebsiteDataStoreSession(WebsiteDataStoreParameters&&);
    4648
    4749    WebFrameLoaderClient* webFrameLoaderClient() const;
  • trunk/Source/WebKit2/WebProcess/WebProcess.cpp

    r215355 r215941  
    514514}
    515515
    516 void WebProcess::destroyPrivateBrowsingSession(SessionID sessionID)
     516void WebProcess::addWebsiteDataStore(WebsiteDataStoreParameters&& parameters)
     517{
     518    WebFrameNetworkingContext::ensureWebsiteDataStoreSession(WTFMove(parameters));
     519}
     520
     521void WebProcess::destroySession(SessionID sessionID)
    517522{
    518523    SessionTracker::destroySession(sessionID);
  • trunk/Source/WebKit2/WebProcess/WebProcess.h

    r213857 r215941  
    9696struct WebProcessCreationParameters;
    9797struct WebsiteData;
     98struct WebsiteDataStoreParameters;
    9899
    99100#if ENABLE(DATABASE_PROCESS)
     
    181182
    182183    void ensurePrivateBrowsingSession(WebCore::SessionID);
    183     void destroyPrivateBrowsingSession(WebCore::SessionID);
    184184    void ensureLegacyPrivateBrowsingSessionInNetworkProcess();
     185    void addWebsiteDataStore(WebsiteDataStoreParameters&&);
     186    void destroySession(WebCore::SessionID);
    185187
    186188    void pageDidEnterWindow(uint64_t pageID);
  • trunk/Source/WebKit2/WebProcess/WebProcess.messages.in

    r213824 r215941  
    4747    ClearCachedCredentials()
    4848
    49     // Legacy private browsing session is per process. Individual pages or page groups may use the private session or the default one as appropriate.
    5049    EnsurePrivateBrowsingSession(WebCore::SessionID sessionID)
    51     DestroyPrivateBrowsingSession(WebCore::SessionID sessionID)
     50    AddWebsiteDataStore(struct WebKit::WebsiteDataStoreParameters websiteDataStoreParameters);
     51    DestroySession(WebCore::SessionID sessionID)
    5252
    5353    # Plug-ins.
  • trunk/Source/WebKit2/WebProcess/cocoa/WebProcessCocoa.mm

    r215123 r215941  
    4646#import "WebProcessCreationParameters.h"
    4747#import "WebProcessProxyMessages.h"
     48#import "WebsiteDataStoreParameters.h"
    4849#import <JavaScriptCore/Options.h>
    4950#import <WebCore/AXObjectCache.h>
  • trunk/Tools/ChangeLog

    r215939 r215941  
     12017-04-28  Brady Eidson  <beidson@apple.com>
     2
     3        Start of support for multiple WebsiteDataStore/SessionIDs per process
     4        https://bugs.webkit.org/show_bug.cgi?id=171422
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
     9        (TEST):
     10
    1112017-04-28  Youenn Fablet  <youenn@apple.com>
    212
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm

    r215897 r215941  
    8080    NSURL *cookieStoragePath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/CustomWebsiteData/CookieStorage/" stringByExpandingTildeInPath]];
    8181
     82    NSURL *defaultSQLPath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/WebsiteData/WebSQL/" stringByExpandingTildeInPath]];
     83    NSURL *defaultIDBPath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/WebsiteData/IndexedDB/" stringByExpandingTildeInPath]];
     84    NSURL *defaultLocalStoragePath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/WebsiteData/LocalStorage/" stringByExpandingTildeInPath]];
     85
    8286    [[NSFileManager defaultManager] removeItemAtURL:sqlPath error:nil];
    8387    [[NSFileManager defaultManager] removeItemAtURL:idbPath error:nil];
    8488    [[NSFileManager defaultManager] removeItemAtURL:localStoragePath error:nil];
    8589    [[NSFileManager defaultManager] removeItemAtURL:cookieStoragePath error:nil];
     90    [[NSFileManager defaultManager] removeItemAtURL:defaultSQLPath error:nil];
     91    [[NSFileManager defaultManager] removeItemAtURL:defaultIDBPath error:nil];
     92    [[NSFileManager defaultManager] removeItemAtURL:defaultLocalStoragePath error:nil];
    8693
    8794    EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:sqlPath.path]);
     
    8996    EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:localStoragePath.path]);
    9097    EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:cookieStoragePath.path]);
     98    EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:defaultSQLPath.path]);
     99    EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:defaultIDBPath.path]);
     100    EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:defaultLocalStoragePath.path]);
    91101
    92102    _WKWebsiteDataStoreConfiguration *websiteDataStoreConfiguration = [[_WKWebsiteDataStoreConfiguration alloc] init];
     
    112122    EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:sqlPath.path]);
    113123    EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:localStoragePath.path]);
    114    
    115     // FIXME: Once this API works this should be true, and there should be a file that contains the bytes "testkey=value"
     124
     125    // FIXME: This should be true, but comes up false. Possibly a CFNetwork issue. Being explored in <rdar://problem/31666275>
    116126    EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:cookieStoragePath.path]);
    117    
    118     // FIXME: <rdar://problem/30785618> - We don't yet support IDB database processes at custom paths per WebsiteDataStore
    119     // EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:idbPath]);
     127
     128    // FIXME: <rdar://problem/30785618> - We don't yet support IDB database processes at custom paths per WebsiteDataStore (These should be flipped)
     129    EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:idbPath.path]);
     130    EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:defaultIDBPath.path]);
     131
     132    // FIXME: The default SQL and LocalStorage paths are being used for something, but they shouldn't be. (theses should be false, not true)
     133    EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:defaultSQLPath.path]);
     134    EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:defaultLocalStoragePath.path]);
    120135}
    121136
Note: See TracChangeset for help on using the changeset viewer.