Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Side by Side Diff: chrome/browser/browsing_data/browsing_data_remover.cc

Issue 1033013003: Refactor http cache removing from a StoragePartition into separate class: (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/browsing_data/browsing_data_remover.h" 5 #include "chrome/browser/browsing_data/browsing_data_remover.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/bind_helpers.h" 12 #include "base/bind_helpers.h"
13 #include "base/callback.h" 13 #include "base/callback.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/prefs/pref_service.h" 15 #include "base/prefs/pref_service.h"
16 #include "chrome/browser/autofill/personal_data_manager_factory.h" 16 #include "chrome/browser/autofill/personal_data_manager_factory.h"
17 #include "chrome/browser/browser_process.h" 17 #include "chrome/browser/browser_process.h"
18 #include "chrome/browser/browsing_data/browsing_data_helper.h" 18 #include "chrome/browser/browsing_data/browsing_data_helper.h"
19 #include "chrome/browser/browsing_data/storage_partition_http_cache_data_remover .h"
19 #include "chrome/browser/chrome_notification_types.h" 20 #include "chrome/browser/chrome_notification_types.h"
20 #include "chrome/browser/domain_reliability/service_factory.h" 21 #include "chrome/browser/domain_reliability/service_factory.h"
21 #include "chrome/browser/download/download_prefs.h" 22 #include "chrome/browser/download/download_prefs.h"
22 #include "chrome/browser/download/download_service_factory.h" 23 #include "chrome/browser/download/download_service_factory.h"
23 #include "chrome/browser/history/history_service_factory.h" 24 #include "chrome/browser/history/history_service_factory.h"
24 #include "chrome/browser/history/web_history_service_factory.h" 25 #include "chrome/browser/history/web_history_service_factory.h"
25 #include "chrome/browser/io_thread.h" 26 #include "chrome/browser/io_thread.h"
26 #include "chrome/browser/media/media_device_id_salt.h" 27 #include "chrome/browser/media/media_device_id_salt.h"
27 #include "chrome/browser/net/predictor.h" 28 #include "chrome/browser/net/predictor.h"
28 #include "chrome/browser/password_manager/password_store_factory.h" 29 #include "chrome/browser/password_manager/password_store_factory.h"
(...skipping 18 matching lines...) Expand all
47 #include "components/domain_reliability/service.h" 48 #include "components/domain_reliability/service.h"
48 #include "components/history/core/browser/history_service.h" 49 #include "components/history/core/browser/history_service.h"
49 #include "components/nacl/browser/nacl_browser.h" 50 #include "components/nacl/browser/nacl_browser.h"
50 #include "components/nacl/browser/pnacl_host.h" 51 #include "components/nacl/browser/pnacl_host.h"
51 #include "components/password_manager/core/browser/password_store.h" 52 #include "components/password_manager/core/browser/password_store.h"
52 #include "components/power/origin_power_map.h" 53 #include "components/power/origin_power_map.h"
53 #include "components/power/origin_power_map_factory.h" 54 #include "components/power/origin_power_map_factory.h"
54 #include "components/search_engines/template_url_service.h" 55 #include "components/search_engines/template_url_service.h"
55 #include "components/web_cache/browser/web_cache_manager.h" 56 #include "components/web_cache/browser/web_cache_manager.h"
56 #include "content/public/browser/browser_thread.h" 57 #include "content/public/browser/browser_thread.h"
57 #include "content/public/browser/dom_storage_context.h"
58 #include "content/public/browser/download_manager.h" 58 #include "content/public/browser/download_manager.h"
59 #include "content/public/browser/local_storage_usage_info.h"
60 #include "content/public/browser/notification_service.h" 59 #include "content/public/browser/notification_service.h"
61 #include "content/public/browser/plugin_data_remover.h" 60 #include "content/public/browser/plugin_data_remover.h"
62 #include "content/public/browser/session_storage_usage_info.h"
63 #include "content/public/browser/ssl_host_state_delegate.h" 61 #include "content/public/browser/ssl_host_state_delegate.h"
64 #include "content/public/browser/storage_partition.h" 62 #include "content/public/browser/storage_partition.h"
65 #include "content/public/browser/user_metrics.h" 63 #include "content/public/browser/user_metrics.h"
66 #include "net/base/net_errors.h" 64 #include "net/base/net_errors.h"
67 #include "net/base/sdch_manager.h"
68 #include "net/cookies/cookie_store.h" 65 #include "net/cookies/cookie_store.h"
69 #include "net/disk_cache/disk_cache.h"
70 #include "net/http/http_cache.h"
71 #include "net/http/transport_security_state.h" 66 #include "net/http/transport_security_state.h"
72 #include "net/ssl/channel_id_service.h" 67 #include "net/ssl/channel_id_service.h"
73 #include "net/ssl/channel_id_store.h" 68 #include "net/ssl/channel_id_store.h"
74 #include "net/url_request/url_request_context.h" 69 #include "net/url_request/url_request_context.h"
75 #include "net/url_request/url_request_context_getter.h" 70 #include "net/url_request/url_request_context_getter.h"
76 #include "storage/browser/quota/quota_manager.h"
77 #include "storage/browser/quota/special_storage_policy.h" 71 #include "storage/browser/quota/special_storage_policy.h"
78 #include "storage/common/quota/quota_types.h"
79 72
80 #if defined(OS_CHROMEOS) 73 #if defined(OS_CHROMEOS)
81 #include "chrome/browser/chromeos/profiles/profile_helper.h" 74 #include "chrome/browser/chromeos/profiles/profile_helper.h"
82 #include "chromeos/attestation/attestation_constants.h" 75 #include "chromeos/attestation/attestation_constants.h"
83 #include "chromeos/dbus/cryptohome_client.h" 76 #include "chromeos/dbus/cryptohome_client.h"
84 #include "chromeos/dbus/dbus_thread_manager.h" 77 #include "chromeos/dbus/dbus_thread_manager.h"
85 #include "components/user_manager/user.h" 78 #include "components/user_manager/user.h"
86 #endif 79 #endif
87 80
88 #if defined(ENABLE_EXTENSIONS) 81 #if defined(ENABLE_EXTENSIONS)
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 BrowsingDataRemover::CalculateBeginDeleteTime(period), 194 BrowsingDataRemover::CalculateBeginDeleteTime(period),
202 base::Time::Max()); 195 base::Time::Max());
203 } 196 }
204 197
205 BrowsingDataRemover::BrowsingDataRemover(Profile* profile, 198 BrowsingDataRemover::BrowsingDataRemover(Profile* profile,
206 base::Time delete_begin, 199 base::Time delete_begin,
207 base::Time delete_end) 200 base::Time delete_end)
208 : profile_(profile), 201 : profile_(profile),
209 delete_begin_(delete_begin), 202 delete_begin_(delete_begin),
210 delete_end_(delete_end), 203 delete_end_(delete_end),
211 next_cache_state_(STATE_NONE),
212 cache_(NULL),
213 main_context_getter_(profile->GetRequestContext()), 204 main_context_getter_(profile->GetRequestContext()),
214 media_context_getter_(profile->GetMediaRequestContext()), 205 media_context_getter_(profile->GetMediaRequestContext()),
215 deauthorize_content_licenses_request_id_(0), 206 deauthorize_content_licenses_request_id_(0),
216 waiting_for_clear_autofill_origin_urls_(false), 207 waiting_for_clear_autofill_origin_urls_(false),
217 waiting_for_clear_cache_(false), 208 waiting_for_clear_cache_(false),
218 waiting_for_clear_channel_ids_(false), 209 waiting_for_clear_channel_ids_(false),
219 waiting_for_clear_content_licenses_(false), 210 waiting_for_clear_content_licenses_(false),
220 waiting_for_clear_cookies_count_(0), 211 waiting_for_clear_cookies_count_(0),
221 waiting_for_clear_domain_reliability_monitor_(false), 212 waiting_for_clear_domain_reliability_monitor_(false),
222 waiting_for_clear_form_(false), 213 waiting_for_clear_form_(false),
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 autofill::PersonalDataManagerFactory::GetForProfile(profile_); 598 autofill::PersonalDataManagerFactory::GetForProfile(profile_);
608 if (data_manager) 599 if (data_manager)
609 data_manager->Refresh(); 600 data_manager->Refresh();
610 } 601 }
611 } 602 }
612 603
613 if (remove_mask & REMOVE_CACHE) { 604 if (remove_mask & REMOVE_CACHE) {
614 // Tell the renderers to clear their cache. 605 // Tell the renderers to clear their cache.
615 web_cache::WebCacheManager::GetInstance()->ClearCache(); 606 web_cache::WebCacheManager::GetInstance()->ClearCache();
616 607
617 // Invoke DoClearCache on the IO thread.
618 waiting_for_clear_cache_ = true;
619 content::RecordAction(UserMetricsAction("ClearBrowsingData_Cache")); 608 content::RecordAction(UserMetricsAction("ClearBrowsingData_Cache"));
620 609
621 BrowserThread::PostTask( 610 waiting_for_clear_cache_ = true;
622 BrowserThread::IO, FROM_HERE, 611 // StoragePartitionHttpCacheDataRemover deletes itself when it is done.
623 base::Bind(&BrowsingDataRemover::ClearCacheOnIOThread, 612 StoragePartitionHttpCacheDataRemover::CreateForRange(
624 base::Unretained(this))); 613 BrowserContext::GetDefaultStoragePartition(profile_), delete_begin_,
614 delete_end_)
615 ->Remove(base::Bind(&BrowsingDataRemover::ClearedCache,
616 base::Unretained(this)));
625 617
626 #if !defined(DISABLE_NACL) 618 #if !defined(DISABLE_NACL)
627 waiting_for_clear_nacl_cache_ = true; 619 waiting_for_clear_nacl_cache_ = true;
628 620
629 BrowserThread::PostTask( 621 BrowserThread::PostTask(
630 BrowserThread::IO, FROM_HERE, 622 BrowserThread::IO, FROM_HERE,
631 base::Bind(&BrowsingDataRemover::ClearNaClCacheOnIOThread, 623 base::Bind(&BrowsingDataRemover::ClearNaClCacheOnIOThread,
632 base::Unretained(this))); 624 base::Unretained(this)));
633 625
634 waiting_for_clear_pnacl_cache_ = true; 626 waiting_for_clear_pnacl_cache_ = true;
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 waiting_for_clear_networking_history_ = false; 948 waiting_for_clear_networking_history_ = false;
957 NotifyAndDeleteIfDone(); 949 NotifyAndDeleteIfDone();
958 } 950 }
959 951
960 void BrowsingDataRemover::ClearedCache() { 952 void BrowsingDataRemover::ClearedCache() {
961 waiting_for_clear_cache_ = false; 953 waiting_for_clear_cache_ = false;
962 954
963 NotifyAndDeleteIfDone(); 955 NotifyAndDeleteIfDone();
964 } 956 }
965 957
966 void BrowsingDataRemover::ClearCacheOnIOThread() {
967 // This function should be called on the IO thread.
968 DCHECK_CURRENTLY_ON(BrowserThread::IO);
969 DCHECK_EQ(STATE_NONE, next_cache_state_);
970 DCHECK(main_context_getter_.get());
971 DCHECK(media_context_getter_.get());
972
973 next_cache_state_ = STATE_CREATE_MAIN;
974 DoClearCache(net::OK);
975 }
976
977 // The expected state sequence is STATE_NONE --> STATE_CREATE_MAIN -->
978 // STATE_DELETE_MAIN --> STATE_CREATE_MEDIA --> STATE_DELETE_MEDIA -->
979 // STATE_DONE, and any errors are ignored.
980 void BrowsingDataRemover::DoClearCache(int rv) {
981 DCHECK_NE(STATE_NONE, next_cache_state_);
982
983 while (rv != net::ERR_IO_PENDING && next_cache_state_ != STATE_NONE) {
984 switch (next_cache_state_) {
985 case STATE_CREATE_MAIN:
986 case STATE_CREATE_MEDIA: {
987 // Get a pointer to the cache.
988 net::URLRequestContextGetter* getter =
989 (next_cache_state_ == STATE_CREATE_MAIN)
990 ? main_context_getter_.get()
991 : media_context_getter_.get();
992 net::HttpCache* http_cache =
993 getter->GetURLRequestContext()->http_transaction_factory()->
994 GetCache();
995
996 next_cache_state_ = (next_cache_state_ == STATE_CREATE_MAIN) ?
997 STATE_DELETE_MAIN : STATE_DELETE_MEDIA;
998
999 // Clear QUIC server information from memory and the disk cache.
1000 http_cache->GetSession()->quic_stream_factory()->
1001 ClearCachedStatesInCryptoConfig();
1002
1003 // Clear SDCH dictionary state.
1004 net::SdchManager* sdch_manager =
1005 getter->GetURLRequestContext()->sdch_manager();
1006 // The test is probably overkill, since chrome should always have an
1007 // SdchManager. But in general the URLRequestContext is *not*
1008 // guaranteed to have an SdchManager, so checking is wise.
1009 if (sdch_manager)
1010 sdch_manager->ClearData();
1011
1012 rv = http_cache->GetBackend(
1013 &cache_, base::Bind(&BrowsingDataRemover::DoClearCache,
1014 base::Unretained(this)));
1015 break;
1016 }
1017 case STATE_DELETE_MAIN:
1018 case STATE_DELETE_MEDIA: {
1019 next_cache_state_ = (next_cache_state_ == STATE_DELETE_MAIN) ?
1020 STATE_CREATE_MEDIA : STATE_DONE;
1021
1022 // |cache_| can be null if it cannot be initialized.
1023 if (cache_) {
1024 if (delete_begin_.is_null()) {
1025 rv = cache_->DoomAllEntries(
1026 base::Bind(&BrowsingDataRemover::DoClearCache,
1027 base::Unretained(this)));
1028 } else {
1029 rv = cache_->DoomEntriesBetween(
1030 delete_begin_, delete_end_,
1031 base::Bind(&BrowsingDataRemover::DoClearCache,
1032 base::Unretained(this)));
1033 }
1034 cache_ = NULL;
1035 }
1036 break;
1037 }
1038 case STATE_DONE: {
1039 cache_ = NULL;
1040 next_cache_state_ = STATE_NONE;
1041
1042 // Notify the UI thread that we are done.
1043 BrowserThread::PostTask(
1044 BrowserThread::UI, FROM_HERE,
1045 base::Bind(&BrowsingDataRemover::ClearedCache,
1046 base::Unretained(this)));
1047 return;
1048 }
1049 default: {
1050 NOTREACHED() << "bad state";
1051 next_cache_state_ = STATE_NONE; // Stop looping.
1052 return;
1053 }
1054 }
1055 }
1056 }
1057
1058 #if !defined(DISABLE_NACL) 958 #if !defined(DISABLE_NACL)
1059 void BrowsingDataRemover::ClearedNaClCache() { 959 void BrowsingDataRemover::ClearedNaClCache() {
1060 // This function should be called on the UI thread. 960 // This function should be called on the UI thread.
1061 DCHECK_CURRENTLY_ON(BrowserThread::UI); 961 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1062 962
1063 waiting_for_clear_nacl_cache_ = false; 963 waiting_for_clear_nacl_cache_ = false;
1064 964
1065 NotifyAndDeleteIfDone(); 965 NotifyAndDeleteIfDone();
1066 } 966 }
1067 967
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
1233 waiting_for_clear_domain_reliability_monitor_ = false; 1133 waiting_for_clear_domain_reliability_monitor_ = false;
1234 NotifyAndDeleteIfDone(); 1134 NotifyAndDeleteIfDone();
1235 } 1135 }
1236 1136
1237 // static 1137 // static
1238 BrowsingDataRemover::CallbackSubscription 1138 BrowsingDataRemover::CallbackSubscription
1239 BrowsingDataRemover::RegisterOnBrowsingDataRemovedCallback( 1139 BrowsingDataRemover::RegisterOnBrowsingDataRemovedCallback(
1240 const BrowsingDataRemover::Callback& callback) { 1140 const BrowsingDataRemover::Callback& callback) {
1241 return GetOnBrowsingDataRemovedCallbacks()->Add(callback); 1141 return GetOnBrowsingDataRemovedCallbacks()->Add(callback);
1242 } 1142 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698