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. |