OLD | NEW |
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 |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 const CookieOptions& options, | 268 const CookieOptions& options, |
269 const GetCookieInfoCallback& callback) OVERRIDE; | 269 const GetCookieInfoCallback& callback) OVERRIDE; |
270 | 270 |
271 // Deletes all cookies with that might apply to |url| that has |cookie_name|. | 271 // Deletes all cookies with that might apply to |url| that has |cookie_name|. |
272 virtual void DeleteCookieAsync( | 272 virtual void DeleteCookieAsync( |
273 const GURL& url, const std::string& cookie_name, | 273 const GURL& url, const std::string& cookie_name, |
274 const base::Closure& callback) OVERRIDE; | 274 const base::Closure& callback) OVERRIDE; |
275 | 275 |
276 virtual CookieMonster* GetCookieMonster() OVERRIDE; | 276 virtual CookieMonster* GetCookieMonster() OVERRIDE; |
277 | 277 |
| 278 // Enables writing session cookies into the cookie database. |
| 279 void SetPersistSessionCookies(bool persist_session_cookies); |
| 280 |
| 281 // Protects session cookies from deletion on shutdown. |
| 282 void SaveSessionCookies(); |
| 283 |
| 284 // Merges restored session cookies with other cookies. |
| 285 void RestoreOldSessionCookies(); |
| 286 |
| 287 // Discards restored session cookies. |
| 288 void DiscardOldSessionCookies(); |
| 289 |
278 // Debugging method to perform various validation checks on the map. | 290 // Debugging method to perform various validation checks on the map. |
279 // Currently just checking that there are no null CanonicalCookie pointers | 291 // Currently just checking that there are no null CanonicalCookie pointers |
280 // in the map. | 292 // in the map. |
281 // Argument |arg| is to allow retaining of arbitrary data if the CHECKs | 293 // Argument |arg| is to allow retaining of arbitrary data if the CHECKs |
282 // in the function trip. TODO(rdsmith):Remove hack. | 294 // in the function trip. TODO(rdsmith):Remove hack. |
283 void ValidateMap(int arg); | 295 void ValidateMap(int arg); |
284 | 296 |
285 // The default list of schemes the cookie monster can handle. | 297 // The default list of schemes the cookie monster can handle. |
286 static const char* kDefaultCookieableSchemes[]; | 298 static const char* kDefaultCookieableSchemes[]; |
287 static const int kDefaultCookieableSchemesCount; | 299 static const int kDefaultCookieableSchemesCount; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 | 357 |
346 // Cookies evicted during domain level garbage collection that | 358 // Cookies evicted during domain level garbage collection that |
347 // were accessed more recently than kSafeFromGlobalPurgeDays | 359 // were accessed more recently than kSafeFromGlobalPurgeDays |
348 // (and thus would have been preserved by global garbage collection). | 360 // (and thus would have been preserved by global garbage collection). |
349 DELETE_COOKIE_EVICTED_DOMAIN_POST_SAFE, | 361 DELETE_COOKIE_EVICTED_DOMAIN_POST_SAFE, |
350 | 362 |
351 // A common idiom is to remove a cookie by overwriting it with an | 363 // A common idiom is to remove a cookie by overwriting it with an |
352 // already-expired expiration date. This captures that case. | 364 // already-expired expiration date. This captures that case. |
353 DELETE_COOKIE_EXPIRED_OVERWRITE, | 365 DELETE_COOKIE_EXPIRED_OVERWRITE, |
354 | 366 |
| 367 // Old session cookies can be explicitly deleted, and they also get |
| 368 // automatically deleted when trying to read / write them. |
| 369 DELETE_COOKIE_OLD_SESSION_COOKIE, |
| 370 |
355 DELETE_COOKIE_LAST_ENTRY | 371 DELETE_COOKIE_LAST_ENTRY |
356 }; | 372 }; |
357 | 373 |
358 // Cookie garbage collection thresholds. Based off of the Mozilla defaults. | 374 // Cookie garbage collection thresholds. Based off of the Mozilla defaults. |
359 // When the number of cookies gets to k{Domain,}MaxCookies | 375 // When the number of cookies gets to k{Domain,}MaxCookies |
360 // purge down to k{Domain,}MaxCookies - k{Domain,}PurgeCookies. | 376 // purge down to k{Domain,}MaxCookies - k{Domain,}PurgeCookies. |
361 // It might seem scary to have a high purge value, but really it's not. | 377 // It might seem scary to have a high purge value, but really it's not. |
362 // You just make sure that you increase the max to cover the increase | 378 // You just make sure that you increase the max to cover the increase |
363 // in purge, and we would have been purging the same amount of cookies. | 379 // in purge, and we would have been purging the same amount of cookies. |
364 // We're just going through the garbage collection process less often. | 380 // We're just going through the garbage collection process less often. |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 // the CookieMap typedef for details. | 526 // the CookieMap typedef for details. |
511 // NOTE: There should never be more than a single matching equivalent cookie. | 527 // NOTE: There should never be more than a single matching equivalent cookie. |
512 bool DeleteAnyEquivalentCookie(const std::string& key, | 528 bool DeleteAnyEquivalentCookie(const std::string& key, |
513 const CanonicalCookie& ecc, | 529 const CanonicalCookie& ecc, |
514 bool skip_httponly, | 530 bool skip_httponly, |
515 bool already_expired); | 531 bool already_expired); |
516 | 532 |
517 // Takes ownership of *cc. | 533 // Takes ownership of *cc. |
518 void InternalInsertCookie(const std::string& key, | 534 void InternalInsertCookie(const std::string& key, |
519 CanonicalCookie* cc, | 535 CanonicalCookie* cc, |
520 bool sync_to_store); | 536 bool sync_to_store, |
| 537 bool notify); |
521 | 538 |
522 // Helper function that sets cookies with more control. | 539 // Helper function that sets cookies with more control. |
523 // Not exposed as we don't want callers to have the ability | 540 // Not exposed as we don't want callers to have the ability |
524 // to specify (potentially duplicate) creation times. | 541 // to specify (potentially duplicate) creation times. |
525 bool SetCookieWithCreationTimeAndOptions(const GURL& url, | 542 bool SetCookieWithCreationTimeAndOptions(const GURL& url, |
526 const std::string& cookie_line, | 543 const std::string& cookie_line, |
527 const base::Time& creation_time, | 544 const base::Time& creation_time, |
528 const CookieOptions& options); | 545 const CookieOptions& options); |
529 | 546 |
530 // Helper function that sets a canonical cookie, deleting equivalents and | 547 // Helper function that sets a canonical cookie, deleting equivalents and |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 std::vector<std::string> cookieable_schemes_; | 683 std::vector<std::string> cookieable_schemes_; |
667 | 684 |
668 scoped_refptr<Delegate> delegate_; | 685 scoped_refptr<Delegate> delegate_; |
669 | 686 |
670 // Lock for thread-safety | 687 // Lock for thread-safety |
671 base::Lock lock_; | 688 base::Lock lock_; |
672 | 689 |
673 base::Time last_statistic_record_time_; | 690 base::Time last_statistic_record_time_; |
674 | 691 |
675 bool keep_expired_cookies_; | 692 bool keep_expired_cookies_; |
| 693 bool persist_session_cookies_; |
| 694 |
| 695 // Describes what to do with old session cookies. |
| 696 enum SessionCookieBehavior { |
| 697 // Keep old session cookies separate, don't return them when cookies are |
| 698 // read. |
| 699 SESSION_COOKIES_UNDECIDED, |
| 700 // Merge old session cookies in and treat them as normal cookies. |
| 701 SESSION_COOKIES_MERGE, |
| 702 // Discard old session cookies. |
| 703 SESSION_COOKIES_DELETE |
| 704 }; |
| 705 SessionCookieBehavior old_session_cookie_behavior_; |
676 | 706 |
677 static bool enable_file_scheme_; | 707 static bool enable_file_scheme_; |
678 | 708 |
679 DISALLOW_COPY_AND_ASSIGN(CookieMonster); | 709 DISALLOW_COPY_AND_ASSIGN(CookieMonster); |
680 }; | 710 }; |
681 | 711 |
682 class NET_EXPORT CookieMonster::CanonicalCookie { | 712 class NET_EXPORT CookieMonster::CanonicalCookie { |
683 public: | 713 public: |
684 | 714 |
685 // These constructors do no validation or canonicalization of their inputs; | 715 // These constructors do no validation or canonicalization of their inputs; |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
748 bool IsSecure() const { return secure_; } | 778 bool IsSecure() const { return secure_; } |
749 bool IsHttpOnly() const { return httponly_; } | 779 bool IsHttpOnly() const { return httponly_; } |
750 bool IsDomainCookie() const { | 780 bool IsDomainCookie() const { |
751 return !domain_.empty() && domain_[0] == '.'; } | 781 return !domain_.empty() && domain_[0] == '.'; } |
752 bool IsHostCookie() const { return !IsDomainCookie(); } | 782 bool IsHostCookie() const { return !IsDomainCookie(); } |
753 | 783 |
754 bool IsExpired(const base::Time& current) { | 784 bool IsExpired(const base::Time& current) { |
755 return has_expires_ && current >= expiry_date_; | 785 return has_expires_ && current >= expiry_date_; |
756 } | 786 } |
757 | 787 |
| 788 bool IsOldSessionCookie() const { |
| 789 return is_old_session_cookie_; |
| 790 } |
| 791 |
| 792 void SetIsOldSessionCookie(bool is_old_session_cookie) { |
| 793 is_old_session_cookie_ = is_old_session_cookie; |
| 794 } |
| 795 |
758 // Are the cookies considered equivalent in the eyes of RFC 2965. | 796 // Are the cookies considered equivalent in the eyes of RFC 2965. |
759 // The RFC says that name must match (case-sensitive), domain must | 797 // The RFC says that name must match (case-sensitive), domain must |
760 // match (case insensitive), and path must match (case sensitive). | 798 // match (case insensitive), and path must match (case sensitive). |
761 // For the case insensitive domain compare, we rely on the domain | 799 // For the case insensitive domain compare, we rely on the domain |
762 // having been canonicalized (in | 800 // having been canonicalized (in |
763 // GetCookieDomainWithString->CanonicalizeHost). | 801 // GetCookieDomainWithString->CanonicalizeHost). |
764 bool IsEquivalent(const CanonicalCookie& ecc) const { | 802 bool IsEquivalent(const CanonicalCookie& ecc) const { |
765 // It seems like it would make sense to take secure and httponly into | 803 // It seems like it would make sense to take secure and httponly into |
766 // account, but the RFC doesn't specify this. | 804 // account, but the RFC doesn't specify this. |
767 // NOTE: Keep this logic in-sync with TrimDuplicateCookiesForHost(). | 805 // NOTE: Keep this logic in-sync with TrimDuplicateCookiesForHost(). |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
802 std::string path_; | 840 std::string path_; |
803 std::string mac_key_; // TODO(abarth): Persist to disk. | 841 std::string mac_key_; // TODO(abarth): Persist to disk. |
804 std::string mac_algorithm_; // TODO(abarth): Persist to disk. | 842 std::string mac_algorithm_; // TODO(abarth): Persist to disk. |
805 base::Time creation_date_; | 843 base::Time creation_date_; |
806 base::Time expiry_date_; | 844 base::Time expiry_date_; |
807 base::Time last_access_date_; | 845 base::Time last_access_date_; |
808 bool secure_; | 846 bool secure_; |
809 bool httponly_; | 847 bool httponly_; |
810 bool has_expires_; | 848 bool has_expires_; |
811 bool is_persistent_; | 849 bool is_persistent_; |
| 850 bool is_old_session_cookie_; |
812 }; | 851 }; |
813 | 852 |
814 class CookieMonster::Delegate | 853 class CookieMonster::Delegate |
815 : public base::RefCountedThreadSafe<CookieMonster::Delegate> { | 854 : public base::RefCountedThreadSafe<CookieMonster::Delegate> { |
816 public: | 855 public: |
817 // The publicly relevant reasons a cookie might be changed. | 856 // The publicly relevant reasons a cookie might be changed. |
818 enum ChangeCause { | 857 enum ChangeCause { |
819 // The cookie was changed directly by a consumer's action. | 858 // The cookie was changed directly by a consumer's action. |
820 CHANGE_COOKIE_EXPLICIT, | 859 CHANGE_COOKIE_EXPLICIT, |
821 // The cookie was automatically removed due to an insert operation that | 860 // The cookie was automatically removed due to an insert operation that |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
977 virtual void UpdateCookieAccessTime(const CanonicalCookie& cc) = 0; | 1016 virtual void UpdateCookieAccessTime(const CanonicalCookie& cc) = 0; |
978 virtual void DeleteCookie(const CanonicalCookie& cc) = 0; | 1017 virtual void DeleteCookie(const CanonicalCookie& cc) = 0; |
979 | 1018 |
980 // Sets the value of the user preference whether the persistent storage | 1019 // Sets the value of the user preference whether the persistent storage |
981 // must be deleted upon destruction. | 1020 // must be deleted upon destruction. |
982 virtual void SetClearLocalStateOnExit(bool clear_local_state) = 0; | 1021 virtual void SetClearLocalStateOnExit(bool clear_local_state) = 0; |
983 | 1022 |
984 // Flush the store and post the given Task when complete. | 1023 // Flush the store and post the given Task when complete. |
985 virtual void Flush(Task* completion_task) = 0; | 1024 virtual void Flush(Task* completion_task) = 0; |
986 | 1025 |
| 1026 virtual void DeleteSessionCookies() = 0; |
| 1027 |
987 protected: | 1028 protected: |
988 PersistentCookieStore() {} | 1029 PersistentCookieStore() {} |
989 | 1030 |
990 private: | 1031 private: |
991 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore); | 1032 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore); |
992 }; | 1033 }; |
993 | 1034 |
994 class CookieList : public std::vector<CookieMonster::CanonicalCookie> { | 1035 class CookieList : public std::vector<CookieMonster::CanonicalCookie> { |
995 }; | 1036 }; |
996 | 1037 |
997 } // namespace net | 1038 } // namespace net |
998 | 1039 |
999 #endif // NET_BASE_COOKIE_MONSTER_H_ | 1040 #endif // NET_BASE_COOKIE_MONSTER_H_ |
OLD | NEW |