| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef IOS_NET_COOKIES_COOKIE_STORE_IOS_H_ | 5 #ifndef IOS_NET_COOKIES_COOKIE_STORE_IOS_H_ |
| 6 #define IOS_NET_COOKIES_COOKIE_STORE_IOS_H_ | 6 #define IOS_NET_COOKIES_COOKIE_STORE_IOS_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 // |NSHTTPCookieStorage sharedHTTPCookieStorage|. | 68 // |NSHTTPCookieStorage sharedHTTPCookieStorage|. |
| 69 static void NotifySystemCookiesChanged(); | 69 static void NotifySystemCookiesChanged(); |
| 70 | 70 |
| 71 // Only one cookie store may enable metrics. | 71 // Only one cookie store may enable metrics. |
| 72 void SetMetricsEnabled(); | 72 void SetMetricsEnabled(); |
| 73 | 73 |
| 74 // Inherited CookieStore methods. | 74 // Inherited CookieStore methods. |
| 75 void SetCookieWithOptionsAsync(const GURL& url, | 75 void SetCookieWithOptionsAsync(const GURL& url, |
| 76 const std::string& cookie_line, | 76 const std::string& cookie_line, |
| 77 const net::CookieOptions& options, | 77 const net::CookieOptions& options, |
| 78 const SetCookiesCallback& callback) override; | 78 SetCookiesCallback callback) override; |
| 79 void SetCookieWithDetailsAsync(const GURL& url, | 79 void SetCookieWithDetailsAsync(const GURL& url, |
| 80 const std::string& name, | 80 const std::string& name, |
| 81 const std::string& value, | 81 const std::string& value, |
| 82 const std::string& domain, | 82 const std::string& domain, |
| 83 const std::string& path, | 83 const std::string& path, |
| 84 base::Time creation_time, | 84 base::Time creation_time, |
| 85 base::Time expiration_time, | 85 base::Time expiration_time, |
| 86 base::Time last_access_time, | 86 base::Time last_access_time, |
| 87 bool secure, | 87 bool secure, |
| 88 bool http_only, | 88 bool http_only, |
| 89 CookieSameSite same_site, | 89 CookieSameSite same_site, |
| 90 CookiePriority priority, | 90 CookiePriority priority, |
| 91 const SetCookiesCallback& callback) override; | 91 SetCookiesCallback callback) override; |
| 92 void SetCanonicalCookieAsync(std::unique_ptr<CanonicalCookie> cookie, | 92 void SetCanonicalCookieAsync(std::unique_ptr<CanonicalCookie> cookie, |
| 93 bool secure_source, | 93 bool secure_source, |
| 94 bool modify_http_only, | 94 bool modify_http_only, |
| 95 const SetCookiesCallback& callback) override; | 95 SetCookiesCallback callback) override; |
| 96 void GetCookiesWithOptionsAsync(const GURL& url, | 96 void GetCookiesWithOptionsAsync(const GURL& url, |
| 97 const net::CookieOptions& options, | 97 const net::CookieOptions& options, |
| 98 const GetCookiesCallback& callback) override; | 98 GetCookiesCallback callback) override; |
| 99 void GetCookieListWithOptionsAsync( | 99 void GetCookieListWithOptionsAsync(const GURL& url, |
| 100 const GURL& url, | 100 const net::CookieOptions& options, |
| 101 const net::CookieOptions& options, | 101 GetCookieListCallback callback) override; |
| 102 const GetCookieListCallback& callback) override; | 102 void GetAllCookiesAsync(GetCookieListCallback callback) override; |
| 103 void GetAllCookiesAsync(const GetCookieListCallback& callback) override; | |
| 104 void DeleteCookieAsync(const GURL& url, | 103 void DeleteCookieAsync(const GURL& url, |
| 105 const std::string& cookie_name, | 104 const std::string& cookie_name, |
| 106 const base::Closure& callback) override; | 105 base::OnceClosure callback) override; |
| 107 void DeleteCanonicalCookieAsync( | 106 void DeleteCanonicalCookieAsync(const CanonicalCookie& cookie, |
| 108 const CanonicalCookie& cookie, | 107 DeleteCallback callback) override; |
| 109 const DeleteCallback& callback) override; | |
| 110 void DeleteAllCreatedBetweenAsync(const base::Time& delete_begin, | 108 void DeleteAllCreatedBetweenAsync(const base::Time& delete_begin, |
| 111 const base::Time& delete_end, | 109 const base::Time& delete_end, |
| 112 const DeleteCallback& callback) override; | 110 DeleteCallback callback) override; |
| 113 void DeleteAllCreatedBetweenWithPredicateAsync( | 111 void DeleteAllCreatedBetweenWithPredicateAsync( |
| 114 const base::Time& delete_begin, | 112 const base::Time& delete_begin, |
| 115 const base::Time& delete_end, | 113 const base::Time& delete_end, |
| 116 const CookiePredicate& predicate, | 114 const CookiePredicate& predicate, |
| 117 const DeleteCallback& callback) override; | 115 DeleteCallback callback) override; |
| 118 void DeleteSessionCookiesAsync(const DeleteCallback& callback) override; | 116 void DeleteSessionCookiesAsync(DeleteCallback callback) override; |
| 119 void FlushStore(const base::Closure& callback) override; | 117 void FlushStore(base::OnceClosure callback) override; |
| 120 | 118 |
| 121 std::unique_ptr<CookieChangedSubscription> AddCallbackForCookie( | 119 std::unique_ptr<CookieChangedSubscription> AddCallbackForCookie( |
| 122 const GURL& url, | 120 const GURL& url, |
| 123 const std::string& name, | 121 const std::string& name, |
| 124 const CookieChangedCallback& callback) override; | 122 const CookieChangedCallback& callback) override; |
| 125 | 123 |
| 126 bool IsEphemeral() override; | 124 bool IsEphemeral() override; |
| 127 | 125 |
| 128 protected: | 126 protected: |
| 129 CookieStoreIOS(net::CookieMonster::PersistentCookieStore* persistent_store, | 127 CookieStoreIOS(net::CookieMonster::PersistentCookieStore* persistent_store, |
| 130 NSHTTPCookieStorage* system_store); | 128 NSHTTPCookieStorage* system_store); |
| 131 | 129 |
| 132 // These three functions are used for wrapping user-supplied callbacks given | 130 // These three functions are used for wrapping user-supplied callbacks given |
| 133 // to CookieStoreIOS mutator methods. Given a callback, they return a new | 131 // to CookieStoreIOS mutator methods. Given a callback, they return a new |
| 134 // callback that invokes UpdateCachesFromCookieMonster() to schedule an | 132 // callback that invokes UpdateCachesFromCookieMonster() to schedule an |
| 135 // asynchronous synchronization of the cookie cache and then calls the | 133 // asynchronous synchronization of the cookie cache and then calls the |
| 136 // original callback. | 134 // original callback. |
| 137 SetCookiesCallback WrapSetCallback(const SetCookiesCallback& callback); | 135 SetCookiesCallback WrapSetCallback(SetCookiesCallback callback); |
| 138 DeleteCallback WrapDeleteCallback(const DeleteCallback& callback); | 136 DeleteCallback WrapDeleteCallback(DeleteCallback callback); |
| 139 base::Closure WrapClosure(const base::Closure& callback); | 137 base::OnceClosure WrapClosure(base::OnceClosure callback); |
| 140 | 138 |
| 141 bool metrics_enabled() { return metrics_enabled_; } | 139 bool metrics_enabled() { return metrics_enabled_; } |
| 142 | 140 |
| 143 net::CookieMonster* cookie_monster() { return cookie_monster_.get(); } | 141 net::CookieMonster* cookie_monster() { return cookie_monster_.get(); } |
| 144 | 142 |
| 145 const base::ThreadChecker& thread_checker() { return thread_checker_; } | 143 const base::ThreadChecker& thread_checker() { return thread_checker_; } |
| 146 | 144 |
| 147 private: | 145 private: |
| 148 // Cookie filter for DeleteCookiesWithFilter(). | 146 // Cookie filter for DeleteCookiesWithFilter(). |
| 149 // Takes a cookie and a creation time and returns true the cookie must be | 147 // Takes a cookie and a creation time and returns true the cookie must be |
| 150 // deleted. | 148 // deleted. |
| 151 typedef base::Callback<bool(NSHTTPCookie*, base::Time)> CookieFilterFunction; | 149 typedef base::Callback<bool(NSHTTPCookie*, base::Time)> CookieFilterFunction; |
| 152 | 150 |
| 153 // Clears the system cookie store. | 151 // Clears the system cookie store. |
| 154 void ClearSystemStore(); | 152 void ClearSystemStore(); |
| 155 // Returns true if the system cookie store policy is | 153 // Returns true if the system cookie store policy is |
| 156 // |NSHTTPCookieAcceptPolicyAlways|. | 154 // |NSHTTPCookieAcceptPolicyAlways|. |
| 157 bool SystemCookiesAllowed(); | 155 bool SystemCookiesAllowed(); |
| 158 // Copies the cookies to the backing CookieMonster. | 156 // Copies the cookies to the backing CookieMonster. |
| 159 virtual void WriteToCookieMonster(NSArray* system_cookies); | 157 virtual void WriteToCookieMonster(NSArray* system_cookies); |
| 160 | 158 |
| 161 // Inherited CookieNotificationObserver methods. | 159 // Inherited CookieNotificationObserver methods. |
| 162 void OnSystemCookiesChanged() override; | 160 void OnSystemCookiesChanged() override; |
| 163 | 161 |
| 164 void DeleteCookiesWithFilter(const CookieFilterFunction& filter, | 162 void DeleteCookiesWithFilter(const CookieFilterFunction& filter, |
| 165 const DeleteCallback& callback); | 163 DeleteCallback callback); |
| 166 | 164 |
| 167 std::unique_ptr<net::CookieMonster> cookie_monster_; | 165 std::unique_ptr<net::CookieMonster> cookie_monster_; |
| 168 base::scoped_nsobject<NSHTTPCookieStorage> system_store_; | 166 base::scoped_nsobject<NSHTTPCookieStorage> system_store_; |
| 169 std::unique_ptr<CookieCreationTimeManager> creation_time_manager_; | 167 std::unique_ptr<CookieCreationTimeManager> creation_time_manager_; |
| 170 bool metrics_enabled_; | 168 bool metrics_enabled_; |
| 171 base::CancelableClosure flush_closure_; | 169 base::CancelableClosure flush_closure_; |
| 172 | 170 |
| 173 base::ThreadChecker thread_checker_; | 171 base::ThreadChecker thread_checker_; |
| 174 | 172 |
| 175 // Cookie notification methods. | 173 // Cookie notification methods. |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 | 216 |
| 219 // Fetches new values for all (url, name) pairs that have hooks registered, | 217 // Fetches new values for all (url, name) pairs that have hooks registered, |
| 220 // asynchronously invoking callbacks if necessary. | 218 // asynchronously invoking callbacks if necessary. |
| 221 void UpdateCachesFromCookieMonster(); | 219 void UpdateCachesFromCookieMonster(); |
| 222 | 220 |
| 223 // Called after cookies are cleared from NSHTTPCookieStorage so that cookies | 221 // Called after cookies are cleared from NSHTTPCookieStorage so that cookies |
| 224 // can be cleared from .binarycookies file. |callback| is called after all the | 222 // can be cleared from .binarycookies file. |callback| is called after all the |
| 225 // cookies are deleted (with the total number of cookies deleted). | 223 // cookies are deleted (with the total number of cookies deleted). |
| 226 // |num_deleted| contains the number of cookies deleted from | 224 // |num_deleted| contains the number of cookies deleted from |
| 227 // NSHTTPCookieStorage. | 225 // NSHTTPCookieStorage. |
| 228 void DidClearNSHTTPCookieStorageCookies(const DeleteCallback& callback, | 226 void DidClearNSHTTPCookieStorageCookies(DeleteCallback callback, |
| 229 int num_deleted); | 227 int num_deleted); |
| 230 // Called after cookies are cleared from .binarycookies files. |callback| is | 228 // Called after cookies are cleared from .binarycookies files. |callback| is |
| 231 // called after all the cookies are deleted with the total number of cookies | 229 // called after all the cookies are deleted with the total number of cookies |
| 232 // deleted. | 230 // deleted. |
| 233 // |num_deleted_from_nshttp_cookie_storage| contains the number of cookies | 231 // |num_deleted_from_nshttp_cookie_storage| contains the number of cookies |
| 234 // deleted from NSHTTPCookieStorage. | 232 // deleted from NSHTTPCookieStorage. |
| 235 void DidClearBinaryCookiesFileCookies( | 233 void DidClearBinaryCookiesFileCookies( |
| 236 const DeleteCallback& callback, | 234 DeleteCallback callback, |
| 237 int num_deleted_from_nshttp_cookie_storage); | 235 int num_deleted_from_nshttp_cookie_storage); |
| 238 | 236 |
| 239 // Callback-wrapping: | 237 // Callback-wrapping: |
| 240 // When this CookieStoreIOS object is synchronized with the system store, | 238 // When this CookieStoreIOS object is synchronized with the system store, |
| 241 // OnSystemCookiesChanged is responsible for updating the cookie cache (and | 239 // OnSystemCookiesChanged is responsible for updating the cookie cache (and |
| 242 // hence running callbacks). | 240 // hence running callbacks). |
| 243 // | 241 // |
| 244 // When this CookieStoreIOS object is not synchronized, the various mutator | 242 // When this CookieStoreIOS object is not synchronized, the various mutator |
| 245 // methods (SetCookieWithOptionsAsync &c) instead store their state in a | 243 // methods (SetCookieWithOptionsAsync &c) instead store their state in a |
| 246 // CookieMonster object to be written back when the system store synchronizes. | 244 // CookieMonster object to be written back when the system store synchronizes. |
| 247 // To deliver notifications in a timely manner, the mutators have to ensure | 245 // To deliver notifications in a timely manner, the mutators have to ensure |
| 248 // that hooks get run, but only after the changes have been written back to | 246 // that hooks get run, but only after the changes have been written back to |
| 249 // CookieMonster. To do this, the mutators wrap the user-supplied callback in | 247 // CookieMonster. To do this, the mutators wrap the user-supplied callback in |
| 250 // a callback which schedules an asynchronous task to synchronize the cache | 248 // a callback which schedules an asynchronous task to synchronize the cache |
| 251 // and run callbacks, then calls through to the user-specified callback. | 249 // and run callbacks, then calls through to the user-specified callback. |
| 252 // | 250 // |
| 253 // These three UpdateCachesAfter functions are responsible for scheduling an | 251 // These three UpdateCachesAfter functions are responsible for scheduling an |
| 254 // asynchronous cache update (using UpdateCachesFromCookieMonster()) and | 252 // asynchronous cache update (using UpdateCachesFromCookieMonster()) and |
| 255 // calling the provided callback. | 253 // calling the provided callback. |
| 256 | 254 |
| 257 void UpdateCachesAfterSet(const SetCookiesCallback& callback, bool success); | 255 void UpdateCachesAfterSet(SetCookiesCallback callback, bool success); |
| 258 void UpdateCachesAfterDelete(const DeleteCallback& callback, int num_deleted); | 256 void UpdateCachesAfterDelete(DeleteCallback callback, int num_deleted); |
| 259 void UpdateCachesAfterClosure(const base::Closure& callback); | 257 void UpdateCachesAfterClosure(base::OnceClosure callback); |
| 260 | 258 |
| 261 // Takes an NSArray of NSHTTPCookies as returns a net::CookieList. | 259 // Takes an NSArray of NSHTTPCookies as returns a net::CookieList. |
| 262 // The returned cookies are ordered by longest path, then earliest | 260 // The returned cookies are ordered by longest path, then earliest |
| 263 // creation date. | 261 // creation date. |
| 264 net::CookieList CanonicalCookieListFromSystemCookies(NSArray* cookies); | 262 net::CookieList CanonicalCookieListFromSystemCookies(NSArray* cookies); |
| 265 | 263 |
| 266 // Cached values of system cookies. Only cookies which have an observer added | 264 // Cached values of system cookies. Only cookies which have an observer added |
| 267 // with AddCallbackForCookie are kept in this cache. | 265 // with AddCallbackForCookie are kept in this cache. |
| 268 std::unique_ptr<CookieCache> cookie_cache_; | 266 std::unique_ptr<CookieCache> cookie_cache_; |
| 269 | 267 |
| 270 // Callbacks for cookie changes installed by AddCallbackForCookie. | 268 // Callbacks for cookie changes installed by AddCallbackForCookie. |
| 271 std::map<std::pair<GURL, std::string>, | 269 std::map<std::pair<GURL, std::string>, |
| 272 std::unique_ptr<CookieChangedCallbackList>> | 270 std::unique_ptr<CookieChangedCallbackList>> |
| 273 hook_map_; | 271 hook_map_; |
| 274 | 272 |
| 275 base::WeakPtrFactory<CookieStoreIOS> weak_factory_; | 273 base::WeakPtrFactory<CookieStoreIOS> weak_factory_; |
| 276 | 274 |
| 277 DISALLOW_COPY_AND_ASSIGN(CookieStoreIOS); | 275 DISALLOW_COPY_AND_ASSIGN(CookieStoreIOS); |
| 278 }; | 276 }; |
| 279 | 277 |
| 280 } // namespace net | 278 } // namespace net |
| 281 | 279 |
| 282 #endif // IOS_NET_COOKIES_COOKIE_STORE_IOS_H_ | 280 #endif // IOS_NET_COOKIES_COOKIE_STORE_IOS_H_ |
| OLD | NEW |