Chromium Code Reviews| Index: chrome/browser/browsing_data_remover.cc |
| =================================================================== |
| --- chrome/browser/browsing_data_remover.cc (revision 91122) |
| +++ chrome/browser/browsing_data_remover.cc (working copy) |
| @@ -7,6 +7,7 @@ |
| #include <map> |
| #include <set> |
| +#include "base/bind.h" |
| #include "base/callback.h" |
| #include "base/file_util.h" |
| #include "base/platform_file.h" |
| @@ -78,6 +79,7 @@ |
| waiting_for_clear_databases_(false), |
| waiting_for_clear_history_(false), |
| waiting_for_clear_networking_history_(false), |
| + waiting_for_clear_cookies_(false), |
| waiting_for_clear_cache_(false), |
| waiting_for_clear_appcache_(false), |
| waiting_for_clear_gears_data_(false), |
| @@ -108,6 +110,7 @@ |
| waiting_for_clear_databases_(false), |
| waiting_for_clear_history_(false), |
| waiting_for_clear_networking_history_(false), |
| + waiting_for_clear_cookies_(false), |
| waiting_for_clear_cache_(false), |
| waiting_for_clear_appcache_(false), |
| waiting_for_clear_lso_data_(false), |
| @@ -203,8 +206,13 @@ |
| cookie_monster = rq_context->DONTUSEME_GetCookieStore()-> |
| GetCookieMonster(); |
| } |
| - if (cookie_monster) |
| - cookie_monster->DeleteAllCreatedBetween(delete_begin_, delete_end_, true); |
| + if (cookie_monster) { |
| + waiting_for_clear_cookies_ = true; |
| + cookie_monster->DeleteAllCreatedBetween( |
| + delete_begin_, delete_end_, true, |
| + base::Bind(&BrowsingDataRemover::OnCookiesDeleted, |
| + base::Unretained(this))); |
| + } |
| // REMOVE_COOKIES is actually "cookies and other site data" so we make sure |
| // to remove other data such local databases, STS state, etc. These only can |
| @@ -644,3 +652,16 @@ |
| waiting_for_clear_lso_data_ = false; |
| NotifyAndDeleteIfDone(); |
| } |
| + |
| +void BrowsingDataRemover::OnCookiesDeleted(int num_deleted) { |
| + if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
|
erikwright (departed)
2011/07/04 16:47:33
The CookieStore guarantees invocation of callbacks
|
| + bool result = BrowserThread::PostTask( |
| + BrowserThread::UI, FROM_HERE, |
| + NewRunnableMethod(this, &BrowsingDataRemover::OnCookiesDeleted, |
| + num_deleted)); |
| + DCHECK(result); |
| + return; |
| + } |
| + waiting_for_clear_cookies_ = false; |
| + NotifyAndDeleteIfDone(); |
| +} |