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); |
+ } |
+} |