Changeset 213877 in webkit


Ignore:
Timestamp:
Mar 13, 2017 4:00:49 PM (7 years ago)
Author:
beidson@apple.com
Message:

WKWebView provides no access to cookies.
https://bugs.webkit.org/show_bug.cgi?id=140191

Reviewed by Tim Horton.

Source/WebCore:

Covered by API tests.

  • platform/Cookie.h:
  • platform/network/NetworkStorageSession.h:
  • platform/network/cocoa/NetworkStorageSessionCocoa.mm:

(WebCore::NetworkStorageSession::setCookie):
(WebCore::NetworkStorageSession::deleteCookie):
(WebCore::nsCookiesToCookieVector):
(WebCore::NetworkStorageSession::getAllCookies):
(WebCore::NetworkStorageSession::getCookies):

  • platform/network/soup/NetworkStorageSessionSoup.cpp:

(WebCore::NetworkStorageSession::deleteCookie):
(WebCore::NetworkStorageSession::getAllCookies):
(WebCore::NetworkStorageSession::getCookies):

Source/WebKit2:

This adds a new WKHTTPCookieManager SPI.
It follows the NSHTTPCookieStorage API but asynchronous (with completion handlers).

  • CMakeLists.txt:
  • WebKit2.xcodeproj/project.pbxproj:
  • Shared/API/APIObject.h:
  • Shared/Cocoa/APIObject.mm:

(API::Object::newObject):

  • UIProcess/API/APIHTTPCookieStorage.cpp: Added.

(API::HTTPCookieStorage::HTTPCookieStorage):
(API::HTTPCookieStorage::~HTTPCookieStorage):
(API::HTTPCookieStorage::cookies):
(API::HTTPCookieStorage::setCookie):
(API::HTTPCookieStorage::setCookies):
(API::HTTPCookieStorage::deleteCookie):
(API::HTTPCookieStorage::removeCookiesSinceDate):
(API::HTTPCookieStorage::setHTTPCookieAcceptPolicy):
(API::HTTPCookieStorage::getHTTPCookieAcceptPolicy):

  • UIProcess/API/APIHTTPCookieStorage.h: Added.
  • UIProcess/API/APIWebsiteDataStore.cpp:

(API::WebsiteDataStore::defaultDataStore):
(API::WebsiteDataStore::httpCookieStorage):

  • UIProcess/API/APIWebsiteDataStore.h:
  • UIProcess/API/C/WKCookieManager.cpp:

(WKCookieManagerDeleteAllCookiesModifiedAfterDate):
(WKCookieManagerSetHTTPCookieAcceptPolicy):
(WKCookieManagerGetHTTPCookieAcceptPolicy):

  • UIProcess/API/C/WKWebsiteDataStoreRef.cpp:

(WKWebsiteDataStoreGetDefaultDataStore):

  • UIProcess/API/Cocoa/WKProcessPool.mm:

(-[WKProcessPool _setCookieAcceptPolicy:]):

  • UIProcess/API/Cocoa/WKWebsiteDataStore.mm:

(+[WKWebsiteDataStore defaultDataStore]):
(-[WKWebsiteDataStore _httpCookieStorage]):

  • UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
  • UIProcess/API/Cocoa/WKHTTPCookieStorage.h:
  • UIProcess/API/Cocoa/WKHTTPCookieStorage.mm: Added.

(coreCookiesToNSCookies):
(-[WKHTTPCookieStorage dealloc]):
(-[WKHTTPCookieStorage fetchCookies:]):
(-[WKHTTPCookieStorage fetchCookiesForURL:completionHandler:]):
(-[WKHTTPCookieStorage setCookie:completionHandler:]):
(-[WKHTTPCookieStorage deleteCookie:completionHandler:]):
(-[WKHTTPCookieStorage setCookies:forURL:mainDocumentURL:completionHandler:]):
(-[WKHTTPCookieStorage removeCookiesSinceDate:completionHandler:]):
(-[WKHTTPCookieStorage setCookieAcceptPolicy:completionHandler:]):
(kitCookiePolicyToNSCookiePolicy):
(-[WKHTTPCookieStorage fetchCookieAcceptPolicy:]):
(-[WKHTTPCookieStorage _apiObject]):

  • UIProcess/API/Cocoa/WKHTTPCookieStorageInternal.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h.

(WebKit::wrapper):

  • UIProcess/Automation/WebAutomationSession.cpp:

(WebKit::WebAutomationSession::addSingleCookie):

  • UIProcess/WebCookieManagerProxy.cpp:

(WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
(WebKit::WebCookieManagerProxy::deleteCookiesForHostname):
(WebKit::WebCookieManagerProxy::deleteAllCookies):
(WebKit::WebCookieManagerProxy::deleteCookie):
(WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
(WebKit::WebCookieManagerProxy::setCookie):
(WebKit::WebCookieManagerProxy::setCookies):
(WebKit::WebCookieManagerProxy::getAllCookies):
(WebKit::WebCookieManagerProxy::getCookies):
(WebKit::WebCookieManagerProxy::didSetCookies):
(WebKit::WebCookieManagerProxy::didGetCookies):
(WebKit::WebCookieManagerProxy::didDeleteCookies):
(WebKit::WebCookieManagerProxy::startObservingCookieChanges):
(WebKit::WebCookieManagerProxy::stopObservingCookieChanges):
(WebKit::WebCookieManagerProxy::setCookieObserverCallback):
(WebKit::WebCookieManagerProxy::cookiesDidChange):
(WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
(WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
(WebKit::WebCookieManagerProxy::didGetHTTPCookieAcceptPolicy):
(WebKit::WebCookieManagerProxy::didSetHTTPCookieAcceptPolicy):

  • UIProcess/WebCookieManagerProxy.h:
  • UIProcess/WebCookieManagerProxy.messages.in:
  • UIProcess/WebFrameProxy.h:
  • UIProcess/WebProcessPool.cpp:
  • UIProcess/WebProcessPool.h:
  • UIProcess/WebsiteData/WebsiteDataStore.cpp:

(WebKit::WebsiteDataStore::processPoolForCookieStorageOperations):
(WebKit::WebsiteDataStore::processPools):

  • UIProcess/WebsiteData/WebsiteDataStore.h:
  • WebProcess/Cookies/WebCookieManager.cpp:

(WebKit::WebCookieManager::deleteCookie):
(WebKit::WebCookieManager::deleteAllCookiesModifiedSince):
(WebKit::WebCookieManager::getAllCookies):
(WebKit::WebCookieManager::getCookies):
(WebKit::WebCookieManager::setCookie):
(WebKit::WebCookieManager::setCookies):
(WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):

  • WebProcess/Cookies/WebCookieManager.h:
  • WebProcess/Cookies/WebCookieManager.messages.in:

Tools:

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
Location:
trunk
Files:
5 added
33 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r213873 r213877  
     12017-03-13  Brady Eidson  <beidson@apple.com>
     2
     3        WKWebView provides no access to cookies.
     4        https://bugs.webkit.org/show_bug.cgi?id=140191
     5
     6        Reviewed by Tim Horton.
     7
     8        Covered by API tests.
     9
     10        * platform/Cookie.h:
     11
     12        * platform/network/NetworkStorageSession.h:
     13        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
     14        (WebCore::NetworkStorageSession::setCookie):
     15        (WebCore::NetworkStorageSession::deleteCookie):
     16        (WebCore::nsCookiesToCookieVector):
     17        (WebCore::NetworkStorageSession::getAllCookies):
     18        (WebCore::NetworkStorageSession::getCookies):
     19
     20        * platform/network/soup/NetworkStorageSessionSoup.cpp:
     21        (WebCore::NetworkStorageSession::deleteCookie):
     22        (WebCore::NetworkStorageSession::getAllCookies):
     23        (WebCore::NetworkStorageSession::getCookies):
     24
    1252017-03-13  Devin Rousso  <webkit@devinrousso.com>
    226
  • trunk/Source/WebCore/platform/Cookie.h

    r213778 r213877  
    5959#ifdef __OBJC__
    6060    WEBCORE_EXPORT Cookie(NSHTTPCookie *);
    61     operator NSHTTPCookie *() const;
     61    WEBCORE_EXPORT operator NSHTTPCookie *() const;
    6262#endif
    6363
  • trunk/Source/WebCore/platform/network/NetworkStorageSession.h

    r213871 r213877  
    101101#endif
    102102
     103    WEBCORE_EXPORT void setCookie(const Cookie&);
    103104    WEBCORE_EXPORT void setCookies(const Vector<Cookie>&, const URL&, const URL& mainDocumentURL);
     105    WEBCORE_EXPORT void deleteCookie(const Cookie&);
     106    WEBCORE_EXPORT Vector<Cookie> getAllCookies();
     107    WEBCORE_EXPORT Vector<Cookie> getCookies(const URL&);
    104108
    105109private:
  • trunk/Source/WebCore/platform/network/cocoa/NetworkStorageSessionCocoa.mm

    r213759 r213877  
    3333namespace WebCore {
    3434
     35void NetworkStorageSession::setCookie(const Cookie& cookie)
     36{
     37    BEGIN_BLOCK_OBJC_EXCEPTIONS;
     38    [nsCookieStorage() setCookie:(NSHTTPCookie *)cookie];
     39    END_BLOCK_OBJC_EXCEPTIONS;
     40}
     41
    3542void NetworkStorageSession::setCookies(const Vector<Cookie>& cookies, const URL& url, const URL& mainDocumentURL)
    3643{
     
    4249    [nsCookieStorage() setCookies:nsCookies.get() forURL:(NSURL *)url mainDocumentURL:(NSURL *)mainDocumentURL];
    4350    END_BLOCK_OBJC_EXCEPTIONS;
     51}
     52
     53void NetworkStorageSession::deleteCookie(const Cookie& cookie)
     54{
     55    [nsCookieStorage() deleteCookie:(NSHTTPCookie *)cookie];
     56}
     57
     58static Vector<Cookie> nsCookiesToCookieVector(NSArray<NSHTTPCookie *> *nsCookies)
     59{
     60    Vector<Cookie> cookies;
     61    cookies.reserveInitialCapacity(nsCookies.count);
     62    for (NSHTTPCookie *nsCookie in nsCookies)
     63        cookies.uncheckedAppend(nsCookie);
     64
     65    return cookies;
     66}
     67
     68Vector<Cookie> NetworkStorageSession::getAllCookies()
     69{
     70    return nsCookiesToCookieVector(nsCookieStorage().cookies);
     71}
     72
     73Vector<Cookie> NetworkStorageSession::getCookies(const URL& url)
     74{
     75    return nsCookiesToCookieVector([nsCookieStorage() cookiesForURL:(NSURL *)url]);
    4476}
    4577
  • trunk/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp

    r213759 r213877  
    305305}
    306306
     307void NetworkStorageSession::deleteCookie(const Cookie&)
     308{
     309    // FIXME: Implement for WK2 to use.
     310}
     311
     312Vector<Cookie> NetworkStorageSession::getAllCookies()
     313{
     314    // FIXME: Implement for WK2 to use.
     315}
     316
     317Vector<Cookie> NetworkStorageSession::getCookies(const URL&)
     318{
     319    // FIXME: Implement for WK2 to use.
     320}
    307321
    308322} // namespace WebCore
  • trunk/Source/WebKit2/CMakeLists.txt

    r213843 r213877  
    334334    UIProcess/API/APIExperimentalFeature.cpp
    335335    UIProcess/API/APIFrameInfo.cpp
     336    UIProcess/API/APIHTTPCookieStorage.cpp
    336337    UIProcess/API/APIHitTestResult.cpp
    337338    UIProcess/API/APINavigation.cpp
  • trunk/Source/WebKit2/ChangeLog

    r213871 r213877  
     12017-03-13  Brady Eidson  <beidson@apple.com>
     2
     3        WKWebView provides no access to cookies.
     4        https://bugs.webkit.org/show_bug.cgi?id=140191
     5
     6        Reviewed by Tim Horton.
     7
     8        This adds a new WKHTTPCookieManager SPI.
     9        It follows the NSHTTPCookieStorage API but asynchronous (with completion handlers).
     10       
     11        * CMakeLists.txt:
     12        * WebKit2.xcodeproj/project.pbxproj:
     13
     14        * Shared/API/APIObject.h:
     15        * Shared/Cocoa/APIObject.mm:
     16        (API::Object::newObject):
     17
     18        * UIProcess/API/APIHTTPCookieStorage.cpp: Added.
     19        (API::HTTPCookieStorage::HTTPCookieStorage):
     20        (API::HTTPCookieStorage::~HTTPCookieStorage):
     21        (API::HTTPCookieStorage::cookies):
     22        (API::HTTPCookieStorage::setCookie):
     23        (API::HTTPCookieStorage::setCookies):
     24        (API::HTTPCookieStorage::deleteCookie):
     25        (API::HTTPCookieStorage::removeCookiesSinceDate):
     26        (API::HTTPCookieStorage::setHTTPCookieAcceptPolicy):
     27        (API::HTTPCookieStorage::getHTTPCookieAcceptPolicy):
     28        * UIProcess/API/APIHTTPCookieStorage.h: Added.
     29
     30        * UIProcess/API/APIWebsiteDataStore.cpp:
     31        (API::WebsiteDataStore::defaultDataStore):
     32        (API::WebsiteDataStore::httpCookieStorage):
     33        * UIProcess/API/APIWebsiteDataStore.h:
     34
     35        * UIProcess/API/C/WKCookieManager.cpp:
     36        (WKCookieManagerDeleteAllCookiesModifiedAfterDate):
     37        (WKCookieManagerSetHTTPCookieAcceptPolicy):
     38        (WKCookieManagerGetHTTPCookieAcceptPolicy):
     39
     40        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
     41        (WKWebsiteDataStoreGetDefaultDataStore):
     42
     43        * UIProcess/API/Cocoa/WKProcessPool.mm:
     44        (-[WKProcessPool _setCookieAcceptPolicy:]):
     45
     46        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
     47        (+[WKWebsiteDataStore defaultDataStore]):
     48        (-[WKWebsiteDataStore _httpCookieStorage]):
     49        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
     50       
     51        * UIProcess/API/Cocoa/WKHTTPCookieStorage.h:
     52        * UIProcess/API/Cocoa/WKHTTPCookieStorage.mm: Added.
     53        (coreCookiesToNSCookies):
     54        (-[WKHTTPCookieStorage dealloc]):
     55        (-[WKHTTPCookieStorage fetchCookies:]):
     56        (-[WKHTTPCookieStorage fetchCookiesForURL:completionHandler:]):
     57        (-[WKHTTPCookieStorage setCookie:completionHandler:]):
     58        (-[WKHTTPCookieStorage deleteCookie:completionHandler:]):
     59        (-[WKHTTPCookieStorage setCookies:forURL:mainDocumentURL:completionHandler:]):
     60        (-[WKHTTPCookieStorage removeCookiesSinceDate:completionHandler:]):
     61        (-[WKHTTPCookieStorage setCookieAcceptPolicy:completionHandler:]):
     62        (kitCookiePolicyToNSCookiePolicy):
     63        (-[WKHTTPCookieStorage fetchCookieAcceptPolicy:]):
     64        (-[WKHTTPCookieStorage _apiObject]):
     65        * UIProcess/API/Cocoa/WKHTTPCookieStorageInternal.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h.
     66        (WebKit::wrapper):
     67
     68        * UIProcess/Automation/WebAutomationSession.cpp:
     69        (WebKit::WebAutomationSession::addSingleCookie):
     70
     71        * UIProcess/WebCookieManagerProxy.cpp:
     72        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
     73        (WebKit::WebCookieManagerProxy::deleteCookiesForHostname):
     74        (WebKit::WebCookieManagerProxy::deleteAllCookies):
     75        (WebKit::WebCookieManagerProxy::deleteCookie):
     76        (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
     77        (WebKit::WebCookieManagerProxy::setCookie):
     78        (WebKit::WebCookieManagerProxy::setCookies):
     79        (WebKit::WebCookieManagerProxy::getAllCookies):
     80        (WebKit::WebCookieManagerProxy::getCookies):
     81        (WebKit::WebCookieManagerProxy::didSetCookies):
     82        (WebKit::WebCookieManagerProxy::didGetCookies):
     83        (WebKit::WebCookieManagerProxy::didDeleteCookies):
     84        (WebKit::WebCookieManagerProxy::startObservingCookieChanges):
     85        (WebKit::WebCookieManagerProxy::stopObservingCookieChanges):
     86        (WebKit::WebCookieManagerProxy::setCookieObserverCallback):
     87        (WebKit::WebCookieManagerProxy::cookiesDidChange):
     88        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
     89        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
     90        (WebKit::WebCookieManagerProxy::didGetHTTPCookieAcceptPolicy):
     91        (WebKit::WebCookieManagerProxy::didSetHTTPCookieAcceptPolicy):
     92        * UIProcess/WebCookieManagerProxy.h:
     93        * UIProcess/WebCookieManagerProxy.messages.in:
     94
     95        * UIProcess/WebFrameProxy.h:
     96       
     97        * UIProcess/WebProcessPool.cpp:
     98        * UIProcess/WebProcessPool.h:
     99       
     100        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
     101        (WebKit::WebsiteDataStore::processPoolForCookieStorageOperations):
     102        (WebKit::WebsiteDataStore::processPools):
     103        * UIProcess/WebsiteData/WebsiteDataStore.h:
     104       
     105        * WebProcess/Cookies/WebCookieManager.cpp:
     106        (WebKit::WebCookieManager::deleteCookie):
     107        (WebKit::WebCookieManager::deleteAllCookiesModifiedSince):
     108        (WebKit::WebCookieManager::getAllCookies):
     109        (WebKit::WebCookieManager::getCookies):
     110        (WebKit::WebCookieManager::setCookie):
     111        (WebKit::WebCookieManager::setCookies):
     112        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
     113        * WebProcess/Cookies/WebCookieManager.h:
     114        * WebProcess/Cookies/WebCookieManager.messages.in:
     115
    11162017-03-13  John Wilander  <wilander@apple.com>
    2117
  • trunk/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp

    r210921 r213877  
    125125            parameters.cookiePersistentStorageType);
    126126    }
    127     supplement<WebCookieManager>()->setHTTPCookieAcceptPolicy(parameters.cookieAcceptPolicy);
     127    supplement<WebCookieManager>()->setHTTPCookieAcceptPolicy(parameters.cookieAcceptPolicy, 0);
    128128
    129129    if (!parameters.languages.isEmpty())
  • trunk/Source/WebKit2/Shared/API/APIObject.h

    r213696 r213877  
    117117        GeolocationManager,
    118118        GeolocationPermissionRequest,
     119        HTTPCookieStorage,
    119120        HitTestResult,
    120121        GeolocationPosition,
  • trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm

    r213696 r213877  
    3737#import "WKContentExtensionStoreInternal.h"
    3838#import "WKFrameInfoInternal.h"
     39#import "WKHTTPCookieStorageInternal.h"
    3940#import "WKNSArray.h"
    4041#import "WKNSData.h"
     
    179180        break;
    180181
     182    case Type::HTTPCookieStorage:
     183        wrapper = [WKHTTPCookieStorage alloc];
     184        break;
     185
    181186#if PLATFORM(MAC)
    182187    case Type::HitTestResult:
  • trunk/Source/WebKit2/UIProcess/API/APIWebsiteDataStore.cpp

    r213854 r213877  
    3232namespace API {
    3333
    34 RefPtr<WebsiteDataStore> WebsiteDataStore::defaultDataStore()
     34Ref<WebsiteDataStore> WebsiteDataStore::defaultDataStore()
    3535{
    3636    WebKit::InitializeWebKit2();
     
    3838    static WebsiteDataStore* defaultDataStore = adoptRef(new WebsiteDataStore(defaultDataStoreConfiguration())).leakRef();
    3939
    40     return defaultDataStore;
     40    return *defaultDataStore;
    4141}
    4242
     
    6363WebsiteDataStore::~WebsiteDataStore()
    6464{
     65}
     66
     67HTTPCookieStorage& WebsiteDataStore::httpCookieStorage()
     68{
     69    if (!m_apiHTTPCookieStorage)
     70        m_apiHTTPCookieStorage = HTTPCookieStorage::create(*this);
     71
     72    return *m_apiHTTPCookieStorage;
    6573}
    6674
  • trunk/Source/WebKit2/UIProcess/API/APIWebsiteDataStore.h

    r213854 r213877  
    2727#define APIWebsiteDataStore_h
    2828
    29 #include "APIObject.h"
     29#include "APIHTTPCookieStorage.h"
    3030#include "WebsiteDataStore.h"
    3131#include <WebCore/SessionID.h>
     
    3636class WebsiteDataStore final : public ObjectImpl<Object::Type::WebsiteDataStore> {
    3737public:
    38     static RefPtr<WebsiteDataStore> defaultDataStore();
     38    static Ref<WebsiteDataStore> defaultDataStore();
    3939    static Ref<WebsiteDataStore> createNonPersistentDataStore();
    4040    static Ref<WebsiteDataStore> create(WebKit::WebsiteDataStore::Configuration);
     
    5050
    5151    WebKit::WebsiteDataStore& websiteDataStore() { return *m_websiteDataStore; }
     52    HTTPCookieStorage& httpCookieStorage();
    5253
    5354    static String defaultApplicationCacheDirectory();
     
    7576
    7677    RefPtr<WebKit::WebsiteDataStore> m_websiteDataStore;
     78    RefPtr<HTTPCookieStorage> m_apiHTTPCookieStorage;
    7779};
    7880
  • trunk/Source/WebKit2/UIProcess/API/C/WKCookieManager.cpp

    r213623 r213877  
    6262
    6363    auto time = system_clock::time_point(duration_cast<system_clock::duration>(duration<double>(date)));
    64     toImpl(cookieManagerRef)->deleteAllCookiesModifiedSince(WebCore::SessionID::defaultSessionID(), time);
     64    toImpl(cookieManagerRef)->deleteAllCookiesModifiedSince(WebCore::SessionID::defaultSessionID(), time, [](CallbackBase::Error){});
    6565}
    6666
    6767void WKCookieManagerSetHTTPCookieAcceptPolicy(WKCookieManagerRef cookieManager, WKHTTPCookieAcceptPolicy policy)
    6868{
    69     toImpl(cookieManager)->setHTTPCookieAcceptPolicy(toHTTPCookieAcceptPolicy(policy));
     69    toImpl(cookieManager)->setHTTPCookieAcceptPolicy(WebCore::SessionID::defaultSessionID(), toHTTPCookieAcceptPolicy(policy), [](CallbackBase::Error){});
    7070}
    7171
    7272void WKCookieManagerGetHTTPCookieAcceptPolicy(WKCookieManagerRef cookieManager, void* context, WKCookieManagerGetHTTPCookieAcceptPolicyFunction callback)
    7373{
    74     toImpl(cookieManager)->getHTTPCookieAcceptPolicy(toGenericCallbackFunction<WKHTTPCookieAcceptPolicy, HTTPCookieAcceptPolicy>(context, callback));
     74    toImpl(cookieManager)->getHTTPCookieAcceptPolicy(WebCore::SessionID::defaultSessionID(), toGenericCallbackFunction<WKHTTPCookieAcceptPolicy, HTTPCookieAcceptPolicy>(context, callback));
    7575}
    7676
  • trunk/Source/WebKit2/UIProcess/API/C/WKWebsiteDataStoreRef.cpp

    r201081 r213877  
    3838WKWebsiteDataStoreRef WKWebsiteDataStoreGetDefaultDataStore()
    3939{
    40     return WebKit::toAPI(API::WebsiteDataStore::defaultDataStore().get());
     40    return WebKit::toAPI(API::WebsiteDataStore::defaultDataStore().ptr());
    4141}
    4242
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKHTTPCookieStorageInternal.h

    r213876 r213877  
    11/*
    2  * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
     2 * Copyright (C) 2017 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 #import <WebKit/WKWebsiteDataStore.h>
     26#import "WKHTTPCookieStorage.h"
    2727
    2828#if WK_API_ENABLED
    2929
    30 NS_ASSUME_NONNULL_BEGIN
     30#import "APIHTTPCookieStorage.h"
     31#import "WKObject.h"
    3132
    32 @class _WKWebsiteDataStoreConfiguration;
     33namespace WebKit {
    3334
    34 typedef NS_OPTIONS(NSUInteger, _WKWebsiteDataStoreFetchOptions) {
    35     _WKWebsiteDataStoreFetchOptionComputeSizes = 1 << 0,
    36 } WK_API_AVAILABLE(macosx(10.12), ios(10.0));
     35inline WKHTTPCookieStorage *wrapper(API::HTTPCookieStorage& cookieStorage)
     36{
     37    ASSERT([cookieStorage.wrapper() isKindOfClass:[WKHTTPCookieStorage class]]);
     38    return (WKHTTPCookieStorage *)cookieStorage.wrapper();
     39}
    3740
    38 @interface WKWebsiteDataStore (WKPrivate)
     41}
    3942
    40 - (instancetype)_initWithConfiguration:(_WKWebsiteDataStoreConfiguration *)configuration;
    41 
    42 - (void)_fetchDataRecordsOfTypes:(NSSet<NSString *> *)dataTypes withOptions:(_WKWebsiteDataStoreFetchOptions)options completionHandler:(void (^)(NSArray<WKWebsiteDataRecord *> *))completionHandler;
    43 
    44 @property (nonatomic, setter=_setResourceLoadStatisticsEnabled:) BOOL _resourceLoadStatisticsEnabled WK_API_AVAILABLE(macosx(10.12), ios(10.0));
    45 
     43@interface WKHTTPCookieStorage () <WKObject> {
     44@package
     45    API::ObjectStorage<API::HTTPCookieStorage> _cookieStorage;
     46}
    4647@end
    4748
    48 NS_ASSUME_NONNULL_END
    49 
    5049#endif
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm

    r205199 r213877  
    197197- (void)_setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)policy
    198198{
    199     _processPool->supplement<WebKit::WebCookieManagerProxy>()->setHTTPCookieAcceptPolicy(toHTTPCookieAcceptPolicy(policy));
     199    _processPool->supplement<WebKit::WebCookieManagerProxy>()->setHTTPCookieAcceptPolicy(WebCore::SessionID::defaultSessionID(), toHTTPCookieAcceptPolicy(policy), [](WebKit::CallbackBase::Error){});
    200200}
    201201
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStore.mm

    r213331 r213877  
    2929#if WK_API_ENABLED
    3030
     31#import "WKHTTPCookieStorageInternal.h"
    3132#import "WKNSArray.h"
    3233#import "WKWebsiteDataRecordInternal.h"
     
    3940+ (WKWebsiteDataStore *)defaultDataStore
    4041{
    41     return WebKit::wrapper(*API::WebsiteDataStore::defaultDataStore().get());
     42    return WebKit::wrapper(API::WebsiteDataStore::defaultDataStore().get());
    4243}
    4344
     
    195196}
    196197
     198- (WKHTTPCookieStorage *)_httpCookieStorage
     199{
     200    return WebKit::wrapper(_websiteDataStore->httpCookieStorage());
     201}
     202
    197203@end
    198204
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h

    r213241 r213877  
    3030NS_ASSUME_NONNULL_BEGIN
    3131
     32@class WKHTTPCookieStorage;
    3233@class _WKWebsiteDataStoreConfiguration;
    3334
     
    4445@property (nonatomic, setter=_setResourceLoadStatisticsEnabled:) BOOL _resourceLoadStatisticsEnabled WK_API_AVAILABLE(macosx(10.12), ios(10.0));
    4546
     47/*! @abstract Returns the cookie storage representing HTTP cookies in this website data store. */
     48@property (nonatomic, readonly) WKHTTPCookieStorage *_httpCookieStorage WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
     49
    4650@end
    4751
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp

    r212626 r213877  
    2828#include "WebKitWebsiteDataPrivate.h"
    2929#include "WebsiteDataRecord.h"
     30#include <WebCore/SessionID.h>
    3031#include <wtf/glib/GRefPtr.h>
    3132#include <wtf/text/CString.h>
     
    179180
    180181    for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager))
    181         processPool->supplement<WebCookieManagerProxy>()->setHTTPCookieAcceptPolicy(toHTTPCookieAcceptPolicy(policy));
     182        processPool->supplement<WebCookieManagerProxy>()->setHTTPCookieAcceptPolicy(WebCore::SessionID::defaultSessionID(), toHTTPCookieAcceptPolicy(policy), [](CallbackBase::Error){});
    182183}
    183184
     
    213214    }
    214215
    215     processPools[0]->supplement<WebCookieManagerProxy>()->getHTTPCookieAcceptPolicy(
     216    processPools[0]->supplement<WebCookieManagerProxy>()->getHTTPCookieAcceptPolicy(WebCore::SessionID::defaultSessionID(),
    216217        toGenericCallbackFunction<WKHTTPCookieAcceptPolicy, HTTPCookieAcceptPolicy>(task.leakRef(), webkitCookieManagerGetAcceptPolicyCallback));
    217218}
  • trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp

    r213790 r213877  
    735735    // FIXME: Using activeURL here twice is basically saying "this is always in the context of the main document"
    736736    // which probably isn't accurate.
    737     cookieManager->setCookies(WebCore::SessionID::defaultSessionID(), { cookie }, activeURL, activeURL);
     737    cookieManager->setCookies(WebCore::SessionID::defaultSessionID(), { cookie }, activeURL, activeURL, [](CallbackBase::Error){});
    738738
    739739    callback->sendSuccess();
  • trunk/Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp

    r213777 r213877  
    3333#include "WebCookieManagerProxyMessages.h"
    3434#include "WebProcessPool.h"
     35#include <WebCore/Cookie.h>
    3536#include <WebCore/SecurityOriginData.h>
     37
     38using namespace WebCore;
    3639
    3740namespace WebKit {
     
    9598}
    9699
    97 void WebCookieManagerProxy::getHostnamesWithCookies(WebCore::SessionID sessionID, Function<void (API::Array*, CallbackBase::Error)>&& callbackFunction)
     100void WebCookieManagerProxy::getHostnamesWithCookies(SessionID sessionID, Function<void (API::Array*, CallbackBase::Error)>&& callbackFunction)
    98101{
    99102    auto callback = ArrayCallback::create(WTFMove(callbackFunction));
     
    115118}
    116119
    117 void WebCookieManagerProxy::deleteCookiesForHostname(WebCore::SessionID sessionID, const String& hostname)
     120void WebCookieManagerProxy::deleteCookiesForHostname(SessionID sessionID, const String& hostname)
    118121{
    119122    processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteCookiesForHostname(sessionID, hostname));
    120123}
    121124
    122 void WebCookieManagerProxy::deleteAllCookies(WebCore::SessionID sessionID)
     125void WebCookieManagerProxy::deleteAllCookies(SessionID sessionID)
    123126{
    124127    processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteAllCookies(sessionID));
    125128}
    126129
    127 void WebCookieManagerProxy::deleteAllCookiesModifiedSince(WebCore::SessionID sessionID, std::chrono::system_clock::time_point time)
    128 {
    129     processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteAllCookiesModifiedSince(sessionID, time));
    130 }
    131 
    132 void WebCookieManagerProxy::setCookies(WebCore::SessionID sessionID, const Vector<WebCore::Cookie>& cookies, const WebCore::URL& url, const WebCore::URL& mainDocumentURL)
    133 {
    134     processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::SetCookies(sessionID, cookies, url, mainDocumentURL));
    135 }
    136 
    137 void WebCookieManagerProxy::startObservingCookieChanges(WebCore::SessionID sessionID)
     130void WebCookieManagerProxy::deleteCookie(SessionID sessionID, const Cookie& cookie, Function<void (CallbackBase::Error)>&& callbackFunction)
     131{
     132    auto callback = VoidCallback::create(WTFMove(callbackFunction));
     133    uint64_t callbackID = callback->callbackID();
     134    m_voidCallbacks.set(callbackID, WTFMove(callback));
     135
     136    processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteCookie(sessionID, cookie, callbackID));
     137}
     138
     139void WebCookieManagerProxy::deleteAllCookiesModifiedSince(SessionID sessionID, std::chrono::system_clock::time_point time, Function<void (CallbackBase::Error)>&& callbackFunction)
     140{
     141    auto callback = VoidCallback::create(WTFMove(callbackFunction));
     142    uint64_t callbackID = callback->callbackID();
     143    m_voidCallbacks.set(callbackID, WTFMove(callback));
     144
     145    processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteAllCookiesModifiedSince(sessionID, time, callbackID));
     146}
     147
     148void WebCookieManagerProxy::setCookie(SessionID sessionID, const Cookie& cookie, Function<void (CallbackBase::Error)>&& callbackFunction)
     149{
     150    auto callback = VoidCallback::create(WTFMove(callbackFunction));
     151    uint64_t callbackID = callback->callbackID();
     152    m_voidCallbacks.set(callbackID, WTFMove(callback));
     153
     154    processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::SetCookie(sessionID, cookie, callbackID));
     155}
     156
     157void WebCookieManagerProxy::setCookies(SessionID sessionID, const Vector<Cookie>& cookies, const URL& url, const URL& mainDocumentURL, Function<void (CallbackBase::Error)>&& callbackFunction)
     158{
     159    auto callback = VoidCallback::create(WTFMove(callbackFunction));
     160    uint64_t callbackID = callback->callbackID();
     161    m_voidCallbacks.set(callbackID, WTFMove(callback));
     162
     163    processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::SetCookies(sessionID, cookies, url, mainDocumentURL, callbackID));
     164}
     165
     166void WebCookieManagerProxy::getAllCookies(SessionID sessionID, Function<void (const Vector<Cookie>&, CallbackBase::Error)>&& callbackFunction)
     167{
     168    auto callback = GetCookiesCallback::create(WTFMove(callbackFunction));
     169    uint64_t callbackID = callback->callbackID();
     170    m_getCookiesCallbacks.set(callbackID, WTFMove(callback));
     171
     172    processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::GetAllCookies(sessionID, callbackID));
     173}
     174
     175void WebCookieManagerProxy::getCookies(SessionID sessionID, const URL& url, Function<void (const Vector<Cookie>&, CallbackBase::Error)>&& callbackFunction)
     176{
     177    auto callback = GetCookiesCallback::create(WTFMove(callbackFunction));
     178    uint64_t callbackID = callback->callbackID();
     179    m_getCookiesCallbacks.set(callbackID, WTFMove(callback));
     180
     181    processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::GetCookies(sessionID, url, callbackID));
     182}
     183
     184void WebCookieManagerProxy::didSetCookies(uint64_t callbackID)
     185{
     186    m_voidCallbacks.take(callbackID)->performCallback();
     187}
     188
     189void WebCookieManagerProxy::didGetCookies(const Vector<Cookie>& cookies, uint64_t callbackID)
     190{
     191    m_getCookiesCallbacks.take(callbackID)->performCallbackWithReturnValue(cookies);
     192}
     193
     194void WebCookieManagerProxy::didDeleteCookies(uint64_t callbackID)
     195{
     196    m_voidCallbacks.take(callbackID)->performCallback();
     197}
     198
     199void WebCookieManagerProxy::startObservingCookieChanges(SessionID sessionID)
    138200{
    139201    processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::StartObservingCookieChanges(sessionID));
    140202}
    141203
    142 void WebCookieManagerProxy::stopObservingCookieChanges(WebCore::SessionID sessionID)
     204void WebCookieManagerProxy::stopObservingCookieChanges(SessionID sessionID)
    143205{
    144206    processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::StopObservingCookieChanges(sessionID));
    145207}
    146208
    147 void WebCookieManagerProxy::setCookieObserverCallback(WebCore::SessionID sessionID, std::function<void ()>&& callback)
     209void WebCookieManagerProxy::setCookieObserverCallback(SessionID sessionID, std::function<void ()>&& callback)
    148210{
    149211    if (callback)
     
    153215}
    154216
    155 void WebCookieManagerProxy::cookiesDidChange(WebCore::SessionID sessionID)
     217void WebCookieManagerProxy::cookiesDidChange(SessionID sessionID)
    156218{
    157219    m_client.cookiesDidChange(this);
     
    160222}
    161223
    162 void WebCookieManagerProxy::setHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy)
     224void WebCookieManagerProxy::setHTTPCookieAcceptPolicy(SessionID, HTTPCookieAcceptPolicy policy, Function<void (CallbackBase::Error)>&& callbackFunction)
    163225{
    164226#if PLATFORM(COCOA)
     
    173235    // - When testing, we only have one WebProcess and one NetworkProcess, and WebKitTestRunner never restarts them;
    174236    // - When not testing, Cocoa has the policy persisted, and thus new processes use it (even for ephemeral sessions).
    175     processPool()->sendToAllProcesses(Messages::WebCookieManager::SetHTTPCookieAcceptPolicy(policy));
    176     processPool()->sendToNetworkingProcess(Messages::WebCookieManager::SetHTTPCookieAcceptPolicy(policy));
    177 }
    178 
    179 void WebCookieManagerProxy::getHTTPCookieAcceptPolicy(Function<void (HTTPCookieAcceptPolicy, CallbackBase::Error)> callbackFunction)
     237    processPool()->sendToAllProcesses(Messages::WebCookieManager::SetHTTPCookieAcceptPolicy(policy, 0));
     238
     239    auto callback = VoidCallback::create(WTFMove(callbackFunction));
     240    uint64_t callbackID = callback->callbackID();
     241    m_voidCallbacks.set(callbackID, WTFMove(callback));
     242
     243    processPool()->sendToNetworkingProcess(Messages::WebCookieManager::SetHTTPCookieAcceptPolicy(policy, callbackID));
     244}
     245
     246void WebCookieManagerProxy::getHTTPCookieAcceptPolicy(SessionID, Function<void (HTTPCookieAcceptPolicy, CallbackBase::Error)>&& callbackFunction)
    180247{
    181248    auto callback = HTTPCookieAcceptPolicyCallback::create(WTFMove(callbackFunction));
     
    189256void WebCookieManagerProxy::didGetHTTPCookieAcceptPolicy(uint32_t policy, uint64_t callbackID)
    190257{
    191     RefPtr<HTTPCookieAcceptPolicyCallback> callback = m_httpCookieAcceptPolicyCallbacks.take(callbackID);
    192     if (!callback) {
    193         // FIXME: Log error or assert.
    194         return;
    195     }
    196 
    197     callback->performCallbackWithReturnValue(policy);
     258    m_httpCookieAcceptPolicyCallbacks.take(callbackID)->performCallbackWithReturnValue(policy);
     259}
     260
     261void WebCookieManagerProxy::didSetHTTPCookieAcceptPolicy(uint64_t callbackID)
     262{
     263    m_voidCallbacks.take(callbackID)->performCallback();
    198264}
    199265
  • trunk/Source/WebKit2/UIProcess/WebCookieManagerProxy.h

    r213777 r213877  
    5656typedef GenericCallback<API::Array*> ArrayCallback;
    5757typedef GenericCallback<HTTPCookieAcceptPolicy> HTTPCookieAcceptPolicyCallback;
     58typedef GenericCallback<const Vector<WebCore::Cookie>&> GetCookiesCallback;
    5859
    5960class WebCookieManagerProxy : public API::ObjectImpl<API::Object::Type::CookieManager>, public WebContextSupplement, private IPC::MessageReceiver {
     
    6768   
    6869    void getHostnamesWithCookies(WebCore::SessionID, Function<void (API::Array*, CallbackBase::Error)>&&);
     70    void deleteCookie(WebCore::SessionID, const WebCore::Cookie&, Function<void (CallbackBase::Error)>&&);
    6971    void deleteCookiesForHostname(WebCore::SessionID, const String& hostname);
    7072    void deleteAllCookies(WebCore::SessionID);
    71     void deleteAllCookiesModifiedSince(WebCore::SessionID, std::chrono::system_clock::time_point);
     73    void deleteAllCookiesModifiedSince(WebCore::SessionID, std::chrono::system_clock::time_point, Function<void (CallbackBase::Error)>&&);
    7274
    73     void setCookies(WebCore::SessionID, const Vector<WebCore::Cookie>&, const WebCore::URL&, const WebCore::URL& mainDocumentURL);
     75    void setCookie(WebCore::SessionID, const WebCore::Cookie&, Function<void (CallbackBase::Error)>&&);
     76    void setCookies(WebCore::SessionID, const Vector<WebCore::Cookie>&, const WebCore::URL&, const WebCore::URL& mainDocumentURL, Function<void (CallbackBase::Error)>&&);
    7477
    75     void setHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy);
    76     void getHTTPCookieAcceptPolicy(Function<void (HTTPCookieAcceptPolicy, CallbackBase::Error)>);
     78    void getAllCookies(WebCore::SessionID, Function<void (const Vector<WebCore::Cookie>&, CallbackBase::Error)>&& completionHandler);
     79    void getCookies(WebCore::SessionID, const WebCore::URL&, Function<void (const Vector<WebCore::Cookie>&, CallbackBase::Error)>&& completionHandler);
     80
     81    void setHTTPCookieAcceptPolicy(WebCore::SessionID, HTTPCookieAcceptPolicy, Function<void (CallbackBase::Error)>&&);
     82    void getHTTPCookieAcceptPolicy(WebCore::SessionID, Function<void (HTTPCookieAcceptPolicy, CallbackBase::Error)>&&);
     83
    7784    void setCookieStoragePartitioningEnabled(bool);
    7885
     
    96103    void didGetHTTPCookieAcceptPolicy(uint32_t policy, uint64_t callbackID);
    97104
     105    void didSetHTTPCookieAcceptPolicy(uint64_t callbackID);
     106    void didSetCookies(uint64_t callbackID);
     107    void didGetCookies(const Vector<WebCore::Cookie>&, uint64_t callbackID);
     108    void didDeleteCookies(uint64_t callbackID);
     109
    98110    void cookiesDidChange(WebCore::SessionID);
    99111
     
    114126    HashMap<uint64_t, RefPtr<ArrayCallback>> m_arrayCallbacks;
    115127    HashMap<uint64_t, RefPtr<HTTPCookieAcceptPolicyCallback>> m_httpCookieAcceptPolicyCallbacks;
     128    HashMap<uint64_t, RefPtr<VoidCallback>> m_voidCallbacks;
     129    HashMap<uint64_t, RefPtr<GetCookiesCallback>> m_getCookiesCallbacks;
    116130
    117131    HashMap<WebCore::SessionID, std::function<void ()>> m_cookieObservers;
  • trunk/Source/WebKit2/UIProcess/WebCookieManagerProxy.messages.in

    r212283 r213877  
    2424    DidGetHostnamesWithCookies(Vector<String> hostnames, uint64_t callbackID);
    2525    DidGetHTTPCookieAcceptPolicy(uint32_t policy, uint64_t callbackID);
    26    
     26
     27    DidSetHTTPCookieAcceptPolicy(uint64_t callbackID);
     28    DidDeleteCookies(uint64_t callbackID);
     29    DidSetCookies(uint64_t callbackID);
     30    DidGetCookies(Vector<WebCore::Cookie> cookies, uint64_t callbackID);
     31
    2732    CookiesDidChange(WebCore::SessionID sessionID)
    2833}
  • trunk/Source/WebKit2/UIProcess/WebFrameProxy.h

    r213777 r213877  
    3232#include <WebCore/FrameLoaderTypes.h>
    3333#include <wtf/Forward.h>
     34#include <wtf/Function.h>
    3435#include <wtf/PassRefPtr.h>
    3536#include <wtf/text/WTFString.h>
  • trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp

    r213854 r213877  
    3131#include "APICustomProtocolManagerClient.h"
    3232#include "APIDownloadClient.h"
     33#include "APIHTTPCookieStorage.h"
    3334#include "APILegacyContextHistoryClient.h"
    3435#include "APIPageConfiguration.h"
  • trunk/Source/WebKit2/UIProcess/WebProcessPool.h

    r213854 r213877  
    7777class CustomProtocolManagerClient;
    7878class DownloadClient;
     79class HTTPCookieStorage;
    7980class LegacyContextHistoryClient;
    8081class PageConfiguration;
  • trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp

    r213871 r213877  
    3131#include "NetworkProcessMessages.h"
    3232#include "StorageManager.h"
     33#include "WebCookieManagerProxy.h"
    3334#include "WebProcessMessages.h"
    3435#include "WebProcessPool.h"
     
    104105            processPool->sendToNetworkingProcess(Messages::NetworkProcess::DestroyPrivateBrowsingSession(m_sessionID));
    105106    }
     107}
     108
     109Ref<WebProcessPool> WebsiteDataStore::processPoolForCookieStorageOperations()
     110{
     111    // Our concepts of WebProcess, WebProcessPool, WebsiteDataStore, and SessionIDs have all started to overlap
     112    // without clear divisions of responsibilities.
     113    // In practice, multiple WebProcessPools can contain "the same session", especially since there is currently
     114    // only a single default global SessionID.
     115    //
     116    // This means that multiple NetworkProcesses can be using the same session, which means that multiple
     117    // NetworkProcesses can be referring to the same platform cookie storage.
     118    //
     119    // While this may cause complications with future APIs it is actually fine for implementing the WKHTTPCookieStorage API
     120    // because we only need one NetworkProcess to successfully make a requested platform cookie storage change.
     121    //
     122    // FIXME: We need to start to unravel this mess going forward.
     123
     124    auto pools = processPools(1);
     125    ASSERT(!pools.isEmpty());
     126
     127    return **pools.begin();
    106128}
    107129
     
    11091131}
    11101132
    1111 HashSet<RefPtr<WebProcessPool>> WebsiteDataStore::processPools() const
     1133HashSet<RefPtr<WebProcessPool>> WebsiteDataStore::processPools(size_t count) const
    11121134{
    11131135    HashSet<RefPtr<WebProcessPool>> processPools;
     
    11231145                    break;
    11241146                }
    1125             }
    1126         }
    1127     }
    1128 
    1129     if (processPools.isEmpty()) {
     1147            } else if (&API::WebsiteDataStore::defaultDataStore()->websiteDataStore() == this) {
     1148                // If a process pool doesn't have an explicit data store and this is the default WebsiteDataStore,
     1149                // add that process pool to the set.
     1150                // FIXME: This behavior is weird and necessitated by the fact that process pools don't always
     1151                // have a data store; they should.
     1152                processPools.add(processPool);
     1153            }
     1154
     1155            if (processPools.size() == count)
     1156                break;
     1157        }
     1158    }
     1159
     1160    if (processPools.isEmpty() && count) {
    11301161        auto processPool = WebProcessPool::create(API::ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration(m_configuration));
    11311162        processPools.add(processPool.ptr());
  • trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h

    r213871 r213877  
    104104    StorageManager* storageManager() { return m_storageManager.get(); }
    105105
     106    Ref<WebProcessPool> processPoolForCookieStorageOperations();
     107
    106108private:
    107109    explicit WebsiteDataStore(WebCore::SessionID);
     
    120122    static void platformRemoveRecentSearches(std::chrono::system_clock::time_point);
    121123
    122     HashSet<RefPtr<WebProcessPool>> processPools() const;
     124    HashSet<RefPtr<WebProcessPool>> processPools(size_t count = std::numeric_limits<size_t>::max()) const;
    123125
    124126#if ENABLE(NETSCAPE_PLUGIN_API)
  • trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r213696 r213877  
    10641064                51D124361E6DFB39002B2820 /* WKURLSchemeHandlerTask.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51D124301E6DDDD7002B2820 /* WKURLSchemeHandlerTask.mm */; };
    10651065                51D1243A1E6E0AAB002B2820 /* APIURLSchemeHandlerTask.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51D124381E6DFDB9002B2820 /* APIURLSchemeHandlerTask.cpp */; };
     1066                51D124911E74BF3C002B2820 /* APIHTTPCookieStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51D124821E734AC8002B2820 /* APIHTTPCookieStorage.cpp */; };
     1067                51D124921E74BF48002B2820 /* WKHTTPCookieStorage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51D124851E734AE3002B2820 /* WKHTTPCookieStorage.mm */; };
     1068                51D124991E763C01002B2820 /* WKHTTPCookieStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D124841E734AE3002B2820 /* WKHTTPCookieStorage.h */; settings = {ATTRIBUTES = (Private, ); }; };
    10661069                51D130531382EAC000351EDD /* SecItemRequestData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51D1304F1382EAC000351EDD /* SecItemRequestData.cpp */; };
    10671070                51D130541382EAC000351EDD /* SecItemRequestData.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D130501382EAC000351EDD /* SecItemRequestData.h */; };
     
    32863289                51D124381E6DFDB9002B2820 /* APIURLSchemeHandlerTask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = APIURLSchemeHandlerTask.cpp; sourceTree = "<group>"; };
    32873290                51D124391E6DFDB9002B2820 /* APIURLSchemeHandlerTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIURLSchemeHandlerTask.h; sourceTree = "<group>"; };
     3291                51D124821E734AC8002B2820 /* APIHTTPCookieStorage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = APIHTTPCookieStorage.cpp; sourceTree = "<group>"; };
     3292                51D124831E734AC8002B2820 /* APIHTTPCookieStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIHTTPCookieStorage.h; sourceTree = "<group>"; };
     3293                51D124841E734AE3002B2820 /* WKHTTPCookieStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKHTTPCookieStorage.h; sourceTree = "<group>"; };
     3294                51D124851E734AE3002B2820 /* WKHTTPCookieStorage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKHTTPCookieStorage.mm; sourceTree = "<group>"; };
     3295                51D124861E734AE3002B2820 /* WKHTTPCookieStorageInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKHTTPCookieStorageInternal.h; sourceTree = "<group>"; };
    32883296                51D1304F1382EAC000351EDD /* SecItemRequestData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SecItemRequestData.cpp; sourceTree = "<group>"; };
    32893297                51D130501382EAC000351EDD /* SecItemRequestData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecItemRequestData.h; sourceTree = "<group>"; };
     
    55455553                                2DF9EEE71A78245500B6CFBE /* WKFrameInfoInternal.h */,
    55465554                                1A6FA21D1BD0435B00AAA650 /* WKFrameInfoPrivate.h */,
     5555                                51D124841E734AE3002B2820 /* WKHTTPCookieStorage.h */,
     5556                                51D124851E734AE3002B2820 /* WKHTTPCookieStorage.mm */,
     5557                                51D124861E734AE3002B2820 /* WKHTTPCookieStorageInternal.h */,
    55475558                                1A422F8A18B29B5400D8CD96 /* WKHistoryDelegatePrivate.h */,
    55485559                                1AB40EE31BF677E300BA81BE /* WKMenuItemIdentifiers.mm */,
     
    67336744                                93A88B421BC8828C00ABA5C2 /* APIHitTestResult.cpp */,
    67346745                                93A88B431BC8828C00ABA5C2 /* APIHitTestResult.h */,
     6746                                51D124821E734AC8002B2820 /* APIHTTPCookieStorage.cpp */,
     6747                                51D124831E734AC8002B2820 /* APIHTTPCookieStorage.h */,
    67356748                                5143B2611DDD0DA00014FAC6 /* APIIconLoadingClient.h */,
    67366749                                7CE4D2061A46775700C7F152 /* APILegacyContextHistoryClient.h */,
     
    85168529                                510523741C73D38B007993CB /* WebIDBConnectionToServerMessages.h in Headers */,
    85178530                                BCCF6ABD12C91EF9008F9C35 /* WebImage.h in Headers */,
     8531                                51D124991E763C01002B2820 /* WKHTTPCookieStorage.h in Headers */,
    85188532                                1C8E28201275D15400BC7BD0 /* WebInspector.h in Headers */,
    85198533                                BC032D8210F4378D0058C15A /* WebInspectorClient.h in Headers */,
     
    97689782                                1A6FBD2911E69BC200DB1371 /* NetscapePlugin.cpp in Sources */,
    97699783                                1AE5B7FB11E7AED200BA6767 /* NetscapePluginMac.mm in Sources */,
     9784                                51D124921E74BF48002B2820 /* WKHTTPCookieStorage.mm in Sources */,
    97709785                                1A4A9C5512B816CF008FE984 /* NetscapePluginModule.cpp in Sources */,
    97719786                                839A2F311E2067450039057E /* HighPerformanceGraphicsUsageSampler.cpp in Sources */,
     
    97869801                                832AE2531BE2E8CD00FAAE10 /* NetworkCacheSpeculativeLoadManager.cpp in Sources */,
    97879802                                83BDCCB91AC5FDB6003F6441 /* NetworkCacheStatistics.cpp in Sources */,
     9803                                51D124911E74BF3C002B2820 /* APIHTTPCookieStorage.cpp in Sources */,
    97889804                                E4436ED01A0D040B00EAD204 /* NetworkCacheStorage.cpp in Sources */,
    97899805                                8310428C1BD6B66F00A715E4 /* NetworkCacheSubresourcesEntry.cpp in Sources */,
  • trunk/Source/WebKit2/WebProcess/Cookies/WebCookieManager.cpp

    r213759 r213877  
    7373}
    7474
     75
    7576void WebCookieManager::deleteAllCookies(SessionID sessionID)
    7677{
     
    7980}
    8081
    81 void WebCookieManager::deleteAllCookiesModifiedSince(SessionID sessionID, std::chrono::system_clock::time_point time)
     82void WebCookieManager::deleteCookie(SessionID sessionID, const Cookie& cookie, uint64_t callbackID)
     83{
     84    if (auto* storageSession = NetworkStorageSession::storageSession(sessionID))
     85        storageSession->deleteCookie(cookie);
     86
     87    m_process->send(Messages::WebCookieManagerProxy::DidDeleteCookies(callbackID), 0);
     88}
     89
     90void WebCookieManager::deleteAllCookiesModifiedSince(SessionID sessionID, std::chrono::system_clock::time_point time, uint64_t callbackID)
    8291{
    8392    if (auto* storageSession = NetworkStorageSession::storageSession(sessionID))
    8493        WebCore::deleteAllCookiesModifiedSince(*storageSession, time);
     94
     95    if (callbackID)
     96        m_process->send(Messages::WebCookieManagerProxy::DidDeleteCookies(callbackID), 0);
    8597}
    8698
    87 void WebCookieManager::setCookies(WebCore::SessionID sessionID, const Vector<Cookie>& cookies, const URL& url, const URL& mainDocumentURL)
     99void WebCookieManager::getAllCookies(SessionID sessionID, uint64_t callbackID)
     100{
     101    Vector<Cookie> cookies;
     102    if (auto* storageSession = NetworkStorageSession::storageSession(sessionID))
     103        cookies = storageSession->getAllCookies();
     104
     105    m_process->send(Messages::WebCookieManagerProxy::DidGetCookies(cookies, callbackID), 0);
     106}
     107
     108void WebCookieManager::getCookies(SessionID sessionID, const URL& url, uint64_t callbackID)
     109{
     110    Vector<Cookie> cookies;
     111    if (auto* storageSession = NetworkStorageSession::storageSession(sessionID))
     112        cookies = storageSession->getCookies(url);
     113
     114    m_process->send(Messages::WebCookieManagerProxy::DidGetCookies(cookies, callbackID), 0);
     115}
     116
     117void WebCookieManager::setCookie(WebCore::SessionID sessionID, const Cookie& cookie, uint64_t callbackID)
     118{
     119    if (auto* storageSession = NetworkStorageSession::storageSession(sessionID))
     120        storageSession->setCookie(cookie);
     121
     122    if (callbackID)
     123        m_process->send(Messages::WebCookieManagerProxy::DidSetCookies(callbackID), 0);
     124}
     125
     126void WebCookieManager::setCookies(WebCore::SessionID sessionID, const Vector<Cookie>& cookies, const URL& url, const URL& mainDocumentURL, uint64_t callbackID)
    88127{
    89128    if (auto* storageSession = NetworkStorageSession::storageSession(sessionID))
    90129        storageSession->setCookies(cookies, url, mainDocumentURL);
     130
     131    if (callbackID)
     132        m_process->send(Messages::WebCookieManagerProxy::DidSetCookies(callbackID), 0);
    91133}
    92134
     
    112154}
    113155
    114 void WebCookieManager::setHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy)
     156void WebCookieManager::setHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy, uint64_t callbackID)
    115157{
    116158    platformSetHTTPCookieAcceptPolicy(policy);
     159
     160    if (callbackID)
     161        m_process->send(Messages::WebCookieManagerProxy::DidSetHTTPCookieAcceptPolicy(callbackID), 0);
    117162}
    118163
  • trunk/Source/WebKit2/WebProcess/Cookies/WebCookieManager.h

    r213759 r213877  
    5757    static const char* supplementName();
    5858
    59     void setHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy);
     59    void setHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy, uint64_t callbackID);
     60
    6061#if USE(SOUP)
    6162    void setCookiePersistentStorage(const String& storagePath, uint32_t storageType);
     
    6970
    7071    void getHostnamesWithCookies(WebCore::SessionID, uint64_t callbackID);
     72
     73    void deleteCookie(WebCore::SessionID, const WebCore::Cookie&, uint64_t callbackID);
    7174    void deleteCookiesForHostname(WebCore::SessionID, const String&);
    7275    void deleteAllCookies(WebCore::SessionID);
    73     void deleteAllCookiesModifiedSince(WebCore::SessionID, std::chrono::system_clock::time_point);
     76    void deleteAllCookiesModifiedSince(WebCore::SessionID, std::chrono::system_clock::time_point, uint64_t callbackID);
    7477
    75     void setCookies(WebCore::SessionID, const Vector<WebCore::Cookie>&, const WebCore::URL&, const WebCore::URL& mainDocumentURL);
     78    void setCookie(WebCore::SessionID, const WebCore::Cookie&, uint64_t callbackID);
     79    void setCookies(WebCore::SessionID, const Vector<WebCore::Cookie>&, const WebCore::URL&, const WebCore::URL& mainDocumentURL, uint64_t callbackID);
     80    void getAllCookies(WebCore::SessionID, uint64_t callbackID);
     81    void getCookies(WebCore::SessionID, const WebCore::URL&, uint64_t callbackID);
    7682
    7783    void platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy);
  • trunk/Source/WebKit2/WebProcess/Cookies/WebCookieManager.messages.in

    r213759 r213877  
    2828    void DeleteCookiesForHostname(WebCore::SessionID sessionID, String hostname)
    2929    void DeleteAllCookies(WebCore::SessionID sessionID)
    30     void DeleteAllCookiesModifiedSince(WebCore::SessionID sessionID, std::chrono::system_clock::time_point time)
    3130
    32     void SetCookies(WebCore::SessionID sessionID, Vector<WebCore::Cookie> cookies, WebCore::URL url, WebCore::URL mainDocumentURL);
     31    void SetCookie(WebCore::SessionID sessionID, struct WebCore::Cookie cookie, uint64_t callbackID)
     32    void SetCookies(WebCore::SessionID sessionID, Vector<WebCore::Cookie> cookies, WebCore::URL url, WebCore::URL mainDocumentURL, uint64_t callbackID)
     33    void GetAllCookies(WebCore::SessionID sessionID, uint64_t callbackID)
     34    void GetCookies(WebCore::SessionID sessionID, WebCore::URL url, uint64_t callbackID)
     35    void DeleteCookie(WebCore::SessionID sessionID, struct WebCore::Cookie cookie, uint64_t callbackID)
     36    void DeleteAllCookiesModifiedSince(WebCore::SessionID sessionID, std::chrono::system_clock::time_point time, uint64_t callbackID)
    3337
    34     void SetHTTPCookieAcceptPolicy(uint32_t policy)
     38    void SetHTTPCookieAcceptPolicy(uint32_t policy, uint64_t callbackID)
    3539    void GetHTTPCookieAcceptPolicy(uint64_t callbackID)
    3640   
  • trunk/Tools/ChangeLog

    r213868 r213877  
     12017-03-13  Brady Eidson  <beidson@apple.com>
     2
     3        WKWebView provides no access to cookies.
     4        https://bugs.webkit.org/show_bug.cgi?id=140191
     5
     6        Reviewed by Tim Horton.
     7
     8        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     9
    1102017-03-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>
    211
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r213725 r213877  
    153153                51CD1C6C1B38CE4300142CA5 /* ModalAlerts.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51CD1C6A1B38CE3600142CA5 /* ModalAlerts.mm */; };
    154154                51CD1C721B38D48400142CA5 /* modal-alerts-in-new-about-blank-window.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 51CD1C711B38D48400142CA5 /* modal-alerts-in-new-about-blank-window.html */; };
     155                51D124981E763B02002B2820 /* WKHTTPCookieStorage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51D124971E763AF8002B2820 /* WKHTTPCookieStorage.mm */; };
    155156                51E5C7021919C3B200D8B3E1 /* simple2.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 51E780361919AFF8001829A2 /* simple2.html */; };
    156157                51E5C7031919C3B200D8B3E1 /* simple3.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 51E780371919AFF8001829A2 /* simple3.html */; };
     
    10491050                51CD1C6A1B38CE3600142CA5 /* ModalAlerts.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ModalAlerts.mm; sourceTree = "<group>"; };
    10501051                51CD1C711B38D48400142CA5 /* modal-alerts-in-new-about-blank-window.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = "modal-alerts-in-new-about-blank-window.html"; sourceTree = "<group>"; };
     1052                51D124971E763AF8002B2820 /* WKHTTPCookieStorage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKHTTPCookieStorage.mm; sourceTree = "<group>"; };
    10511053                51E5C7041919EA5F00D8B3E1 /* ShouldKeepCurrentBackForwardListItemInList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShouldKeepCurrentBackForwardListItemInList.cpp; sourceTree = "<group>"; };
    10521054                51E6A8921D2F1BEC00C004B6 /* LocalStorageClear.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LocalStorageClear.mm; sourceTree = "<group>"; };
     
    16501652                                5C9E56841DF9143D00C9EE33 /* WebsitePolicies.mm */,
    16511653                                1F83571A1D3FFB0E00E3967B /* WKBackForwardList.mm */,
     1654                                51D124971E763AF8002B2820 /* WKHTTPCookieStorage.mm */,
    16521655                                375E0E151D66674400EFEC2C /* WKNSNumber.mm */,
    16531656                                37B47E2E1D64E7CA005F4EFF /* WKObject.mm */,
     
    27302733                                7C83E0401D0A63E300FEBCF3 /* FirstResponderScrollingPosition.mm in Sources */,
    27312734                                7C83E0BC1D0A650700FEBCF3 /* FixedLayoutSize.mm in Sources */,
     2735                                51D124981E763B02002B2820 /* WKHTTPCookieStorage.mm in Sources */,
    27322736                                7CCE7EF51A411AE600447C4C /* ForceRepaint.cpp in Sources */,
    27332737                                37B47E301D64E7CA005F4EFF /* WKObject.mm in Sources */,
Note: See TracChangeset for help on using the changeset viewer.