| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 // 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_COOKIES_COOKIE_MONSTER_H_ | 7 #ifndef NET_COOKIES_COOKIE_MONSTER_H_ |
| 8 #define NET_COOKIES_COOKIE_MONSTER_H_ | 8 #define NET_COOKIES_COOKIE_MONSTER_H_ |
| 9 | 9 |
| 10 #include <deque> | 10 #include <deque> |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 const std::string& name, | 163 const std::string& name, |
| 164 const std::string& value, | 164 const std::string& value, |
| 165 const std::string& domain, | 165 const std::string& domain, |
| 166 const std::string& path, | 166 const std::string& path, |
| 167 const base::Time& expiration_time, | 167 const base::Time& expiration_time, |
| 168 bool secure, | 168 bool secure, |
| 169 bool http_only, | 169 bool http_only, |
| 170 CookiePriority priority, | 170 CookiePriority priority, |
| 171 const SetCookiesCallback& callback); | 171 const SetCookiesCallback& callback); |
| 172 | 172 |
| 173 | |
| 174 // Returns all the cookies, for use in management UI, etc. This does not mark | 173 // Returns all the cookies, for use in management UI, etc. This does not mark |
| 175 // the cookies as having been accessed. | 174 // the cookies as having been accessed. |
| 176 // The returned cookies are ordered by longest path, then by earliest | 175 // The returned cookies are ordered by longest path, then by earliest |
| 177 // creation date. | 176 // creation date. |
| 178 void GetAllCookiesAsync(const GetCookieListCallback& callback); | 177 void GetAllCookiesAsync(const GetCookieListCallback& callback); |
| 179 | 178 |
| 180 // Returns all the cookies, for use in management UI, etc. Filters results | 179 // Returns all the cookies, for use in management UI, etc. Filters results |
| 181 // using given url scheme, host / domain and path and options. This does not | 180 // using given url scheme, host / domain and path and options. This does not |
| 182 // mark the cookies as having been accessed. | 181 // mark the cookies as having been accessed. |
| 183 // The returned cookies are ordered by longest path, then earliest | 182 // The returned cookies are ordered by longest path, then earliest |
| 184 // creation date. | 183 // creation date. |
| 185 void GetAllCookiesForURLWithOptionsAsync( | 184 void GetAllCookiesForURLWithOptionsAsync( |
| 186 const GURL& url, | 185 const GURL& url, |
| 187 const CookieOptions& options, | 186 const CookieOptions& options, |
| 188 const GetCookieListCallback& callback); | 187 const GetCookieListCallback& callback); |
| 189 | 188 |
| 190 // Deletes all of the cookies. | 189 // Deletes all of the cookies. |
| 191 void DeleteAllAsync(const DeleteCallback& callback); | 190 void DeleteAllAsync(const DeleteCallback& callback); |
| 192 | 191 |
| 193 // Deletes all cookies that match the host of the given URL | 192 // Deletes all cookies that match the host of the given URL |
| 194 // regardless of path. This includes all http_only and secure cookies, | 193 // regardless of path. This includes all http_only and secure cookies, |
| 195 // but does not include any domain cookies that may apply to this host. | 194 // but does not include any domain cookies that may apply to this host. |
| 196 // Returns the number of cookies deleted. | 195 // Returns the number of cookies deleted. |
| 197 void DeleteAllForHostAsync(const GURL& url, | 196 void DeleteAllForHostAsync(const GURL& url, const DeleteCallback& callback); |
| 198 const DeleteCallback& callback); | |
| 199 | 197 |
| 200 // Deletes one specific cookie. | 198 // Deletes one specific cookie. |
| 201 void DeleteCanonicalCookieAsync(const CanonicalCookie& cookie, | 199 void DeleteCanonicalCookieAsync(const CanonicalCookie& cookie, |
| 202 const DeleteCookieCallback& callback); | 200 const DeleteCookieCallback& callback); |
| 203 | 201 |
| 204 // Checks whether for a given ETLD+1, there currently exist any cookies. | 202 // Checks whether for a given ETLD+1, there currently exist any cookies. |
| 205 void HasCookiesForETLDP1Async(const std::string& etldp1, | 203 void HasCookiesForETLDP1Async(const std::string& etldp1, |
| 206 const HasCookiesForETLDP1Callback& callback); | 204 const HasCookiesForETLDP1Callback& callback); |
| 207 | 205 |
| 208 // Resets the list of cookieable schemes to the supplied schemes. | 206 // Resets the list of cookieable schemes to the supplied schemes. |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 const CookieOptions& options, | 250 const CookieOptions& options, |
| 253 const GetCookiesCallback& callback) OVERRIDE; | 251 const GetCookiesCallback& callback) OVERRIDE; |
| 254 | 252 |
| 255 // Invokes GetAllCookiesForURLWithOptions with options set to include HTTP | 253 // Invokes GetAllCookiesForURLWithOptions with options set to include HTTP |
| 256 // only cookies. | 254 // only cookies. |
| 257 virtual void GetAllCookiesForURLAsync( | 255 virtual void GetAllCookiesForURLAsync( |
| 258 const GURL& url, | 256 const GURL& url, |
| 259 const GetCookieListCallback& callback) OVERRIDE; | 257 const GetCookieListCallback& callback) OVERRIDE; |
| 260 | 258 |
| 261 // Deletes all cookies with that might apply to |url| that has |cookie_name|. | 259 // Deletes all cookies with that might apply to |url| that has |cookie_name|. |
| 262 virtual void DeleteCookieAsync( | 260 virtual void DeleteCookieAsync(const GURL& url, |
| 263 const GURL& url, const std::string& cookie_name, | 261 const std::string& cookie_name, |
| 264 const base::Closure& callback) OVERRIDE; | 262 const base::Closure& callback) OVERRIDE; |
| 265 | 263 |
| 266 // Deletes all of the cookies that have a creation_date greater than or equal | 264 // Deletes all of the cookies that have a creation_date greater than or equal |
| 267 // to |delete_begin| and less than |delete_end|. | 265 // to |delete_begin| and less than |delete_end|. |
| 268 // Returns the number of cookies that have been deleted. | 266 // Returns the number of cookies that have been deleted. |
| 269 virtual void DeleteAllCreatedBetweenAsync( | 267 virtual void DeleteAllCreatedBetweenAsync( |
| 270 const base::Time& delete_begin, | 268 const base::Time& delete_begin, |
| 271 const base::Time& delete_end, | 269 const base::Time& delete_end, |
| 272 const DeleteCallback& callback) OVERRIDE; | 270 const DeleteCallback& callback) OVERRIDE; |
| 273 | 271 |
| 274 // Deletes all of the cookies that match the host of the given URL | 272 // Deletes all of the cookies that match the host of the given URL |
| (...skipping 28 matching lines...) Expand all Loading... |
| 303 // stored for. | 301 // stored for. |
| 304 bool IsCookieableScheme(const std::string& scheme); | 302 bool IsCookieableScheme(const std::string& scheme); |
| 305 | 303 |
| 306 // The default list of schemes the cookie monster can handle. | 304 // The default list of schemes the cookie monster can handle. |
| 307 static const char* kDefaultCookieableSchemes[]; | 305 static const char* kDefaultCookieableSchemes[]; |
| 308 static const int kDefaultCookieableSchemesCount; | 306 static const int kDefaultCookieableSchemesCount; |
| 309 | 307 |
| 310 private: | 308 private: |
| 311 // For queueing the cookie monster calls. | 309 // For queueing the cookie monster calls. |
| 312 class CookieMonsterTask; | 310 class CookieMonsterTask; |
| 313 template <typename Result> class DeleteTask; | 311 template <typename Result> |
| 312 class DeleteTask; |
| 314 class DeleteAllCreatedBetweenTask; | 313 class DeleteAllCreatedBetweenTask; |
| 315 class DeleteAllCreatedBetweenForHostTask; | 314 class DeleteAllCreatedBetweenForHostTask; |
| 316 class DeleteAllForHostTask; | 315 class DeleteAllForHostTask; |
| 317 class DeleteAllTask; | 316 class DeleteAllTask; |
| 318 class DeleteCookieTask; | 317 class DeleteCookieTask; |
| 319 class DeleteCanonicalCookieTask; | 318 class DeleteCanonicalCookieTask; |
| 320 class GetAllCookiesForURLWithOptionsTask; | 319 class GetAllCookiesForURLWithOptionsTask; |
| 321 class GetAllCookiesTask; | 320 class GetAllCookiesTask; |
| 322 class GetCookiesWithOptionsTask; | 321 class GetCookiesWithOptionsTask; |
| 323 class SetCookieWithDetailsTask; | 322 class SetCookieWithDetailsTask; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 376 DELETE_COOKIE_EVICTED_DOMAIN_POST_SAFE, | 375 DELETE_COOKIE_EVICTED_DOMAIN_POST_SAFE, |
| 377 | 376 |
| 378 // A common idiom is to remove a cookie by overwriting it with an | 377 // A common idiom is to remove a cookie by overwriting it with an |
| 379 // already-expired expiration date. This captures that case. | 378 // already-expired expiration date. This captures that case. |
| 380 DELETE_COOKIE_EXPIRED_OVERWRITE, | 379 DELETE_COOKIE_EXPIRED_OVERWRITE, |
| 381 | 380 |
| 382 // Cookies are not allowed to contain control characters in the name or | 381 // Cookies are not allowed to contain control characters in the name or |
| 383 // value. However, we used to allow them, so we are now evicting any such | 382 // value. However, we used to allow them, so we are now evicting any such |
| 384 // cookies as we load them. See http://crbug.com/238041. | 383 // cookies as we load them. See http://crbug.com/238041. |
| 385 DELETE_COOKIE_CONTROL_CHAR, | 384 DELETE_COOKIE_CONTROL_CHAR, |
| 386 | |
| 387 DELETE_COOKIE_LAST_ENTRY | 385 DELETE_COOKIE_LAST_ENTRY |
| 388 }; | 386 }; |
| 389 | 387 |
| 390 // The number of days since last access that cookies will not be subject | 388 // The number of days since last access that cookies will not be subject |
| 391 // to global garbage collection. | 389 // to global garbage collection. |
| 392 static const int kSafeFromGlobalPurgeDays; | 390 static const int kSafeFromGlobalPurgeDays; |
| 393 | 391 |
| 394 // Record statistics every kRecordStatisticsIntervalSeconds of uptime. | 392 // Record statistics every kRecordStatisticsIntervalSeconds of uptime. |
| 395 static const int kRecordStatisticsIntervalSeconds = 10 * 60; | 393 static const int kRecordStatisticsIntervalSeconds = 10 * 60; |
| 396 | 394 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 // was invoked and is used for reporting histogram_time_blocked_on_load_. | 467 // was invoked and is used for reporting histogram_time_blocked_on_load_. |
| 470 // See PersistentCookieStore::Load for details on the contents of cookies. | 468 // See PersistentCookieStore::Load for details on the contents of cookies. |
| 471 void OnLoaded(base::TimeTicks beginning_time, | 469 void OnLoaded(base::TimeTicks beginning_time, |
| 472 const std::vector<CanonicalCookie*>& cookies); | 470 const std::vector<CanonicalCookie*>& cookies); |
| 473 | 471 |
| 474 // Stores cookies loaded from the backing store and invokes the deferred | 472 // Stores cookies loaded from the backing store and invokes the deferred |
| 475 // task(s) pending loading of cookies associated with the domain key | 473 // task(s) pending loading of cookies associated with the domain key |
| 476 // (eTLD+1). Called when all cookies for the domain key(eTLD+1) have been | 474 // (eTLD+1). Called when all cookies for the domain key(eTLD+1) have been |
| 477 // loaded from DB. See PersistentCookieStore::Load for details on the contents | 475 // loaded from DB. See PersistentCookieStore::Load for details on the contents |
| 478 // of cookies. | 476 // of cookies. |
| 479 void OnKeyLoaded( | 477 void OnKeyLoaded(const std::string& key, |
| 480 const std::string& key, | 478 const std::vector<CanonicalCookie*>& cookies); |
| 481 const std::vector<CanonicalCookie*>& cookies); | |
| 482 | 479 |
| 483 // Stores the loaded cookies. | 480 // Stores the loaded cookies. |
| 484 void StoreLoadedCookies(const std::vector<CanonicalCookie*>& cookies); | 481 void StoreLoadedCookies(const std::vector<CanonicalCookie*>& cookies); |
| 485 | 482 |
| 486 // Invokes deferred calls. | 483 // Invokes deferred calls. |
| 487 void InvokeQueue(); | 484 void InvokeQueue(); |
| 488 | 485 |
| 489 // Checks that |cookies_| matches our invariants, and tries to repair any | 486 // Checks that |cookies_| matches our invariants, and tries to repair any |
| 490 // inconsistencies. (In other words, it does not have duplicate cookies). | 487 // inconsistencies. (In other words, it does not have duplicate cookies). |
| 491 void EnsureCookiesMapIsValid(); | 488 void EnsureCookiesMapIsValid(); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 542 const base::Time& creation_time, | 539 const base::Time& creation_time, |
| 543 const CookieOptions& options); | 540 const CookieOptions& options); |
| 544 | 541 |
| 545 void InternalUpdateCookieAccessTime(CanonicalCookie* cc, | 542 void InternalUpdateCookieAccessTime(CanonicalCookie* cc, |
| 546 const base::Time& current_time); | 543 const base::Time& current_time); |
| 547 | 544 |
| 548 // |deletion_cause| argument is used for collecting statistics and choosing | 545 // |deletion_cause| argument is used for collecting statistics and choosing |
| 549 // the correct CookieMonsterDelegate::ChangeCause for OnCookieChanged | 546 // the correct CookieMonsterDelegate::ChangeCause for OnCookieChanged |
| 550 // notifications. Guarantee: All iterators to cookies_ except to the | 547 // notifications. Guarantee: All iterators to cookies_ except to the |
| 551 // deleted entry remain vaild. | 548 // deleted entry remain vaild. |
| 552 void InternalDeleteCookie(CookieMap::iterator it, bool sync_to_store, | 549 void InternalDeleteCookie(CookieMap::iterator it, |
| 550 bool sync_to_store, |
| 553 DeletionCause deletion_cause); | 551 DeletionCause deletion_cause); |
| 554 | 552 |
| 555 // If the number of cookies for CookieMap key |key|, or globally, are | 553 // If the number of cookies for CookieMap key |key|, or globally, are |
| 556 // over the preset maximums above, garbage collect, first for the host and | 554 // over the preset maximums above, garbage collect, first for the host and |
| 557 // then globally. See comments above garbage collection threshold | 555 // then globally. See comments above garbage collection threshold |
| 558 // constants for details. | 556 // constants for details. |
| 559 // | 557 // |
| 560 // Returns the number of cookies deleted (useful for debugging). | 558 // Returns the number of cookies deleted (useful for debugging). |
| 561 int GarbageCollect(const base::Time& current, const std::string& key); | 559 int GarbageCollect(const base::Time& current, const std::string& key); |
| 562 | 560 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 596 // ugly and increment when we've seen the same time twice. | 594 // ugly and increment when we've seen the same time twice. |
| 597 base::Time CurrentTime(); | 595 base::Time CurrentTime(); |
| 598 | 596 |
| 599 // Runs the task if, or defers the task until, the full cookie database is | 597 // Runs the task if, or defers the task until, the full cookie database is |
| 600 // loaded. | 598 // loaded. |
| 601 void DoCookieTask(const scoped_refptr<CookieMonsterTask>& task_item); | 599 void DoCookieTask(const scoped_refptr<CookieMonsterTask>& task_item); |
| 602 | 600 |
| 603 // Runs the task if, or defers the task until, the cookies for the given URL | 601 // Runs the task if, or defers the task until, the cookies for the given URL |
| 604 // are loaded. | 602 // are loaded. |
| 605 void DoCookieTaskForURL(const scoped_refptr<CookieMonsterTask>& task_item, | 603 void DoCookieTaskForURL(const scoped_refptr<CookieMonsterTask>& task_item, |
| 606 const GURL& url); | 604 const GURL& url); |
| 607 | 605 |
| 608 // Histogram variables; see CookieMonster::InitializeHistograms() in | 606 // Histogram variables; see CookieMonster::InitializeHistograms() in |
| 609 // cookie_monster.cc for details. | 607 // cookie_monster.cc for details. |
| 610 base::HistogramBase* histogram_expiration_duration_minutes_; | 608 base::HistogramBase* histogram_expiration_duration_minutes_; |
| 611 base::HistogramBase* histogram_between_access_interval_minutes_; | 609 base::HistogramBase* histogram_between_access_interval_minutes_; |
| 612 base::HistogramBase* histogram_evicted_last_access_minutes_; | 610 base::HistogramBase* histogram_evicted_last_access_minutes_; |
| 613 base::HistogramBase* histogram_count_; | 611 base::HistogramBase* histogram_count_; |
| 614 base::HistogramBase* histogram_domain_count_; | 612 base::HistogramBase* histogram_domain_count_; |
| 615 base::HistogramBase* histogram_etldp1_count_; | 613 base::HistogramBase* histogram_etldp1_count_; |
| 616 base::HistogramBase* histogram_domain_per_etldp1_count_; | 614 base::HistogramBase* histogram_domain_per_etldp1_count_; |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 // added, and |cause| will be set to CHANGE_COOKIE_EXPLICIT. | 711 // added, and |cause| will be set to CHANGE_COOKIE_EXPLICIT. |
| 714 // | 712 // |
| 715 // As a special case, note that updating a cookie's properties is implemented | 713 // As a special case, note that updating a cookie's properties is implemented |
| 716 // as a two step process: the cookie to be updated is first removed entirely, | 714 // as a two step process: the cookie to be updated is first removed entirely, |
| 717 // generating a notification with cause CHANGE_COOKIE_OVERWRITE. Afterwards, | 715 // generating a notification with cause CHANGE_COOKIE_OVERWRITE. Afterwards, |
| 718 // a new cookie is written with the updated values, generating a notification | 716 // a new cookie is written with the updated values, generating a notification |
| 719 // with cause CHANGE_COOKIE_EXPLICIT. | 717 // with cause CHANGE_COOKIE_EXPLICIT. |
| 720 virtual void OnCookieChanged(const CanonicalCookie& cookie, | 718 virtual void OnCookieChanged(const CanonicalCookie& cookie, |
| 721 bool removed, | 719 bool removed, |
| 722 ChangeCause cause) = 0; | 720 ChangeCause cause) = 0; |
| 721 |
| 723 protected: | 722 protected: |
| 724 friend class base::RefCountedThreadSafe<CookieMonsterDelegate>; | 723 friend class base::RefCountedThreadSafe<CookieMonsterDelegate>; |
| 725 virtual ~CookieMonsterDelegate() {} | 724 virtual ~CookieMonsterDelegate() {} |
| 726 }; | 725 }; |
| 727 | 726 |
| 728 typedef base::RefCountedThreadSafe<CookieMonster::PersistentCookieStore> | 727 typedef base::RefCountedThreadSafe<CookieMonster::PersistentCookieStore> |
| 729 RefcountedPersistentCookieStore; | 728 RefcountedPersistentCookieStore; |
| 730 | 729 |
| 731 class NET_EXPORT CookieMonster::PersistentCookieStore | 730 class NET_EXPORT CookieMonster::PersistentCookieStore |
| 732 : public RefcountedPersistentCookieStore { | 731 : public RefcountedPersistentCookieStore { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 762 virtual ~PersistentCookieStore() {} | 761 virtual ~PersistentCookieStore() {} |
| 763 | 762 |
| 764 private: | 763 private: |
| 765 friend class base::RefCountedThreadSafe<PersistentCookieStore>; | 764 friend class base::RefCountedThreadSafe<PersistentCookieStore>; |
| 766 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore); | 765 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore); |
| 767 }; | 766 }; |
| 768 | 767 |
| 769 } // namespace net | 768 } // namespace net |
| 770 | 769 |
| 771 #endif // NET_COOKIES_COOKIE_MONSTER_H_ | 770 #endif // NET_COOKIES_COOKIE_MONSTER_H_ |
| OLD | NEW |