OLD | NEW |
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 #include <utility> | 10 #include <utility> |
11 | 11 |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/bind_helpers.h" | 13 #include "base/bind_helpers.h" |
14 #include "base/callback.h" | 14 #include "base/callback.h" |
15 #include "base/logging.h" | 15 #include "base/logging.h" |
16 #include "base/metrics/histogram_macros.h" | 16 #include "base/metrics/histogram_macros.h" |
17 #include "chrome/browser/browsing_data/browsing_data_filter_builder.h" | 17 #include "chrome/browser/browsing_data/browsing_data_filter_builder.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/browsing_data_remover_delegate.h" | 19 #include "chrome/browser/browsing_data/browsing_data_remover_delegate.h" |
20 #include "chrome/browser/browsing_data/registrable_domain_filter_builder.h" | 20 #include "chrome/browser/browsing_data/registrable_domain_filter_builder.h" |
21 #include "chrome/browser/download/download_prefs.h" | |
22 #include "chrome/browser/io_thread.h" | |
23 #include "chrome/browser/profiles/profile.h" | 21 #include "chrome/browser/profiles/profile.h" |
24 #include "chrome/common/pref_names.h" | 22 #include "chrome/common/pref_names.h" |
25 #include "components/browsing_data/content/storage_partition_http_cache_data_rem
over.h" | 23 #include "components/browsing_data/content/storage_partition_http_cache_data_rem
over.h" |
26 #include "components/prefs/pref_service.h" | 24 #include "components/prefs/pref_service.h" |
27 #include "components/web_cache/browser/web_cache_manager.h" | 25 #include "components/web_cache/browser/web_cache_manager.h" |
| 26 #include "content/public/browser/browser_context.h" |
28 #include "content/public/browser/browser_thread.h" | 27 #include "content/public/browser/browser_thread.h" |
| 28 #include "content/public/browser/content_browser_client.h" |
29 #include "content/public/browser/download_manager.h" | 29 #include "content/public/browser/download_manager.h" |
30 #include "content/public/browser/notification_service.h" | 30 #include "content/public/browser/notification_service.h" |
31 #include "content/public/browser/plugin_data_remover.h" | 31 #include "content/public/browser/plugin_data_remover.h" |
32 #include "content/public/browser/ssl_host_state_delegate.h" | 32 #include "content/public/browser/ssl_host_state_delegate.h" |
33 #include "content/public/browser/storage_partition.h" | 33 #include "content/public/browser/storage_partition.h" |
34 #include "content/public/browser/user_metrics.h" | 34 #include "content/public/browser/user_metrics.h" |
35 #include "extensions/features/features.h" | 35 #include "extensions/features/features.h" |
36 #include "media/media_features.h" | 36 #include "media/media_features.h" |
37 #include "net/base/net_errors.h" | 37 #include "net/base/net_errors.h" |
38 #include "net/cookies/cookie_store.h" | 38 #include "net/cookies/cookie_store.h" |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 weak_ptr_factory_.GetWeakPtr()); | 149 weak_ptr_factory_.GetWeakPtr()); |
150 } | 150 } |
151 | 151 |
152 void BrowsingDataRemover::SubTask::CompletionCallback() { | 152 void BrowsingDataRemover::SubTask::CompletionCallback() { |
153 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 153 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
154 DCHECK(is_pending_); | 154 DCHECK(is_pending_); |
155 is_pending_ = false; | 155 is_pending_ = false; |
156 forward_callback_.Run(); | 156 forward_callback_.Run(); |
157 } | 157 } |
158 | 158 |
159 bool BrowsingDataRemover::TimeRange::operator==( | |
160 const BrowsingDataRemover::TimeRange& other) const { | |
161 return begin == other.begin && end == other.end; | |
162 } | |
163 | |
164 // static | |
165 BrowsingDataRemover::TimeRange BrowsingDataRemover::Unbounded() { | |
166 return TimeRange(base::Time(), base::Time::Max()); | |
167 } | |
168 | |
169 // static | |
170 BrowsingDataRemover::TimeRange BrowsingDataRemover::Period( | |
171 browsing_data::TimePeriod period) { | |
172 switch (period) { | |
173 case browsing_data::LAST_HOUR: | |
174 content::RecordAction(UserMetricsAction("ClearBrowsingData_LastHour")); | |
175 break; | |
176 case browsing_data::LAST_DAY: | |
177 content::RecordAction(UserMetricsAction("ClearBrowsingData_LastDay")); | |
178 break; | |
179 case browsing_data::LAST_WEEK: | |
180 content::RecordAction(UserMetricsAction("ClearBrowsingData_LastWeek")); | |
181 break; | |
182 case browsing_data::FOUR_WEEKS: | |
183 content::RecordAction(UserMetricsAction("ClearBrowsingData_LastMonth")); | |
184 break; | |
185 case browsing_data::ALL_TIME: | |
186 content::RecordAction(UserMetricsAction("ClearBrowsingData_Everything")); | |
187 break; | |
188 } | |
189 return TimeRange(CalculateBeginDeleteTime(period), base::Time::Max()); | |
190 } | |
191 | |
192 BrowsingDataRemover::BrowsingDataRemover( | 159 BrowsingDataRemover::BrowsingDataRemover( |
193 content::BrowserContext* browser_context) | 160 content::BrowserContext* browser_context) |
194 : profile_(Profile::FromBrowserContext(browser_context)), | 161 : browser_context_(browser_context), |
195 remove_mask_(-1), | 162 remove_mask_(-1), |
196 origin_type_mask_(-1), | 163 origin_type_mask_(-1), |
197 is_removing_(false), | 164 is_removing_(false), |
198 #if BUILDFLAG(ENABLE_PLUGINS) | 165 #if BUILDFLAG(ENABLE_PLUGINS) |
199 flash_lso_helper_(BrowsingDataFlashLSOHelper::Create(profile_)), | 166 flash_lso_helper_(BrowsingDataFlashLSOHelper::Create(browser_context_)), |
200 #endif | 167 #endif |
201 sub_task_forward_callback_( | 168 sub_task_forward_callback_( |
202 base::Bind(&BrowsingDataRemover::NotifyIfDone, | 169 base::Bind(&BrowsingDataRemover::NotifyIfDone, |
203 base::Unretained(this))), | 170 base::Unretained(this))), |
204 synchronous_clear_operations_(sub_task_forward_callback_), | 171 synchronous_clear_operations_(sub_task_forward_callback_), |
205 clear_embedder_data_(sub_task_forward_callback_), | 172 clear_embedder_data_(sub_task_forward_callback_), |
206 clear_cache_(sub_task_forward_callback_), | 173 clear_cache_(sub_task_forward_callback_), |
207 clear_channel_ids_(sub_task_forward_callback_), | 174 clear_channel_ids_(sub_task_forward_callback_), |
208 clear_http_auth_cache_(sub_task_forward_callback_), | 175 clear_http_auth_cache_(sub_task_forward_callback_), |
209 clear_storage_partition_data_(sub_task_forward_callback_), | 176 clear_storage_partition_data_(sub_task_forward_callback_), |
210 weak_ptr_factory_(this) { | 177 weak_ptr_factory_(this) { |
211 DCHECK(browser_context); | 178 DCHECK(browser_context_); |
212 } | 179 } |
213 | 180 |
214 BrowsingDataRemover::~BrowsingDataRemover() { | 181 BrowsingDataRemover::~BrowsingDataRemover() { |
215 if (!task_queue_.empty()) { | 182 if (!task_queue_.empty()) { |
216 VLOG(1) << "BrowsingDataRemover shuts down with " << task_queue_.size() | 183 VLOG(1) << "BrowsingDataRemover shuts down with " << task_queue_.size() |
217 << " pending tasks"; | 184 << " pending tasks"; |
218 } | 185 } |
219 | 186 |
220 // If we are still removing data, notify observers that their task has been | 187 // If we are still removing data, notify observers that their task has been |
221 // (albeit unsucessfuly) processed, so they can unregister themselves. | 188 // (albeit unsucessfuly) processed, so they can unregister themselves. |
222 // TODO(bauerb): If it becomes a problem that browsing data might not actually | 189 // TODO(bauerb): If it becomes a problem that browsing data might not actually |
223 // be fully cleared when an observer is notified, add a success flag. | 190 // be fully cleared when an observer is notified, add a success flag. |
224 while (!task_queue_.empty()) { | 191 while (!task_queue_.empty()) { |
225 if (observer_list_.HasObserver(task_queue_.front().observer)) | 192 if (observer_list_.HasObserver(task_queue_.front().observer)) |
226 task_queue_.front().observer->OnBrowsingDataRemoverDone(); | 193 task_queue_.front().observer->OnBrowsingDataRemoverDone(); |
227 task_queue_.pop(); | 194 task_queue_.pop(); |
228 } | 195 } |
229 } | 196 } |
230 | 197 |
231 void BrowsingDataRemover::Shutdown() { | 198 void BrowsingDataRemover::Shutdown() { |
232 embedder_delegate_.reset(); | 199 embedder_delegate_.reset(); |
233 } | 200 } |
234 | 201 |
235 void BrowsingDataRemover::SetRemoving(bool is_removing) { | 202 void BrowsingDataRemover::SetRemoving(bool is_removing) { |
236 DCHECK_NE(is_removing_, is_removing); | 203 DCHECK_NE(is_removing_, is_removing); |
237 is_removing_ = is_removing; | 204 is_removing_ = is_removing; |
238 } | 205 } |
239 | 206 |
240 void BrowsingDataRemover::Remove(const TimeRange& time_range, | 207 void BrowsingDataRemover::Remove(const base::Time& delete_begin, |
| 208 const base::Time& delete_end, |
241 int remove_mask, | 209 int remove_mask, |
242 int origin_type_mask) { | 210 int origin_type_mask) { |
243 RemoveInternal(time_range, remove_mask, origin_type_mask, | 211 RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |
244 std::unique_ptr<RegistrableDomainFilterBuilder>(), nullptr); | 212 std::unique_ptr<RegistrableDomainFilterBuilder>(), nullptr); |
245 } | 213 } |
246 | 214 |
247 void BrowsingDataRemover::RemoveAndReply( | 215 void BrowsingDataRemover::RemoveAndReply( |
248 const TimeRange& time_range, | 216 const base::Time& delete_begin, |
| 217 const base::Time& delete_end, |
249 int remove_mask, | 218 int remove_mask, |
250 int origin_type_mask, | 219 int origin_type_mask, |
251 Observer* observer) { | 220 Observer* observer) { |
252 DCHECK(observer); | 221 DCHECK(observer); |
253 RemoveInternal(time_range, remove_mask, origin_type_mask, | 222 RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |
254 std::unique_ptr<RegistrableDomainFilterBuilder>(), observer); | 223 std::unique_ptr<RegistrableDomainFilterBuilder>(), observer); |
255 } | 224 } |
256 | 225 |
257 void BrowsingDataRemover::RemoveWithFilter( | 226 void BrowsingDataRemover::RemoveWithFilter( |
258 const TimeRange& time_range, | 227 const base::Time& delete_begin, |
| 228 const base::Time& delete_end, |
259 int remove_mask, | 229 int remove_mask, |
260 int origin_type_mask, | 230 int origin_type_mask, |
261 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder) { | 231 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder) { |
262 DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); | 232 DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); |
263 DCHECK(filter_builder); | 233 DCHECK(filter_builder); |
264 RemoveInternal(time_range, remove_mask, origin_type_mask, | 234 RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |
265 std::move(filter_builder), nullptr); | 235 std::move(filter_builder), nullptr); |
266 } | 236 } |
267 | 237 |
268 void BrowsingDataRemover::RemoveWithFilterAndReply( | 238 void BrowsingDataRemover::RemoveWithFilterAndReply( |
269 const TimeRange& time_range, | 239 const base::Time& delete_begin, |
| 240 const base::Time& delete_end, |
270 int remove_mask, | 241 int remove_mask, |
271 int origin_type_mask, | 242 int origin_type_mask, |
272 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, | 243 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
273 Observer* observer) { | 244 Observer* observer) { |
274 DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); | 245 DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); |
275 DCHECK(filter_builder); | 246 DCHECK(filter_builder); |
276 DCHECK(observer); | 247 DCHECK(observer); |
277 RemoveInternal(time_range, remove_mask, origin_type_mask, | 248 RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |
278 std::move(filter_builder), observer); | 249 std::move(filter_builder), observer); |
279 } | 250 } |
280 | 251 |
281 void BrowsingDataRemover::RemoveInternal( | 252 void BrowsingDataRemover::RemoveInternal( |
282 const TimeRange& time_range, | 253 const base::Time& delete_begin, |
| 254 const base::Time& delete_end, |
283 int remove_mask, | 255 int remove_mask, |
284 int origin_type_mask, | 256 int origin_type_mask, |
285 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, | 257 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
286 Observer* observer) { | 258 Observer* observer) { |
287 DCHECK(!observer || observer_list_.HasObserver(observer)) | 259 DCHECK(!observer || observer_list_.HasObserver(observer)) |
288 << "Every observer must register itself (by calling AddObserver()) " | 260 << "Every observer must register itself (by calling AddObserver()) " |
289 << "before observing a removal task."; | 261 << "before observing a removal task."; |
290 | 262 |
291 // Remove() and RemoveAndReply() pass a null pointer to indicate no filter. | 263 // Remove() and RemoveAndReply() pass a null pointer to indicate no filter. |
292 // No filter is equivalent to one that |IsEmptyBlacklist()|. | 264 // No filter is equivalent to one that |IsEmptyBlacklist()|. |
293 if (!filter_builder) { | 265 if (!filter_builder) { |
294 filter_builder = base::MakeUnique<RegistrableDomainFilterBuilder>( | 266 filter_builder = base::MakeUnique<RegistrableDomainFilterBuilder>( |
295 RegistrableDomainFilterBuilder::BLACKLIST); | 267 RegistrableDomainFilterBuilder::BLACKLIST); |
296 DCHECK(filter_builder->IsEmptyBlacklist()); | 268 DCHECK(filter_builder->IsEmptyBlacklist()); |
297 } | 269 } |
298 | 270 |
299 task_queue_.emplace( | 271 task_queue_.emplace( |
300 time_range, | 272 delete_begin, |
| 273 delete_end, |
301 remove_mask, | 274 remove_mask, |
302 origin_type_mask, | 275 origin_type_mask, |
303 std::move(filter_builder), | 276 std::move(filter_builder), |
304 observer); | 277 observer); |
305 | 278 |
306 // If this is the only scheduled task, execute it immediately. Otherwise, | 279 // If this is the only scheduled task, execute it immediately. Otherwise, |
307 // it will be automatically executed when all tasks scheduled before it | 280 // it will be automatically executed when all tasks scheduled before it |
308 // finish. | 281 // finish. |
309 if (task_queue_.size() == 1) { | 282 if (task_queue_.size() == 1) { |
310 SetRemoving(true); | 283 SetRemoving(true); |
311 RunNextTask(); | 284 RunNextTask(); |
312 } | 285 } |
313 } | 286 } |
314 | 287 |
315 void BrowsingDataRemover::RunNextTask() { | 288 void BrowsingDataRemover::RunNextTask() { |
316 DCHECK(!task_queue_.empty()); | 289 DCHECK(!task_queue_.empty()); |
317 const RemovalTask& removal_task = task_queue_.front(); | 290 const RemovalTask& removal_task = task_queue_.front(); |
318 | 291 |
319 RemoveImpl(removal_task.time_range, | 292 RemoveImpl(removal_task.delete_begin, |
| 293 removal_task.delete_end, |
320 removal_task.remove_mask, | 294 removal_task.remove_mask, |
321 *removal_task.filter_builder, | 295 *removal_task.filter_builder, |
322 removal_task.origin_type_mask); | 296 removal_task.origin_type_mask); |
323 } | 297 } |
324 | 298 |
325 void BrowsingDataRemover::RemoveImpl( | 299 void BrowsingDataRemover::RemoveImpl( |
326 const TimeRange& time_range, | 300 const base::Time& delete_begin, |
| 301 const base::Time& delete_end, |
327 int remove_mask, | 302 int remove_mask, |
328 const BrowsingDataFilterBuilder& filter_builder, | 303 const BrowsingDataFilterBuilder& filter_builder, |
329 int origin_type_mask) { | 304 int origin_type_mask) { |
330 // =============== README before adding more storage backends =============== | 305 // =============== README before adding more storage backends =============== |
331 // | 306 // |
332 // If you're adding a data storage backend that is included among | 307 // If you're adding a data storage backend that is included among |
333 // RemoveDataMask::FILTERABLE_DATATYPES, you must do one of the following: | 308 // RemoveDataMask::FILTERABLE_DATATYPES, you must do one of the following: |
334 // 1. Support one of the filters generated by |filter_builder|. | 309 // 1. Support one of the filters generated by |filter_builder|. |
335 // 2. Add a comment explaining why is it acceptable in your case to delete all | 310 // 2. Add a comment explaining why is it acceptable in your case to delete all |
336 // data without filtering URLs / origins / domains. | 311 // data without filtering URLs / origins / domains. |
337 // 3. Do not support partial deletion, i.e. only delete your data if | 312 // 3. Do not support partial deletion, i.e. only delete your data if |
338 // |filter_builder.IsEmptyBlacklist()|. Add a comment explaining why this | 313 // |filter_builder.IsEmptyBlacklist()|. Add a comment explaining why this |
339 // is acceptable. | 314 // is acceptable. |
340 synchronous_clear_operations_.Start(); | 315 synchronous_clear_operations_.Start(); |
341 | 316 |
342 // crbug.com/140910: Many places were calling this with base::Time() as | 317 // crbug.com/140910: Many places were calling this with base::Time() as |
343 // delete_end, even though they should've used base::Time::Max(). | 318 // delete_end, even though they should've used base::Time::Max(). |
344 DCHECK_NE(base::Time(), time_range.end); | 319 DCHECK_NE(base::Time(), delete_end); |
345 | 320 |
346 delete_begin_ = time_range.begin; | 321 delete_begin_ = delete_begin; |
347 delete_end_ = time_range.end; | 322 delete_end_ = delete_end; |
348 remove_mask_ = remove_mask; | 323 remove_mask_ = remove_mask; |
349 origin_type_mask_ = origin_type_mask; | 324 origin_type_mask_ = origin_type_mask; |
350 | 325 |
351 if (origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { | 326 if (origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { |
352 content::RecordAction( | 327 content::RecordAction( |
353 UserMetricsAction("ClearBrowsingData_MaskContainsUnprotectedWeb")); | 328 UserMetricsAction("ClearBrowsingData_MaskContainsUnprotectedWeb")); |
354 } | 329 } |
355 if (origin_type_mask_ & BrowsingDataHelper::PROTECTED_WEB) { | 330 if (origin_type_mask_ & BrowsingDataHelper::PROTECTED_WEB) { |
356 content::RecordAction( | 331 content::RecordAction( |
357 UserMetricsAction("ClearBrowsingData_MaskContainsProtectedWeb")); | 332 UserMetricsAction("ClearBrowsingData_MaskContainsProtectedWeb")); |
(...skipping 19 matching lines...) Expand all Loading... |
377 } else if (remove_mask & REMOVE_CACHE) { | 352 } else if (remove_mask & REMOVE_CACHE) { |
378 choice = ONLY_CACHE; | 353 choice = ONLY_CACHE; |
379 } | 354 } |
380 | 355 |
381 UMA_HISTOGRAM_ENUMERATION( | 356 UMA_HISTOGRAM_ENUMERATION( |
382 "History.ClearBrowsingData.UserDeletedCookieOrCache", | 357 "History.ClearBrowsingData.UserDeletedCookieOrCache", |
383 choice, MAX_CHOICE_VALUE); | 358 choice, MAX_CHOICE_VALUE); |
384 | 359 |
385 // Managed devices and supervised users can have restrictions on history | 360 // Managed devices and supervised users can have restrictions on history |
386 // deletion. | 361 // deletion. |
387 PrefService* prefs = profile_->GetPrefs(); | 362 // TODO(crbug.com/668114): This should be provided via ContentBrowserClient |
388 bool may_delete_history = prefs->GetBoolean( | 363 // once BrowsingDataRemover moves to content. |
389 prefs::kAllowDeletingBrowserHistory); | 364 PrefService* prefs = |
| 365 Profile::FromBrowserContext(browser_context_)->GetPrefs(); |
| 366 bool may_delete_history = |
| 367 prefs->GetBoolean(prefs::kAllowDeletingBrowserHistory); |
390 | 368 |
391 // All the UI entry points into the BrowsingDataRemover should be disabled, | 369 // All the UI entry points into the BrowsingDataRemover should be disabled, |
392 // but this will fire if something was missed or added. | 370 // but this will fire if something was missed or added. |
393 DCHECK(may_delete_history || (remove_mask & REMOVE_NOCHECKS) || | 371 DCHECK(may_delete_history || (remove_mask & REMOVE_NOCHECKS) || |
394 (!(remove_mask & REMOVE_HISTORY) && !(remove_mask & REMOVE_DOWNLOADS))); | 372 (!(remove_mask & REMOVE_HISTORY) && !(remove_mask & REMOVE_DOWNLOADS))); |
395 | 373 |
396 ////////////////////////////////////////////////////////////////////////////// | 374 ////////////////////////////////////////////////////////////////////////////// |
397 // INITIALIZATION | 375 // INITIALIZATION |
398 base::Callback<bool(const GURL& url)> filter = | 376 base::Callback<bool(const GURL& url)> filter = |
399 filter_builder.BuildGeneralFilter(); | 377 filter_builder.BuildGeneralFilter(); |
400 | 378 |
401 if ((remove_mask & REMOVE_HISTORY) && may_delete_history) { | 379 if ((remove_mask & REMOVE_HISTORY) && may_delete_history) { |
402 // The SSL Host State that tracks SSL interstitial "proceed" decisions may | 380 // The SSL Host State that tracks SSL interstitial "proceed" decisions may |
403 // include origins that the user has visited, so it must be cleared. | 381 // include origins that the user has visited, so it must be cleared. |
404 // TODO(msramek): We can reuse the plugin filter here, since both plugins | 382 // TODO(msramek): We can reuse the plugin filter here, since both plugins |
405 // and SSL host state are scoped to hosts and represent them as std::string. | 383 // and SSL host state are scoped to hosts and represent them as std::string. |
406 // Rename the method to indicate its more general usage. | 384 // Rename the method to indicate its more general usage. |
407 if (profile_->GetSSLHostStateDelegate()) { | 385 if (browser_context_->GetSSLHostStateDelegate()) { |
408 profile_->GetSSLHostStateDelegate()->Clear( | 386 browser_context_->GetSSLHostStateDelegate()->Clear( |
409 filter_builder.IsEmptyBlacklist() | 387 filter_builder.IsEmptyBlacklist() |
410 ? base::Callback<bool(const std::string&)>() | 388 ? base::Callback<bool(const std::string&)>() |
411 : filter_builder.BuildPluginFilter()); | 389 : filter_builder.BuildPluginFilter()); |
412 } | 390 } |
413 } | 391 } |
414 | 392 |
415 ////////////////////////////////////////////////////////////////////////////// | 393 ////////////////////////////////////////////////////////////////////////////// |
416 // REMOVE_DOWNLOADS | 394 // REMOVE_DOWNLOADS |
417 if ((remove_mask & REMOVE_DOWNLOADS) && may_delete_history) { | 395 if ((remove_mask & REMOVE_DOWNLOADS) && may_delete_history) { |
418 content::RecordAction(UserMetricsAction("ClearBrowsingData_Downloads")); | 396 content::RecordAction(UserMetricsAction("ClearBrowsingData_Downloads")); |
419 content::DownloadManager* download_manager = | 397 content::DownloadManager* download_manager = |
420 BrowserContext::GetDownloadManager(profile_); | 398 BrowserContext::GetDownloadManager(browser_context_); |
421 download_manager->RemoveDownloadsByURLAndTime(filter, | 399 download_manager->RemoveDownloadsByURLAndTime(filter, |
422 delete_begin_, delete_end_); | 400 delete_begin_, delete_end_); |
423 DownloadPrefs* download_prefs = DownloadPrefs::FromDownloadManager( | |
424 download_manager); | |
425 download_prefs->SetSaveFilePath(download_prefs->DownloadPath()); | |
426 } | 401 } |
427 | 402 |
428 ////////////////////////////////////////////////////////////////////////////// | 403 ////////////////////////////////////////////////////////////////////////////// |
429 // REMOVE_CHANNEL_IDS | 404 // REMOVE_CHANNEL_IDS |
430 // Channel IDs are not separated for protected and unprotected web | 405 // Channel IDs are not separated for protected and unprotected web |
431 // origins. We check the origin_type_mask_ to prevent unintended deletion. | 406 // origins. We check the origin_type_mask_ to prevent unintended deletion. |
432 if (remove_mask & REMOVE_CHANNEL_IDS && | 407 if (remove_mask & REMOVE_CHANNEL_IDS && |
433 origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { | 408 origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { |
434 content::RecordAction( | 409 content::RecordAction( |
435 UserMetricsAction("ClearBrowsingData_ChannelIDs")); | 410 UserMetricsAction("ClearBrowsingData_ChannelIDs")); |
436 // Since we are running on the UI thread don't call GetURLRequestContext(). | 411 // Since we are running on the UI thread don't call GetURLRequestContext(). |
437 scoped_refptr<net::URLRequestContextGetter> rq_context = | 412 scoped_refptr<net::URLRequestContextGetter> rq_context = |
438 content::BrowserContext::GetDefaultStoragePartition(profile_)-> | 413 content::BrowserContext::GetDefaultStoragePartition(browser_context_)-> |
439 GetURLRequestContext(); | 414 GetURLRequestContext(); |
440 clear_channel_ids_.Start(); | 415 clear_channel_ids_.Start(); |
441 BrowserThread::PostTask( | 416 BrowserThread::PostTask( |
442 BrowserThread::IO, FROM_HERE, | 417 BrowserThread::IO, FROM_HERE, |
443 base::Bind(&ClearChannelIDsOnIOThread, | 418 base::Bind(&ClearChannelIDsOnIOThread, |
444 filter_builder.BuildChannelIDFilter(), | 419 filter_builder.BuildChannelIDFilter(), |
445 delete_begin_, delete_end_, std::move(rq_context), | 420 delete_begin_, delete_end_, std::move(rq_context), |
446 clear_channel_ids_.GetCompletionCallback())); | 421 clear_channel_ids_.GetCompletionCallback())); |
447 } | 422 } |
448 | 423 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
494 // Flash (which are deleted father down in this method). | 469 // Flash (which are deleted father down in this method). |
495 if (remove_mask & REMOVE_MEDIA_LICENSES) { | 470 if (remove_mask & REMOVE_MEDIA_LICENSES) { |
496 storage_partition_remove_mask |= | 471 storage_partition_remove_mask |= |
497 content::StoragePartition::REMOVE_DATA_MASK_PLUGIN_PRIVATE_DATA; | 472 content::StoragePartition::REMOVE_DATA_MASK_PLUGIN_PRIVATE_DATA; |
498 } | 473 } |
499 | 474 |
500 if (storage_partition_remove_mask) { | 475 if (storage_partition_remove_mask) { |
501 clear_storage_partition_data_.Start(); | 476 clear_storage_partition_data_.Start(); |
502 | 477 |
503 content::StoragePartition* storage_partition; | 478 content::StoragePartition* storage_partition; |
504 if (storage_partition_for_testing_) | 479 if (storage_partition_for_testing_) { |
505 storage_partition = storage_partition_for_testing_; | 480 storage_partition = storage_partition_for_testing_; |
506 else | 481 } else { |
507 storage_partition = BrowserContext::GetDefaultStoragePartition(profile_); | 482 storage_partition = |
| 483 BrowserContext::GetDefaultStoragePartition(browser_context_); |
| 484 } |
508 | 485 |
509 uint32_t quota_storage_remove_mask = | 486 uint32_t quota_storage_remove_mask = |
510 ~content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT; | 487 ~content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT; |
511 | 488 |
512 if (delete_begin_ == base::Time() || | 489 if (delete_begin_ == base::Time() || |
513 origin_type_mask_ & | 490 origin_type_mask_ & |
514 (BrowsingDataHelper::PROTECTED_WEB | BrowsingDataHelper::EXTENSION)) { | 491 (BrowsingDataHelper::PROTECTED_WEB | BrowsingDataHelper::EXTENSION)) { |
515 // If we're deleting since the beginning of time, or we're removing | 492 // If we're deleting since the beginning of time, or we're removing |
516 // protected origins, then remove persistent quota data. | 493 // protected origins, then remove persistent quota data. |
517 quota_storage_remove_mask |= | 494 quota_storage_remove_mask |= |
(...skipping 21 matching lines...) Expand all Loading... |
539 #if BUILDFLAG(ENABLE_PLUGINS) | 516 #if BUILDFLAG(ENABLE_PLUGINS) |
540 // Plugin is data not separated for protected and unprotected web origins. We | 517 // Plugin is data not separated for protected and unprotected web origins. We |
541 // check the origin_type_mask_ to prevent unintended deletion. | 518 // check the origin_type_mask_ to prevent unintended deletion. |
542 if (remove_mask & REMOVE_PLUGIN_DATA && | 519 if (remove_mask & REMOVE_PLUGIN_DATA && |
543 origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { | 520 origin_type_mask_ & BrowsingDataHelper::UNPROTECTED_WEB) { |
544 content::RecordAction(UserMetricsAction("ClearBrowsingData_LSOData")); | 521 content::RecordAction(UserMetricsAction("ClearBrowsingData_LSOData")); |
545 clear_plugin_data_count_ = 1; | 522 clear_plugin_data_count_ = 1; |
546 | 523 |
547 if (filter_builder.IsEmptyBlacklist()) { | 524 if (filter_builder.IsEmptyBlacklist()) { |
548 DCHECK(!plugin_data_remover_); | 525 DCHECK(!plugin_data_remover_); |
549 plugin_data_remover_.reset(content::PluginDataRemover::Create(profile_)); | 526 plugin_data_remover_.reset( |
| 527 content::PluginDataRemover::Create(browser_context_)); |
550 base::WaitableEvent* event = | 528 base::WaitableEvent* event = |
551 plugin_data_remover_->StartRemoving(delete_begin_); | 529 plugin_data_remover_->StartRemoving(delete_begin_); |
552 | 530 |
553 base::WaitableEventWatcher::EventCallback watcher_callback = | 531 base::WaitableEventWatcher::EventCallback watcher_callback = |
554 base::Bind(&BrowsingDataRemover::OnWaitableEventSignaled, | 532 base::Bind(&BrowsingDataRemover::OnWaitableEventSignaled, |
555 weak_ptr_factory_.GetWeakPtr()); | 533 weak_ptr_factory_.GetWeakPtr()); |
556 watcher_.StartWatching(event, watcher_callback); | 534 watcher_.StartWatching(event, watcher_callback); |
557 } else { | 535 } else { |
558 // TODO(msramek): Store filters from the currently executed task on the | 536 // TODO(msramek): Store filters from the currently executed task on the |
559 // object to avoid having to copy them to callback methods. | 537 // object to avoid having to copy them to callback methods. |
(...skipping 10 matching lines...) Expand all Loading... |
570 if (remove_mask & REMOVE_CACHE) { | 548 if (remove_mask & REMOVE_CACHE) { |
571 // Tell the renderers to clear their cache. | 549 // Tell the renderers to clear their cache. |
572 web_cache::WebCacheManager::GetInstance()->ClearCache(); | 550 web_cache::WebCacheManager::GetInstance()->ClearCache(); |
573 | 551 |
574 content::RecordAction(UserMetricsAction("ClearBrowsingData_Cache")); | 552 content::RecordAction(UserMetricsAction("ClearBrowsingData_Cache")); |
575 | 553 |
576 clear_cache_.Start(); | 554 clear_cache_.Start(); |
577 // StoragePartitionHttpCacheDataRemover deletes itself when it is done. | 555 // StoragePartitionHttpCacheDataRemover deletes itself when it is done. |
578 if (filter_builder.IsEmptyBlacklist()) { | 556 if (filter_builder.IsEmptyBlacklist()) { |
579 browsing_data::StoragePartitionHttpCacheDataRemover::CreateForRange( | 557 browsing_data::StoragePartitionHttpCacheDataRemover::CreateForRange( |
580 BrowserContext::GetDefaultStoragePartition(profile_), | 558 BrowserContext::GetDefaultStoragePartition(browser_context_), |
581 delete_begin_, delete_end_) | 559 delete_begin_, delete_end_) |
582 ->Remove(clear_cache_.GetCompletionCallback()); | 560 ->Remove(clear_cache_.GetCompletionCallback()); |
583 } else { | 561 } else { |
584 browsing_data::StoragePartitionHttpCacheDataRemover:: | 562 browsing_data::StoragePartitionHttpCacheDataRemover:: |
585 CreateForURLsAndRange( | 563 CreateForURLsAndRange( |
586 BrowserContext::GetDefaultStoragePartition(profile_), | 564 BrowserContext::GetDefaultStoragePartition(browser_context_), |
587 filter, delete_begin_, delete_end_) | 565 filter, delete_begin_, delete_end_) |
588 ->Remove(clear_cache_.GetCompletionCallback()); | 566 ->Remove(clear_cache_.GetCompletionCallback()); |
589 } | 567 } |
590 | 568 |
591 // Tell the shader disk cache to clear. | 569 // Tell the shader disk cache to clear. |
592 content::RecordAction(UserMetricsAction("ClearBrowsingData_ShaderCache")); | 570 content::RecordAction(UserMetricsAction("ClearBrowsingData_ShaderCache")); |
593 storage_partition_remove_mask |= | 571 storage_partition_remove_mask |= |
594 content::StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE; | 572 content::StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE; |
595 } | 573 } |
596 | 574 |
597 ////////////////////////////////////////////////////////////////////////////// | 575 ////////////////////////////////////////////////////////////////////////////// |
598 // Auth cache. | 576 // Auth cache. |
599 if (remove_mask & REMOVE_COOKIES || remove_mask & REMOVE_PASSWORDS) { | 577 if (remove_mask & REMOVE_COOKIES || remove_mask & REMOVE_PASSWORDS) { |
600 scoped_refptr<net::URLRequestContextGetter> request_context = | 578 scoped_refptr<net::URLRequestContextGetter> request_context = |
601 profile_->GetRequestContext(); | 579 BrowserContext::GetDefaultStoragePartition(browser_context_) |
| 580 ->GetURLRequestContext(); |
602 clear_http_auth_cache_.Start(); | 581 clear_http_auth_cache_.Start(); |
603 BrowserThread::PostTaskAndReply( | 582 BrowserThread::PostTaskAndReply( |
604 BrowserThread::IO, FROM_HERE, | 583 BrowserThread::IO, FROM_HERE, |
605 base::Bind(&ClearHttpAuthCacheOnIOThread, std::move(request_context), | 584 base::Bind(&ClearHttpAuthCacheOnIOThread, std::move(request_context), |
606 delete_begin_), | 585 delete_begin_), |
607 clear_http_auth_cache_.GetCompletionCallback()); | 586 clear_http_auth_cache_.GetCompletionCallback()); |
608 } | 587 } |
609 | 588 |
610 ////////////////////////////////////////////////////////////////////////////// | 589 ////////////////////////////////////////////////////////////////////////////// |
611 // Embedder data. | 590 // Embedder data. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
654 | 633 |
655 int BrowsingDataRemover::GetLastUsedRemovalMask() { | 634 int BrowsingDataRemover::GetLastUsedRemovalMask() { |
656 return remove_mask_; | 635 return remove_mask_; |
657 } | 636 } |
658 | 637 |
659 int BrowsingDataRemover::GetLastUsedOriginTypeMask() { | 638 int BrowsingDataRemover::GetLastUsedOriginTypeMask() { |
660 return origin_type_mask_; | 639 return origin_type_mask_; |
661 } | 640 } |
662 | 641 |
663 BrowsingDataRemover::RemovalTask::RemovalTask( | 642 BrowsingDataRemover::RemovalTask::RemovalTask( |
664 const TimeRange& time_range, | 643 const base::Time& delete_begin, |
| 644 const base::Time& delete_end, |
665 int remove_mask, | 645 int remove_mask, |
666 int origin_type_mask, | 646 int origin_type_mask, |
667 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, | 647 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
668 Observer* observer) | 648 Observer* observer) |
669 : time_range(time_range), | 649 : delete_begin(delete_begin), |
| 650 delete_end(delete_end), |
670 remove_mask(remove_mask), | 651 remove_mask(remove_mask), |
671 origin_type_mask(origin_type_mask), | 652 origin_type_mask(origin_type_mask), |
672 filter_builder(std::move(filter_builder)), | 653 filter_builder(std::move(filter_builder)), |
673 observer(observer) {} | 654 observer(observer) {} |
674 | 655 |
675 BrowsingDataRemover::RemovalTask::~RemovalTask() {} | 656 BrowsingDataRemover::RemovalTask::~RemovalTask() {} |
676 | 657 |
677 bool BrowsingDataRemover::AllDone() { | 658 bool BrowsingDataRemover::AllDone() { |
678 return !synchronous_clear_operations_.is_pending() && | 659 return !synchronous_clear_operations_.is_pending() && |
679 !clear_embedder_data_.is_pending() && | 660 !clear_embedder_data_.is_pending() && |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
774 } | 755 } |
775 | 756 |
776 NotifyIfDone(); | 757 NotifyIfDone(); |
777 } | 758 } |
778 | 759 |
779 void BrowsingDataRemover::OnFlashDataDeleted() { | 760 void BrowsingDataRemover::OnFlashDataDeleted() { |
780 clear_plugin_data_count_--; | 761 clear_plugin_data_count_--; |
781 NotifyIfDone(); | 762 NotifyIfDone(); |
782 } | 763 } |
783 #endif | 764 #endif |
OLD | NEW |