Index: net/cookies/cookie_monster.h |
diff --git a/net/cookies/cookie_monster.h b/net/cookies/cookie_monster.h |
index f6048a725a43584b8f134d2c7e5c3afd15636a12..8c3944095673ebd31fefb6562d4b67b2fe7cb513 100644 |
--- a/net/cookies/cookie_monster.h |
+++ b/net/cookies/cookie_monster.h |
@@ -24,7 +24,8 @@ |
#include "base/memory/linked_ptr.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
-#include "base/synchronization/lock.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/threading/thread_checker.h" |
#include "base/time/time.h" |
#include "net/base/net_export.h" |
#include "net/cookies/canonical_cookie.h" |
@@ -48,9 +49,6 @@ class ParsedCookie; |
// optional permanent storage that implements the PersistentCookieStore |
// interface. |
// |
-// This class IS thread-safe. Normally, it is only used on the I/O thread, but |
-// is also accessed directly through Automation for UI testing. |
-// |
// Tasks may be deferred if all affected cookies are not yet loaded from the |
// backing store. Otherwise, callbacks may be invoked immediately. |
// |
@@ -61,8 +59,6 @@ class ParsedCookie; |
// task will be queued in tasks_pending_for_key_ while PermanentCookieStore |
// loads cookies for the specified domain key(eTLD+1) on DB thread. |
// |
-// Callbacks are guaranteed to be invoked on the calling thread. |
-// |
// TODO(deanm) Implement CookieMonster, the cookie database. |
// - Verify that our domain enforcement and non-dotted handling is correct |
class NET_EXPORT CookieMonster : public CookieStore { |
@@ -241,9 +237,6 @@ class NET_EXPORT CookieMonster : public CookieStore { |
// For SetCookieWithCreationTime. |
FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, |
TestCookieDeleteAllCreatedBetweenTimestamps); |
- // For SetCookieWithCreationTime. |
- FRIEND_TEST_ALL_PREFIXES(MultiThreadedCookieMonsterTest, |
- ThreadCheckDeleteAllCreatedBetweenForHost); |
// For gargage collection constants. |
FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, TestHostGarbageCollection); |
@@ -442,11 +435,9 @@ class NET_EXPORT CookieMonster : public CookieStore { |
// Fetches all cookies if the backing store exists and they're not already |
// being fetched. |
- // Note: this method should always be called with lock_ held. |
void FetchAllCookiesIfNecessary(); |
// Fetches all cookies from the backing store. |
- // Note: this method should always be called with lock_ held. |
void FetchAllCookies(); |
// Whether all cookies should be fetched as soon as any is requested. |
@@ -644,9 +635,13 @@ class NET_EXPORT CookieMonster : public CookieStore { |
CookieList* cookies_to_add, |
CookieList* cookies_to_delete); |
+ // Runs the given callback. Used to avoid running callbacks after the store |
+ // has been destroyed. |
+ void RunCallback(const base::Closure& callback); |
+ |
// Run all cookie changed callbacks that are monitoring |cookie|. |
// |removed| is true if the cookie was deleted. |
- void RunCallbacks(const CanonicalCookie& cookie, bool removed); |
+ void RunCookieChangedCallbacks(const CanonicalCookie& cookie, bool removed); |
// Histogram variables; see CookieMonster::InitializeHistograms() in |
// cookie_monster.cc for details. |
@@ -713,9 +708,6 @@ class NET_EXPORT CookieMonster : public CookieStore { |
scoped_refptr<CookieMonsterDelegate> delegate_; |
- // Lock for thread-safety |
- base::Lock lock_; |
- |
base::Time last_statistic_record_time_; |
bool persist_session_cookies_; |
@@ -724,6 +716,10 @@ class NET_EXPORT CookieMonster : public CookieStore { |
linked_ptr<CookieChangedCallbackList>> CookieChangedHookMap; |
CookieChangedHookMap hook_map_; |
+ base::ThreadChecker thread_checker_; |
+ |
+ base::WeakPtrFactory<CookieMonster> weak_ptr_factory_; |
+ |
DISALLOW_COPY_AND_ASSIGN(CookieMonster); |
}; |
@@ -780,6 +776,8 @@ class NET_EXPORT CookieMonster::PersistentCookieStore |
// Initializes the store and retrieves the existing cookies. This will be |
// called only once at startup. The callback will return all the cookies |
// that are not yet returned to CookieMonster by previous priority loads. |
+ // |
+ // |loaded_callback| may not be NULL. |
virtual void Load(const LoadedCallback& loaded_callback) = 0; |
// Does a priority load of all cookies for the domain key (eTLD+1). The |
@@ -787,6 +785,8 @@ class NET_EXPORT CookieMonster::PersistentCookieStore |
// loads, which includes cookies for the requested domain key if they are not |
// already returned, plus all cookies that are chain-loaded and not yet |
// returned to CookieMonster. |
+ // |
+ // |loaded_callback| may not be NULL. |
virtual void LoadCookiesForKey(const std::string& key, |
const LoadedCallback& loaded_callback) = 0; |
@@ -797,7 +797,8 @@ class NET_EXPORT CookieMonster::PersistentCookieStore |
// Instructs the store to not discard session only cookies on shutdown. |
virtual void SetForceKeepSessionState() = 0; |
- // Flushes the store and posts |callback| when complete. |
+ // Flushes the store and posts |callback| when complete. |callback| may be |
+ // NULL. |
virtual void Flush(const base::Closure& callback) = 0; |
protected: |