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

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

Issue 2248403002: Implement origin-based deletion of plugin data (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments. Created 4 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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 83
84 #if BUILDFLAG(ANDROID_JAVA_UI) 84 #if BUILDFLAG(ANDROID_JAVA_UI)
85 #include "chrome/browser/android/offline_pages/offline_page_model_factory.h" 85 #include "chrome/browser/android/offline_pages/offline_page_model_factory.h"
86 #include "chrome/browser/android/webapps/webapp_registry.h" 86 #include "chrome/browser/android/webapps/webapp_registry.h"
87 #include "chrome/browser/precache/precache_manager_factory.h" 87 #include "chrome/browser/precache/precache_manager_factory.h"
88 #include "components/offline_pages/offline_page_feature.h" 88 #include "components/offline_pages/offline_page_feature.h"
89 #include "components/offline_pages/offline_page_model.h" 89 #include "components/offline_pages/offline_page_model.h"
90 #include "components/precache/content/precache_manager.h" 90 #include "components/precache/content/precache_manager.h"
91 #endif 91 #endif
92 92
93 #if defined(ENABLE_EXTENSIONS)
94 #include "chrome/browser/extensions/activity_log/activity_log.h"
95 #include "extensions/browser/extension_prefs.h"
96 #endif
97
98 #if defined(ENABLE_PLUGINS)
99 #include "chrome/browser/browsing_data/browsing_data_flash_lso_helper.h"
100 #endif
101
102 #if defined(ENABLE_SESSION_SERVICE)
103 #include "chrome/browser/sessions/session_service.h"
104 #include "chrome/browser/sessions/session_service_factory.h"
105 #endif
106
93 #if defined(OS_CHROMEOS) 107 #if defined(OS_CHROMEOS)
94 #include "chrome/browser/chromeos/profiles/profile_helper.h" 108 #include "chrome/browser/chromeos/profiles/profile_helper.h"
95 #include "chromeos/attestation/attestation_constants.h" 109 #include "chromeos/attestation/attestation_constants.h"
96 #include "chromeos/cryptohome/cryptohome_parameters.h" 110 #include "chromeos/cryptohome/cryptohome_parameters.h"
97 #include "chromeos/dbus/cryptohome_client.h" 111 #include "chromeos/dbus/cryptohome_client.h"
98 #include "chromeos/dbus/dbus_thread_manager.h" 112 #include "chromeos/dbus/dbus_thread_manager.h"
99 #include "components/user_manager/user.h" 113 #include "components/user_manager/user.h"
100 #endif 114 #endif
101 115
102 #if defined(ENABLE_EXTENSIONS)
103 #include "chrome/browser/extensions/activity_log/activity_log.h"
104 #include "extensions/browser/extension_prefs.h"
105 #endif
106
107 #if defined(ENABLE_SESSION_SERVICE)
108 #include "chrome/browser/sessions/session_service.h"
109 #include "chrome/browser/sessions/session_service_factory.h"
110 #endif
111
112 #if defined(ENABLE_WEBRTC) 116 #if defined(ENABLE_WEBRTC)
113 #include "chrome/browser/media/webrtc_log_list.h" 117 #include "chrome/browser/media/webrtc_log_list.h"
114 #include "chrome/browser/media/webrtc_log_util.h" 118 #include "chrome/browser/media/webrtc_log_util.h"
115 #endif 119 #endif
116 120
117 using base::UserMetricsAction; 121 using base::UserMetricsAction;
118 using content::BrowserContext; 122 using content::BrowserContext;
119 using content::BrowserThread; 123 using content::BrowserThread;
120 using content::DOMStorageContext; 124 using content::DOMStorageContext;
121 125
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 case browsing_data::ALL_TIME: 286 case browsing_data::ALL_TIME:
283 content::RecordAction(UserMetricsAction("ClearBrowsingData_Everything")); 287 content::RecordAction(UserMetricsAction("ClearBrowsingData_Everything"));
284 break; 288 break;
285 } 289 }
286 return TimeRange(CalculateBeginDeleteTime(period), base::Time::Max()); 290 return TimeRange(CalculateBeginDeleteTime(period), base::Time::Max());
287 } 291 }
288 292
289 BrowsingDataRemover::BrowsingDataRemover( 293 BrowsingDataRemover::BrowsingDataRemover(
290 content::BrowserContext* browser_context) 294 content::BrowserContext* browser_context)
291 : profile_(Profile::FromBrowserContext(browser_context)), 295 : profile_(Profile::FromBrowserContext(browser_context)),
292 is_removing_(false),
293 remove_mask_(-1), 296 remove_mask_(-1),
294 origin_type_mask_(-1), 297 origin_type_mask_(-1),
298 is_removing_(false),
299 #if defined(ENABLE_PLUGINS)
300 flash_lso_helper_(BrowsingDataFlashLSOHelper::Create(profile_)),
301 #endif
295 #if BUILDFLAG(ANDROID_JAVA_UI) 302 #if BUILDFLAG(ANDROID_JAVA_UI)
296 webapp_registry_(new WebappRegistry()), 303 webapp_registry_(new WebappRegistry()),
297 #endif 304 #endif
298 weak_ptr_factory_(this) { 305 weak_ptr_factory_(this) {
299 DCHECK(browser_context); 306 DCHECK(browser_context);
300 } 307 }
301 308
302 BrowsingDataRemover::~BrowsingDataRemover() { 309 BrowsingDataRemover::~BrowsingDataRemover() {
303 if (!task_queue_.empty()) { 310 if (!task_queue_.empty()) {
304 VLOG(1) << "BrowsingDataRemover shuts down with " << task_queue_.size() 311 VLOG(1) << "BrowsingDataRemover shuts down with " << task_queue_.size()
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 storage_partition_remove_mask |= 773 storage_partition_remove_mask |=
767 content::StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS; 774 content::StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS;
768 } 775 }
769 776
770 #if defined(ENABLE_PLUGINS) 777 #if defined(ENABLE_PLUGINS)
771 // Plugin is data not separated for protected and unprotected web origins. We 778 // Plugin is data not separated for protected and unprotected web origins. We
772 // check the origin_type_mask_ to prevent unintended deletion. 779 // check the origin_type_mask_ to prevent unintended deletion.
773 if (remove_mask & REMOVE_PLUGIN_DATA && 780 if (remove_mask & REMOVE_PLUGIN_DATA &&
774 origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { 781 origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) {
775 content::RecordAction(UserMetricsAction("ClearBrowsingData_LSOData")); 782 content::RecordAction(UserMetricsAction("ClearBrowsingData_LSOData"));
783 waiting_for_clear_plugin_data_count_ = 1;
776 784
777 waiting_for_clear_plugin_data_ = true; 785 if (filter_builder.IsEmptyBlacklist()) {
778 DCHECK(!plugin_data_remover_); 786 DCHECK(!plugin_data_remover_);
779 plugin_data_remover_.reset(content::PluginDataRemover::Create(profile_)); 787 plugin_data_remover_.reset(content::PluginDataRemover::Create(profile_));
780 base::WaitableEvent* event = 788 base::WaitableEvent* event =
781 plugin_data_remover_->StartRemoving(delete_begin_); 789 plugin_data_remover_->StartRemoving(delete_begin_);
782 790
783 base::WaitableEventWatcher::EventCallback watcher_callback = 791 base::WaitableEventWatcher::EventCallback watcher_callback =
784 base::Bind(&BrowsingDataRemover::OnWaitableEventSignaled, 792 base::Bind(&BrowsingDataRemover::OnWaitableEventSignaled,
785 weak_ptr_factory_.GetWeakPtr()); 793 weak_ptr_factory_.GetWeakPtr());
786 watcher_.StartWatching(event, watcher_callback); 794 watcher_.StartWatching(event, watcher_callback);
795 } else {
796 // TODO(msramek): Store filters from the currently executed task on the
797 // object to avoid having to copy them to callback methods.
798 flash_lso_helper_->StartFetching(base::Bind(
799 &BrowsingDataRemover::OnSitesWithFlashDataFetched,
800 weak_ptr_factory_.GetWeakPtr(),
801 filter_builder.BuildPluginFilter()));
802 }
787 } 803 }
788 #endif 804 #endif
789 805
790 if (remove_mask & REMOVE_SITE_USAGE_DATA) { 806 if (remove_mask & REMOVE_SITE_USAGE_DATA) {
791 ClearSettingsForOneTypeWithPredicate( 807 ClearSettingsForOneTypeWithPredicate(
792 HostContentSettingsMapFactory::GetForProfile(profile_), 808 HostContentSettingsMapFactory::GetForProfile(profile_),
793 CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, 809 CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT,
794 base::Bind(&ForwardPrimaryPatternCallback, same_pattern_filter)); 810 base::Bind(&ForwardPrimaryPatternCallback, same_pattern_filter));
795 } 811 }
796 812
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
1101 storage_partition_for_testing_ = storage_partition; 1117 storage_partition_for_testing_ = storage_partition;
1102 } 1118 }
1103 1119
1104 #if BUILDFLAG(ANDROID_JAVA_UI) 1120 #if BUILDFLAG(ANDROID_JAVA_UI)
1105 void BrowsingDataRemover::OverrideWebappRegistryForTesting( 1121 void BrowsingDataRemover::OverrideWebappRegistryForTesting(
1106 std::unique_ptr<WebappRegistry> webapp_registry) { 1122 std::unique_ptr<WebappRegistry> webapp_registry) {
1107 webapp_registry_.reset(webapp_registry.release()); 1123 webapp_registry_.reset(webapp_registry.release());
1108 } 1124 }
1109 #endif 1125 #endif
1110 1126
1127 #if defined(ENABLE_PLUGINS)
1128 void BrowsingDataRemover::OverrideFlashLSOHelperForTesting(
1129 scoped_refptr<BrowsingDataFlashLSOHelper> flash_lso_helper) {
1130 flash_lso_helper_ = flash_lso_helper;
1131 }
1132 #endif
1133
1111 const base::Time& BrowsingDataRemover::GetLastUsedBeginTime() { 1134 const base::Time& BrowsingDataRemover::GetLastUsedBeginTime() {
1112 return delete_begin_; 1135 return delete_begin_;
1113 } 1136 }
1114 1137
1115 const base::Time& BrowsingDataRemover::GetLastUsedEndTime() { 1138 const base::Time& BrowsingDataRemover::GetLastUsedEndTime() {
1116 return delete_end_; 1139 return delete_end_;
1117 } 1140 }
1118 1141
1119 int BrowsingDataRemover::GetLastUsedRemovalMask() { 1142 int BrowsingDataRemover::GetLastUsedRemovalMask() {
1120 return remove_mask_; 1143 return remove_mask_;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1162 !waiting_for_clear_cache_ && 1185 !waiting_for_clear_cache_ &&
1163 !waiting_for_clear_flash_content_licenses_ && 1186 !waiting_for_clear_flash_content_licenses_ &&
1164 !waiting_for_clear_channel_ids_ && !waiting_for_clear_cookies_count_ && 1187 !waiting_for_clear_channel_ids_ && !waiting_for_clear_cookies_count_ &&
1165 !waiting_for_clear_domain_reliability_monitor_ && 1188 !waiting_for_clear_domain_reliability_monitor_ &&
1166 !waiting_for_clear_form_ && !waiting_for_clear_history_ && 1189 !waiting_for_clear_form_ && !waiting_for_clear_history_ &&
1167 !waiting_for_clear_hostname_resolution_cache_ && 1190 !waiting_for_clear_hostname_resolution_cache_ &&
1168 !waiting_for_clear_keyword_data_ && !waiting_for_clear_nacl_cache_ && 1191 !waiting_for_clear_keyword_data_ && !waiting_for_clear_nacl_cache_ &&
1169 !waiting_for_clear_network_predictor_ && 1192 !waiting_for_clear_network_predictor_ &&
1170 !waiting_for_clear_networking_history_ && 1193 !waiting_for_clear_networking_history_ &&
1171 !waiting_for_clear_passwords_ && !waiting_for_clear_passwords_stats_ && 1194 !waiting_for_clear_passwords_ && !waiting_for_clear_passwords_stats_ &&
1172 !waiting_for_clear_platform_keys_ && !waiting_for_clear_plugin_data_ && 1195 !waiting_for_clear_platform_keys_ &&
1196 !waiting_for_clear_plugin_data_count_ &&
1173 !waiting_for_clear_pnacl_cache_ && 1197 !waiting_for_clear_pnacl_cache_ &&
1174 #if BUILDFLAG(ANDROID_JAVA_UI) 1198 #if BUILDFLAG(ANDROID_JAVA_UI)
1175 !waiting_for_clear_precache_history_ && 1199 !waiting_for_clear_precache_history_ &&
1176 !waiting_for_clear_webapp_data_ && 1200 !waiting_for_clear_webapp_data_ &&
1177 !waiting_for_clear_webapp_history_ && 1201 !waiting_for_clear_webapp_history_ &&
1178 !waiting_for_clear_offline_page_data_ && 1202 !waiting_for_clear_offline_page_data_ &&
1179 #endif 1203 #endif
1180 #if defined(ENABLE_WEBRTC) 1204 #if defined(ENABLE_WEBRTC)
1181 !waiting_for_clear_webrtc_logs_ && 1205 !waiting_for_clear_webrtc_logs_ &&
1182 #endif 1206 #endif
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1315 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1292 waiting_for_clear_pnacl_cache_ = false; 1316 waiting_for_clear_pnacl_cache_ = false;
1293 NotifyIfDone(); 1317 NotifyIfDone();
1294 } 1318 }
1295 #endif 1319 #endif
1296 1320
1297 #if defined(ENABLE_PLUGINS) 1321 #if defined(ENABLE_PLUGINS)
1298 void BrowsingDataRemover::OnWaitableEventSignaled( 1322 void BrowsingDataRemover::OnWaitableEventSignaled(
1299 base::WaitableEvent* waitable_event) { 1323 base::WaitableEvent* waitable_event) {
1300 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1324 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1301 waiting_for_clear_plugin_data_ = false; 1325
1326 DCHECK_EQ(1, waiting_for_clear_plugin_data_count_);
1327 waiting_for_clear_plugin_data_count_ = 0;
1328
1302 plugin_data_remover_.reset(); 1329 plugin_data_remover_.reset();
1303 watcher_.StopWatching(); 1330 watcher_.StopWatching();
1304 NotifyIfDone(); 1331 NotifyIfDone();
1305 } 1332 }
1306 1333
1334 void BrowsingDataRemover::OnSitesWithFlashDataFetched(
1335 base::Callback<bool(const std::string&)> plugin_filter,
1336 const std::vector<std::string>& sites) {
1337 DCHECK_EQ(1, waiting_for_clear_plugin_data_count_);
1338 waiting_for_clear_plugin_data_count_ = 0;
1339
1340 std::vector<std::string> sites_to_delete;
1341 for (const std::string& site : sites) {
1342 if (plugin_filter.Run(site))
1343 sites_to_delete.push_back(site);
1344 }
1345
1346 waiting_for_clear_plugin_data_count_ = sites_to_delete.size();
1347
1348 for (const std::string& site : sites_to_delete) {
1349 flash_lso_helper_->DeleteFlashLSOsForSite(
1350 site,
1351 base::Bind(&BrowsingDataRemover::OnFlashDataDeleted,
1352 weak_ptr_factory_.GetWeakPtr()));
1353 }
1354
1355 NotifyIfDone();
1356 }
1357
1358 void BrowsingDataRemover::OnFlashDataDeleted() {
1359 waiting_for_clear_plugin_data_count_--;
1360 NotifyIfDone();
1361 }
1362
1307 void BrowsingDataRemover::OnDeauthorizeFlashContentLicensesCompleted( 1363 void BrowsingDataRemover::OnDeauthorizeFlashContentLicensesCompleted(
1308 uint32_t request_id, 1364 uint32_t request_id,
1309 bool /* success */) { 1365 bool /* success */) {
1310 DCHECK(waiting_for_clear_flash_content_licenses_); 1366 DCHECK(waiting_for_clear_flash_content_licenses_);
1311 DCHECK_EQ(request_id, deauthorize_flash_content_licenses_request_id_); 1367 DCHECK_EQ(request_id, deauthorize_flash_content_licenses_request_id_);
1312 1368
1313 waiting_for_clear_flash_content_licenses_ = false; 1369 waiting_for_clear_flash_content_licenses_ = false;
1314 NotifyIfDone(); 1370 NotifyIfDone();
1315 } 1371 }
1316 #endif 1372 #endif
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1411 waiting_for_clear_offline_page_data_ = false; 1467 waiting_for_clear_offline_page_data_ = false;
1412 NotifyIfDone(); 1468 NotifyIfDone();
1413 } 1469 }
1414 #endif 1470 #endif
1415 1471
1416 void BrowsingDataRemover::OnClearedDomainReliabilityMonitor() { 1472 void BrowsingDataRemover::OnClearedDomainReliabilityMonitor() {
1417 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1473 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1418 waiting_for_clear_domain_reliability_monitor_ = false; 1474 waiting_for_clear_domain_reliability_monitor_ = false;
1419 NotifyIfDone(); 1475 NotifyIfDone();
1420 } 1476 }
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