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

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

Issue 10413072: Teaching BrowsingDataRemover how to delete application data. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Inadvertant include. Created 8 years, 7 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 | Annotate | Revision Log
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_remover.h" 5 #include "chrome/browser/browsing_data_remover.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 media_context_getter_(profile->GetRequestContextForMedia()), 104 media_context_getter_(profile->GetRequestContextForMedia()),
105 waiting_for_clear_cache_(false), 105 waiting_for_clear_cache_(false),
106 waiting_for_clear_cookies_count_(0), 106 waiting_for_clear_cookies_count_(0),
107 waiting_for_clear_history_(false), 107 waiting_for_clear_history_(false),
108 waiting_for_clear_networking_history_(false), 108 waiting_for_clear_networking_history_(false),
109 waiting_for_clear_server_bound_certs_(false), 109 waiting_for_clear_server_bound_certs_(false),
110 waiting_for_clear_plugin_data_(false), 110 waiting_for_clear_plugin_data_(false),
111 waiting_for_clear_quota_managed_data_(false), 111 waiting_for_clear_quota_managed_data_(false),
112 remove_mask_(0), 112 remove_mask_(0),
113 remove_origin_(GURL()), 113 remove_origin_(GURL()),
114 remove_protected_(false) { 114 include_protected_(false) {
115 DCHECK(profile); 115 DCHECK(profile);
116 } 116 }
117 117
118 BrowsingDataRemover::BrowsingDataRemover(Profile* profile, 118 BrowsingDataRemover::BrowsingDataRemover(Profile* profile,
119 TimePeriod time_period, 119 TimePeriod time_period,
120 base::Time delete_end) 120 base::Time delete_end)
121 : profile_(profile), 121 : profile_(profile),
122 quota_manager_(NULL), 122 quota_manager_(NULL),
123 special_storage_policy_(profile->GetExtensionSpecialStoragePolicy()), 123 special_storage_policy_(profile->GetExtensionSpecialStoragePolicy()),
124 delete_begin_(CalculateBeginDeleteTime(time_period)), 124 delete_begin_(CalculateBeginDeleteTime(time_period)),
125 delete_end_(delete_end), 125 delete_end_(delete_end),
126 next_cache_state_(STATE_NONE), 126 next_cache_state_(STATE_NONE),
127 cache_(NULL), 127 cache_(NULL),
128 main_context_getter_(profile->GetRequestContext()), 128 main_context_getter_(profile->GetRequestContext()),
129 media_context_getter_(profile->GetRequestContextForMedia()), 129 media_context_getter_(profile->GetRequestContextForMedia()),
130 waiting_for_clear_cache_(false), 130 waiting_for_clear_cache_(false),
131 waiting_for_clear_cookies_count_(0), 131 waiting_for_clear_cookies_count_(0),
132 waiting_for_clear_history_(false), 132 waiting_for_clear_history_(false),
133 waiting_for_clear_networking_history_(false), 133 waiting_for_clear_networking_history_(false),
134 waiting_for_clear_server_bound_certs_(false), 134 waiting_for_clear_server_bound_certs_(false),
135 waiting_for_clear_plugin_data_(false), 135 waiting_for_clear_plugin_data_(false),
136 waiting_for_clear_quota_managed_data_(false), 136 waiting_for_clear_quota_managed_data_(false),
137 remove_mask_(0), 137 remove_mask_(0),
138 remove_origin_(GURL()), 138 remove_origin_(GURL()),
139 remove_protected_(false) { 139 include_protected_(false) {
140 DCHECK(profile); 140 DCHECK(profile);
141 } 141 }
142 142
143 BrowsingDataRemover::~BrowsingDataRemover() { 143 BrowsingDataRemover::~BrowsingDataRemover() {
144 DCHECK(all_done()); 144 DCHECK(all_done());
145 } 145 }
146 146
147 // Static. 147 // Static.
148 void BrowsingDataRemover::set_removing(bool removing) { 148 void BrowsingDataRemover::set_removing(bool removing) {
149 DCHECK(removing_ != removing); 149 DCHECK(removing_ != removing);
150 removing_ = removing; 150 removing_ = removing;
151 } 151 }
152 152
153 // Static. 153 // Static.
154 int BrowsingDataRemover::GenerateQuotaClientMask(int remove_mask) { 154 int BrowsingDataRemover::GenerateQuotaClientMask(int remove_mask) {
155 int quota_client_mask = 0; 155 int quota_client_mask = 0;
156 if (remove_mask & BrowsingDataRemover::REMOVE_FILE_SYSTEMS) 156 if (remove_mask & BrowsingDataRemover::REMOVE_FILE_SYSTEMS)
157 quota_client_mask |= quota::QuotaClient::kFileSystem; 157 quota_client_mask |= quota::QuotaClient::kFileSystem;
158 if (remove_mask & BrowsingDataRemover::REMOVE_WEBSQL) 158 if (remove_mask & BrowsingDataRemover::REMOVE_WEBSQL)
159 quota_client_mask |= quota::QuotaClient::kDatabase; 159 quota_client_mask |= quota::QuotaClient::kDatabase;
160 if (remove_mask & BrowsingDataRemover::REMOVE_APPCACHE) 160 if (remove_mask & BrowsingDataRemover::REMOVE_APPCACHE)
161 quota_client_mask |= quota::QuotaClient::kAppcache; 161 quota_client_mask |= quota::QuotaClient::kAppcache;
162 if (remove_mask & BrowsingDataRemover::REMOVE_INDEXEDDB) 162 if (remove_mask & BrowsingDataRemover::REMOVE_INDEXEDDB)
163 quota_client_mask |= quota::QuotaClient::kIndexedDatabase; 163 quota_client_mask |= quota::QuotaClient::kIndexedDatabase;
164 164
165 return quota_client_mask; 165 return quota_client_mask;
166 } 166 }
167 167
168 void BrowsingDataRemover::Remove(int remove_mask) { 168 void BrowsingDataRemover::Remove(int remove_mask,
169 RemoveImpl(remove_mask, GURL(), false); 169 bool include_protected_origins) {
170 RemoveImpl(remove_mask, GURL(), include_protected_origins);
170 } 171 }
171 172
172 void BrowsingDataRemover::RemoveImpl(int remove_mask, 173 void BrowsingDataRemover::RemoveImpl(int remove_mask,
173 const GURL& origin, 174 const GURL& origin,
174 bool remove_protected_origins) { 175 bool include_protected_origins) {
175 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 176 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
176 set_removing(true); 177 set_removing(true);
177 remove_mask_ = remove_mask; 178 remove_mask_ = remove_mask;
178 remove_origin_ = origin; 179 remove_origin_ = origin;
179 remove_protected_ = remove_protected_origins; 180 include_protected_ = include_protected_origins;
180 181
181 if (remove_mask & REMOVE_HISTORY) { 182 if (remove_mask & REMOVE_HISTORY) {
182 HistoryService* history_service = 183 HistoryService* history_service =
183 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); 184 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS);
184 if (history_service) { 185 if (history_service) {
185 std::set<GURL> restrict_urls; 186 std::set<GURL> restrict_urls;
186 if (!remove_origin_.is_empty()) 187 if (!remove_origin_.is_empty())
187 restrict_urls.insert(remove_origin_); 188 restrict_urls.insert(remove_origin_);
188 content::RecordAction(UserMetricsAction("ClearBrowsingData_History")); 189 content::RecordAction(UserMetricsAction("ClearBrowsingData_History"));
189 waiting_for_clear_history_ = true; 190 waiting_for_clear_history_ = true;
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 waiting_for_clear_server_bound_certs_ = true; 302 waiting_for_clear_server_bound_certs_ = true;
302 BrowserThread::PostTask( 303 BrowserThread::PostTask(
303 BrowserThread::IO, FROM_HERE, 304 BrowserThread::IO, FROM_HERE,
304 base::Bind(&BrowsingDataRemover::ClearServerBoundCertsOnIOThread, 305 base::Bind(&BrowsingDataRemover::ClearServerBoundCertsOnIOThread,
305 base::Unretained(this), base::Unretained(rq_context))); 306 base::Unretained(this), base::Unretained(rq_context)));
306 } 307 }
307 } 308 }
308 309
309 if (remove_mask & REMOVE_LOCAL_STORAGE) { 310 if (remove_mask & REMOVE_LOCAL_STORAGE) {
310 BrowserContext::GetDOMStorageContext(profile_)->DeleteDataModifiedSince( 311 BrowserContext::GetDOMStorageContext(profile_)->DeleteDataModifiedSince(
311 delete_begin_); 312 delete_begin_, include_protected_);
312 } 313 }
313 314
314 if (remove_mask & REMOVE_INDEXEDDB || remove_mask & REMOVE_WEBSQL || 315 if (remove_mask & REMOVE_INDEXEDDB || remove_mask & REMOVE_WEBSQL ||
315 remove_mask & REMOVE_APPCACHE || remove_mask & REMOVE_FILE_SYSTEMS) { 316 remove_mask & REMOVE_APPCACHE || remove_mask & REMOVE_FILE_SYSTEMS) {
316 if (!quota_manager_) 317 if (!quota_manager_)
317 quota_manager_ = content::BrowserContext::GetQuotaManager(profile_); 318 quota_manager_ = content::BrowserContext::GetQuotaManager(profile_);
318 waiting_for_clear_quota_managed_data_ = true; 319 waiting_for_clear_quota_managed_data_ = true;
319 BrowserThread::PostTask( 320 BrowserThread::PostTask(
320 BrowserThread::IO, FROM_HERE, 321 BrowserThread::IO, FROM_HERE,
321 base::Bind(&BrowsingDataRemover::ClearQuotaManagedDataOnIOThread, 322 base::Bind(&BrowsingDataRemover::ClearQuotaManagedDataOnIOThread,
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 582
582 void BrowsingDataRemover::ClearQuotaManagedDataOnIOThread() { 583 void BrowsingDataRemover::ClearQuotaManagedDataOnIOThread() {
583 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 584 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
584 585
585 // Ask the QuotaManager for all origins with temporary quota modified within 586 // Ask the QuotaManager for all origins with temporary quota modified within
586 // the user-specified timeframe, and deal with the resulting set in 587 // the user-specified timeframe, and deal with the resulting set in
587 // OnGotQuotaManagedOrigins(). 588 // OnGotQuotaManagedOrigins().
588 quota_managed_origins_to_delete_count_ = 0; 589 quota_managed_origins_to_delete_count_ = 0;
589 quota_managed_storage_types_to_delete_count_ = 2; 590 quota_managed_storage_types_to_delete_count_ = 2;
590 591
591 if (delete_begin_ == base::Time()) { 592 if (delete_begin_ == base::Time() || include_protected_) {
592 // If we're deleting since the beginning of time, ask the QuotaManager for 593 // If we're deleting since the beginning of time, or we're removing
593 // all origins with persistent quota modified within the user-specified 594 // protected origins, then ask the QuotaManager for all origins with
594 // timeframe, and deal with the resulting set in 595 // persistent quota modified within the user-specified timeframe, and deal
595 // OnGotPersistentQuotaManagedOrigins. 596 // with the resulting set in OnGotPersistentQuotaManagedOrigins.
596 quota_manager_->GetOriginsModifiedSince( 597 quota_manager_->GetOriginsModifiedSince(
597 quota::kStorageTypePersistent, delete_begin_, 598 quota::kStorageTypePersistent, delete_begin_,
598 base::Bind(&BrowsingDataRemover::OnGotQuotaManagedOrigins, 599 base::Bind(&BrowsingDataRemover::OnGotQuotaManagedOrigins,
599 base::Unretained(this))); 600 base::Unretained(this)));
600 } else { 601 } else {
601 // Otherwise, we don't need to deal with persistent storage. 602 // Otherwise, we don't need to deal with persistent storage.
602 --quota_managed_storage_types_to_delete_count_; 603 --quota_managed_storage_types_to_delete_count_;
603 } 604 }
604 605
605 // Do the same for temporary quota, regardless, passing the resulting set into 606 // Do the same for temporary quota, regardless, passing the resulting set into
606 // OnGotTemporaryQuotaManagedOrigins. 607 // OnGotTemporaryQuotaManagedOrigins.
607 quota_manager_->GetOriginsModifiedSince( 608 quota_manager_->GetOriginsModifiedSince(
608 quota::kStorageTypeTemporary, delete_begin_, 609 quota::kStorageTypeTemporary, delete_begin_,
609 base::Bind(&BrowsingDataRemover::OnGotQuotaManagedOrigins, 610 base::Bind(&BrowsingDataRemover::OnGotQuotaManagedOrigins,
610 base::Unretained(this))); 611 base::Unretained(this)));
611 } 612 }
612 613
613 void BrowsingDataRemover::OnGotQuotaManagedOrigins( 614 void BrowsingDataRemover::OnGotQuotaManagedOrigins(
614 const std::set<GURL>& origins, quota::StorageType type) { 615 const std::set<GURL>& origins, quota::StorageType type) {
615 DCHECK_GT(quota_managed_storage_types_to_delete_count_, 0); 616 DCHECK_GT(quota_managed_storage_types_to_delete_count_, 0);
616 // Walk through the origins passed in, delete quota of |type| from each that 617 // Walk through the origins passed in, delete quota of |type| from each that
617 // isn't protected. 618 // isn't protected.
618 std::set<GURL>::const_iterator origin; 619 std::set<GURL>::const_iterator origin;
619 for (origin = origins.begin(); origin != origins.end(); ++origin) { 620 for (origin = origins.begin(); origin != origins.end(); ++origin) {
620 if (!BrowsingDataHelper::IsValidScheme(origin->scheme())) 621 if (!BrowsingDataHelper::IsValidScheme(origin->scheme()))
621 continue; 622 continue;
622 if (special_storage_policy_->IsStorageProtected(origin->GetOrigin())) 623 if (!include_protected_ &&
624 special_storage_policy_->IsStorageProtected(origin->GetOrigin()))
623 continue; 625 continue;
624 if (!remove_origin_.is_empty() && remove_origin_ != origin->GetOrigin()) 626 if (!remove_origin_.is_empty() && remove_origin_ != origin->GetOrigin())
625 continue; 627 continue;
626 ++quota_managed_origins_to_delete_count_; 628 ++quota_managed_origins_to_delete_count_;
627 quota_manager_->DeleteOriginData( 629 quota_manager_->DeleteOriginData(
628 origin->GetOrigin(), type, 630 origin->GetOrigin(), type,
629 BrowsingDataRemover::GenerateQuotaClientMask(remove_mask_), 631 BrowsingDataRemover::GenerateQuotaClientMask(remove_mask_),
630 base::Bind(&BrowsingDataRemover::OnQuotaManagedOriginDeletion, 632 base::Bind(&BrowsingDataRemover::OnQuotaManagedOriginDeletion,
631 base::Unretained(this))); 633 base::Unretained(this)));
632 } 634 }
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 BrowserThread::UI, FROM_HERE, 710 BrowserThread::UI, FROM_HERE,
709 base::Bind(&BrowsingDataRemover::OnClearedServerBoundCerts, 711 base::Bind(&BrowsingDataRemover::OnClearedServerBoundCerts,
710 base::Unretained(this))); 712 base::Unretained(this)));
711 } 713 }
712 714
713 void BrowsingDataRemover::OnClearedServerBoundCerts() { 715 void BrowsingDataRemover::OnClearedServerBoundCerts() {
714 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 716 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
715 waiting_for_clear_server_bound_certs_ = false; 717 waiting_for_clear_server_bound_certs_ = false;
716 NotifyAndDeleteIfDone(); 718 NotifyAndDeleteIfDone();
717 } 719 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698