| 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 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 DELETE_COOKIE_EXPIRED_OVERWRITE, | 398 DELETE_COOKIE_EXPIRED_OVERWRITE, |
| 399 | 399 |
| 400 // Cookies are not allowed to contain control characters in the name or | 400 // Cookies are not allowed to contain control characters in the name or |
| 401 // value. However, we used to allow them, so we are now evicting any such | 401 // value. However, we used to allow them, so we are now evicting any such |
| 402 // cookies as we load them. See http://crbug.com/238041. | 402 // cookies as we load them. See http://crbug.com/238041. |
| 403 DELETE_COOKIE_CONTROL_CHAR, | 403 DELETE_COOKIE_CONTROL_CHAR, |
| 404 | 404 |
| 405 DELETE_COOKIE_LAST_ENTRY | 405 DELETE_COOKIE_LAST_ENTRY |
| 406 }; | 406 }; |
| 407 | 407 |
| 408 // The strategy for fetching cookies. Controlled by Finch experiment. |
| 409 enum FetchStrategy { |
| 410 // Fetches all cookies only when they're needed. |
| 411 kFetchWhenNecessary = 0, |
| 412 // Fetches all cookies as soon as any cookie is needed. |
| 413 // This is the default behavior. |
| 414 kAlwaysFetch, |
| 415 // The fetch strategy is not yet determined. |
| 416 kUnknownFetch, |
| 417 }; |
| 418 |
| 408 // The number of days since last access that cookies will not be subject | 419 // The number of days since last access that cookies will not be subject |
| 409 // to global garbage collection. | 420 // to global garbage collection. |
| 410 static const int kSafeFromGlobalPurgeDays; | 421 static const int kSafeFromGlobalPurgeDays; |
| 411 | 422 |
| 412 // Record statistics every kRecordStatisticsIntervalSeconds of uptime. | 423 // Record statistics every kRecordStatisticsIntervalSeconds of uptime. |
| 413 static const int kRecordStatisticsIntervalSeconds = 10 * 60; | 424 static const int kRecordStatisticsIntervalSeconds = 10 * 60; |
| 414 | 425 |
| 415 ~CookieMonster() override; | 426 ~CookieMonster() override; |
| 416 | 427 |
| 417 // The following are synchronous calls to which the asynchronous methods | 428 // The following are synchronous calls to which the asynchronous methods |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 void DeleteCookie(const GURL& url, const std::string& cookie_name); | 468 void DeleteCookie(const GURL& url, const std::string& cookie_name); |
| 458 | 469 |
| 459 bool SetCookieWithCreationTime(const GURL& url, | 470 bool SetCookieWithCreationTime(const GURL& url, |
| 460 const std::string& cookie_line, | 471 const std::string& cookie_line, |
| 461 const base::Time& creation_time); | 472 const base::Time& creation_time); |
| 462 | 473 |
| 463 int DeleteSessionCookies(); | 474 int DeleteSessionCookies(); |
| 464 | 475 |
| 465 bool HasCookiesForETLDP1(const std::string& etldp1); | 476 bool HasCookiesForETLDP1(const std::string& etldp1); |
| 466 | 477 |
| 467 // Called by all non-static functions to ensure that the cookies store has | 478 // The first access to the cookie store initializes it. This method should be |
| 468 // been initialized. This is not done during creating so it doesn't block | 479 // called before any access to the cookie store. |
| 469 // the window showing. | 480 void MarkCookieStoreAsInitialized(); |
| 481 |
| 482 // Fetches all cookies if the backing store exists and they're not already |
| 483 // being fetched. |
| 470 // Note: this method should always be called with lock_ held. | 484 // Note: this method should always be called with lock_ held. |
| 471 void InitIfNecessary() { | 485 void FetchAllCookiesIfNecessary(); |
| 472 if (!initialized_) { | |
| 473 if (store_.get()) { | |
| 474 InitStore(); | |
| 475 } else { | |
| 476 loaded_ = true; | |
| 477 } | |
| 478 initialized_ = true; | |
| 479 } | |
| 480 } | |
| 481 | 486 |
| 482 // Initializes the backing store and reads existing cookies from it. | 487 // Fetches all cookies from the backing store. |
| 483 // Should only be called by InitIfNecessary(). | 488 // Note: this method should always be called with lock_ held. |
| 484 void InitStore(); | 489 void FetchAllCookies(); |
| 490 |
| 491 // Whether all cookies should be fetched as soon as any is requested. |
| 492 bool ShouldFetchAllCookiesWhenFetchingAnyCookie(); |
| 485 | 493 |
| 486 // Stores cookies loaded from the backing store and invokes any deferred | 494 // Stores cookies loaded from the backing store and invokes any deferred |
| 487 // calls. |beginning_time| should be the moment PersistentCookieStore::Load | 495 // calls. |beginning_time| should be the moment PersistentCookieStore::Load |
| 488 // was invoked and is used for reporting histogram_time_blocked_on_load_. | 496 // was invoked and is used for reporting histogram_time_blocked_on_load_. |
| 489 // See PersistentCookieStore::Load for details on the contents of cookies. | 497 // See PersistentCookieStore::Load for details on the contents of cookies. |
| 490 void OnLoaded(base::TimeTicks beginning_time, | 498 void OnLoaded(base::TimeTicks beginning_time, |
| 491 const std::vector<CanonicalCookie*>& cookies); | 499 const std::vector<CanonicalCookie*>& cookies); |
| 492 | 500 |
| 493 // Stores cookies loaded from the backing store and invokes the deferred | 501 // Stores cookies loaded from the backing store and invokes the deferred |
| 494 // task(s) pending loading of cookies associated with the domain key | 502 // task(s) pending loading of cookies associated with the domain key |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 650 base::HistogramBase* histogram_domain_count_; | 658 base::HistogramBase* histogram_domain_count_; |
| 651 base::HistogramBase* histogram_etldp1_count_; | 659 base::HistogramBase* histogram_etldp1_count_; |
| 652 base::HistogramBase* histogram_domain_per_etldp1_count_; | 660 base::HistogramBase* histogram_domain_per_etldp1_count_; |
| 653 base::HistogramBase* histogram_number_duplicate_db_cookies_; | 661 base::HistogramBase* histogram_number_duplicate_db_cookies_; |
| 654 base::HistogramBase* histogram_cookie_deletion_cause_; | 662 base::HistogramBase* histogram_cookie_deletion_cause_; |
| 655 base::HistogramBase* histogram_time_mac_; | 663 base::HistogramBase* histogram_time_mac_; |
| 656 base::HistogramBase* histogram_time_blocked_on_load_; | 664 base::HistogramBase* histogram_time_blocked_on_load_; |
| 657 | 665 |
| 658 CookieMap cookies_; | 666 CookieMap cookies_; |
| 659 | 667 |
| 660 // Indicates whether the cookie store has been initialized. This happens | 668 // Indicates whether the cookie store has been initialized. |
| 661 // lazily in InitStoreIfNecessary(). | |
| 662 bool initialized_; | 669 bool initialized_; |
| 663 | 670 |
| 664 // Indicates whether loading from the backend store is completed and | 671 // Indicates whether the cookie store has started fetching all cookies. |
| 665 // calls may be immediately processed. | 672 bool started_fetching_all_cookies_; |
| 666 bool loaded_; | 673 // Indicates whether the cookie store has finished fetching all cookies. |
| 674 bool finished_fetching_all_cookies_; |
| 675 // The strategy to use for fetching cookies. |
| 676 FetchStrategy fetch_strategy_; |
| 667 | 677 |
| 668 // List of domain keys that have been loaded from the DB. | 678 // List of domain keys that have been loaded from the DB. |
| 669 std::set<std::string> keys_loaded_; | 679 std::set<std::string> keys_loaded_; |
| 670 | 680 |
| 671 // Map of domain keys to their associated task queues. These tasks are blocked | 681 // Map of domain keys to their associated task queues. These tasks are blocked |
| 672 // until all cookies for the associated domain key eTLD+1 are loaded from the | 682 // until all cookies for the associated domain key eTLD+1 are loaded from the |
| 673 // backend store. | 683 // backend store. |
| 674 std::map<std::string, std::deque<scoped_refptr<CookieMonsterTask>>> | 684 std::map<std::string, std::deque<scoped_refptr<CookieMonsterTask>>> |
| 675 tasks_pending_for_key_; | 685 tasks_pending_for_key_; |
| 676 | 686 |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 801 virtual ~PersistentCookieStore() {} | 811 virtual ~PersistentCookieStore() {} |
| 802 | 812 |
| 803 private: | 813 private: |
| 804 friend class base::RefCountedThreadSafe<PersistentCookieStore>; | 814 friend class base::RefCountedThreadSafe<PersistentCookieStore>; |
| 805 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore); | 815 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore); |
| 806 }; | 816 }; |
| 807 | 817 |
| 808 } // namespace net | 818 } // namespace net |
| 809 | 819 |
| 810 #endif // NET_COOKIES_COOKIE_MONSTER_H_ | 820 #endif // NET_COOKIES_COOKIE_MONSTER_H_ |
| OLD | NEW |