Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: net/base/cookie_monster.h

Issue 7598001: Remove the old synchronous CookieMonster API. (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // Brought to you by the letter D and the number 2. 5 // Brought to you by the letter D and the number 2.
6 6
7 #ifndef NET_BASE_COOKIE_MONSTER_H_ 7 #ifndef NET_BASE_COOKIE_MONSTER_H_
8 #define NET_BASE_COOKIE_MONSTER_H_ 8 #define NET_BASE_COOKIE_MONSTER_H_
9 #pragma once 9 #pragma once
10 10
11 #include <map> 11 #include <map>
12 #include <queue>
12 #include <string> 13 #include <string>
13 #include <utility> 14 #include <utility>
14 #include <vector> 15 #include <vector>
15 16
16 #include "base/basictypes.h" 17 #include "base/basictypes.h"
17 #include "base/gtest_prod_util.h" 18 #include "base/gtest_prod_util.h"
18 #include "base/memory/ref_counted.h" 19 #include "base/memory/ref_counted.h"
19 #include "base/memory/scoped_ptr.h" 20 #include "base/memory/scoped_ptr.h"
20 #include "base/synchronization/lock.h" 21 #include "base/synchronization/lock.h"
21 #include "base/task.h" 22 #include "base/task.h"
22 #include "base/time.h" 23 #include "base/time.h"
23 #include "net/base/cookie_store.h" 24 #include "net/base/cookie_store.h"
24 #include "net/base/net_api.h" 25 #include "net/base/net_api.h"
25 26
26 class GURL; 27 class GURL;
27 28
28 namespace base { 29 namespace base {
29 class Histogram; 30 class Histogram;
31 class MessageLoopProxy;
30 } 32 }
31 33
32 namespace net { 34 namespace net {
33 35
34 class CookieList; 36 class CookieList;
37 class CookieMonsterTask;
35 38
36 // The cookie monster is the system for storing and retrieving cookies. It has 39 // The cookie monster is the system for storing and retrieving cookies. It has
37 // an in-memory list of all cookies, and synchronizes non-session cookies to an 40 // an in-memory list of all cookies, and synchronizes non-session cookies to an
38 // optional permanent storage that implements the PersistentCookieStore 41 // optional permanent storage that implements the PersistentCookieStore
39 // interface. 42 // interface.
40 // 43 //
41 // This class IS thread-safe. Normally, it is only used on the I/O thread, but 44 // This class IS thread-safe. Normally, it is only used on the I/O thread, but
42 // is also accessed directly through Automation for UI testing. 45 // is also accessed directly through Automation for UI testing.
43 // 46 //
44 // Several methods exist in asynchronous forms. Calls may be deferred if all 47 // Several methods exist in asynchronous forms. Calls may be deferred if all
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 Delegate* delegate, 134 Delegate* delegate,
132 int last_access_threshold_milliseconds); 135 int last_access_threshold_milliseconds);
133 136
134 // Parses the string with the cookie time (very forgivingly). 137 // Parses the string with the cookie time (very forgivingly).
135 static base::Time ParseCookieTime(const std::string& time_string); 138 static base::Time ParseCookieTime(const std::string& time_string);
136 139
137 // Returns true if a domain string represents a host-only cookie, 140 // Returns true if a domain string represents a host-only cookie,
138 // i.e. it doesn't begin with a leading '.' character. 141 // i.e. it doesn't begin with a leading '.' character.
139 static bool DomainIsHostOnly(const std::string& domain_string); 142 static bool DomainIsHostOnly(const std::string& domain_string);
140 143
144 // Helper function that adds all cookies from |cookie_monster| into this
145 // instance.
146 bool InitializeFrom(const CookieList& list);
147
148 typedef base::Callback<void(const CookieList& cookies)> GetCookieListCallback;
149 typedef base::Callback<void(int num_deleted)> DeleteCallback;
150 typedef SetCookiesCallback DeleteCookieCallback;
151
141 // Sets a cookie given explicit user-provided cookie attributes. The cookie 152 // Sets a cookie given explicit user-provided cookie attributes. The cookie
142 // name, value, domain, etc. are each provided as separate strings. This 153 // name, value, domain, etc. are each provided as separate strings. This
143 // function expects each attribute to be well-formed. It will check for 154 // function expects each attribute to be well-formed. It will check for
144 // disallowed characters (e.g. the ';' character is disallowed within the 155 // disallowed characters (e.g. the ';' character is disallowed within the
145 // cookie value attribute) and will return false without setting the cookie 156 // cookie value attribute) and will return false without setting the cookie
146 // if such characters are found. 157 // if such characters are found.
147 bool SetCookieWithDetails(const GURL& url,
148 const std::string& name,
149 const std::string& value,
150 const std::string& domain,
151 const std::string& path,
152 const base::Time& expiration_time,
153 bool secure, bool http_only);
154 void SetCookieWithDetailsAsync(const GURL& url, 158 void SetCookieWithDetailsAsync(const GURL& url,
155 const std::string& name, 159 const std::string& name,
156 const std::string& value, 160 const std::string& value,
157 const std::string& domain, 161 const std::string& domain,
158 const std::string& path, 162 const std::string& path,
159 const base::Time& expiration_time, 163 const base::Time& expiration_time,
160 bool secure, bool http_only, 164 bool secure, bool http_only,
161 const SetCookiesCallback& callback); 165 const SetCookiesCallback& callback);
162 166
163
164 // Helper function that adds all cookies from |cookie_monster| into this
165 // instance.
166 bool InitializeFrom(CookieMonster* cookie_monster);
167
168 // Returns all the cookies, for use in management UI, etc. This does not mark 167 // Returns all the cookies, for use in management UI, etc. This does not mark
169 // the cookies as having been accessed. 168 // the cookies as having been accessed.
170 // The returned cookies are ordered by longest path, then by earliest 169 // The returned cookies are ordered by longest path, then by earliest
171 // creation date. 170 // creation date.
172 CookieList GetAllCookies();
173 typedef base::Callback<void(const CookieList& cookies)> GetCookieListCallback;
174 void GetAllCookiesAsync(const GetCookieListCallback& callback); 171 void GetAllCookiesAsync(const GetCookieListCallback& callback);
175 172
176 // Returns all the cookies, for use in management UI, etc. Filters results 173 // Returns all the cookies, for use in management UI, etc. Filters results
177 // using given url scheme, host / domain and path and options. This does not 174 // using given url scheme, host / domain and path and options. This does not
178 // mark the cookies as having been accessed. 175 // mark the cookies as having been accessed.
179 // The returned cookies are ordered by longest path, then earliest 176 // The returned cookies are ordered by longest path, then earliest
180 // creation date. 177 // creation date.
181 CookieList GetAllCookiesForURLWithOptions(const GURL& url,
182 const CookieOptions& options);
183 void GetAllCookiesForURLWithOptionsAsync( 178 void GetAllCookiesForURLWithOptionsAsync(
184 const GURL& url, 179 const GURL& url,
185 const CookieOptions& options, 180 const CookieOptions& options,
186 const GetCookieListCallback& callback); 181 const GetCookieListCallback& callback);
187 182
188 // Invokes GetAllCookiesForURLWithOptions with options set to include HTTP 183 // Invokes GetAllCookiesForURLWithOptions with options set to include HTTP
189 // only cookies. 184 // only cookies.
190 CookieList GetAllCookiesForURL(const GURL& url);
191 void GetAllCookiesForURLAsync(const GURL& url, 185 void GetAllCookiesForURLAsync(const GURL& url,
192 const GetCookieListCallback& callback); 186 const GetCookieListCallback& callback);
193 187
194 // Deletes all of the cookies. 188 // Deletes all of the cookies.
195 int DeleteAll(bool sync_to_store); 189 void DeleteAllAsync(bool sync_to_store,
190 const DeleteCallback& callback);
191
196 // Deletes all of the cookies that have a creation_date greater than or equal 192 // Deletes all of the cookies that have a creation_date greater than or equal
197 // to |delete_begin| and less than |delete_end| 193 // to |delete_begin| and less than |delete_end|
198 // Returns the number of cookies that have been deleted. 194 // Returns the number of cookies that have been deleted.
199 int DeleteAllCreatedBetween(const base::Time& delete_begin,
200 const base::Time& delete_end,
201 bool sync_to_store);
202 typedef base::Callback<void(int num_deleted)> DeleteCallback;
203 void DeleteAllCreatedBetweenAsync(const base::Time& delete_begin, 195 void DeleteAllCreatedBetweenAsync(const base::Time& delete_begin,
204 const base::Time& delete_end, 196 const base::Time& delete_end,
205 bool sync_to_store, 197 bool sync_to_store,
206 const DeleteCallback& callback); 198 const DeleteCallback& callback);
207 199
208 // Deletes all cookies that match the host of the given URL 200 // Deletes all cookies that match the host of the given URL
209 // regardless of path. This includes all http_only and secure cookies, 201 // regardless of path. This includes all http_only and secure cookies,
210 // but does not include any domain cookies that may apply to this host. 202 // but does not include any domain cookies that may apply to this host.
211 // Returns the number of cookies deleted. 203 // Returns the number of cookies deleted.
212 int DeleteAllForHost(const GURL& url);
213
214 void DeleteAllForHostAsync(const GURL& url, 204 void DeleteAllForHostAsync(const GURL& url,
215 const DeleteCallback& callback); 205 const DeleteCallback& callback);
216 206
217 // Deletes one specific cookie. 207 // Deletes one specific cookie.
218 bool DeleteCanonicalCookie(const CanonicalCookie& cookie);
219
220 typedef SetCookiesCallback DeleteCookieCallback;
221
222 void DeleteCanonicalCookieAsync(const CanonicalCookie& cookie, 208 void DeleteCanonicalCookieAsync(const CanonicalCookie& cookie,
223 const DeleteCookieCallback& callback); 209 const DeleteCookieCallback& callback);
224 210
225 // Override the default list of schemes that are allowed to be set in 211 // Override the default list of schemes that are allowed to be set in
226 // this cookie store. Calling his overrides the value of 212 // this cookie store. Calling his overrides the value of
227 // "enable_file_scheme_". 213 // "enable_file_scheme_".
228 // If this this method is called, it must be called before first use of 214 // If this this method is called, it must be called before first use of
229 // the instance (i.e. as part of the instance initialization process). 215 // the instance (i.e. as part of the instance initialization process).
230 void SetCookieableSchemes(const char* schemes[], size_t num_schemes); 216 void SetCookieableSchemes(const char* schemes[], size_t num_schemes);
231 217
(...skipping 21 matching lines...) Expand all
253 // WARNING: THE CALLBACK WILL RUN ON A RANDOM THREAD. IT MUST BE THREAD SAFE. 239 // WARNING: THE CALLBACK WILL RUN ON A RANDOM THREAD. IT MUST BE THREAD SAFE.
254 // It may be posted to the current thread, or it may run on the thread that 240 // It may be posted to the current thread, or it may run on the thread that
255 // actually does the flushing. Your Task should generally post a notification 241 // actually does the flushing. Your Task should generally post a notification
256 // to the thread you actually want to be notified on. 242 // to the thread you actually want to be notified on.
257 void FlushStore(Task* completion_task); 243 void FlushStore(Task* completion_task);
258 244
259 // CookieStore implementation. 245 // CookieStore implementation.
260 246
261 // Sets the cookies specified by |cookie_list| returned from |url| 247 // Sets the cookies specified by |cookie_list| returned from |url|
262 // with options |options| in effect. 248 // with options |options| in effect.
263 virtual bool SetCookieWithOptions(const GURL& url, 249 virtual void SetCookieWithOptionsAsync(
264 const std::string& cookie_line, 250 const GURL& url,
265 const CookieOptions& options); 251 const std::string& cookie_line,
266 252 const CookieOptions& options,
267 virtual void SetCookieWithOptionsAsync(const GURL& url, 253 const SetCookiesCallback& callback) OVERRIDE;
268 const std::string& cookie_line,
269 const CookieOptions& options,
270 const SetCookiesCallback& callback);
271 254
272 // Gets all cookies that apply to |url| given |options|. 255 // Gets all cookies that apply to |url| given |options|.
273 // The returned cookies are ordered by longest path, then earliest 256 // The returned cookies are ordered by longest path, then earliest
274 // creation date. 257 // creation date.
275 virtual std::string GetCookiesWithOptions(const GURL& url,
276 const CookieOptions& options);
277
278 virtual void GetCookiesWithOptionsAsync( 258 virtual void GetCookiesWithOptionsAsync(
279 const GURL& url, 259 const GURL& url,
280 const CookieOptions& options, 260 const CookieOptions& options,
281 const GetCookiesCallback& callback); 261 const GetCookiesCallback& callback) OVERRIDE;
282 262
283 virtual void GetCookiesWithInfo(const GURL& url, 263 virtual void GetCookiesWithInfoAsync(
284 const CookieOptions& options, 264 const GURL& url,
285 std::string* cookie_line, 265 const CookieOptions& options,
286 std::vector<CookieInfo>* cookie_infos); 266 const GetCookieInfoCallback& callback) OVERRIDE;
287
288 virtual void GetCookiesWithInfoAsync(const GURL& url,
289 const CookieOptions& options,
290 const GetCookieInfoCallback& callback);
291 267
292 // Deletes all cookies with that might apply to |url| that has |cookie_name|. 268 // Deletes all cookies with that might apply to |url| that has |cookie_name|.
293 virtual void DeleteCookie(const GURL& url, const std::string& cookie_name);
294 virtual void DeleteCookieAsync( 269 virtual void DeleteCookieAsync(
295 const GURL& url, const std::string& cookie_name, 270 const GURL& url, const std::string& cookie_name,
296 const base::Closure& callback); 271 const base::Closure& callback) OVERRIDE;
297 272
298 virtual CookieMonster* GetCookieMonster(); 273 virtual CookieMonster* GetCookieMonster() OVERRIDE;
299 274
300 // Debugging method to perform various validation checks on the map. 275 // Debugging method to perform various validation checks on the map.
301 // Currently just checking that there are no null CanonicalCookie pointers 276 // Currently just checking that there are no null CanonicalCookie pointers
302 // in the map. 277 // in the map.
303 // Argument |arg| is to allow retaining of arbitrary data if the CHECKs 278 // Argument |arg| is to allow retaining of arbitrary data if the CHECKs
304 // in the function trip. TODO(rdsmith):Remove hack. 279 // in the function trip. TODO(rdsmith):Remove hack.
305 void ValidateMap(int arg); 280 void ValidateMap(int arg);
306 281
307 // The default list of schemes the cookie monster can handle. 282 // The default list of schemes the cookie monster can handle.
308 static const char* kDefaultCookieableSchemes[]; 283 static const char* kDefaultCookieableSchemes[];
309 static const int kDefaultCookieableSchemesCount; 284 static const int kDefaultCookieableSchemesCount;
310 285
311 private: 286 private:
287 // For queueing the cookie monater calls.
erikwright (departed) 2011/08/12 16:00:34 monater -> monster
ycxiao 2011/08/12 17:51:25 Done.
288 friend class DeleteAllCreatedBetweenTask;
289 friend class DeleteAllForHostTask;
290 friend class DeleteAllTask;
291 friend class DeleteCookieTask;
292 friend class DeleteCanonicalCookieTask;
293 friend class GetAllCookiesForURLWithOptionsTask;
294 friend class GetAllCookiesTask;
295 friend class GetCookiesWithOptionsTask;
296 friend class GetCookiesWithInfoTask;
297 friend class SetCookieWithDetailsTask;
298 friend class SetCookieWithOptionsTask;
299
312 // Testing support. 300 // Testing support.
313 // For SetCookieWithCreationTime. 301 // For SetCookieWithCreationTime.
314 FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, 302 FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest,
315 TestCookieDeleteAllCreatedBetweenTimestamps); 303 TestCookieDeleteAllCreatedBetweenTimestamps);
316 304
317 // For gargage collection constants. 305 // For gargage collection constants.
318 FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, TestHostGarbageCollection); 306 FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, TestHostGarbageCollection);
319 FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, TestTotalGarbageCollection); 307 FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, TestTotalGarbageCollection);
320 FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, GarbageCollectionTriggers); 308 FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, GarbageCollectionTriggers);
321 FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, TestGCTimes); 309 FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, TestGCTimes);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 378
391 // Default value for key and expiry scheme scheme. 379 // Default value for key and expiry scheme scheme.
392 static const ExpiryAndKeyScheme expiry_and_key_default_ = 380 static const ExpiryAndKeyScheme expiry_and_key_default_ =
393 EKS_KEEP_RECENT_AND_PURGE_ETLDP1; 381 EKS_KEEP_RECENT_AND_PURGE_ETLDP1;
394 382
395 // Record statistics every kRecordStatisticsIntervalSeconds of uptime. 383 // Record statistics every kRecordStatisticsIntervalSeconds of uptime.
396 static const int kRecordStatisticsIntervalSeconds = 10 * 60; 384 static const int kRecordStatisticsIntervalSeconds = 10 * 60;
397 385
398 virtual ~CookieMonster(); 386 virtual ~CookieMonster();
399 387
388 bool SetCookieWithDetails(const GURL& url,
389 const std::string& name,
390 const std::string& value,
391 const std::string& domain,
392 const std::string& path,
393 const base::Time& expiration_time,
394 bool secure, bool http_only);
395
396 CookieList GetAllCookies();
397
398 CookieList GetAllCookiesForURLWithOptions(const GURL& url,
399 const CookieOptions& options);
400
401 CookieList GetAllCookiesForURL(const GURL& url);
402
403 int DeleteAll(bool sync_to_store);
404
405 int DeleteAllCreatedBetween(const base::Time& delete_begin,
406 const base::Time& delete_end,
407 bool sync_to_store);
408
409 int DeleteAllForHost(const GURL& url);
410
411 bool DeleteCanonicalCookie(const CanonicalCookie& cookie);
412
413 bool SetCookieWithOptions(const GURL& url,
414 const std::string& cookie_line,
415 const CookieOptions& options);
416
417 std::string GetCookiesWithOptions(const GURL& url,
418 const CookieOptions& options);
419
420 void GetCookiesWithInfo(const GURL& url,
421 const CookieOptions& options,
422 std::string* cookie_line,
423 std::vector<CookieInfo>* cookie_infos);
424
425 void DeleteCookie(const GURL& url, const std::string& cookie_name);
426
400 bool SetCookieWithCreationTime(const GURL& url, 427 bool SetCookieWithCreationTime(const GURL& url,
401 const std::string& cookie_line, 428 const std::string& cookie_line,
402 const base::Time& creation_time); 429 const base::Time& creation_time);
403 430
404 // Called by all non-static functions to ensure that the cookies store has 431 // Called by all non-static functions to ensure that the cookies store has
405 // been initialized. This is not done during creating so it doesn't block 432 // been initialized. This is not done during creating so it doesn't block
406 // the window showing. 433 // the window showing.
407 // Note: this method should always be called with lock_ held. 434 // Note: this method should always be called with lock_ held.
408 void InitIfNecessary() { 435 void InitIfNecessary() {
409 if (!initialized_) { 436 if (!initialized_) {
410 if (store_) 437 if (store_) {
411 InitStore(); 438 InitStore();
439 } else {
440 loaded_ = true;
441 }
412 initialized_ = true; 442 initialized_ = true;
413 } 443 }
414 } 444 }
415 445
416 // Initializes the backing store and reads existing cookies from it. 446 // Initializes the backing store and reads existing cookies from it.
417 // Should only be called by InitIfNecessary(). 447 // Should only be called by InitIfNecessary().
418 void InitStore(); 448 void InitStore();
419 449
450 // Reads the existing cookies loaded form the backing store.
451 void OnLoaded(const std::vector<CanonicalCookie*>& cookies);
452
453 // Ininitalize the cookies.
454 void StoreLoadedCookies(const std::vector<CanonicalCookie*>& cookies);
455
456 // Invoke the queueing calls of CookieMonster when loading cookies from
457 // the back store is complete.
458 void InvokeQueue();
459
420 // Checks that |cookies_| matches our invariants, and tries to repair any 460 // Checks that |cookies_| matches our invariants, and tries to repair any
421 // inconsistencies. (In other words, it does not have duplicate cookies). 461 // inconsistencies. (In other words, it does not have duplicate cookies).
422 void EnsureCookiesMapIsValid(); 462 void EnsureCookiesMapIsValid();
423 463
424 // Checks for any duplicate cookies for CookieMap key |key| which lie between 464 // Checks for any duplicate cookies for CookieMap key |key| which lie between
425 // |begin| and |end|. If any are found, all but the most recent are deleted. 465 // |begin| and |end|. If any are found, all but the most recent are deleted.
426 // Returns the number of duplicate cookies that were deleted. 466 // Returns the number of duplicate cookies that were deleted.
427 int TrimDuplicateCookiesForKey(const std::string& key, 467 int TrimDuplicateCookiesForKey(const std::string& key,
428 CookieMap::iterator begin, 468 CookieMap::iterator begin,
429 CookieMap::iterator end); 469 CookieMap::iterator end);
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 void RecordPeriodicStats(const base::Time& current_time); 559 void RecordPeriodicStats(const base::Time& current_time);
520 560
521 // Initialize the above variables; should only be called from 561 // Initialize the above variables; should only be called from
522 // the constructor. 562 // the constructor.
523 void InitializeHistograms(); 563 void InitializeHistograms();
524 564
525 // The resolution of our time isn't enough, so we do something 565 // The resolution of our time isn't enough, so we do something
526 // ugly and increment when we've seen the same time twice. 566 // ugly and increment when we've seen the same time twice.
527 base::Time CurrentTime(); 567 base::Time CurrentTime();
528 568
569 // Store the parameters of cookie monster API.
570 class CookieAPIParameters {
erikwright (departed) 2011/08/12 16:00:34 Presumably you can now remove CookieAPIParameters?
ycxiao 2011/08/12 17:51:25 Done.
571 public:
572 CookieAPIParameters()
573 : secure(false),
574 http_only(false),
575 sync_to_store(false) { }
576
577 GURL* url;
578 CookieOptions options;
579 std::string name;
580 std::string value;
581 std::string domain;
582 std::string path;
583 std::string cookie_line;
584 bool secure;
585 bool http_only;
586 bool sync_to_store;
587 base::Time delete_begin;
588 base::Time delete_end;
589 base::Time expiration_time;
590 CanonicalCookie* cookie;
591 };
592
593 // Run the cookie request task if cookie loaded, otherwise added the task
594 // to task queue.
595 void DoCookieTask(scoped_refptr<CookieMonsterTask> task_item);
596
597 // // Task functions for queueing the coming request.
598
599 // void SetCookieWithDetailsTask(
600 // const SetCookiesCallback& callback,
601 // const CookieAPIParameters& para,
602 // scoped_refptr<base::MessageLoopProxy> thread);
603
604 // void GetAllCookiesTask(
605 // const GetCookieListCallback& callback,
606 // scoped_refptr<base::MessageLoopProxy> thread);
607
608 // void GetAllCookiesForURLWithOptionsTask(
609 // const GetCookieListCallback& callback,
610 // const CookieAPIParameters& para,
611 // scoped_refptr<base::MessageLoopProxy> thread);
612
613 // void GetAllCookiesForURLTask(
614 // const GetCookieListCallback& callback,
615 // const CookieAPIParameters& para,
616 // scoped_refptr<base::MessageLoopProxy> thread);
617
618 // void DeleteAllTask(
619 // const DeleteCallback& callback,
620 // const CookieAPIParameters& para,
621 // scoped_refptr<base::MessageLoopProxy> thread);
622
623 // void DeleteAllCreatedBetweenTask(
624 // const DeleteCallback& callback,
625 // const CookieAPIParameters& para,
626 // scoped_refptr<base::MessageLoopProxy> thread);
627
628 // void DeleteAllForHostTask(
629 // const DeleteCallback& callback,
630 // const CookieAPIParameters& para,
631 // scoped_refptr<base::MessageLoopProxy> thread);
632
633 // void DeleteCanonicalCookieTask(
634 // const DeleteCookieCallback& callback,
635 // const CookieAPIParameters& para,
636 // scoped_refptr<base::MessageLoopProxy> thread);
637
638 // void SetCookieWithOptionsTask(
639 // const SetCookiesCallback& callback,
640 // const CookieAPIParameters& para,
641 // scoped_refptr<base::MessageLoopProxy> thread);
642
643 // // void GetCookiesWithOptionsTask(
644 // // const GetCookiesCallback& callback,
645 // // const CookieAPIParameters& para,
646 // // scoped_refptr<base::MessageLoopProxy> thread);
647
648 // void GetCookiesWithInfoTask(
649 // const GetCookieInfoCallback& callback,
650 // const CookieAPIParameters& para,
651 // scoped_refptr<base::MessageLoopProxy> thread);
652
653 // void DeleteCookieTask(
654 // const base::Closure& callback,
655 // const CookieAPIParameters& para,
656 // scoped_refptr<base::MessageLoopProxy> thread);
657
529 // Histogram variables; see CookieMonster::InitializeHistograms() in 658 // Histogram variables; see CookieMonster::InitializeHistograms() in
530 // cookie_monster.cc for details. 659 // cookie_monster.cc for details.
531 base::Histogram* histogram_expiration_duration_minutes_; 660 base::Histogram* histogram_expiration_duration_minutes_;
532 base::Histogram* histogram_between_access_interval_minutes_; 661 base::Histogram* histogram_between_access_interval_minutes_;
533 base::Histogram* histogram_evicted_last_access_minutes_; 662 base::Histogram* histogram_evicted_last_access_minutes_;
534 base::Histogram* histogram_count_; 663 base::Histogram* histogram_count_;
535 base::Histogram* histogram_domain_count_; 664 base::Histogram* histogram_domain_count_;
536 base::Histogram* histogram_etldp1_count_; 665 base::Histogram* histogram_etldp1_count_;
537 base::Histogram* histogram_domain_per_etldp1_count_; 666 base::Histogram* histogram_domain_per_etldp1_count_;
538 base::Histogram* histogram_number_duplicate_db_cookies_; 667 base::Histogram* histogram_number_duplicate_db_cookies_;
539 base::Histogram* histogram_cookie_deletion_cause_; 668 base::Histogram* histogram_cookie_deletion_cause_;
540 base::Histogram* histogram_time_get_; 669 base::Histogram* histogram_time_get_;
541 base::Histogram* histogram_time_mac_; 670 base::Histogram* histogram_time_mac_;
542 base::Histogram* histogram_time_load_; 671 base::Histogram* histogram_time_load_;
543 672
544 CookieMap cookies_; 673 CookieMap cookies_;
545 674
546 // Indicates whether the cookie store has been initialized. This happens 675 // Indicates whether the cookie store has been initialized. This happens
547 // lazily in InitStoreIfNecessary(). 676 // lazily in InitStoreIfNecessary().
548 bool initialized_; 677 bool initialized_;
549 678
679 // Indicates whether loading from the backend store is completed and
680 // calls may be immediately processed.
681 bool loaded_;
682
683 // Queues calls to CookieMonster until loading from the backend store is
684 // completed.
685 std::queue<base::Closure> queue_;
686
550 // Indicates whether this cookie monster uses the new effective domain 687 // Indicates whether this cookie monster uses the new effective domain
551 // key scheme or not. 688 // key scheme or not.
552 ExpiryAndKeyScheme expiry_and_key_scheme_; 689 ExpiryAndKeyScheme expiry_and_key_scheme_;
553 690
554 scoped_refptr<PersistentCookieStore> store_; 691 scoped_refptr<PersistentCookieStore> store_;
555 692
556 base::Time last_time_seen_; 693 base::Time last_time_seen_;
557 694
558 // Minimum delay after updating a cookie's LastAccessDate before we will 695 // Minimum delay after updating a cookie's LastAccessDate before we will
559 // update it again. 696 // update it again.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 747
611 // This constructor does canonicalization but not validation. 748 // This constructor does canonicalization but not validation.
612 // The result of this constructor should not be relied on in contexts 749 // The result of this constructor should not be relied on in contexts
613 // in which pre-validation of the ParsedCookie has not been done. 750 // in which pre-validation of the ParsedCookie has not been done.
614 CanonicalCookie(const GURL& url, const ParsedCookie& pc); 751 CanonicalCookie(const GURL& url, const ParsedCookie& pc);
615 752
616 ~CanonicalCookie(); 753 ~CanonicalCookie();
617 754
618 // Supports the default copy constructor. 755 // Supports the default copy constructor.
619 756
757 // Creates a canonical cookie from parsed cookie.
758 // Canonicalizes and validates inputs. May return NULL if an attribute
759 // value is invalid.
760 static CanonicalCookie* Create(const GURL& url,
761 const ParsedCookie& pc);
762
620 // Creates a canonical cookie from unparsed attribute values. 763 // Creates a canonical cookie from unparsed attribute values.
621 // Canonicalizes and validates inputs. May return NULL if an attribute 764 // Canonicalizes and validates inputs. May return NULL if an attribute
622 // value is invalid. 765 // value is invalid.
623 static CanonicalCookie* Create(const GURL& url, 766 static CanonicalCookie* Create(const GURL& url,
624 const std::string& name, 767 const std::string& name,
625 const std::string& value, 768 const std::string& value,
626 const std::string& domain, 769 const std::string& domain,
627 const std::string& path, 770 const std::string& path,
628 const std::string& mac_key, 771 const std::string& mac_key,
629 const std::string& mac_algorithm, 772 const std::string& mac_algorithm,
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 }; 991 };
849 992
850 typedef base::RefCountedThreadSafe<CookieMonster::PersistentCookieStore> 993 typedef base::RefCountedThreadSafe<CookieMonster::PersistentCookieStore>
851 RefcountedPersistentCookieStore; 994 RefcountedPersistentCookieStore;
852 995
853 class CookieMonster::PersistentCookieStore 996 class CookieMonster::PersistentCookieStore
854 : public RefcountedPersistentCookieStore { 997 : public RefcountedPersistentCookieStore {
855 public: 998 public:
856 virtual ~PersistentCookieStore() {} 999 virtual ~PersistentCookieStore() {}
857 1000
1001 typedef base::Callback<void(const std::vector<
1002 CookieMonster::CanonicalCookie*>&)> LoadedCallback;
1003
858 // Initializes the store and retrieves the existing cookies. This will be 1004 // Initializes the store and retrieves the existing cookies. This will be
859 // called only once at startup. 1005 // called only once at startup.
860 virtual bool Load(std::vector<CookieMonster::CanonicalCookie*>* cookies) = 0; 1006 virtual bool Load(const LoadedCallback& loaded_callback) = 0;
861 1007
862 virtual void AddCookie(const CanonicalCookie& cc) = 0; 1008 virtual void AddCookie(const CanonicalCookie& cc) = 0;
863 virtual void UpdateCookieAccessTime(const CanonicalCookie& cc) = 0; 1009 virtual void UpdateCookieAccessTime(const CanonicalCookie& cc) = 0;
864 virtual void DeleteCookie(const CanonicalCookie& cc) = 0; 1010 virtual void DeleteCookie(const CanonicalCookie& cc) = 0;
865 1011
866 // Sets the value of the user preference whether the persistent storage 1012 // Sets the value of the user preference whether the persistent storage
867 // must be deleted upon destruction. 1013 // must be deleted upon destruction.
868 virtual void SetClearLocalStateOnExit(bool clear_local_state) = 0; 1014 virtual void SetClearLocalStateOnExit(bool clear_local_state) = 0;
869 1015
870 // Flush the store and post the given Task when complete. 1016 // Flush the store and post the given Task when complete.
871 virtual void Flush(Task* completion_task) = 0; 1017 virtual void Flush(Task* completion_task) = 0;
872 1018
873 protected: 1019 protected:
874 PersistentCookieStore() {} 1020 PersistentCookieStore() {}
875 1021
876 private: 1022 private:
877 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore); 1023 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore);
878 }; 1024 };
879 1025
880 class CookieList : public std::vector<CookieMonster::CanonicalCookie> { 1026 class CookieList : public std::vector<CookieMonster::CanonicalCookie> {
881 }; 1027 };
882 1028
883 } // namespace net 1029 } // namespace net
884 1030
885 #endif // NET_BASE_COOKIE_MONSTER_H_ 1031 #endif // NET_BASE_COOKIE_MONSTER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698