Index: chrome/browser/browsing_data/browsing_data_remover.cc |
diff --git a/chrome/browser/browsing_data/browsing_data_remover.cc b/chrome/browser/browsing_data/browsing_data_remover.cc |
index 3d7bd207c0d6b67091649f96e5ae059118f334c0..1539390533a6e305ecdf71e768859084844bb350 100644 |
--- a/chrome/browser/browsing_data/browsing_data_remover.cc |
+++ b/chrome/browser/browsing_data/browsing_data_remover.cc |
@@ -16,6 +16,7 @@ |
#include "chrome/browser/autofill/personal_data_manager_factory.h" |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/browsing_data/browsing_data_helper.h" |
+#include "chrome/browser/browsing_data/storage_partition_http_cache_data_remover.h" |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/domain_reliability/service_factory.h" |
#include "chrome/browser/download/download_prefs.h" |
@@ -54,28 +55,20 @@ |
#include "components/search_engines/template_url_service.h" |
#include "components/web_cache/browser/web_cache_manager.h" |
#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/dom_storage_context.h" |
#include "content/public/browser/download_manager.h" |
-#include "content/public/browser/local_storage_usage_info.h" |
#include "content/public/browser/notification_service.h" |
#include "content/public/browser/plugin_data_remover.h" |
-#include "content/public/browser/session_storage_usage_info.h" |
#include "content/public/browser/ssl_host_state_delegate.h" |
#include "content/public/browser/storage_partition.h" |
#include "content/public/browser/user_metrics.h" |
#include "net/base/net_errors.h" |
-#include "net/base/sdch_manager.h" |
#include "net/cookies/cookie_store.h" |
-#include "net/disk_cache/disk_cache.h" |
-#include "net/http/http_cache.h" |
#include "net/http/transport_security_state.h" |
#include "net/ssl/channel_id_service.h" |
#include "net/ssl/channel_id_store.h" |
#include "net/url_request/url_request_context.h" |
#include "net/url_request/url_request_context_getter.h" |
-#include "storage/browser/quota/quota_manager.h" |
#include "storage/browser/quota/special_storage_policy.h" |
-#include "storage/common/quota/quota_types.h" |
#if defined(OS_CHROMEOS) |
#include "chrome/browser/chromeos/profiles/profile_helper.h" |
@@ -208,8 +201,6 @@ BrowsingDataRemover::BrowsingDataRemover(Profile* profile, |
: profile_(profile), |
delete_begin_(delete_begin), |
delete_end_(delete_end), |
- next_cache_state_(STATE_NONE), |
- cache_(NULL), |
main_context_getter_(profile->GetRequestContext()), |
media_context_getter_(profile->GetMediaRequestContext()), |
deauthorize_content_licenses_request_id_(0), |
@@ -614,14 +605,15 @@ void BrowsingDataRemover::RemoveImpl(int remove_mask, |
// Tell the renderers to clear their cache. |
web_cache::WebCacheManager::GetInstance()->ClearCache(); |
- // Invoke DoClearCache on the IO thread. |
- waiting_for_clear_cache_ = true; |
content::RecordAction(UserMetricsAction("ClearBrowsingData_Cache")); |
- BrowserThread::PostTask( |
- BrowserThread::IO, FROM_HERE, |
- base::Bind(&BrowsingDataRemover::ClearCacheOnIOThread, |
- base::Unretained(this))); |
+ waiting_for_clear_cache_ = true; |
+ // StoragePartitionHttpCacheDataRemover deletes itself when it is done. |
+ StoragePartitionHttpCacheDataRemover::CreateForRange( |
+ BrowserContext::GetDefaultStoragePartition(profile_), delete_begin_, |
+ delete_end_) |
+ ->Remove(base::Bind(&BrowsingDataRemover::ClearedCache, |
+ base::Unretained(this))); |
#if !defined(DISABLE_NACL) |
waiting_for_clear_nacl_cache_ = true; |
@@ -963,98 +955,6 @@ void BrowsingDataRemover::ClearedCache() { |
NotifyAndDeleteIfDone(); |
} |
-void BrowsingDataRemover::ClearCacheOnIOThread() { |
- // This function should be called on the IO thread. |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- DCHECK_EQ(STATE_NONE, next_cache_state_); |
- DCHECK(main_context_getter_.get()); |
- DCHECK(media_context_getter_.get()); |
- |
- next_cache_state_ = STATE_CREATE_MAIN; |
- DoClearCache(net::OK); |
-} |
- |
-// The expected state sequence is STATE_NONE --> STATE_CREATE_MAIN --> |
-// STATE_DELETE_MAIN --> STATE_CREATE_MEDIA --> STATE_DELETE_MEDIA --> |
-// STATE_DONE, and any errors are ignored. |
-void BrowsingDataRemover::DoClearCache(int rv) { |
- DCHECK_NE(STATE_NONE, next_cache_state_); |
- |
- while (rv != net::ERR_IO_PENDING && next_cache_state_ != STATE_NONE) { |
- switch (next_cache_state_) { |
- case STATE_CREATE_MAIN: |
- case STATE_CREATE_MEDIA: { |
- // Get a pointer to the cache. |
- net::URLRequestContextGetter* getter = |
- (next_cache_state_ == STATE_CREATE_MAIN) |
- ? main_context_getter_.get() |
- : media_context_getter_.get(); |
- net::HttpCache* http_cache = |
- getter->GetURLRequestContext()->http_transaction_factory()-> |
- GetCache(); |
- |
- next_cache_state_ = (next_cache_state_ == STATE_CREATE_MAIN) ? |
- STATE_DELETE_MAIN : STATE_DELETE_MEDIA; |
- |
- // Clear QUIC server information from memory and the disk cache. |
- http_cache->GetSession()->quic_stream_factory()-> |
- ClearCachedStatesInCryptoConfig(); |
- |
- // Clear SDCH dictionary state. |
- net::SdchManager* sdch_manager = |
- getter->GetURLRequestContext()->sdch_manager(); |
- // The test is probably overkill, since chrome should always have an |
- // SdchManager. But in general the URLRequestContext is *not* |
- // guaranteed to have an SdchManager, so checking is wise. |
- if (sdch_manager) |
- sdch_manager->ClearData(); |
- |
- rv = http_cache->GetBackend( |
- &cache_, base::Bind(&BrowsingDataRemover::DoClearCache, |
- base::Unretained(this))); |
- break; |
- } |
- case STATE_DELETE_MAIN: |
- case STATE_DELETE_MEDIA: { |
- next_cache_state_ = (next_cache_state_ == STATE_DELETE_MAIN) ? |
- STATE_CREATE_MEDIA : STATE_DONE; |
- |
- // |cache_| can be null if it cannot be initialized. |
- if (cache_) { |
- if (delete_begin_.is_null()) { |
- rv = cache_->DoomAllEntries( |
- base::Bind(&BrowsingDataRemover::DoClearCache, |
- base::Unretained(this))); |
- } else { |
- rv = cache_->DoomEntriesBetween( |
- delete_begin_, delete_end_, |
- base::Bind(&BrowsingDataRemover::DoClearCache, |
- base::Unretained(this))); |
- } |
- cache_ = NULL; |
- } |
- break; |
- } |
- case STATE_DONE: { |
- cache_ = NULL; |
- next_cache_state_ = STATE_NONE; |
- |
- // Notify the UI thread that we are done. |
- BrowserThread::PostTask( |
- BrowserThread::UI, FROM_HERE, |
- base::Bind(&BrowsingDataRemover::ClearedCache, |
- base::Unretained(this))); |
- return; |
- } |
- default: { |
- NOTREACHED() << "bad state"; |
- next_cache_state_ = STATE_NONE; // Stop looping. |
- return; |
- } |
- } |
- } |
-} |
- |
#if !defined(DISABLE_NACL) |
void BrowsingDataRemover::ClearedNaClCache() { |
// This function should be called on the UI thread. |