Chromium Code Reviews| Index: net/cookies/cookie_monster.cc |
| diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc |
| index f24637735fd44a3be289b58bec803081a1e25739..0abbd90d9a04fd4060e130beec6679cb50135ebf 100644 |
| --- a/net/cookies/cookie_monster.cc |
| +++ b/net/cookies/cookie_monster.cc |
| @@ -530,51 +530,98 @@ void CookieMonster::GetAllCookiesForURLWithOptionsTask::Run() { |
| } |
| } |
| -// Task class for DeleteAll call. |
| -class CookieMonster::DeleteAllTask : public CookieMonster::CookieMonsterTask { |
| +// Base task class for Delete*Task. |
| +template <typename Callback, typename Result> |
| +class CookieMonster::DeleteTask : public CookieMonster::CookieMonsterTask { |
| public: |
| - DeleteAllTask(CookieMonster* cookie_monster, |
| - const CookieMonster::DeleteCallback& callback) |
| + DeleteTask(CookieMonster* cookie_monster, |
| + const Callback& callback) |
| : CookieMonsterTask(cookie_monster), |
| callback_(callback) { |
| } |
| + // Runs the delete task and returns a result. |
| + virtual Result RunDeleteTask() = 0; |
| + |
| // CookieMonster::CookieMonsterTask: |
| virtual void Run() OVERRIDE; |
| + void FlushDone(const base::Closure& callback); |
| + |
| + private: |
| + Callback callback_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(DeleteTask); |
| +}; |
| + |
| +template <typename Callback, typename Result> |
| +base::Closure RunDeleteTaskAndBindCallback( |
| + CookieMonster::DeleteTask<Callback, Result>* task, |
| + const Callback& callback) { |
| + return base::Bind(callback, task->RunDeleteTask()); |
| +} |
| + |
| +template <typename Callback> |
|
philipj_slow
2013/09/05 14:39:12
I wanted to do this:
template <>
base::Closure Ru
erikwright (departed)
2013/09/05 20:28:18
Presumably in cookie_monster.h the declaration of
|
| +base::Closure RunDeleteTaskAndBindCallback( |
| + CookieMonster::DeleteTask<Callback, void>* task, |
| + const Callback& callback) { |
| + task->RunDeleteTask(); |
| + return callback; |
| +} |
| + |
| +template <typename Callback, typename Result> |
| +void CookieMonster::DeleteTask<Callback, Result>::Run() { |
| + this->cookie_monster()->FlushStore( |
| + base::Bind(&CookieMonster::DeleteTask<Callback, Result>::FlushDone, this, |
| + RunDeleteTaskAndBindCallback(this, callback_))); |
| +} |
| + |
| +template <typename Callback, typename Result> |
| +void CookieMonster::DeleteTask<Callback, Result>::FlushDone( |
| + const base::Closure& callback) { |
| + if (!callback.is_null()) { |
| + this->InvokeCallback(callback); |
| + } |
| +} |
| + |
| +// Task class for DeleteAll call. |
| +class CookieMonster::DeleteAllTask |
| + : public CookieMonster::DeleteTask<CookieMonster::DeleteCallback, int> { |
| + public: |
| + DeleteAllTask(CookieMonster* cookie_monster, |
| + const CookieMonster::DeleteCallback& callback) |
| + : DeleteTask(cookie_monster, callback) { |
| + } |
| + |
| + // CookieMonster::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 { |
| + : public CookieMonster::DeleteTask<CookieMonster::DeleteCallback, int> { |
| public: |
| DeleteAllCreatedBetweenTask(CookieMonster* cookie_monster, |
| const Time& delete_begin, |
| const Time& delete_end, |
| const CookieMonster::DeleteCallback& callback) |
| - : CookieMonsterTask(cookie_monster), |
| + : DeleteTask(cookie_monster, callback), |
| delete_begin_(delete_begin), |
| - delete_end_(delete_end), |
| - callback_(callback) { |
| + delete_end_(delete_end) { |
| } |
| - // CookieMonster::CookieMonsterTask: |
| - virtual void Run() OVERRIDE; |
| + // CookieMonster::DeleteTask: |
| + virtual int RunDeleteTask() OVERRIDE; |
| protected: |
| virtual ~DeleteAllCreatedBetweenTask() {} |
| @@ -582,56 +629,45 @@ 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 { |
| + : public CookieMonster::DeleteTask<CookieMonster::DeleteCallback, int> { |
| public: |
| DeleteAllForHostTask(CookieMonster* cookie_monster, |
| const GURL& url, |
| const CookieMonster::DeleteCallback& callback) |
| - : CookieMonsterTask(cookie_monster), |
| - url_(url), |
| - callback_(callback) { |
| + : DeleteTask(cookie_monster, callback), |
| + url_(url) { |
| } |
| - // CookieMonster::CookieMonsterTask: |
| - virtual void Run() OVERRIDE; |
| + // CookieMonster::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 CookieMonster::DeleteTask<CookieMonster::DeleteCallback, int> { |
| public: |
| DeleteAllCreatedBetweenForHostTask( |
| CookieMonster* cookie_monster, |
| @@ -639,15 +675,14 @@ class CookieMonster::DeleteAllCreatedBetweenForHostTask |
| Time delete_end, |
| const GURL& url, |
| const CookieMonster::DeleteCallback& callback) |
| - : CookieMonsterTask(cookie_monster), |
| + : DeleteTask(cookie_monster, callback), |
| delete_begin_(delete_begin), |
| delete_end_(delete_end), |
| - url_(url), |
| - callback_(callback) { |
| + url_(url) { |
| } |
| - // CookieMonster::CookieMonsterTask: |
| - virtual void Run() OVERRIDE; |
| + // CookieMonster::DeleteTask: |
| + virtual int RunDeleteTask() OVERRIDE; |
| protected: |
| virtual ~DeleteAllCreatedBetweenForHostTask() {} |
| @@ -656,51 +691,40 @@ 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 { |
| + : public CookieMonster::DeleteTask<CookieMonster::DeleteCookieCallback, bool> { |
| public: |
| DeleteCanonicalCookieTask(CookieMonster* cookie_monster, |
| const CanonicalCookie& cookie, |
| const CookieMonster::DeleteCookieCallback& callback) |
| - : CookieMonsterTask(cookie_monster), |
| - cookie_(cookie), |
| - callback_(callback) { |
| + : DeleteTask(cookie_monster, callback), |
| + cookie_(cookie) { |
| } |
| - // CookieMonster::CookieMonsterTask: |
| - virtual void Run() OVERRIDE; |
| + // CookieMonster::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. |
| @@ -782,19 +806,19 @@ void CookieMonster::GetCookiesWithOptionsTask::Run() { |
| // Task class for DeleteCookie call. |
| class CookieMonster::DeleteCookieTask |
| - : public CookieMonster::CookieMonsterTask { |
| + : public CookieMonster::DeleteTask<base::Closure, void> { |
| public: |
| DeleteCookieTask(CookieMonster* cookie_monster, |
| const GURL& url, |
| const std::string& cookie_name, |
| const base::Closure& callback) |
| - : CookieMonsterTask(cookie_monster), |
| + : DeleteTask(cookie_monster, callback), |
| url_(url), |
| - cookie_name_(cookie_name), |
| - callback_(callback) { } |
| + cookie_name_(cookie_name) { |
| + } |
| - // CookieMonster::CookieMonsterTask: |
| - virtual void Run() OVERRIDE; |
| + // CookieMonster::DeleteTask: |
| + virtual void RunDeleteTask() OVERRIDE; |
| protected: |
| virtual ~DeleteCookieTask() {} |
| @@ -802,45 +826,36 @@ 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 { |
| + : public CookieMonster::DeleteTask<CookieMonster::DeleteCallback, int> { |
| public: |
| DeleteSessionCookiesTask(CookieMonster* cookie_monster, |
| const CookieMonster::DeleteCallback& callback) |
| - : CookieMonsterTask(cookie_monster), callback_(callback) { |
| + : DeleteTask(cookie_monster, callback) { |
| } |
| - // CookieMonster::CookieMonsterTask: |
| - virtual void Run() OVERRIDE; |
| + // CookieMonster::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. |