Chromium Code Reviews| Index: chrome/browser/browsing_data_remover.cc |
| =================================================================== |
| --- chrome/browser/browsing_data_remover.cc (revision 93449) |
| +++ 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" |
| @@ -79,6 +80,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), |
| @@ -109,6 +111,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), |
| @@ -123,6 +126,7 @@ |
| void BrowsingDataRemover::Remove(int remove_mask) { |
| DCHECK(!removing_); |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| removing_ = true; |
| if (remove_mask & REMOVE_HISTORY) { |
| @@ -198,14 +202,14 @@ |
| if (remove_mask & REMOVE_COOKIES) { |
| UserMetrics::RecordAction(UserMetricsAction("ClearBrowsingData_Cookies")); |
| // Since we are running on the UI thread don't call GetURLRequestContext(). |
| - net::CookieMonster* cookie_monster = NULL; |
| net::URLRequestContextGetter* rq_context = profile_->GetRequestContext(); |
| if (rq_context) { |
| - cookie_monster = rq_context->DONTUSEME_GetCookieStore()-> |
| - GetCookieMonster(); |
| + waiting_for_clear_cookies_ = true; |
| + BrowserThread::PostTask( |
| + BrowserThread::IO, FROM_HERE, |
| + base::Bind(&BrowsingDataRemover::ClearCookieOnIOThread, |
| + base::Unretained(this), base::Unretained(rq_context))); |
| } |
| - if (cookie_monster) |
| - cookie_monster->DeleteAllCreatedBetween(delete_begin_, delete_end_, true); |
| // 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 |
| @@ -633,3 +637,31 @@ |
| waiting_for_clear_lso_data_ = false; |
| NotifyAndDeleteIfDone(); |
| } |
| + |
| +void BrowsingDataRemover::OnClearedCookie(int num_deleted) { |
|
erikwright (departed)
2011/07/25 16:27:16
nit: OnClearedCookie->OnClearedCookies
|
| + if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
| + BrowserThread::PostTask( |
| + BrowserThread::UI, FROM_HERE, |
| + base::Bind(&BrowsingDataRemover::OnClearedCookie, |
| + base::Unretained(this), num_deleted)); |
| + return; |
| + } |
| + |
| + waiting_for_clear_cookies_ = false; |
| + NotifyAndDeleteIfDone(); |
| +} |
| + |
| +void BrowsingDataRemover::ClearCookieOnIOThread( |
|
erikwright (departed)
2011/07/25 16:27:16
nit: ClearCookie->ClearCookies
|
| + net::URLRequestContextGetter* rq_context) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + net::CookieMonster* cookie_monster = rq_context-> |
| + GetURLRequestContext()->cookie_store()->GetCookieMonster(); |
| + if (cookie_monster) { |
| + cookie_monster->DeleteAllCreatedBetweenAsync( |
| + delete_begin_, delete_end_, true, |
| + base::Bind(&BrowsingDataRemover::OnClearedCookie, |
| + base::Unretained(this))); |
| + } else { |
| + OnClearedCookie(0); |
| + } |
| +} |