|  | // Copyright (c) 2017 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef IOS_NET_COOKIES_SYSTEM_COOKIE_STORE_H_ | 
|  | #define IOS_NET_COOKIES_SYSTEM_COOKIE_STORE_H_ | 
|  |  | 
|  | #import <Foundation/Foundation.h> | 
|  |  | 
|  | #include "base/callback.h" | 
|  | #include "base/macros.h" | 
|  | #include "base/memory/weak_ptr.h" | 
|  | #include "base/time/time.h" | 
|  |  | 
|  | class GURL; | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | class CookieCreationTimeManager; | 
|  |  | 
|  | // SystemCookieStore is an abstract class that should be implemented for every | 
|  | // type of system store (WKHTTPCookieStore, NSHTTPCookieStorage, ..), its main | 
|  | // purpose is to interact with the system cookie store, and let the caller use | 
|  | // it directly without caring about the type of the underlying cookie store. | 
|  | // The class methods should only be called from IO Thread. | 
|  | class SystemCookieStore { | 
|  | public: | 
|  | // Callback definitions. | 
|  | typedef base::OnceClosure SystemCookieCallback; | 
|  | typedef base::OnceCallback<void(NSArray<NSHTTPCookie*>*)> | 
|  | SystemCookieCallbackForCookies; | 
|  |  | 
|  | SystemCookieStore(); | 
|  | virtual ~SystemCookieStore(); | 
|  |  | 
|  | // Calls |callback| on all cookies for a specific |url| in the internal | 
|  | // cookie store. | 
|  | // If CookieCreationTimeManager was provided in the constructor, sort cookies | 
|  | // as per RFC6265 before calling the |callback|. | 
|  | virtual void GetCookiesForURLAsync( | 
|  | const GURL& url, | 
|  | SystemCookieCallbackForCookies callback) = 0; | 
|  |  | 
|  | // Calls |callback| on all cookies in the internal cookie store. | 
|  | // If CookieCreationTimeManager was provided in the constructor, sort cookies | 
|  | // as per RFC6265 before calling the |callback|. | 
|  | virtual void GetAllCookiesAsync(SystemCookieCallbackForCookies callback) = 0; | 
|  |  | 
|  | // Deletes a specific cookie from the internal cookie store, and call | 
|  | // |callback| after it's deleted. | 
|  | virtual void DeleteCookieAsync(NSHTTPCookie* cookie, | 
|  | SystemCookieCallback callback) = 0; | 
|  |  | 
|  | // Sets a specific cookie to the internal cookie store, sets the cookie | 
|  | // creation time |optional_creation_time| or to the current time if | 
|  | // |optional_creation_time| is nil, then calls |callback| after it's set. | 
|  | virtual void SetCookieAsync(NSHTTPCookie* cookie, | 
|  | const base::Time* optional_creation_time, | 
|  | SystemCookieCallback callback) = 0; | 
|  |  | 
|  | // Same as SetCookieAsync but uses actual time of setting the cookie. | 
|  | void SetCookieAsync(NSHTTPCookie* cookie, SystemCookieCallback callback); | 
|  |  | 
|  | // Deletes all cookies from the internal http cookie store, and calls | 
|  | // |callback| all cookies are deleted. | 
|  | virtual void ClearStoreAsync(SystemCookieCallback callback) = 0; | 
|  |  | 
|  | // Returns the Cookie Accept policy for the internal cookie store. | 
|  | virtual NSHTTPCookieAcceptPolicy GetCookieAcceptPolicy() = 0; | 
|  |  | 
|  | // Returns the creation time of a specific cookie | 
|  | base::Time GetCookieCreationTime(NSHTTPCookie* cookie); | 
|  |  | 
|  | // Return WeakPtr of this object. | 
|  | base::WeakPtr<SystemCookieStore> GetWeakPtr(); | 
|  |  | 
|  | protected: | 
|  | // Compares cookies based on the path lengths and the creation times provided | 
|  | // by a non null creation time manager |context|, as per RFC6265. | 
|  | static NSInteger CompareCookies(id a, id b, void* context); | 
|  |  | 
|  | // Internal cookie stores doesn't store creation time. This object is used | 
|  | // to keep track of the creation time of cookies, this is required for | 
|  | // conversion between SystemCookie and Chromium CookieMonster. | 
|  | // TODO(crbug.com/825227): Move this to be private. | 
|  | std::unique_ptr<CookieCreationTimeManager> creation_time_manager_; | 
|  |  | 
|  | private: | 
|  | // Weak Ptr factory. | 
|  | base::WeakPtrFactory<SystemCookieStore> weak_factory_; | 
|  | }; | 
|  |  | 
|  | }  // namespace net | 
|  |  | 
|  | #endif  // IOS_NET_COOKIES_SYSTEM_COOKIE_STORE_H_ |