Index: net/cookies/cookie_monster.cc |
diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc |
index 8145802f0e3f9ff25823c683976198b5c8f9d2d4..47837fa3c76ac23d9a1aec7fc69058e3078cb889 100644 |
--- a/net/cookies/cookie_monster.cc |
+++ b/net/cookies/cookie_monster.cc |
@@ -82,9 +82,9 @@ using base::TimeTicks; |
// |
// On the browser critical paths (e.g. for loading initial web pages in a |
// session restore) it may take too long to wait for the full load. If a cookie |
-// request is for a specific URL, DoCookieTaskForURL is called, which triggers a |
-// priority load if the key is not loaded yet by calling PersistentCookieStore |
-// :: LoadCookiesForKey. The request is queued in |
+// request is for a specific URL, DoCookieCallbackForURL is called, which |
+// triggers a priority load if the key is not loaded yet by calling |
+// PersistentCookieStore::LoadCookiesForKey. The request is queued in |
// CookieMonster::tasks_pending_for_key_ and executed upon receiving |
// notification of key load completion via CookieMonster::OnKeyLoaded(). If |
// multiple requests for the same eTLD+1 are received before key load |
@@ -102,6 +102,31 @@ const char kFetchWhenNecessaryName[] = "FetchWhenNecessary"; |
const char kAlwaysFetchName[] = "AlwaysFetch"; |
const char kCookieMonsterFetchStrategyName[] = "CookieMonsterFetchStrategy"; |
+void MayeRunDeleteCallback(base::WeakPtr<net::CookieMonster> cookie_monster, |
+ base::OnceClosure callback) { |
+ if (cookie_monster && callback) |
+ std::move(callback).Run(); |
+} |
+ |
+void MaybeRunCookieCallback(base::OnceClosure callback) { |
+ if (callback) |
+ std::move(callback).Run(); |
+} |
+ |
+template <typename T> |
+void MaybeRunCookieCallback(base::OnceCallback<void(const T&)> callback, |
+ const T& result) { |
+ if (callback) |
+ std::move(callback).Run(result); |
+} |
+ |
+template <typename T> |
+void MaybeRunCookieCallback(base::OnceCallback<void(T)> callback, |
+ const T& result) { |
+ if (callback) |
+ std::move(callback).Run(result); |
+} |
+ |
} // namespace |
namespace net { |
@@ -385,516 +410,6 @@ CookieMonster::CookieMonster(PersistentCookieStore* store, |
kDefaultCookieableSchemes + kDefaultCookieableSchemesCount); |
} |
-// Task classes for queueing the coming request. |
- |
-class CookieMonster::CookieMonsterTask |
- : public base::RefCountedThreadSafe<CookieMonsterTask> { |
- public: |
- // Runs the task and invokes the client callback on the thread that |
- // originally constructed the task. |
- virtual void Run() = 0; |
- |
- protected: |
- explicit CookieMonsterTask(CookieMonster* cookie_monster); |
- virtual ~CookieMonsterTask(); |
- |
- CookieMonster* cookie_monster() { return cookie_monster_; } |
- |
- private: |
- friend class base::RefCountedThreadSafe<CookieMonsterTask>; |
- |
- CookieMonster* cookie_monster_; |
- |
- DISALLOW_COPY_AND_ASSIGN(CookieMonsterTask); |
-}; |
- |
-CookieMonster::CookieMonsterTask::CookieMonsterTask( |
- CookieMonster* cookie_monster) |
- : cookie_monster_(cookie_monster) {} |
- |
-CookieMonster::CookieMonsterTask::~CookieMonsterTask() { |
-} |
- |
-// Task class for SetCookieWithDetails call. |
-class CookieMonster::SetCookieWithDetailsTask : public CookieMonsterTask { |
- public: |
- SetCookieWithDetailsTask(CookieMonster* cookie_monster, |
- const GURL& url, |
- const std::string& name, |
- const std::string& value, |
- const std::string& domain, |
- const std::string& path, |
- base::Time creation_time, |
- base::Time expiration_time, |
- base::Time last_access_time, |
- bool secure, |
- bool http_only, |
- CookieSameSite same_site, |
- CookiePriority priority, |
- SetCookiesCallback callback) |
- : CookieMonsterTask(cookie_monster), |
- url_(url), |
- name_(name), |
- value_(value), |
- domain_(domain), |
- path_(path), |
- creation_time_(creation_time), |
- expiration_time_(expiration_time), |
- last_access_time_(last_access_time), |
- secure_(secure), |
- http_only_(http_only), |
- same_site_(same_site), |
- priority_(priority), |
- callback_(std::move(callback)) {} |
- |
- // CookieMonsterTask: |
- void Run() override; |
- |
- protected: |
- ~SetCookieWithDetailsTask() override {} |
- |
- private: |
- GURL url_; |
- std::string name_; |
- std::string value_; |
- std::string domain_; |
- std::string path_; |
- base::Time creation_time_; |
- base::Time expiration_time_; |
- base::Time last_access_time_; |
- bool secure_; |
- bool http_only_; |
- CookieSameSite same_site_; |
- CookiePriority priority_; |
- SetCookiesCallback callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SetCookieWithDetailsTask); |
-}; |
- |
-void CookieMonster::SetCookieWithDetailsTask::Run() { |
- bool success = this->cookie_monster()->SetCookieWithDetails( |
- url_, name_, value_, domain_, path_, creation_time_, expiration_time_, |
- last_access_time_, secure_, http_only_, same_site_, priority_); |
- if (!callback_.is_null()) |
- std::move(callback_).Run(success); |
-} |
- |
-// Task class for GetAllCookies call. |
-class CookieMonster::GetAllCookiesTask : public CookieMonsterTask { |
- public: |
- GetAllCookiesTask(CookieMonster* cookie_monster, |
- GetCookieListCallback callback) |
- : CookieMonsterTask(cookie_monster), callback_(std::move(callback)) {} |
- |
- // CookieMonsterTask |
- void Run() override; |
- |
- protected: |
- ~GetAllCookiesTask() override {} |
- |
- private: |
- GetCookieListCallback callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(GetAllCookiesTask); |
-}; |
- |
-void CookieMonster::GetAllCookiesTask::Run() { |
- if (!callback_.is_null()) { |
- CookieList cookies = this->cookie_monster()->GetAllCookies(); |
- std::move(callback_).Run(cookies); |
- } |
-} |
- |
-// Task class for GetCookieListWithOptionsAsync call. |
-class CookieMonster::GetCookieListWithOptionsTask : public CookieMonsterTask { |
- public: |
- GetCookieListWithOptionsTask(CookieMonster* cookie_monster, |
- const GURL& url, |
- const CookieOptions& options, |
- GetCookieListCallback callback) |
- : CookieMonsterTask(cookie_monster), |
- url_(url), |
- options_(options), |
- callback_(std::move(callback)) {} |
- |
- // CookieMonsterTask: |
- void Run() override; |
- |
- protected: |
- ~GetCookieListWithOptionsTask() override {} |
- |
- private: |
- GURL url_; |
- CookieOptions options_; |
- GetCookieListCallback callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(GetCookieListWithOptionsTask); |
-}; |
- |
-void CookieMonster::GetCookieListWithOptionsTask::Run() { |
- if (!callback_.is_null()) { |
- CookieList cookies = |
- this->cookie_monster()->GetCookieListWithOptions(url_, options_); |
- std::move(callback_).Run(cookies); |
- } |
-} |
- |
-template <typename Result> |
-struct CallbackType { |
- typedef base::OnceCallback<void(Result)> Type; |
-}; |
- |
-template <> |
-struct CallbackType<void> { |
- typedef base::OnceClosure Type; |
-}; |
- |
-// Base task class for Delete*Task. |
-template <typename Result> |
-class CookieMonster::DeleteTask : public CookieMonsterTask { |
- public: |
- DeleteTask(CookieMonster* cookie_monster, |
- typename CallbackType<Result>::Type callback) |
- : CookieMonsterTask(cookie_monster), callback_(std::move(callback)) {} |
- |
- // CookieMonsterTask: |
- void Run() override; |
- |
- protected: |
- ~DeleteTask() override; |
- |
- private: |
- // Runs the delete task and returns a result. |
- virtual Result RunDeleteTask() = 0; |
- // Runs the delete task and then returns a callback to be called after |
- // flushing the persistent store. |
- // TODO(mmenke): This seems like a pretty ugly and needlessly confusing API. |
- // Simplify it? |
- base::OnceClosure RunDeleteTaskAndBindCallback(); |
- |
- typename CallbackType<Result>::Type callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DeleteTask); |
-}; |
- |
-template <typename Result> |
-CookieMonster::DeleteTask<Result>::~DeleteTask() { |
-} |
- |
-template <typename Result> |
-base::OnceClosure |
-CookieMonster::DeleteTask<Result>::RunDeleteTaskAndBindCallback() { |
- Result result = RunDeleteTask(); |
- if (callback_.is_null()) |
- return base::OnceClosure(); |
- return base::BindOnce(std::move(callback_), result); |
-} |
- |
-template <> |
-base::OnceClosure |
-CookieMonster::DeleteTask<void>::RunDeleteTaskAndBindCallback() { |
- RunDeleteTask(); |
- return std::move(callback_); |
-} |
- |
-template <typename Result> |
-void CookieMonster::DeleteTask<Result>::Run() { |
- base::OnceClosure callback = RunDeleteTaskAndBindCallback(); |
- if (!callback.is_null()) { |
- callback = |
- base::BindOnce(&CookieMonster::RunCallback, |
- this->cookie_monster()->weak_ptr_factory_.GetWeakPtr(), |
- std::move(callback)); |
- } |
- this->cookie_monster()->FlushStore(std::move(callback)); |
-} |
- |
-// Task class for DeleteAllCreatedBetween call. |
-class CookieMonster::DeleteAllCreatedBetweenTask : public DeleteTask<uint32_t> { |
- public: |
- DeleteAllCreatedBetweenTask(CookieMonster* cookie_monster, |
- const Time& delete_begin, |
- const Time& delete_end, |
- DeleteCallback callback) |
- : DeleteTask<uint32_t>(cookie_monster, std::move(callback)), |
- delete_begin_(delete_begin), |
- delete_end_(delete_end) {} |
- |
- // DeleteTask: |
- uint32_t RunDeleteTask() override; |
- |
- protected: |
- ~DeleteAllCreatedBetweenTask() override {} |
- |
- private: |
- Time delete_begin_; |
- Time delete_end_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DeleteAllCreatedBetweenTask); |
-}; |
- |
-uint32_t CookieMonster::DeleteAllCreatedBetweenTask::RunDeleteTask() { |
- return this->cookie_monster()->DeleteAllCreatedBetween(delete_begin_, |
- delete_end_); |
-} |
- |
-// Task class for DeleteAllCreatedBetweenWithPredicate call. |
-class CookieMonster::DeleteAllCreatedBetweenWithPredicateTask |
- : public DeleteTask<uint32_t> { |
- public: |
- DeleteAllCreatedBetweenWithPredicateTask( |
- CookieMonster* cookie_monster, |
- Time delete_begin, |
- Time delete_end, |
- base::Callback<bool(const CanonicalCookie&)> predicate, |
- DeleteCallback callback) |
- : DeleteTask<uint32_t>(cookie_monster, std::move(callback)), |
- delete_begin_(delete_begin), |
- delete_end_(delete_end), |
- predicate_(predicate) {} |
- |
- // DeleteTask: |
- uint32_t RunDeleteTask() override; |
- |
- protected: |
- ~DeleteAllCreatedBetweenWithPredicateTask() override {} |
- |
- private: |
- Time delete_begin_; |
- Time delete_end_; |
- base::Callback<bool(const CanonicalCookie&)> predicate_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DeleteAllCreatedBetweenWithPredicateTask); |
-}; |
- |
-uint32_t |
-CookieMonster::DeleteAllCreatedBetweenWithPredicateTask::RunDeleteTask() { |
- return this->cookie_monster()->DeleteAllCreatedBetweenWithPredicate( |
- delete_begin_, delete_end_, predicate_); |
-} |
- |
-// Task class for DeleteCanonicalCookie call. |
-class CookieMonster::DeleteCanonicalCookieTask : public DeleteTask<uint32_t> { |
- public: |
- DeleteCanonicalCookieTask(CookieMonster* cookie_monster, |
- const CanonicalCookie& cookie, |
- DeleteCallback callback) |
- : DeleteTask<uint32_t>(cookie_monster, std::move(callback)), |
- cookie_(cookie) {} |
- |
- // DeleteTask: |
- uint32_t RunDeleteTask() override; |
- |
- protected: |
- ~DeleteCanonicalCookieTask() override {} |
- |
- private: |
- CanonicalCookie cookie_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DeleteCanonicalCookieTask); |
-}; |
- |
-uint32_t CookieMonster::DeleteCanonicalCookieTask::RunDeleteTask() { |
- return this->cookie_monster()->DeleteCanonicalCookie(cookie_); |
-} |
- |
-// Task class for SetCanonicalCookie call. |
-class CookieMonster::SetCanonicalCookieTask : public CookieMonsterTask { |
- public: |
- SetCanonicalCookieTask(CookieMonster* cookie_monster, |
- std::unique_ptr<CanonicalCookie> cookie, |
- bool secure_source, |
- bool modify_http_only, |
- SetCookiesCallback callback) |
- : CookieMonsterTask(cookie_monster), |
- cookie_(std::move(cookie)), |
- secure_source_(secure_source), |
- modify_http_only_(modify_http_only), |
- callback_(std::move(callback)) {} |
- |
- // CookieMonsterTask: |
- void Run() override; |
- |
- protected: |
- ~SetCanonicalCookieTask() override {} |
- |
- private: |
- std::unique_ptr<CanonicalCookie> cookie_; |
- bool secure_source_; |
- bool modify_http_only_; |
- SetCookiesCallback callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SetCanonicalCookieTask); |
-}; |
- |
-void CookieMonster::SetCanonicalCookieTask::Run() { |
- bool result = this->cookie_monster()->SetCanonicalCookie( |
- std::move(cookie_), secure_source_, modify_http_only_); |
- if (!callback_.is_null()) |
- std::move(callback_).Run(result); |
-} |
- |
-// Task class for SetCookieWithOptions call. |
-class CookieMonster::SetCookieWithOptionsTask : public CookieMonsterTask { |
- public: |
- SetCookieWithOptionsTask(CookieMonster* cookie_monster, |
- const GURL& url, |
- const std::string& cookie_line, |
- const CookieOptions& options, |
- SetCookiesCallback callback) |
- : CookieMonsterTask(cookie_monster), |
- url_(url), |
- cookie_line_(cookie_line), |
- options_(options), |
- callback_(std::move(callback)) {} |
- |
- // CookieMonsterTask: |
- void Run() override; |
- |
- protected: |
- ~SetCookieWithOptionsTask() override {} |
- |
- private: |
- GURL url_; |
- std::string cookie_line_; |
- CookieOptions options_; |
- SetCookiesCallback callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SetCookieWithOptionsTask); |
-}; |
- |
-void CookieMonster::SetCookieWithOptionsTask::Run() { |
- bool result = this->cookie_monster()->SetCookieWithOptions(url_, cookie_line_, |
- options_); |
- if (!callback_.is_null()) |
- std::move(callback_).Run(result); |
-} |
- |
-// Task class for SetAllCookies call. |
-class CookieMonster::SetAllCookiesTask : public CookieMonsterTask { |
- public: |
- SetAllCookiesTask(CookieMonster* cookie_monster, |
- const CookieList& list, |
- SetCookiesCallback callback) |
- : CookieMonsterTask(cookie_monster), |
- list_(list), |
- callback_(std::move(callback)) {} |
- |
- // CookieMonsterTask: |
- void Run() override; |
- |
- protected: |
- ~SetAllCookiesTask() override {} |
- |
- private: |
- CookieList list_; |
- SetCookiesCallback callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SetAllCookiesTask); |
-}; |
- |
-void CookieMonster::SetAllCookiesTask::Run() { |
- CookieList positive_diff; |
- CookieList negative_diff; |
- CookieList old_cookies = this->cookie_monster()->GetAllCookies(); |
- this->cookie_monster()->ComputeCookieDiff(&old_cookies, &list_, |
- &positive_diff, &negative_diff); |
- |
- for (CookieList::const_iterator it = negative_diff.begin(); |
- it != negative_diff.end(); ++it) { |
- this->cookie_monster()->DeleteCanonicalCookie(*it); |
- } |
- |
- bool result = true; |
- if (positive_diff.size() > 0) |
- result = this->cookie_monster()->SetAllCookies(list_); |
- |
- if (!callback_.is_null()) |
- std::move(callback_).Run(result); |
-} |
- |
-// Task class for GetCookiesWithOptions call. |
-class CookieMonster::GetCookiesWithOptionsTask : public CookieMonsterTask { |
- public: |
- GetCookiesWithOptionsTask(CookieMonster* cookie_monster, |
- const GURL& url, |
- const CookieOptions& options, |
- GetCookiesCallback callback) |
- : CookieMonsterTask(cookie_monster), |
- url_(url), |
- options_(options), |
- callback_(std::move(callback)) {} |
- |
- // CookieMonsterTask: |
- void Run() override; |
- |
- protected: |
- ~GetCookiesWithOptionsTask() override {} |
- |
- private: |
- GURL url_; |
- CookieOptions options_; |
- GetCookiesCallback callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(GetCookiesWithOptionsTask); |
-}; |
- |
-void CookieMonster::GetCookiesWithOptionsTask::Run() { |
- std::string cookie = |
- this->cookie_monster()->GetCookiesWithOptions(url_, options_); |
- if (!callback_.is_null()) |
- std::move(callback_).Run(cookie); |
-} |
- |
-// Task class for DeleteCookie call. |
-class CookieMonster::DeleteCookieTask : public DeleteTask<void> { |
- public: |
- DeleteCookieTask(CookieMonster* cookie_monster, |
- const GURL& url, |
- const std::string& cookie_name, |
- base::OnceClosure callback) |
- : DeleteTask<void>(cookie_monster, std::move(callback)), |
- url_(url), |
- cookie_name_(cookie_name) {} |
- |
- // DeleteTask: |
- void RunDeleteTask() override; |
- |
- protected: |
- ~DeleteCookieTask() override {} |
- |
- private: |
- GURL url_; |
- std::string cookie_name_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DeleteCookieTask); |
-}; |
- |
-void CookieMonster::DeleteCookieTask::RunDeleteTask() { |
- this->cookie_monster()->DeleteCookie(url_, cookie_name_); |
-} |
- |
-// Task class for DeleteSessionCookies call. |
-class CookieMonster::DeleteSessionCookiesTask : public DeleteTask<uint32_t> { |
- public: |
- DeleteSessionCookiesTask(CookieMonster* cookie_monster, |
- DeleteCallback callback) |
- : DeleteTask<uint32_t>(cookie_monster, std::move(callback)) {} |
- |
- // DeleteTask: |
- uint32_t RunDeleteTask() override; |
- |
- protected: |
- ~DeleteSessionCookiesTask() override {} |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(DeleteSessionCookiesTask); |
-}; |
- |
-uint32_t CookieMonster::DeleteSessionCookiesTask::RunDeleteTask() { |
- return this->cookie_monster()->DeleteSessionCookies(); |
-} |
- |
// Asynchronous CookieMonster API |
void CookieMonster::SetCookieWithDetailsAsync(const GURL& url, |
@@ -910,11 +425,16 @@ void CookieMonster::SetCookieWithDetailsAsync(const GURL& url, |
CookieSameSite same_site, |
CookiePriority priority, |
SetCookiesCallback callback) { |
- scoped_refptr<SetCookieWithDetailsTask> task = new SetCookieWithDetailsTask( |
- this, url, name, value, domain, path, creation_time, expiration_time, |
- last_access_time, secure, http_only, same_site, priority, |
- std::move(callback)); |
- DoCookieTaskForURL(task, url); |
+ DoCookieCallbackForURL( |
+ base::BindOnce( |
+ // base::Unretained is safe as DoCookieCallbackForURL stores |
+ // the callback on |*this|, so the callback will not outlive |
+ // the object. |
+ &CookieMonster::SetCookieWithDetails, base::Unretained(this), url, |
+ name, value, domain, path, creation_time, expiration_time, |
+ last_access_time, secure, http_only, same_site, priority, |
+ std::move(callback)), |
+ url); |
} |
void CookieMonster::FlushStore(base::OnceClosure callback) { |
@@ -925,7 +445,7 @@ void CookieMonster::FlushStore(base::OnceClosure callback) { |
channel_id_service_->GetChannelIDStore()->Flush(); |
} |
store_->Flush(std::move(callback)); |
- } else if (!callback.is_null()) { |
+ } else if (callback) { |
base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
std::move(callback)); |
} |
@@ -940,9 +460,12 @@ void CookieMonster::SetForceKeepSessionState() { |
void CookieMonster::SetAllCookiesAsync(const CookieList& list, |
SetCookiesCallback callback) { |
- scoped_refptr<SetAllCookiesTask> task = |
- new SetAllCookiesTask(this, list, std::move(callback)); |
- DoCookieTask(task); |
+ DoCookieCallback(base::BindOnce( |
+ // base::Unretained is safe as DoCookieCallbackForURL stores |
+ // the callback on |*this|, so the callback will not outlive |
+ // the object. |
+ &CookieMonster::SetAllCookies, base::Unretained(this), list, |
+ std::move(callback))); |
} |
void CookieMonster::SetCanonicalCookieAsync( |
@@ -951,78 +474,102 @@ void CookieMonster::SetCanonicalCookieAsync( |
bool modify_http_only, |
SetCookiesCallback callback) { |
DCHECK(cookie->IsCanonical()); |
- scoped_refptr<SetCanonicalCookieTask> task = |
- new SetCanonicalCookieTask(this, std::move(cookie), secure_source, |
- modify_http_only, std::move(callback)); |
- // TODO(rdsmith): Switch to DoCookieTaskForURL (or the equivalent). |
+ // TODO(rdsmith): Switch to DoCookieCallbackForURL (or the equivalent). |
// This is tricky because we don't have the scheme in this routine |
- // and DoCookieTaskForURL uses cookie_util::GetEffectiveDomain(scheme, host) |
+ // and DoCookieCallbackForURL uses |
+ // cookie_util::GetEffectiveDomain(scheme, host) |
// to generate the database key to block behind. |
- DoCookieTask(task); |
+ DoCookieCallback(base::BindOnce( |
+ // base::Unretained is safe as DoCookieCallbackForURL stores |
+ // the callback on |*this|, so the callback will not outlive |
+ // the object. |
+ &CookieMonster::SetCanonicalCookie, base::Unretained(this), |
+ std::move(cookie), secure_source, modify_http_only, std::move(callback))); |
} |
void CookieMonster::SetCookieWithOptionsAsync(const GURL& url, |
const std::string& cookie_line, |
const CookieOptions& options, |
SetCookiesCallback callback) { |
- scoped_refptr<SetCookieWithOptionsTask> task = new SetCookieWithOptionsTask( |
- this, url, cookie_line, options, std::move(callback)); |
- |
- DoCookieTaskForURL(task, url); |
+ DoCookieCallbackForURL( |
+ base::BindOnce( |
+ // base::Unretained is safe as DoCookieCallbackForURL stores |
+ // the callback on |*this|, so the callback will not outlive |
+ // the object. |
+ &CookieMonster::SetCookieWithOptions, base::Unretained(this), url, |
+ cookie_line, options, std::move(callback)), |
+ url); |
} |
void CookieMonster::GetCookiesWithOptionsAsync(const GURL& url, |
const CookieOptions& options, |
GetCookiesCallback callback) { |
- scoped_refptr<GetCookiesWithOptionsTask> task = |
- new GetCookiesWithOptionsTask(this, url, options, std::move(callback)); |
- |
- DoCookieTaskForURL(task, url); |
+ DoCookieCallbackForURL( |
+ base::BindOnce( |
+ // base::Unretained is safe as DoCookieCallbackForURL stores |
+ // the callback on |*this|, so the callback will not outlive |
+ // the object. |
+ &CookieMonster::GetCookiesWithOptions, base::Unretained(this), url, |
+ options, std::move(callback)), |
+ url); |
} |
void CookieMonster::GetCookieListWithOptionsAsync( |
const GURL& url, |
const CookieOptions& options, |
GetCookieListCallback callback) { |
- scoped_refptr<GetCookieListWithOptionsTask> task = |
- new GetCookieListWithOptionsTask(this, url, options, std::move(callback)); |
- |
- DoCookieTaskForURL(task, url); |
+ DoCookieCallbackForURL( |
+ base::BindOnce( |
+ // base::Unretained is safe as DoCookieCallbackForURL stores |
+ // the callback on |*this|, so the callback will not outlive |
+ // the object. |
+ &CookieMonster::GetCookieListWithOptions, base::Unretained(this), url, |
+ options, std::move(callback)), |
+ url); |
} |
void CookieMonster::GetAllCookiesAsync(GetCookieListCallback callback) { |
- scoped_refptr<GetAllCookiesTask> task = |
- new GetAllCookiesTask(this, std::move(callback)); |
- |
- DoCookieTask(task); |
+ DoCookieCallback(base::BindOnce( |
+ // base::Unretained is safe as DoCookieCallbackForURL stores |
+ // the callback on |*this|, so the callback will not outlive |
+ // the object. |
+ &CookieMonster::GetAllCookies, base::Unretained(this), |
+ std::move(callback))); |
} |
void CookieMonster::DeleteCookieAsync(const GURL& url, |
const std::string& cookie_name, |
base::OnceClosure callback) { |
- scoped_refptr<DeleteCookieTask> task = |
- new DeleteCookieTask(this, url, cookie_name, std::move(callback)); |
- |
- DoCookieTaskForURL(task, url); |
+ DoCookieCallbackForURL( |
+ base::BindOnce( |
+ // base::Unretained is safe as DoCookieCallbackForURL stores |
+ // the callback on |*this|, so the callback will not outlive |
+ // the object. |
+ &CookieMonster::DeleteCookie, base::Unretained(this), url, |
+ cookie_name, std::move(callback)), |
+ url); |
} |
void CookieMonster::DeleteCanonicalCookieAsync(const CanonicalCookie& cookie, |
DeleteCallback callback) { |
- scoped_refptr<DeleteCanonicalCookieTask> task = |
- new DeleteCanonicalCookieTask(this, cookie, std::move(callback)); |
- |
- DoCookieTask(task); |
+ DoCookieCallback(base::BindOnce( |
+ // base::Unretained is safe as DoCookieCallbackForURL stores |
+ // the callback on |*this|, so the callback will not outlive |
+ // the object. |
+ &CookieMonster::DeleteCanonicalCookie, base::Unretained(this), cookie, |
+ std::move(callback))); |
} |
void CookieMonster::DeleteAllCreatedBetweenAsync(const Time& delete_begin, |
const Time& delete_end, |
DeleteCallback callback) { |
- scoped_refptr<DeleteAllCreatedBetweenTask> task = |
- new DeleteAllCreatedBetweenTask(this, delete_begin, delete_end, |
- std::move(callback)); |
- |
- DoCookieTask(task); |
+ DoCookieCallback(base::BindOnce( |
+ // base::Unretained is safe as DoCookieCallbackForURL stores |
+ // the callback on |*this|, so the callback will not outlive |
+ // the object. |
+ &CookieMonster::DeleteAllCreatedBetween, base::Unretained(this), |
+ delete_begin, delete_end, std::move(callback))); |
} |
void CookieMonster::DeleteAllCreatedBetweenWithPredicateAsync( |
@@ -1031,21 +578,27 @@ void CookieMonster::DeleteAllCreatedBetweenWithPredicateAsync( |
const base::Callback<bool(const CanonicalCookie&)>& predicate, |
DeleteCallback callback) { |
if (predicate.is_null()) { |
- std::move(callback).Run(0); |
+ MaybeRunCookieCallback(std::move(callback), 0u); |
return; |
} |
- scoped_refptr<DeleteAllCreatedBetweenWithPredicateTask> task = |
- new DeleteAllCreatedBetweenWithPredicateTask( |
- this, delete_begin, delete_end, predicate, std::move(callback)); |
- DoCookieTask(task); |
+ |
+ DoCookieCallback(base::BindOnce( |
+ // base::Unretained is safe as DoCookieCallbackForURL stores |
+ // the callback on |*this|, so the callback will not outlive |
+ // the object. |
+ &CookieMonster::DeleteAllCreatedBetweenWithPredicate, |
+ base::Unretained(this), delete_begin, delete_end, predicate, |
+ std::move(callback))); |
} |
void CookieMonster::DeleteSessionCookiesAsync( |
CookieStore::DeleteCallback callback) { |
- scoped_refptr<DeleteSessionCookiesTask> task = |
- new DeleteSessionCookiesTask(this, std::move(callback)); |
- |
- DoCookieTask(task); |
+ DoCookieCallback(base::BindOnce( |
+ // base::Unretained is safe as DoCookieCallbackForURL stores |
+ // the callback on |*this|, so the callback will not outlive |
+ // the object. |
+ &CookieMonster::DeleteSessionCookies, base::Unretained(this), |
+ std::move(callback))); |
} |
void CookieMonster::SetCookieableSchemes( |
@@ -1109,7 +662,7 @@ CookieMonster::~CookieMonster() { |
} |
} |
-bool CookieMonster::SetCookieWithDetails(const GURL& url, |
+void CookieMonster::SetCookieWithDetails(const GURL& url, |
const std::string& name, |
const std::string& value, |
const std::string& domain, |
@@ -1120,27 +673,35 @@ bool CookieMonster::SetCookieWithDetails(const GURL& url, |
bool secure, |
bool http_only, |
CookieSameSite same_site, |
- CookiePriority priority) { |
+ CookiePriority priority, |
+ SetCookiesCallback callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- if (!HasCookieableScheme(url)) |
- return false; |
+ if (!HasCookieableScheme(url)) { |
+ MaybeRunCookieCallback(std::move(callback), false); |
+ return; |
+ } |
// Validate consistency of passed arguments. |
if (ParsedCookie::ParseTokenString(name) != name || |
ParsedCookie::ParseValueString(value) != value || |
ParsedCookie::ParseValueString(domain) != domain || |
ParsedCookie::ParseValueString(path) != path) { |
- return false; |
+ MaybeRunCookieCallback(std::move(callback), false); |
+ return; |
} |
std::string cookie_domain; |
- if (!cookie_util::GetCookieDomainWithString(url, domain, &cookie_domain)) |
- return false; |
+ if (!cookie_util::GetCookieDomainWithString(url, domain, &cookie_domain)) { |
+ MaybeRunCookieCallback(std::move(callback), false); |
+ return; |
+ } |
std::string cookie_path = CanonicalCookie::CanonPathWithString(url, path); |
- if (!path.empty() && cookie_path != path) |
- return false; |
+ if (!path.empty() && cookie_path != path) { |
+ MaybeRunCookieCallback(std::move(callback), false); |
+ return; |
+ } |
// Canonicalize path again to make sure it escapes characters as needed. |
url::Component path_component(0, cookie_path.length()); |
@@ -1155,10 +716,11 @@ bool CookieMonster::SetCookieWithDetails(const GURL& url, |
name, value, cookie_domain, cookie_path, creation_time, expiration_time, |
last_access_time, secure, http_only, same_site, priority)); |
- return SetCanonicalCookie(std::move(cc), url.SchemeIsCryptographic(), true); |
+ SetCanonicalCookie(std::move(cc), url.SchemeIsCryptographic(), true, |
+ std::move(callback)); |
} |
-CookieList CookieMonster::GetAllCookies() { |
+void CookieMonster::GetAllCookies(GetCookieListCallback callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
// This function is being called to scrape the cookie list for management UI |
@@ -1185,32 +747,31 @@ CookieList CookieMonster::GetAllCookies() { |
for (auto* cookie_ptr : cookie_ptrs) |
cookie_list.push_back(*cookie_ptr); |
- return cookie_list; |
+ MaybeRunCookieCallback(std::move(callback), cookie_list); |
} |
-CookieList CookieMonster::GetCookieListWithOptions( |
- const GURL& url, |
- const CookieOptions& options) { |
+void CookieMonster::GetCookieListWithOptions(const GURL& url, |
+ const CookieOptions& options, |
+ GetCookieListCallback callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
CookieList cookies; |
- if (!HasCookieableScheme(url)) |
- return cookies; |
- |
- std::vector<CanonicalCookie*> cookie_ptrs; |
- FindCookiesForHostAndDomain(url, options, &cookie_ptrs); |
- std::sort(cookie_ptrs.begin(), cookie_ptrs.end(), CookieSorter); |
- |
- cookies.reserve(cookie_ptrs.size()); |
- for (std::vector<CanonicalCookie*>::const_iterator it = cookie_ptrs.begin(); |
- it != cookie_ptrs.end(); it++) |
- cookies.push_back(**it); |
- |
- return cookies; |
+ if (HasCookieableScheme(url)) { |
+ std::vector<CanonicalCookie*> cookie_ptrs; |
+ FindCookiesForHostAndDomain(url, options, &cookie_ptrs); |
+ std::sort(cookie_ptrs.begin(), cookie_ptrs.end(), CookieSorter); |
+ |
+ cookies.reserve(cookie_ptrs.size()); |
+ for (std::vector<CanonicalCookie*>::const_iterator it = cookie_ptrs.begin(); |
+ it != cookie_ptrs.end(); it++) |
+ cookies.push_back(**it); |
+ } |
+ MaybeRunCookieCallback(std::move(callback), cookies); |
} |
-uint32_t CookieMonster::DeleteAllCreatedBetween(const Time& delete_begin, |
- const Time& delete_end) { |
+void CookieMonster::DeleteAllCreatedBetween(const Time& delete_begin, |
+ const Time& delete_end, |
+ DeleteCallback callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
uint32_t num_deleted = 0; |
@@ -1227,13 +788,17 @@ uint32_t CookieMonster::DeleteAllCreatedBetween(const Time& delete_begin, |
} |
} |
- return num_deleted; |
+ FlushStore( |
+ base::BindOnce(&MayeRunDeleteCallback, weak_ptr_factory_.GetWeakPtr(), |
+ callback ? base::BindOnce(std::move(callback), num_deleted) |
+ : base::OnceClosure())); |
} |
-uint32_t CookieMonster::DeleteAllCreatedBetweenWithPredicate( |
+void CookieMonster::DeleteAllCreatedBetweenWithPredicate( |
const base::Time& delete_begin, |
const base::Time& delete_end, |
- const base::Callback<bool(const CanonicalCookie&)>& predicate) { |
+ const base::Callback<bool(const CanonicalCookie&)>& predicate, |
+ DeleteCallback callback) { |
uint32_t num_deleted = 0; |
for (CookieMap::iterator it = cookies_.begin(); it != cookies_.end();) { |
CookieMap::iterator curit = it; |
@@ -1251,45 +816,55 @@ uint32_t CookieMonster::DeleteAllCreatedBetweenWithPredicate( |
} |
} |
- return num_deleted; |
+ FlushStore( |
+ base::BindOnce(&MayeRunDeleteCallback, weak_ptr_factory_.GetWeakPtr(), |
+ callback ? base::BindOnce(std::move(callback), num_deleted) |
+ : base::OnceClosure())); |
} |
-bool CookieMonster::SetCookieWithOptions(const GURL& url, |
+void CookieMonster::SetCookieWithOptions(const GURL& url, |
const std::string& cookie_line, |
- const CookieOptions& options) { |
+ const CookieOptions& options, |
+ SetCookiesCallback callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
if (!HasCookieableScheme(url)) { |
- return false; |
+ MaybeRunCookieCallback(std::move(callback), false); |
+ return; |
} |
- return SetCookieWithCreationTimeAndOptions(url, cookie_line, Time(), options); |
+ SetCookieWithCreationTimeAndOptions(url, cookie_line, Time(), options, |
+ std::move(callback)); |
} |
-std::string CookieMonster::GetCookiesWithOptions(const GURL& url, |
- const CookieOptions& options) { |
+void CookieMonster::GetCookiesWithOptions(const GURL& url, |
+ const CookieOptions& options, |
+ GetCookiesCallback callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- if (!HasCookieableScheme(url)) |
- return std::string(); |
+ std::string cookie_line; |
+ if (HasCookieableScheme(url)) { |
+ std::vector<CanonicalCookie*> cookies; |
+ FindCookiesForHostAndDomain(url, options, &cookies); |
+ std::sort(cookies.begin(), cookies.end(), CookieSorter); |
- std::vector<CanonicalCookie*> cookies; |
- FindCookiesForHostAndDomain(url, options, &cookies); |
- std::sort(cookies.begin(), cookies.end(), CookieSorter); |
+ cookie_line = BuildCookieLine(cookies); |
- std::string cookie_line = BuildCookieLine(cookies); |
- |
- VLOG(kVlogGetCookies) << "GetCookies() result: " << cookie_line; |
- |
- return cookie_line; |
+ VLOG(kVlogGetCookies) << "GetCookies() result: " << cookie_line; |
+ } |
+ MaybeRunCookieCallback(std::move(callback), cookie_line); |
} |
void CookieMonster::DeleteCookie(const GURL& url, |
- const std::string& cookie_name) { |
+ const std::string& cookie_name, |
+ base::OnceClosure callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- if (!HasCookieableScheme(url)) |
+ if (!HasCookieableScheme(url)) { |
+ // TODO(rdsmith): Would be good to provide a failure indication here. |
+ MaybeRunCookieCallback(std::move(callback)); |
return; |
+ } |
CookieOptions options; |
options.set_include_httponly(); |
@@ -1315,41 +890,57 @@ void CookieMonster::DeleteCookie(const GURL& url, |
InternalDeleteCookie(curit, true, DELETE_COOKIE_SINGLE); |
} |
} |
+ |
+ FlushStore(base::BindOnce(&MayeRunDeleteCallback, |
+ weak_ptr_factory_.GetWeakPtr(), |
+ // No callback null check needed as BindOnce |
+ // is not being called and MaybeRunDeleteCallback |
+ // has its own check. |
+ std::move(callback))); |
} |
-uint32_t CookieMonster::DeleteCanonicalCookie(const CanonicalCookie& cookie) { |
+void CookieMonster::DeleteCanonicalCookie(const CanonicalCookie& cookie, |
+ DeleteCallback callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
+ uint32_t result = 0u; |
for (CookieMapItPair its = cookies_.equal_range(GetKey(cookie.Domain())); |
its.first != its.second; ++its.first) { |
// The creation date acts as the unique index... |
if (its.first->second->CreationDate() == cookie.CreationDate()) { |
InternalDeleteCookie(its.first, true, DELETE_COOKIE_CANONICAL); |
- return 1u; |
+ result = 1u; |
+ break; |
} |
} |
- return 0u; |
+ FlushStore( |
+ base::BindOnce(&MayeRunDeleteCallback, weak_ptr_factory_.GetWeakPtr(), |
+ callback ? base::BindOnce(std::move(callback), result) |
+ : base::OnceClosure())); |
} |
-bool CookieMonster::SetCookieWithCreationTime(const GURL& url, |
- const std::string& cookie_line, |
- const base::Time& creation_time) { |
+void CookieMonster::SetCookieWithCreationTimeForTesting( |
+ const GURL& url, |
+ const std::string& cookie_line, |
+ const base::Time& creation_time, |
+ SetCookiesCallback callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK(!store_.get()) << "This method is only to be used by unit-tests."; |
if (!HasCookieableScheme(url)) { |
- return false; |
+ MaybeRunCookieCallback(std::move(callback), false); |
+ return; |
} |
MarkCookieStoreAsInitialized(); |
if (ShouldFetchAllCookiesWhenFetchingAnyCookie()) |
FetchAllCookiesIfNecessary(); |
- return SetCookieWithCreationTimeAndOptions(url, cookie_line, creation_time, |
- CookieOptions()); |
+ return SetCookieWithCreationTimeAndOptions( |
+ url, cookie_line, creation_time, CookieOptions(), std::move(callback)); |
} |
-uint32_t CookieMonster::DeleteSessionCookies() { |
+void CookieMonster::DeleteSessionCookies(DeleteCallback callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
uint32_t num_deleted = 0; |
@@ -1365,7 +956,10 @@ uint32_t CookieMonster::DeleteSessionCookies() { |
} |
} |
- return num_deleted; |
+ FlushStore( |
+ base::BindOnce(&MayeRunDeleteCallback, weak_ptr_factory_.GetWeakPtr(), |
+ callback ? base::BindOnce(std::move(callback), num_deleted) |
+ : base::OnceClosure())); |
} |
void CookieMonster::MarkCookieStoreAsInitialized() { |
@@ -1440,11 +1034,9 @@ void CookieMonster::OnKeyLoaded( |
// Run all tasks for the key. Note that running a task can result in multiple |
// tasks being added to the back of the deque. |
while (!tasks_pending_for_key->second.empty()) { |
- scoped_refptr<CookieMonsterTask> task = |
- tasks_pending_for_key->second.front(); |
+ base::OnceClosure task = std::move(tasks_pending_for_key->second.front()); |
tasks_pending_for_key->second.pop_front(); |
- |
- task->Run(); |
+ std::move(task).Run(); |
} |
tasks_pending_for_key_.erase(tasks_pending_for_key); |
@@ -1524,16 +1116,17 @@ void CookieMonster::InvokeQueue() { |
// Needed to prevent any recursively queued tasks from going back into the |
// per-key queues. |
seen_global_task_ = true; |
- for (const auto& tasks_for_key : tasks_pending_for_key_) { |
- tasks_pending_.insert(tasks_pending_.begin(), tasks_for_key.second.begin(), |
- tasks_for_key.second.end()); |
+ for (auto& tasks_for_key : tasks_pending_for_key_) { |
+ tasks_pending_.insert(tasks_pending_.begin(), |
+ std::make_move_iterator(tasks_for_key.second.begin()), |
+ std::make_move_iterator(tasks_for_key.second.end())); |
} |
tasks_pending_for_key_.clear(); |
while (!tasks_pending_.empty()) { |
- scoped_refptr<CookieMonsterTask> request_task = tasks_pending_.front(); |
+ base::OnceClosure request_task = std::move(tasks_pending_.front()); |
tasks_pending_.pop_front(); |
- request_task->Run(); |
+ std::move(request_task).Run(); |
} |
DCHECK(tasks_pending_for_key_.empty()); |
@@ -1779,11 +1372,12 @@ CookieMonster::CookieMap::iterator CookieMonster::InternalInsertCookie( |
return inserted; |
} |
-bool CookieMonster::SetCookieWithCreationTimeAndOptions( |
+void CookieMonster::SetCookieWithCreationTimeAndOptions( |
const GURL& url, |
const std::string& cookie_line, |
const Time& creation_time_or_null, |
- const CookieOptions& options) { |
+ const CookieOptions& options, |
+ SetCookiesCallback callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
VLOG(kVlogSetCookies) << "SetCookie() line: " << cookie_line; |
@@ -1799,19 +1393,23 @@ bool CookieMonster::SetCookieWithCreationTimeAndOptions( |
if (!cc.get()) { |
VLOG(kVlogSetCookies) << "WARNING: Failed to allocate CanonicalCookie"; |
- return false; |
+ MaybeRunCookieCallback(std::move(callback), false); |
+ return; |
} |
- return SetCanonicalCookie(std::move(cc), url.SchemeIsCryptographic(), |
- !options.exclude_httponly()); |
+ SetCanonicalCookie(std::move(cc), url.SchemeIsCryptographic(), |
+ !options.exclude_httponly(), std::move(callback)); |
} |
-bool CookieMonster::SetCanonicalCookie(std::unique_ptr<CanonicalCookie> cc, |
+void CookieMonster::SetCanonicalCookie(std::unique_ptr<CanonicalCookie> cc, |
bool secure_source, |
- bool modify_http_only) { |
+ bool modify_http_only, |
+ SetCookiesCallback callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- if (cc->IsSecure() && !secure_source) |
- return false; |
+ if (cc->IsSecure() && !secure_source) { |
+ MaybeRunCookieCallback(std::move(callback), false); |
+ return; |
+ } |
const std::string key(GetKey(cc->Domain())); |
@@ -1835,7 +1433,8 @@ bool CookieMonster::SetCanonicalCookie(std::unique_ptr<CanonicalCookie> cc, |
"insecure scheme"; |
VLOG(kVlogSetCookies) << error; |
- return false; |
+ MaybeRunCookieCallback(std::move(callback), false); |
+ return; |
} |
VLOG(kVlogSetCookies) << "SetCookie() key: " << key |
@@ -1877,11 +1476,42 @@ bool CookieMonster::SetCanonicalCookie(std::unique_ptr<CanonicalCookie> cc, |
// and we will purge the expired cookies in GetCookies(). |
GarbageCollect(creation_date, key); |
- return true; |
+ MaybeRunCookieCallback(std::move(callback), true); |
} |
-bool CookieMonster::SetAllCookies(const CookieList& list) { |
+void CookieMonster::SetAllCookies(CookieList list, |
+ SetCookiesCallback callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
+ CookieList positive_diff; |
+ CookieList negative_diff; |
+ |
+ CookieList old_cookies; |
+ old_cookies.reserve(cookies_.size()); |
+ for (const auto& cookie : cookies_) |
+ old_cookies.push_back(*cookie.second.get()); |
+ |
+ ComputeCookieDiff(&old_cookies, &list, &positive_diff, &negative_diff); |
+ |
+ for (const auto& cookie_to_delete : negative_diff) { |
+ for (CookieMapItPair its = |
+ cookies_.equal_range(GetKey(cookie_to_delete.Domain())); |
+ its.first != its.second; ++its.first) { |
+ // The creation date acts as the unique index... |
+ if (its.first->second->CreationDate() == |
+ cookie_to_delete.CreationDate()) { |
+ // TODO(rdsmith): DELETE_COOKIE_CANONICAL is incorrect and should |
+ // be changed. |
+ InternalDeleteCookie(its.first, true, DELETE_COOKIE_CANONICAL); |
+ break; |
+ } |
+ } |
+ } |
+ |
+ if (positive_diff.size() == 0) { |
+ MaybeRunCookieCallback(std::move(callback), true); |
+ return; |
+ } |
+ |
for (const auto& cookie : list) { |
const std::string key(GetKey(cookie.Domain())); |
Time creation_time = cookie.CreationDate(); |
@@ -1907,7 +1537,7 @@ bool CookieMonster::SetAllCookies(const CookieList& list) { |
// shouldn't have a return value. But it should also be deleted (see |
// https://codereview.chromium.org/2882063002/#msg64), which would |
// solve the return value problem. |
- return true; |
+ MaybeRunCookieCallback(std::move(callback), true); |
} |
void CookieMonster::InternalUpdateCookieAccessTime(CanonicalCookie* cc, |
@@ -2370,8 +2000,7 @@ Time CookieMonster::CurrentTime() { |
last_time_seen_.ToInternalValue() + 1)); |
} |
-void CookieMonster::DoCookieTask( |
- const scoped_refptr<CookieMonsterTask>& task_item) { |
+void CookieMonster::DoCookieCallback(base::OnceClosure callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
MarkCookieStoreAsInitialized(); |
@@ -2379,16 +2008,15 @@ void CookieMonster::DoCookieTask( |
seen_global_task_ = true; |
if (!finished_fetching_all_cookies_ && store_.get()) { |
- tasks_pending_.push_back(task_item); |
+ tasks_pending_.push_back(std::move(callback)); |
return; |
} |
- task_item->Run(); |
+ std::move(callback).Run(); |
} |
-void CookieMonster::DoCookieTaskForURL( |
- const scoped_refptr<CookieMonsterTask>& task_item, |
- const GURL& url) { |
+void CookieMonster::DoCookieCallbackForURL(base::OnceClosure callback, |
+ const GURL& url) { |
MarkCookieStoreAsInitialized(); |
if (ShouldFetchAllCookiesWhenFetchingAnyCookie()) |
FetchAllCookiesIfNecessary(); |
@@ -2401,31 +2029,29 @@ void CookieMonster::DoCookieTaskForURL( |
// the global queue, |tasks_pending_| may be empty, which is why another |
// bool is needed. |
if (seen_global_task_) { |
- tasks_pending_.push_back(task_item); |
+ tasks_pending_.push_back(std::move(callback)); |
return; |
} |
// Checks if the domain key has been loaded. |
std::string key(cookie_util::GetEffectiveDomain(url.scheme(), url.host())); |
if (keys_loaded_.find(key) == keys_loaded_.end()) { |
- std::map<std::string, |
- std::deque<scoped_refptr<CookieMonsterTask>>>::iterator it = |
+ std::map<std::string, std::deque<base::OnceClosure>>::iterator it = |
tasks_pending_for_key_.find(key); |
if (it == tasks_pending_for_key_.end()) { |
store_->LoadCookiesForKey( |
key, base::Bind(&CookieMonster::OnKeyLoaded, |
weak_ptr_factory_.GetWeakPtr(), key)); |
it = tasks_pending_for_key_ |
- .insert(std::make_pair( |
- key, std::deque<scoped_refptr<CookieMonsterTask>>())) |
+ .insert(std::make_pair(key, std::deque<base::OnceClosure>())) |
.first; |
} |
- it->second.push_back(task_item); |
+ it->second.push_back(std::move(callback)); |
return; |
} |
} |
- task_item->Run(); |
+ std::move(callback).Run(); |
} |
void CookieMonster::ComputeCookieDiff(CookieList* old_cookies, |
@@ -2463,11 +2089,6 @@ void CookieMonster::ComputeCookieDiff(CookieList* old_cookies, |
FullDiffCookieSorter); |
} |
-void CookieMonster::RunCallback(base::OnceClosure callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- std::move(callback).Run(); |
-} |
- |
void CookieMonster::RunCookieChangedCallbacks(const CanonicalCookie& cookie, |
ChangeCause cause) { |
DCHECK(thread_checker_.CalledOnValidThread()); |