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

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

Issue 1251243003: Support restricting browsing data removal for downloads by origin. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: Remove unneeded DCHECK; Initialize and clear download URLs along test fixture life cycle. Created 5 years, 4 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
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 #include "content/public/browser/storage_partition.h" 60 #include "content/public/browser/storage_partition.h"
61 #include "content/public/browser/user_metrics.h" 61 #include "content/public/browser/user_metrics.h"
62 #include "net/base/net_errors.h" 62 #include "net/base/net_errors.h"
63 #include "net/cookies/cookie_store.h" 63 #include "net/cookies/cookie_store.h"
64 #include "net/http/transport_security_state.h" 64 #include "net/http/transport_security_state.h"
65 #include "net/ssl/channel_id_service.h" 65 #include "net/ssl/channel_id_service.h"
66 #include "net/ssl/channel_id_store.h" 66 #include "net/ssl/channel_id_store.h"
67 #include "net/url_request/url_request_context.h" 67 #include "net/url_request/url_request_context.h"
68 #include "net/url_request/url_request_context_getter.h" 68 #include "net/url_request/url_request_context_getter.h"
69 #include "storage/browser/quota/special_storage_policy.h" 69 #include "storage/browser/quota/special_storage_policy.h"
70 #include "url/origin.h"
70 71
71 #if defined(OS_ANDROID) 72 #if defined(OS_ANDROID)
72 #include "chrome/browser/precache/precache_manager_factory.h" 73 #include "chrome/browser/precache/precache_manager_factory.h"
73 #include "components/precache/content/precache_manager.h" 74 #include "components/precache/content/precache_manager.h"
74 #endif 75 #endif
75 76
76 #if defined(OS_CHROMEOS) 77 #if defined(OS_CHROMEOS)
77 #include "chrome/browser/chromeos/profiles/profile_helper.h" 78 #include "chrome/browser/chromeos/profiles/profile_helper.h"
78 #include "chromeos/attestation/attestation_constants.h" 79 #include "chromeos/attestation/attestation_constants.h"
79 #include "chromeos/dbus/cryptohome_client.h" 80 #include "chromeos/dbus/cryptohome_client.h"
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 waiting_for_clear_plugin_data_(false), 226 waiting_for_clear_plugin_data_(false),
226 waiting_for_clear_pnacl_cache_(false), 227 waiting_for_clear_pnacl_cache_(false),
227 #if defined(OS_ANDROID) 228 #if defined(OS_ANDROID)
228 waiting_for_clear_precache_history_(false), 229 waiting_for_clear_precache_history_(false),
229 #endif 230 #endif
230 waiting_for_clear_storage_partition_data_(false), 231 waiting_for_clear_storage_partition_data_(false),
231 #if defined(ENABLE_WEBRTC) 232 #if defined(ENABLE_WEBRTC)
232 waiting_for_clear_webrtc_logs_(false), 233 waiting_for_clear_webrtc_logs_(false),
233 #endif 234 #endif
234 remove_mask_(0), 235 remove_mask_(0),
235 remove_origin_(GURL()),
236 origin_type_mask_(0), 236 origin_type_mask_(0),
237 storage_partition_for_testing_(NULL) { 237 storage_partition_for_testing_(NULL) {
238 DCHECK(profile); 238 DCHECK(profile);
239 // crbug.com/140910: Many places were calling this with base::Time() as 239 // crbug.com/140910: Many places were calling this with base::Time() as
240 // delete_end, even though they should've used base::Time::Max(). Work around 240 // delete_end, even though they should've used base::Time::Max(). Work around
241 // it here. New code should use base::Time::Max(). 241 // it here. New code should use base::Time::Max().
242 DCHECK(delete_end_ != base::Time()); 242 DCHECK(delete_end_ != base::Time());
243 if (delete_end_ == base::Time()) 243 if (delete_end_ == base::Time())
244 delete_end_ = base::Time::Max(); 244 delete_end_ = base::Time::Max();
245 } 245 }
246 246
247 BrowsingDataRemover::~BrowsingDataRemover() { 247 BrowsingDataRemover::~BrowsingDataRemover() {
248 DCHECK(AllDone()); 248 DCHECK(AllDone());
249 } 249 }
250 250
251 // Static. 251 // Static.
252 void BrowsingDataRemover::set_removing(bool is_removing) { 252 void BrowsingDataRemover::set_removing(bool is_removing) {
253 DCHECK(is_removing_ != is_removing); 253 DCHECK(is_removing_ != is_removing);
254 is_removing_ = is_removing; 254 is_removing_ = is_removing;
255 } 255 }
256 256
257 void BrowsingDataRemover::Remove(int remove_mask, int origin_type_mask) { 257 void BrowsingDataRemover::Remove(int remove_mask, int origin_type_mask) {
258 RemoveImpl(remove_mask, GURL(), origin_type_mask); 258 RemoveImpl(remove_mask, GURL(), origin_type_mask);
259 } 259 }
260 260
261 void BrowsingDataRemover::RemoveImpl(int remove_mask, 261 void BrowsingDataRemover::RemoveImpl(int remove_mask,
262 const GURL& origin, 262 const GURL& remove_url,
263 int origin_type_mask) { 263 int origin_type_mask) {
264 DCHECK_CURRENTLY_ON(BrowserThread::UI); 264 DCHECK_CURRENTLY_ON(BrowserThread::UI);
265 set_removing(true); 265 set_removing(true);
266 remove_mask_ = remove_mask; 266 remove_mask_ = remove_mask;
267 remove_origin_ = origin;
268 origin_type_mask_ = origin_type_mask; 267 origin_type_mask_ = origin_type_mask;
268 url::Origin remove_origin(remove_url);
269 269
270 PrefService* prefs = profile_->GetPrefs(); 270 PrefService* prefs = profile_->GetPrefs();
271 bool may_delete_history = prefs->GetBoolean( 271 bool may_delete_history = prefs->GetBoolean(
272 prefs::kAllowDeletingBrowserHistory); 272 prefs::kAllowDeletingBrowserHistory);
273 273
274 // All the UI entry points into the BrowsingDataRemover should be disabled, 274 // All the UI entry points into the BrowsingDataRemover should be disabled,
275 // but this will fire if something was missed or added. 275 // but this will fire if something was missed or added.
276 DCHECK(may_delete_history || (remove_mask & REMOVE_NOCHECKS) || 276 DCHECK(may_delete_history || (remove_mask & REMOVE_NOCHECKS) ||
277 (!(remove_mask & REMOVE_HISTORY) && !(remove_mask & REMOVE_DOWNLOADS))); 277 (!(remove_mask & REMOVE_HISTORY) && !(remove_mask & REMOVE_DOWNLOADS)));
278 278
(...skipping 16 matching lines...) Expand all
295 BrowsingDataHelper::PROTECTED_WEB | 295 BrowsingDataHelper::PROTECTED_WEB |
296 BrowsingDataHelper::EXTENSION), 296 BrowsingDataHelper::EXTENSION),
297 "OriginTypeMask has been updated without updating user metrics"); 297 "OriginTypeMask has been updated without updating user metrics");
298 298
299 if ((remove_mask & REMOVE_HISTORY) && may_delete_history) { 299 if ((remove_mask & REMOVE_HISTORY) && may_delete_history) {
300 history::HistoryService* history_service = 300 history::HistoryService* history_service =
301 HistoryServiceFactory::GetForProfile( 301 HistoryServiceFactory::GetForProfile(
302 profile_, ServiceAccessType::EXPLICIT_ACCESS); 302 profile_, ServiceAccessType::EXPLICIT_ACCESS);
303 if (history_service) { 303 if (history_service) {
304 std::set<GURL> restrict_urls; 304 std::set<GURL> restrict_urls;
305 if (!remove_origin_.is_empty()) 305 if (!remove_url.is_empty())
306 restrict_urls.insert(remove_origin_); 306 restrict_urls.insert(remove_url);
307 content::RecordAction(UserMetricsAction("ClearBrowsingData_History")); 307 content::RecordAction(UserMetricsAction("ClearBrowsingData_History"));
308 waiting_for_clear_history_ = true; 308 waiting_for_clear_history_ = true;
309 309
310 history_service->ExpireLocalAndRemoteHistoryBetween( 310 history_service->ExpireLocalAndRemoteHistoryBetween(
311 WebHistoryServiceFactory::GetForProfile(profile_), 311 WebHistoryServiceFactory::GetForProfile(profile_),
312 restrict_urls, delete_begin_, delete_end_, 312 restrict_urls, delete_begin_, delete_end_,
313 base::Bind(&BrowsingDataRemover::OnHistoryDeletionDone, 313 base::Bind(&BrowsingDataRemover::OnHistoryDeletionDone,
314 base::Unretained(this)), 314 base::Unretained(this)),
315 &history_task_tracker_); 315 &history_task_tracker_);
316 316
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 // As part of history deletion we also delete the auto-generated keywords. 360 // As part of history deletion we also delete the auto-generated keywords.
361 TemplateURLService* keywords_model = 361 TemplateURLService* keywords_model =
362 TemplateURLServiceFactory::GetForProfile(profile_); 362 TemplateURLServiceFactory::GetForProfile(profile_);
363 if (keywords_model && !keywords_model->loaded()) { 363 if (keywords_model && !keywords_model->loaded()) {
364 template_url_sub_ = keywords_model->RegisterOnLoadedCallback( 364 template_url_sub_ = keywords_model->RegisterOnLoadedCallback(
365 base::Bind(&BrowsingDataRemover::OnKeywordsLoaded, 365 base::Bind(&BrowsingDataRemover::OnKeywordsLoaded,
366 base::Unretained(this))); 366 base::Unretained(this)));
367 keywords_model->Load(); 367 keywords_model->Load();
368 waiting_for_clear_keyword_data_ = true; 368 waiting_for_clear_keyword_data_ = true;
369 } else if (keywords_model) { 369 } else if (keywords_model) {
370 keywords_model->RemoveAutoGeneratedForOriginBetween(remove_origin_, 370 keywords_model->RemoveAutoGeneratedForOriginBetween(
371 delete_begin_, delete_end_); 371 remove_url, delete_begin_, delete_end_);
372 } 372 }
373 373
374 // The PrerenderManager keeps history of prerendered pages, so clear that. 374 // The PrerenderManager keeps history of prerendered pages, so clear that.
375 // It also may have a prerendered page. If so, the page could be 375 // It also may have a prerendered page. If so, the page could be
376 // considered to have a small amount of historical information, so delete 376 // considered to have a small amount of historical information, so delete
377 // it, too. 377 // it, too.
378 prerender::PrerenderManager* prerender_manager = 378 prerender::PrerenderManager* prerender_manager =
379 prerender::PrerenderManagerFactory::GetForProfile(profile_); 379 prerender::PrerenderManagerFactory::GetForProfile(profile_);
380 if (prerender_manager) { 380 if (prerender_manager) {
381 prerender_manager->ClearData( 381 prerender_manager->ClearData(
382 prerender::PrerenderManager::CLEAR_PRERENDER_CONTENTS | 382 prerender::PrerenderManager::CLEAR_PRERENDER_CONTENTS |
383 prerender::PrerenderManager::CLEAR_PRERENDER_HISTORY); 383 prerender::PrerenderManager::CLEAR_PRERENDER_HISTORY);
384 } 384 }
385 385
386 // If the caller is removing history for all hosts, then clear ancillary 386 // If the caller is removing history for all hosts, then clear ancillary
387 // historical information. 387 // historical information.
388 if (remove_origin_.is_empty()) { 388 if (remove_url.is_empty()) {
389 // We also delete the list of recently closed tabs. Since these expire, 389 // We also delete the list of recently closed tabs. Since these expire,
390 // they can't be more than a day old, so we can simply clear them all. 390 // they can't be more than a day old, so we can simply clear them all.
391 TabRestoreService* tab_service = 391 TabRestoreService* tab_service =
392 TabRestoreServiceFactory::GetForProfile(profile_); 392 TabRestoreServiceFactory::GetForProfile(profile_);
393 if (tab_service) { 393 if (tab_service) {
394 tab_service->ClearEntries(); 394 tab_service->ClearEntries();
395 tab_service->DeleteLastSession(); 395 tab_service->DeleteLastSession();
396 } 396 }
397 397
398 #if defined(ENABLE_SESSION_SERVICE) 398 #if defined(ENABLE_SESSION_SERVICE)
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 base::Bind(&BrowsingDataRemover::OnClearedPrecacheHistory, 461 base::Bind(&BrowsingDataRemover::OnClearedPrecacheHistory,
462 base::Unretained(this))); 462 base::Unretained(this)));
463 } 463 }
464 #endif 464 #endif
465 } 465 }
466 466
467 if ((remove_mask & REMOVE_DOWNLOADS) && may_delete_history) { 467 if ((remove_mask & REMOVE_DOWNLOADS) && may_delete_history) {
468 content::RecordAction(UserMetricsAction("ClearBrowsingData_Downloads")); 468 content::RecordAction(UserMetricsAction("ClearBrowsingData_Downloads"));
469 content::DownloadManager* download_manager = 469 content::DownloadManager* download_manager =
470 BrowserContext::GetDownloadManager(profile_); 470 BrowserContext::GetDownloadManager(profile_);
471 download_manager->RemoveDownloadsBetween(delete_begin_, delete_end_); 471 if (remove_origin.unique())
472 download_manager->RemoveDownloadsBetween(delete_begin_, delete_end_);
473 else
474 download_manager->RemoveDownloadsByOriginAndTime(
475 remove_origin, delete_begin_, delete_end_);
472 DownloadPrefs* download_prefs = DownloadPrefs::FromDownloadManager( 476 DownloadPrefs* download_prefs = DownloadPrefs::FromDownloadManager(
473 download_manager); 477 download_manager);
474 download_prefs->SetSaveFilePath(download_prefs->DownloadPath()); 478 download_prefs->SetSaveFilePath(download_prefs->DownloadPath());
475 } 479 }
476 480
477 uint32 storage_partition_remove_mask = 0; 481 uint32 storage_partition_remove_mask = 0;
478 482
479 // We ignore the REMOVE_COOKIES request if UNPROTECTED_WEB is not set, 483 // We ignore the REMOVE_COOKIES request if UNPROTECTED_WEB is not set,
480 // so that callers who request REMOVE_SITE_DATA with PROTECTED_WEB 484 // so that callers who request REMOVE_SITE_DATA with PROTECTED_WEB
481 // don't accidentally remove the cookies that are associated with the 485 // don't accidentally remove the cookies that are associated with the
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 if (delete_begin_ == base::Time() || 705 if (delete_begin_ == base::Time() ||
702 origin_type_mask_ & 706 origin_type_mask_ &
703 (BrowsingDataHelper::PROTECTED_WEB | BrowsingDataHelper::EXTENSION)) { 707 (BrowsingDataHelper::PROTECTED_WEB | BrowsingDataHelper::EXTENSION)) {
704 // If we're deleting since the beginning of time, or we're removing 708 // If we're deleting since the beginning of time, or we're removing
705 // protected origins, then remove persistent quota data. 709 // protected origins, then remove persistent quota data.
706 quota_storage_remove_mask |= 710 quota_storage_remove_mask |=
707 content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT; 711 content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT;
708 } 712 }
709 713
710 storage_partition->ClearData( 714 storage_partition->ClearData(
711 storage_partition_remove_mask, 715 storage_partition_remove_mask, quota_storage_remove_mask, remove_url,
712 quota_storage_remove_mask, 716 base::Bind(&DoesOriginMatchMask, origin_type_mask_), delete_begin_,
713 remove_origin_,
714 base::Bind(&DoesOriginMatchMask, origin_type_mask_),
715 delete_begin_,
716 delete_end_, 717 delete_end_,
717 base::Bind(&BrowsingDataRemover::OnClearedStoragePartitionData, 718 base::Bind(&BrowsingDataRemover::OnClearedStoragePartitionData,
718 base::Unretained(this))); 719 base::Unretained(this)));
719 } 720 }
720 721
721 #if defined(ENABLE_PLUGINS) 722 #if defined(ENABLE_PLUGINS)
722 if (remove_mask & REMOVE_CONTENT_LICENSES) { 723 if (remove_mask & REMOVE_CONTENT_LICENSES) {
723 content::RecordAction( 724 content::RecordAction(
724 UserMetricsAction("ClearBrowsingData_ContentLicenses")); 725 UserMetricsAction("ClearBrowsingData_ContentLicenses"));
725 726
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 waiting_for_clear_domain_reliability_monitor_ = false; 1147 waiting_for_clear_domain_reliability_monitor_ = false;
1147 NotifyAndDeleteIfDone(); 1148 NotifyAndDeleteIfDone();
1148 } 1149 }
1149 1150
1150 // static 1151 // static
1151 BrowsingDataRemover::CallbackSubscription 1152 BrowsingDataRemover::CallbackSubscription
1152 BrowsingDataRemover::RegisterOnBrowsingDataRemovedCallback( 1153 BrowsingDataRemover::RegisterOnBrowsingDataRemovedCallback(
1153 const BrowsingDataRemover::Callback& callback) { 1154 const BrowsingDataRemover::Callback& callback) {
1154 return GetOnBrowsingDataRemovedCallbacks()->Add(callback); 1155 return GetOnBrowsingDataRemovedCallbacks()->Add(callback);
1155 } 1156 }
OLDNEW
« no previous file with comments | « chrome/browser/browsing_data/browsing_data_remover.h ('k') | chrome/browser/browsing_data/browsing_data_remover_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698