Chromium Code Reviews| 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 SetSyncSessionCookies(bool sync_session_cookies); | |
|
jochen (gone - plz use gerrit)
2011/11/25 14:45:14
I would use a different verb, as "sync" implies it
marja
2011/11/28 15:22:01
I was using sync because CookieMonster already use
| |
| 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 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 666 std::vector<std::string> cookieable_schemes_; | 682 std::vector<std::string> cookieable_schemes_; |
| 667 | 683 |
| 668 scoped_refptr<Delegate> delegate_; | 684 scoped_refptr<Delegate> delegate_; |
| 669 | 685 |
| 670 // Lock for thread-safety | 686 // Lock for thread-safety |
| 671 base::Lock lock_; | 687 base::Lock lock_; |
| 672 | 688 |
| 673 base::Time last_statistic_record_time_; | 689 base::Time last_statistic_record_time_; |
| 674 | 690 |
| 675 bool keep_expired_cookies_; | 691 bool keep_expired_cookies_; |
| 692 bool keep_old_session_cookies_; | |
| 693 bool sync_session_cookies_; | |
| 676 | 694 |
| 677 static bool enable_file_scheme_; | 695 static bool enable_file_scheme_; |
| 678 | 696 |
| 679 DISALLOW_COPY_AND_ASSIGN(CookieMonster); | 697 DISALLOW_COPY_AND_ASSIGN(CookieMonster); |
| 680 }; | 698 }; |
| 681 | 699 |
| 682 class NET_EXPORT CookieMonster::CanonicalCookie { | 700 class NET_EXPORT CookieMonster::CanonicalCookie { |
| 683 public: | 701 public: |
| 684 | 702 |
| 685 // These constructors do no validation or canonicalization of their inputs; | 703 // 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_; } | 766 bool IsSecure() const { return secure_; } |
| 749 bool IsHttpOnly() const { return httponly_; } | 767 bool IsHttpOnly() const { return httponly_; } |
| 750 bool IsDomainCookie() const { | 768 bool IsDomainCookie() const { |
| 751 return !domain_.empty() && domain_[0] == '.'; } | 769 return !domain_.empty() && domain_[0] == '.'; } |
| 752 bool IsHostCookie() const { return !IsDomainCookie(); } | 770 bool IsHostCookie() const { return !IsDomainCookie(); } |
| 753 | 771 |
| 754 bool IsExpired(const base::Time& current) { | 772 bool IsExpired(const base::Time& current) { |
| 755 return has_expires_ && current >= expiry_date_; | 773 return has_expires_ && current >= expiry_date_; |
| 756 } | 774 } |
| 757 | 775 |
| 776 bool IsOldSessionCookie() const { | |
| 777 return is_old_session_cookie_; | |
| 778 } | |
| 779 | |
| 780 void SetIsOldSessionCookie(bool is_old_session_cookie) { | |
| 781 is_old_session_cookie_ = is_old_session_cookie; | |
| 782 } | |
| 783 | |
| 758 // Are the cookies considered equivalent in the eyes of RFC 2965. | 784 // Are the cookies considered equivalent in the eyes of RFC 2965. |
| 759 // The RFC says that name must match (case-sensitive), domain must | 785 // The RFC says that name must match (case-sensitive), domain must |
| 760 // match (case insensitive), and path must match (case sensitive). | 786 // match (case insensitive), and path must match (case sensitive). |
| 761 // For the case insensitive domain compare, we rely on the domain | 787 // For the case insensitive domain compare, we rely on the domain |
| 762 // having been canonicalized (in | 788 // having been canonicalized (in |
| 763 // GetCookieDomainWithString->CanonicalizeHost). | 789 // GetCookieDomainWithString->CanonicalizeHost). |
| 764 bool IsEquivalent(const CanonicalCookie& ecc) const { | 790 bool IsEquivalent(const CanonicalCookie& ecc) const { |
| 765 // It seems like it would make sense to take secure and httponly into | 791 // It seems like it would make sense to take secure and httponly into |
| 766 // account, but the RFC doesn't specify this. | 792 // account, but the RFC doesn't specify this. |
| 767 // NOTE: Keep this logic in-sync with TrimDuplicateCookiesForHost(). | 793 // 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_; | 828 std::string path_; |
| 803 std::string mac_key_; // TODO(abarth): Persist to disk. | 829 std::string mac_key_; // TODO(abarth): Persist to disk. |
| 804 std::string mac_algorithm_; // TODO(abarth): Persist to disk. | 830 std::string mac_algorithm_; // TODO(abarth): Persist to disk. |
| 805 base::Time creation_date_; | 831 base::Time creation_date_; |
| 806 base::Time expiry_date_; | 832 base::Time expiry_date_; |
| 807 base::Time last_access_date_; | 833 base::Time last_access_date_; |
| 808 bool secure_; | 834 bool secure_; |
| 809 bool httponly_; | 835 bool httponly_; |
| 810 bool has_expires_; | 836 bool has_expires_; |
| 811 bool is_persistent_; | 837 bool is_persistent_; |
| 838 bool is_old_session_cookie_; | |
| 812 }; | 839 }; |
| 813 | 840 |
| 814 class CookieMonster::Delegate | 841 class CookieMonster::Delegate |
| 815 : public base::RefCountedThreadSafe<CookieMonster::Delegate> { | 842 : public base::RefCountedThreadSafe<CookieMonster::Delegate> { |
| 816 public: | 843 public: |
| 817 // The publicly relevant reasons a cookie might be changed. | 844 // The publicly relevant reasons a cookie might be changed. |
| 818 enum ChangeCause { | 845 enum ChangeCause { |
| 819 // The cookie was changed directly by a consumer's action. | 846 // The cookie was changed directly by a consumer's action. |
| 820 CHANGE_COOKIE_EXPLICIT, | 847 CHANGE_COOKIE_EXPLICIT, |
| 821 // The cookie was automatically removed due to an insert operation that | 848 // The cookie was automatically removed due to an insert operation that |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 974 const LoadedCallback& loaded_callback) = 0; | 1001 const LoadedCallback& loaded_callback) = 0; |
| 975 | 1002 |
| 976 virtual void AddCookie(const CanonicalCookie& cc) = 0; | 1003 virtual void AddCookie(const CanonicalCookie& cc) = 0; |
| 977 virtual void UpdateCookieAccessTime(const CanonicalCookie& cc) = 0; | 1004 virtual void UpdateCookieAccessTime(const CanonicalCookie& cc) = 0; |
| 978 virtual void DeleteCookie(const CanonicalCookie& cc) = 0; | 1005 virtual void DeleteCookie(const CanonicalCookie& cc) = 0; |
| 979 | 1006 |
| 980 // Sets the value of the user preference whether the persistent storage | 1007 // Sets the value of the user preference whether the persistent storage |
| 981 // must be deleted upon destruction. | 1008 // must be deleted upon destruction. |
| 982 virtual void SetClearLocalStateOnExit(bool clear_local_state) = 0; | 1009 virtual void SetClearLocalStateOnExit(bool clear_local_state) = 0; |
| 983 | 1010 |
| 1011 // Sets the value of the user preference whether the session cookies must | |
| 1012 // must be deleted upon destruction. | |
| 1013 virtual void SetClearSessionStateOnExit(bool clear_session_cookies) = 0; | |
| 1014 | |
| 984 // Flush the store and post the given Task when complete. | 1015 // Flush the store and post the given Task when complete. |
| 985 virtual void Flush(Task* completion_task) = 0; | 1016 virtual void Flush(Task* completion_task) = 0; |
| 986 | 1017 |
| 987 protected: | 1018 protected: |
| 988 PersistentCookieStore() {} | 1019 PersistentCookieStore() {} |
| 989 | 1020 |
| 990 private: | 1021 private: |
| 991 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore); | 1022 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore); |
| 992 }; | 1023 }; |
| 993 | 1024 |
| 994 class CookieList : public std::vector<CookieMonster::CanonicalCookie> { | 1025 class CookieList : public std::vector<CookieMonster::CanonicalCookie> { |
| 995 }; | 1026 }; |
| 996 | 1027 |
| 997 } // namespace net | 1028 } // namespace net |
| 998 | 1029 |
| 999 #endif // NET_BASE_COOKIE_MONSTER_H_ | 1030 #endif // NET_BASE_COOKIE_MONSTER_H_ |
| OLD | NEW |