diff options
author | Andras Becsi <andras.becsi@digia.com> | 2014-03-18 13:16:26 +0100 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-03-20 15:55:39 +0100 |
commit | 3f0f86b0caed75241fa71c95a5d73bc0164348c5 (patch) | |
tree | 92b9fb00f2e9e90b0be2262093876d4f43b6cd13 /chromium/net/cookies | |
parent | e90d7c4b152c56919d963987e2503f9909a666d2 (diff) | |
download | qtwebengine-chromium-3f0f86b0caed75241fa71c95a5d73bc0164348c5.tar.gz |
Update to new stable branch 1750
This also includes an updated ninja and chromium dependencies
needed on Windows.
Change-Id: Icd597d80ed3fa4425933c9f1334c3c2e31291c42
Reviewed-by: Zoltan Arvai <zarvai@inf.u-szeged.hu>
Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
Diffstat (limited to 'chromium/net/cookies')
-rw-r--r-- | chromium/net/cookies/cookie_monster.cc | 359 | ||||
-rw-r--r-- | chromium/net/cookies/cookie_monster.h | 7 | ||||
-rw-r--r-- | chromium/net/cookies/cookie_monster_unittest.cc | 17 |
3 files changed, 186 insertions, 197 deletions
diff --git a/chromium/net/cookies/cookie_monster.cc b/chromium/net/cookies/cookie_monster.cc index 65723ff20a6..15c7143a608 100644 --- a/chromium/net/cookies/cookie_monster.cc +++ b/chromium/net/cookies/cookie_monster.cc @@ -104,9 +104,8 @@ const size_t CookieMonster::kPurgeCookies = 300; const size_t CookieMonster::kDomainCookiesQuotaLow = 30; const size_t CookieMonster::kDomainCookiesQuotaMedium = 50; const size_t CookieMonster::kDomainCookiesQuotaHigh = - CookieMonster::kDomainMaxCookies - CookieMonster::kDomainPurgeCookies - - CookieMonster::kDomainCookiesQuotaLow - - CookieMonster::kDomainCookiesQuotaMedium; + kDomainMaxCookies - kDomainPurgeCookies + - kDomainCookiesQuotaLow - kDomainCookiesQuotaMedium; const int CookieMonster::kSafeFromGlobalPurgeDays = 30; @@ -202,16 +201,6 @@ struct CookieSignature { std::string path; }; -// Determine the cookie domain to use for setting the specified cookie. -bool GetCookieDomain(const GURL& url, - const ParsedCookie& pc, - std::string* result) { - std::string domain_string; - if (pc.HasDomain()) - domain_string = pc.Domain(); - return cookie_util::GetCookieDomainWithString(url, domain_string, result); -} - // For a CookieItVector iterator range [|it_begin|, |it_end|), // sorts the first |num_sort| + 1 elements by LastAccessDate(). // The + 1 element exists so for any interval of length <= |num_sort| starting @@ -331,8 +320,7 @@ CookieMonster::CookieMonster(PersistentCookieStore* store, Delegate* delegate) delegate_(delegate), last_statistic_record_time_(Time::Now()), keep_expired_cookies_(false), - persist_session_cookies_(false), - priority_aware_garbage_collection_(false) { + persist_session_cookies_(false) { InitializeHistograms(); SetDefaultCookieableSchemes(); } @@ -348,8 +336,7 @@ CookieMonster::CookieMonster(PersistentCookieStore* store, delegate_(delegate), last_statistic_record_time_(base::Time::Now()), keep_expired_cookies_(false), - persist_session_cookies_(false), - priority_aware_garbage_collection_(false) { + persist_session_cookies_(false) { InitializeHistograms(); SetDefaultCookieableSchemes(); } @@ -410,13 +397,12 @@ void CookieMonster::CookieMonsterTask::InvokeCallback(base::Closure callback) { callback.Run(); } else { thread_->PostTask(FROM_HERE, base::Bind( - &CookieMonster::CookieMonsterTask::InvokeCallback, this, callback)); + &CookieMonsterTask::InvokeCallback, this, callback)); } } // Task class for SetCookieWithDetails call. -class CookieMonster::SetCookieWithDetailsTask - : public CookieMonster::CookieMonsterTask { +class CookieMonster::SetCookieWithDetailsTask : public CookieMonsterTask { public: SetCookieWithDetailsTask(CookieMonster* cookie_monster, const GURL& url, @@ -428,7 +414,7 @@ class CookieMonster::SetCookieWithDetailsTask bool secure, bool http_only, CookiePriority priority, - const CookieMonster::SetCookiesCallback& callback) + const SetCookiesCallback& callback) : CookieMonsterTask(cookie_monster), url_(url), name_(name), @@ -442,7 +428,7 @@ class CookieMonster::SetCookieWithDetailsTask callback_(callback) { } - // CookieMonster::CookieMonsterTask: + // CookieMonsterTask: virtual void Run() OVERRIDE; protected: @@ -458,7 +444,7 @@ class CookieMonster::SetCookieWithDetailsTask bool secure_; bool http_only_; CookiePriority priority_; - CookieMonster::SetCookiesCallback callback_; + SetCookiesCallback callback_; DISALLOW_COPY_AND_ASSIGN(SetCookieWithDetailsTask); }; @@ -468,29 +454,28 @@ void CookieMonster::SetCookieWithDetailsTask::Run() { SetCookieWithDetails(url_, name_, value_, domain_, path_, expiration_time_, secure_, http_only_, priority_); if (!callback_.is_null()) { - this->InvokeCallback(base::Bind(&CookieMonster::SetCookiesCallback::Run, + this->InvokeCallback(base::Bind(&SetCookiesCallback::Run, base::Unretained(&callback_), success)); } } // Task class for GetAllCookies call. -class CookieMonster::GetAllCookiesTask - : public CookieMonster::CookieMonsterTask { +class CookieMonster::GetAllCookiesTask : public CookieMonsterTask { public: GetAllCookiesTask(CookieMonster* cookie_monster, - const CookieMonster::GetCookieListCallback& callback) + const GetCookieListCallback& callback) : CookieMonsterTask(cookie_monster), callback_(callback) { } - // CookieMonster::CookieMonsterTask + // CookieMonsterTask virtual void Run() OVERRIDE; protected: virtual ~GetAllCookiesTask() {} private: - CookieMonster::GetCookieListCallback callback_; + GetCookieListCallback callback_; DISALLOW_COPY_AND_ASSIGN(GetAllCookiesTask); }; @@ -498,27 +483,27 @@ class CookieMonster::GetAllCookiesTask void CookieMonster::GetAllCookiesTask::Run() { if (!callback_.is_null()) { CookieList cookies = this->cookie_monster()->GetAllCookies(); - this->InvokeCallback(base::Bind(&CookieMonster::GetCookieListCallback::Run, + this->InvokeCallback(base::Bind(&GetCookieListCallback::Run, base::Unretained(&callback_), cookies)); } } // Task class for GetAllCookiesForURLWithOptions call. class CookieMonster::GetAllCookiesForURLWithOptionsTask - : public CookieMonster::CookieMonsterTask { + : public CookieMonsterTask { public: GetAllCookiesForURLWithOptionsTask( CookieMonster* cookie_monster, const GURL& url, const CookieOptions& options, - const CookieMonster::GetCookieListCallback& callback) + const GetCookieListCallback& callback) : CookieMonsterTask(cookie_monster), url_(url), options_(options), callback_(callback) { } - // CookieMonster::CookieMonsterTask: + // CookieMonsterTask: virtual void Run() OVERRIDE; protected: @@ -527,7 +512,7 @@ class CookieMonster::GetAllCookiesForURLWithOptionsTask private: GURL url_; CookieOptions options_; - CookieMonster::GetCookieListCallback callback_; + GetCookieListCallback callback_; DISALLOW_COPY_AND_ASSIGN(GetAllCookiesForURLWithOptionsTask); }; @@ -536,56 +521,109 @@ void CookieMonster::GetAllCookiesForURLWithOptionsTask::Run() { if (!callback_.is_null()) { CookieList cookies = this->cookie_monster()-> GetAllCookiesForURLWithOptions(url_, options_); - this->InvokeCallback(base::Bind(&CookieMonster::GetCookieListCallback::Run, + this->InvokeCallback(base::Bind(&GetCookieListCallback::Run, base::Unretained(&callback_), cookies)); } } -// Task class for DeleteAll call. -class CookieMonster::DeleteAllTask : public CookieMonster::CookieMonsterTask { +template <typename Result> struct CallbackType { + typedef base::Callback<void(Result)> Type; +}; + +template <> struct CallbackType<void> { + typedef base::Closure Type; +}; + +// Base task class for Delete*Task. +template <typename Result> +class CookieMonster::DeleteTask : public CookieMonsterTask { public: - DeleteAllTask(CookieMonster* cookie_monster, - const CookieMonster::DeleteCallback& callback) + DeleteTask(CookieMonster* cookie_monster, + const typename CallbackType<Result>::Type& callback) : CookieMonsterTask(cookie_monster), callback_(callback) { } - // CookieMonster::CookieMonsterTask: + // CookieMonsterTask: virtual void Run() OVERRIDE; + private: + // Runs the delete task and returns a result. + virtual Result RunDeleteTask() = 0; + base::Closure RunDeleteTaskAndBindCallback(); + void FlushDone(const base::Closure& callback); + + typename CallbackType<Result>::Type callback_; + + DISALLOW_COPY_AND_ASSIGN(DeleteTask); +}; + +template <typename Result> +base::Closure CookieMonster::DeleteTask<Result>:: +RunDeleteTaskAndBindCallback() { + Result result = RunDeleteTask(); + if (callback_.is_null()) + return base::Closure(); + return base::Bind(callback_, result); +} + +template <> +base::Closure CookieMonster::DeleteTask<void>::RunDeleteTaskAndBindCallback() { + RunDeleteTask(); + return callback_; +} + +template <typename Result> +void CookieMonster::DeleteTask<Result>::Run() { + this->cookie_monster()->FlushStore( + base::Bind(&DeleteTask<Result>::FlushDone, this, + RunDeleteTaskAndBindCallback())); +} + +template <typename Result> +void CookieMonster::DeleteTask<Result>::FlushDone( + const base::Closure& callback) { + if (!callback.is_null()) { + this->InvokeCallback(callback); + } +} + +// Task class for DeleteAll call. +class CookieMonster::DeleteAllTask : public DeleteTask<int> { + public: + DeleteAllTask(CookieMonster* cookie_monster, + const DeleteCallback& callback) + : DeleteTask<int>(cookie_monster, callback) { + } + + // DeleteTask: + virtual int RunDeleteTask() OVERRIDE; + protected: virtual ~DeleteAllTask() {} private: - CookieMonster::DeleteCallback callback_; - DISALLOW_COPY_AND_ASSIGN(DeleteAllTask); }; -void CookieMonster::DeleteAllTask::Run() { - int num_deleted = this->cookie_monster()->DeleteAll(true); - if (!callback_.is_null()) { - this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run, - base::Unretained(&callback_), num_deleted)); - } +int CookieMonster::DeleteAllTask::RunDeleteTask() { + return this->cookie_monster()->DeleteAll(true); } // Task class for DeleteAllCreatedBetween call. -class CookieMonster::DeleteAllCreatedBetweenTask - : public CookieMonster::CookieMonsterTask { +class CookieMonster::DeleteAllCreatedBetweenTask : public DeleteTask<int> { public: DeleteAllCreatedBetweenTask(CookieMonster* cookie_monster, const Time& delete_begin, const Time& delete_end, - const CookieMonster::DeleteCallback& callback) - : CookieMonsterTask(cookie_monster), + const DeleteCallback& callback) + : DeleteTask<int>(cookie_monster, callback), delete_begin_(delete_begin), - delete_end_(delete_end), - callback_(callback) { + delete_end_(delete_end) { } - // CookieMonster::CookieMonsterTask: - virtual void Run() OVERRIDE; + // DeleteTask: + virtual int RunDeleteTask() OVERRIDE; protected: virtual ~DeleteAllCreatedBetweenTask() {} @@ -593,72 +631,59 @@ class CookieMonster::DeleteAllCreatedBetweenTask private: Time delete_begin_; Time delete_end_; - CookieMonster::DeleteCallback callback_; DISALLOW_COPY_AND_ASSIGN(DeleteAllCreatedBetweenTask); }; -void CookieMonster::DeleteAllCreatedBetweenTask::Run() { - int num_deleted = this->cookie_monster()-> +int CookieMonster::DeleteAllCreatedBetweenTask::RunDeleteTask() { + return this->cookie_monster()-> DeleteAllCreatedBetween(delete_begin_, delete_end_); - if (!callback_.is_null()) { - this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run, - base::Unretained(&callback_), num_deleted)); - } } // Task class for DeleteAllForHost call. -class CookieMonster::DeleteAllForHostTask - : public CookieMonster::CookieMonsterTask { +class CookieMonster::DeleteAllForHostTask : public DeleteTask<int> { public: DeleteAllForHostTask(CookieMonster* cookie_monster, const GURL& url, - const CookieMonster::DeleteCallback& callback) - : CookieMonsterTask(cookie_monster), - url_(url), - callback_(callback) { + const DeleteCallback& callback) + : DeleteTask<int>(cookie_monster, callback), + url_(url) { } - // CookieMonster::CookieMonsterTask: - virtual void Run() OVERRIDE; + // DeleteTask: + virtual int RunDeleteTask() OVERRIDE; protected: virtual ~DeleteAllForHostTask() {} private: GURL url_; - CookieMonster::DeleteCallback callback_; DISALLOW_COPY_AND_ASSIGN(DeleteAllForHostTask); }; -void CookieMonster::DeleteAllForHostTask::Run() { - int num_deleted = this->cookie_monster()->DeleteAllForHost(url_); - if (!callback_.is_null()) { - this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run, - base::Unretained(&callback_), num_deleted)); - } +int CookieMonster::DeleteAllForHostTask::RunDeleteTask() { + return this->cookie_monster()->DeleteAllForHost(url_); } // Task class for DeleteAllCreatedBetweenForHost call. class CookieMonster::DeleteAllCreatedBetweenForHostTask - : public CookieMonster::CookieMonsterTask { + : public DeleteTask<int> { public: DeleteAllCreatedBetweenForHostTask( CookieMonster* cookie_monster, Time delete_begin, Time delete_end, const GURL& url, - const CookieMonster::DeleteCallback& callback) - : CookieMonsterTask(cookie_monster), + const DeleteCallback& callback) + : DeleteTask<int>(cookie_monster, callback), delete_begin_(delete_begin), delete_end_(delete_end), - url_(url), - callback_(callback) { + url_(url) { } - // CookieMonster::CookieMonsterTask: - virtual void Run() OVERRIDE; + // DeleteTask: + virtual int RunDeleteTask() OVERRIDE; protected: virtual ~DeleteAllCreatedBetweenForHostTask() {} @@ -667,62 +692,49 @@ class CookieMonster::DeleteAllCreatedBetweenForHostTask Time delete_begin_; Time delete_end_; GURL url_; - CookieMonster::DeleteCallback callback_; DISALLOW_COPY_AND_ASSIGN(DeleteAllCreatedBetweenForHostTask); }; -void CookieMonster::DeleteAllCreatedBetweenForHostTask::Run() { - int num_deleted = this->cookie_monster()->DeleteAllCreatedBetweenForHost( +int CookieMonster::DeleteAllCreatedBetweenForHostTask::RunDeleteTask() { + return this->cookie_monster()->DeleteAllCreatedBetweenForHost( delete_begin_, delete_end_, url_); - if (!callback_.is_null()) { - this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run, - base::Unretained(&callback_), num_deleted)); - } } // Task class for DeleteCanonicalCookie call. -class CookieMonster::DeleteCanonicalCookieTask - : public CookieMonster::CookieMonsterTask { +class CookieMonster::DeleteCanonicalCookieTask : public DeleteTask<bool> { public: DeleteCanonicalCookieTask(CookieMonster* cookie_monster, const CanonicalCookie& cookie, - const CookieMonster::DeleteCookieCallback& callback) - : CookieMonsterTask(cookie_monster), - cookie_(cookie), - callback_(callback) { + const DeleteCookieCallback& callback) + : DeleteTask<bool>(cookie_monster, callback), + cookie_(cookie) { } - // CookieMonster::CookieMonsterTask: - virtual void Run() OVERRIDE; + // DeleteTask: + virtual bool RunDeleteTask() OVERRIDE; protected: virtual ~DeleteCanonicalCookieTask() {} private: CanonicalCookie cookie_; - CookieMonster::DeleteCookieCallback callback_; DISALLOW_COPY_AND_ASSIGN(DeleteCanonicalCookieTask); }; -void CookieMonster::DeleteCanonicalCookieTask::Run() { - bool result = this->cookie_monster()->DeleteCanonicalCookie(cookie_); - if (!callback_.is_null()) { - this->InvokeCallback(base::Bind(&CookieMonster::DeleteCookieCallback::Run, - base::Unretained(&callback_), result)); - } +bool CookieMonster::DeleteCanonicalCookieTask::RunDeleteTask() { + return this->cookie_monster()->DeleteCanonicalCookie(cookie_); } // Task class for SetCookieWithOptions call. -class CookieMonster::SetCookieWithOptionsTask - : public CookieMonster::CookieMonsterTask { +class CookieMonster::SetCookieWithOptionsTask : public CookieMonsterTask { public: SetCookieWithOptionsTask(CookieMonster* cookie_monster, const GURL& url, const std::string& cookie_line, const CookieOptions& options, - const CookieMonster::SetCookiesCallback& callback) + const SetCookiesCallback& callback) : CookieMonsterTask(cookie_monster), url_(url), cookie_line_(cookie_line), @@ -730,7 +742,7 @@ class CookieMonster::SetCookieWithOptionsTask callback_(callback) { } - // CookieMonster::CookieMonsterTask: + // CookieMonsterTask: virtual void Run() OVERRIDE; protected: @@ -740,7 +752,7 @@ class CookieMonster::SetCookieWithOptionsTask GURL url_; std::string cookie_line_; CookieOptions options_; - CookieMonster::SetCookiesCallback callback_; + SetCookiesCallback callback_; DISALLOW_COPY_AND_ASSIGN(SetCookieWithOptionsTask); }; @@ -749,26 +761,25 @@ void CookieMonster::SetCookieWithOptionsTask::Run() { bool result = this->cookie_monster()-> SetCookieWithOptions(url_, cookie_line_, options_); if (!callback_.is_null()) { - this->InvokeCallback(base::Bind(&CookieMonster::SetCookiesCallback::Run, + this->InvokeCallback(base::Bind(&SetCookiesCallback::Run, base::Unretained(&callback_), result)); } } // Task class for GetCookiesWithOptions call. -class CookieMonster::GetCookiesWithOptionsTask - : public CookieMonster::CookieMonsterTask { +class CookieMonster::GetCookiesWithOptionsTask : public CookieMonsterTask { public: GetCookiesWithOptionsTask(CookieMonster* cookie_monster, const GURL& url, const CookieOptions& options, - const CookieMonster::GetCookiesCallback& callback) + const GetCookiesCallback& callback) : CookieMonsterTask(cookie_monster), url_(url), options_(options), callback_(callback) { } - // CookieMonster::CookieMonsterTask: + // CookieMonsterTask: virtual void Run() OVERRIDE; protected: @@ -777,7 +788,7 @@ class CookieMonster::GetCookiesWithOptionsTask private: GURL url_; CookieOptions options_; - CookieMonster::GetCookiesCallback callback_; + GetCookiesCallback callback_; DISALLOW_COPY_AND_ASSIGN(GetCookiesWithOptionsTask); }; @@ -786,26 +797,25 @@ void CookieMonster::GetCookiesWithOptionsTask::Run() { std::string cookie = this->cookie_monster()-> GetCookiesWithOptions(url_, options_); if (!callback_.is_null()) { - this->InvokeCallback(base::Bind(&CookieMonster::GetCookiesCallback::Run, + this->InvokeCallback(base::Bind(&GetCookiesCallback::Run, base::Unretained(&callback_), cookie)); } } // Task class for DeleteCookie call. -class CookieMonster::DeleteCookieTask - : public CookieMonster::CookieMonsterTask { +class CookieMonster::DeleteCookieTask : public DeleteTask<void> { public: DeleteCookieTask(CookieMonster* cookie_monster, const GURL& url, const std::string& cookie_name, const base::Closure& callback) - : CookieMonsterTask(cookie_monster), + : DeleteTask<void>(cookie_monster, callback), url_(url), - cookie_name_(cookie_name), - callback_(callback) { } + cookie_name_(cookie_name) { + } - // CookieMonster::CookieMonsterTask: - virtual void Run() OVERRIDE; + // DeleteTask: + virtual void RunDeleteTask() OVERRIDE; protected: virtual ~DeleteCookieTask() {} @@ -813,61 +823,50 @@ class CookieMonster::DeleteCookieTask private: GURL url_; std::string cookie_name_; - base::Closure callback_; DISALLOW_COPY_AND_ASSIGN(DeleteCookieTask); }; -void CookieMonster::DeleteCookieTask::Run() { +void CookieMonster::DeleteCookieTask::RunDeleteTask() { this->cookie_monster()->DeleteCookie(url_, cookie_name_); - if (!callback_.is_null()) { - this->InvokeCallback(callback_); - } } // Task class for DeleteSessionCookies call. -class CookieMonster::DeleteSessionCookiesTask - : public CookieMonster::CookieMonsterTask { +class CookieMonster::DeleteSessionCookiesTask : public DeleteTask<int> { public: DeleteSessionCookiesTask(CookieMonster* cookie_monster, - const CookieMonster::DeleteCallback& callback) - : CookieMonsterTask(cookie_monster), callback_(callback) { + const DeleteCallback& callback) + : DeleteTask<int>(cookie_monster, callback) { } - // CookieMonster::CookieMonsterTask: - virtual void Run() OVERRIDE; + // DeleteTask: + virtual int RunDeleteTask() OVERRIDE; protected: virtual ~DeleteSessionCookiesTask() {} private: - CookieMonster::DeleteCallback callback_; DISALLOW_COPY_AND_ASSIGN(DeleteSessionCookiesTask); }; -void CookieMonster::DeleteSessionCookiesTask::Run() { - int num_deleted = this->cookie_monster()->DeleteSessionCookies(); - if (!callback_.is_null()) { - this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run, - base::Unretained(&callback_), num_deleted)); - } +int CookieMonster::DeleteSessionCookiesTask::RunDeleteTask() { + return this->cookie_monster()->DeleteSessionCookies(); } // Task class for HasCookiesForETLDP1Task call. -class CookieMonster::HasCookiesForETLDP1Task - : public CookieMonster::CookieMonsterTask { +class CookieMonster::HasCookiesForETLDP1Task : public CookieMonsterTask { public: HasCookiesForETLDP1Task( CookieMonster* cookie_monster, const std::string& etldp1, - const CookieMonster::HasCookiesForETLDP1Callback& callback) + const HasCookiesForETLDP1Callback& callback) : CookieMonsterTask(cookie_monster), etldp1_(etldp1), callback_(callback) { } - // CookieMonster::CookieMonsterTask: + // CookieMonsterTask: virtual void Run() OVERRIDE; protected: @@ -875,7 +874,7 @@ class CookieMonster::HasCookiesForETLDP1Task private: std::string etldp1_; - CookieMonster::HasCookiesForETLDP1Callback callback_; + HasCookiesForETLDP1Callback callback_; DISALLOW_COPY_AND_ASSIGN(HasCookiesForETLDP1Task); }; @@ -884,7 +883,7 @@ void CookieMonster::HasCookiesForETLDP1Task::Run() { bool result = this->cookie_monster()->HasCookiesForETLDP1(etldp1_); if (!callback_.is_null()) { this->InvokeCallback( - base::Bind(&CookieMonster::HasCookiesForETLDP1Callback::Run, + base::Bind(&HasCookiesForETLDP1Callback::Run, base::Unretained(&callback_), result)); } } @@ -1408,13 +1407,6 @@ void CookieMonster::SetPersistSessionCookies(bool persist_session_cookies) { persist_session_cookies_ = persist_session_cookies; } -// This function must be called before the CookieMonster is used. -void CookieMonster::SetPriorityAwareGarbageCollection( - bool priority_aware_garbage_collection) { - DCHECK(!initialized_); - priority_aware_garbage_collection_ = priority_aware_garbage_collection; -} - void CookieMonster::SetForceKeepSessionState() { if (store_.get()) { store_->SetForceKeepSessionState(); @@ -1463,21 +1455,31 @@ void CookieMonster::OnKeyLoaded(const std::string& key, StoreLoadedCookies(cookies); std::deque<scoped_refptr<CookieMonsterTask> > tasks_pending_for_key; - { - base::AutoLock autolock(lock_); - keys_loaded_.insert(key); - std::map<std::string, std::deque<scoped_refptr<CookieMonsterTask> > > - ::iterator it = tasks_pending_for_key_.find(key); - if (it == tasks_pending_for_key_.end()) - return; - it->second.swap(tasks_pending_for_key); - tasks_pending_for_key_.erase(it); - } - while (!tasks_pending_for_key.empty()) { - scoped_refptr<CookieMonsterTask> task = tasks_pending_for_key.front(); - task->Run(); - tasks_pending_for_key.pop_front(); + // We need to do this repeatedly until no more tasks were added to the queue + // during the period where we release the lock. + while (true) { + { + base::AutoLock autolock(lock_); + std::map<std::string, std::deque<scoped_refptr<CookieMonsterTask> > > + ::iterator it = tasks_pending_for_key_.find(key); + if (it == tasks_pending_for_key_.end()) { + keys_loaded_.insert(key); + return; + } + if (it->second.empty()) { + keys_loaded_.insert(key); + tasks_pending_for_key_.erase(it); + return; + } + it->second.swap(tasks_pending_for_key); + } + + while (!tasks_pending_for_key.empty()) { + scoped_refptr<CookieMonsterTask> task = tasks_pending_for_key.front(); + task->Run(); + tasks_pending_for_key.pop_front(); + } } } @@ -1666,9 +1668,9 @@ int CookieMonster::TrimDuplicateCookiesForKey( // Note: file must be the last scheme. const char* CookieMonster::kDefaultCookieableSchemes[] = - { "http", "https", "file" }; + { "http", "https", "ws", "wss", "file" }; const int CookieMonster::kDefaultCookieableSchemesCount = - arraysize(CookieMonster::kDefaultCookieableSchemes); + arraysize(kDefaultCookieableSchemes); void CookieMonster::SetDefaultCookieableSchemes() { int num_schemes = default_enable_file_scheme_ ? @@ -1775,7 +1777,7 @@ CookieMonster::CookieMap::iterator CookieMonster::InternalInsertCookie( cookies_.insert(CookieMap::value_type(key, cc)); if (delegate_.get()) { delegate_->OnCookieChanged( - *cc, false, CookieMonster::Delegate::CHANGE_COOKIE_EXPLICIT); + *cc, false, Delegate::CHANGE_COOKIE_EXPLICIT); } return inserted; @@ -1947,11 +1949,6 @@ int CookieMonster::GarbageCollect(const Time& current, for (int i = 0; i < 3 && purge_goal > 0; ++i) { accumulated_quota += quota[i]; - // If we are not using priority, only do Round 3. This reproduces the - // old way of indiscriminately purging least-recently accessed cookies. - if (!priority_aware_garbage_collection_ && i < 2) - continue; - size_t num_considered = it_bdd[i + 1] - it_purge_begin; if (num_considered <= accumulated_quota) continue; @@ -2050,8 +2047,8 @@ int CookieMonster::GarbageCollectExpired( int CookieMonster::GarbageCollectDeleteRange( const Time& current, DeletionCause cause, - CookieMonster::CookieItVector::iterator it_begin, - CookieMonster::CookieItVector::iterator it_end) { + CookieItVector::iterator it_begin, + CookieItVector::iterator it_end) { for (CookieItVector::iterator it = it_begin; it != it_end; it++) { histogram_evicted_last_access_minutes_->Add( (current - (*it)->second->LastAccessDate()).InMinutes()); diff --git a/chromium/net/cookies/cookie_monster.h b/chromium/net/cookies/cookie_monster.h index 1df616cd6d9..de00319fb4b 100644 --- a/chromium/net/cookies/cookie_monster.h +++ b/chromium/net/cookies/cookie_monster.h @@ -288,11 +288,6 @@ class NET_EXPORT CookieMonster : public CookieStore { // (i.e. as part of the instance initialization process). void SetPersistSessionCookies(bool persist_session_cookies); - // Enables the new garbage collection algorithm where domain cookie eviction - // uses cookie priorities to decide which cookies to purge and which to keep. - void SetPriorityAwareGarbageCollection( - bool priority_aware_garbage_collection); - // Debugging method to perform various validation checks on the map. // Currently just checking that there are no null CanonicalCookie pointers // in the map. @@ -311,6 +306,7 @@ class NET_EXPORT CookieMonster : public CookieStore { private: // For queueing the cookie monster calls. class CookieMonsterTask; + template <typename Result> class DeleteTask; class DeleteAllCreatedBetweenTask; class DeleteAllCreatedBetweenForHostTask; class DeleteAllForHostTask; @@ -679,7 +675,6 @@ class NET_EXPORT CookieMonster : public CookieStore { bool keep_expired_cookies_; bool persist_session_cookies_; - bool priority_aware_garbage_collection_; // Static setting for whether or not file scheme cookies are allows when // a new CookieMonster is created, or the accepted schemes on a CookieMonster diff --git a/chromium/net/cookies/cookie_monster_unittest.cc b/chromium/net/cookies/cookie_monster_unittest.cc index 2bfe9ee9978..69d98a1862a 100644 --- a/chromium/net/cookies/cookie_monster_unittest.cc +++ b/chromium/net/cookies/cookie_monster_unittest.cc @@ -50,7 +50,10 @@ class NewMockPersistentCookieStore MOCK_METHOD1(AddCookie, void(const CanonicalCookie& cc)); MOCK_METHOD1(UpdateCookieAccessTime, void(const CanonicalCookie& cc)); MOCK_METHOD1(DeleteCookie, void(const CanonicalCookie& cc)); - MOCK_METHOD1(Flush, void(const base::Closure& callback)); + virtual void Flush(const base::Closure& callback) { + if (!callback.is_null()) + base::MessageLoop::current()->PostTask(FROM_HERE, callback); + } MOCK_METHOD0(SetForceKeepSessionState, void()); private: @@ -89,7 +92,6 @@ struct CookieMonsterTestTraits { static const bool is_cookie_monster = true; static const bool supports_http_only = true; - static const bool supports_cookies_with_info = true; static const bool supports_non_dotted_domains = true; static const bool supports_trailing_dots = true; static const bool filters_schemes = true; @@ -570,7 +572,6 @@ class CookieMonsterTest : public CookieStoreTest<CookieMonsterTestTraits> { DCHECK_EQ(70U, CookieMonster::kDomainCookiesQuotaHigh); scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); - cm->SetPriorityAwareGarbageCollection(true); // Each test case adds 181 cookies, so 31 cookies are evicted. // Cookie same priority, repeated for each priority. @@ -1097,16 +1098,13 @@ TEST_F(DeferredCookieTaskTest, DeferredTaskOrder) { MockGetCookiesCallback get_cookies_callback; MockSetCookiesCallback set_cookies_callback; - MockClosure delete_cookie_callback; MockGetCookiesCallback get_cookies_callback_deferred; EXPECT_CALL(*this, Begin()).WillOnce(testing::DoAll( GetCookiesAction( &cookie_monster(), url_google_, &get_cookies_callback), SetCookieAction( - &cookie_monster(), url_google_, "A=B", &set_cookies_callback), - DeleteCookieAction( - &cookie_monster(), url_google_, "A", &delete_cookie_callback))); + &cookie_monster(), url_google_, "A=B", &set_cookies_callback))); ExpectLoadCall(); ExpectLoadForKeyCall("google.izzle", false); Begin(); @@ -1115,10 +1113,9 @@ TEST_F(DeferredCookieTaskTest, DeferredTaskOrder) { EXPECT_CALL(get_cookies_callback, Invoke("X=1")).WillOnce( GetCookiesAction( &cookie_monster(), url_google_, &get_cookies_callback_deferred)); - EXPECT_CALL(get_cookies_callback_deferred, Invoke("X=1")).WillOnce( - QuitCurrentMessageLoop()); EXPECT_CALL(set_cookies_callback, Invoke(true)); - EXPECT_CALL(delete_cookie_callback, Invoke()); + EXPECT_CALL(get_cookies_callback_deferred, Invoke("A=B; X=1")).WillOnce( + QuitCurrentMessageLoop()); CompleteLoadingAndWait(); } |