diff options
author | ycxiao@chromium.org <ycxiao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-09 19:32:52 +0000 |
---|---|---|
committer | ycxiao@chromium.org <ycxiao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-09 19:32:52 +0000 |
commit | dd1635341d7d6f14c81ae106870753fbfc16de74 (patch) | |
tree | 4cfc9e03ad6e1f2e2abca3f257ae6c97369daa2b /chrome/browser/browsing_data_remover.cc | |
parent | 10ff3b3bb6129b1706b5608d7bd97f44839e3d6a (diff) | |
download | chromium_src-dd1635341d7d6f14c81ae106870753fbfc16de74.zip chromium_src-dd1635341d7d6f14c81ae106870753fbfc16de74.tar.gz chromium_src-dd1635341d7d6f14c81ae106870753fbfc16de74.tar.bz2 |
Update BrowsingDataRemover with the asynchronous CookieMonster API.
BUG=XXXX
TEST=XXXX
Review URL: http://codereview.chromium.org/7210034
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@96035 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browsing_data_remover.cc')
-rw-r--r-- | chrome/browser/browsing_data_remover.cc | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/chrome/browser/browsing_data_remover.cc b/chrome/browser/browsing_data_remover.cc index f859a06..a84ca88 100644 --- a/chrome/browser/browsing_data_remover.cc +++ b/chrome/browser/browsing_data_remover.cc @@ -7,6 +7,7 @@ #include <map> #include <set> +#include "base/bind.h" #include "base/callback.h" #include "base/file_util.h" #include "base/logging.h" @@ -71,6 +72,7 @@ BrowsingDataRemover::BrowsingDataRemover(Profile* profile, waiting_for_clear_history_(false), waiting_for_clear_quota_managed_data_(false), waiting_for_clear_networking_history_(false), + waiting_for_clear_cookies_(false), waiting_for_clear_cache_(false), waiting_for_clear_lso_data_(false) { DCHECK(profile); @@ -93,6 +95,7 @@ BrowsingDataRemover::BrowsingDataRemover(Profile* profile, waiting_for_clear_history_(false), waiting_for_clear_quota_managed_data_(false), waiting_for_clear_networking_history_(false), + waiting_for_clear_cookies_(false), waiting_for_clear_cache_(false), waiting_for_clear_lso_data_(false) { DCHECK(profile); @@ -104,6 +107,7 @@ BrowsingDataRemover::~BrowsingDataRemover() { void BrowsingDataRemover::Remove(int remove_mask) { DCHECK(!removing_); + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); removing_ = true; if (remove_mask & REMOVE_HISTORY) { @@ -179,14 +183,14 @@ void BrowsingDataRemover::Remove(int remove_mask) { 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::ClearCookiesOnIOThread, + 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 @@ -532,3 +536,31 @@ void BrowsingDataRemover::OnWaitableEventSignaled( waiting_for_clear_lso_data_ = false; NotifyAndDeleteIfDone(); } + +void BrowsingDataRemover::OnClearedCookies(int num_deleted) { + if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, + base::Bind(&BrowsingDataRemover::OnClearedCookies, + base::Unretained(this), num_deleted)); + return; + } + + waiting_for_clear_cookies_ = false; + NotifyAndDeleteIfDone(); +} + +void BrowsingDataRemover::ClearCookiesOnIOThread( + 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::OnClearedCookies, + base::Unretained(this))); + } else { + OnClearedCookies(0); + } +} |