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