| 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_impl.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" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 callback.Run(); | 64 callback.Run(); |
| 65 } | 65 } |
| 66 | 66 |
| 67 // Another convenience method to turn a callback without arguments into one that | 67 // Another convenience method to turn a callback without arguments into one that |
| 68 // accepts (and ignores) a single argument. | 68 // accepts (and ignores) a single argument. |
| 69 template <typename T> | 69 template <typename T> |
| 70 base::Callback<void(T)> IgnoreArgument(const base::Closure& callback) { | 70 base::Callback<void(T)> IgnoreArgument(const base::Closure& callback) { |
| 71 return base::Bind(&IgnoreArgumentHelper<T>, callback); | 71 return base::Bind(&IgnoreArgumentHelper<T>, callback); |
| 72 } | 72 } |
| 73 | 73 |
| 74 // Helper to create callback for BrowsingDataRemover::DoesOriginMatchMask. | 74 // Helper to create callback for BrowsingDataRemoverImpl::DoesOriginMatchMask. |
| 75 bool DoesOriginMatchMaskAndUrls( | 75 bool DoesOriginMatchMaskAndUrls( |
| 76 int origin_type_mask, | 76 int origin_type_mask, |
| 77 const base::Callback<bool(const GURL&)>& predicate, | 77 const base::Callback<bool(const GURL&)>& predicate, |
| 78 const GURL& origin, | 78 const GURL& origin, |
| 79 storage::SpecialStoragePolicy* special_storage_policy) { | 79 storage::SpecialStoragePolicy* special_storage_policy) { |
| 80 return predicate.Run(origin) && | 80 return predicate.Run(origin) && |
| 81 BrowsingDataHelper::DoesOriginMatchMask(origin, origin_type_mask, | 81 BrowsingDataHelper::DoesOriginMatchMask(origin, origin_type_mask, |
| 82 special_storage_policy); | 82 special_storage_policy); |
| 83 } | 83 } |
| 84 | 84 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 net::ChannelIDService* channel_id_service = | 120 net::ChannelIDService* channel_id_service = |
| 121 rq_context->GetURLRequestContext()->channel_id_service(); | 121 rq_context->GetURLRequestContext()->channel_id_service(); |
| 122 channel_id_service->GetChannelIDStore()->DeleteForDomainsCreatedBetween( | 122 channel_id_service->GetChannelIDStore()->DeleteForDomainsCreatedBetween( |
| 123 domain_predicate, delete_begin, delete_end, | 123 domain_predicate, delete_begin, delete_end, |
| 124 base::Bind(&OnClearedChannelIDsOnIOThread, | 124 base::Bind(&OnClearedChannelIDsOnIOThread, |
| 125 base::RetainedRef(std::move(rq_context)), callback)); | 125 base::RetainedRef(std::move(rq_context)), callback)); |
| 126 } | 126 } |
| 127 | 127 |
| 128 } // namespace | 128 } // namespace |
| 129 | 129 |
| 130 BrowsingDataRemover::CompletionInhibitor* | 130 BrowsingDataRemoverImpl::CompletionInhibitor* |
| 131 BrowsingDataRemover::completion_inhibitor_ = nullptr; | 131 BrowsingDataRemoverImpl::completion_inhibitor_ = nullptr; |
| 132 | 132 |
| 133 BrowsingDataRemover::SubTask::SubTask(const base::Closure& forward_callback) | 133 BrowsingDataRemoverImpl::SubTask::SubTask(const base::Closure& forward_callback) |
| 134 : is_pending_(false), | 134 : is_pending_(false), |
| 135 forward_callback_(forward_callback), | 135 forward_callback_(forward_callback), |
| 136 weak_ptr_factory_(this) { | 136 weak_ptr_factory_(this) { |
| 137 DCHECK(!forward_callback_.is_null()); | 137 DCHECK(!forward_callback_.is_null()); |
| 138 } | 138 } |
| 139 | 139 |
| 140 BrowsingDataRemover::SubTask::~SubTask() {} | 140 BrowsingDataRemoverImpl::SubTask::~SubTask() {} |
| 141 | 141 |
| 142 void BrowsingDataRemover::SubTask::Start() { | 142 void BrowsingDataRemoverImpl::SubTask::Start() { |
| 143 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 143 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 144 DCHECK(!is_pending_); | 144 DCHECK(!is_pending_); |
| 145 is_pending_ = true; | 145 is_pending_ = true; |
| 146 } | 146 } |
| 147 | 147 |
| 148 base::Closure BrowsingDataRemover::SubTask::GetCompletionCallback() { | 148 base::Closure BrowsingDataRemoverImpl::SubTask::GetCompletionCallback() { |
| 149 return base::Bind(&BrowsingDataRemover::SubTask::CompletionCallback, | 149 return base::Bind(&BrowsingDataRemoverImpl::SubTask::CompletionCallback, |
| 150 weak_ptr_factory_.GetWeakPtr()); | 150 weak_ptr_factory_.GetWeakPtr()); |
| 151 } | 151 } |
| 152 | 152 |
| 153 void BrowsingDataRemover::SubTask::CompletionCallback() { | 153 void BrowsingDataRemoverImpl::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 BrowsingDataRemover::BrowsingDataRemover( | 160 BrowsingDataRemoverImpl::BrowsingDataRemoverImpl( |
| 161 content::BrowserContext* browser_context) | 161 content::BrowserContext* browser_context) |
| 162 : browser_context_(browser_context), | 162 : browser_context_(browser_context), |
| 163 remove_mask_(-1), | 163 remove_mask_(-1), |
| 164 origin_type_mask_(-1), | 164 origin_type_mask_(-1), |
| 165 is_removing_(false), | 165 is_removing_(false), |
| 166 #if BUILDFLAG(ENABLE_PLUGINS) | 166 #if BUILDFLAG(ENABLE_PLUGINS) |
| 167 flash_lso_helper_(BrowsingDataFlashLSOHelper::Create(browser_context_)), | 167 flash_lso_helper_(BrowsingDataFlashLSOHelper::Create(browser_context_)), |
| 168 #endif | 168 #endif |
| 169 sub_task_forward_callback_( | 169 sub_task_forward_callback_( |
| 170 base::Bind(&BrowsingDataRemover::NotifyIfDone, | 170 base::Bind(&BrowsingDataRemoverImpl::NotifyIfDone, |
| 171 base::Unretained(this))), | 171 base::Unretained(this))), |
| 172 synchronous_clear_operations_(sub_task_forward_callback_), | 172 synchronous_clear_operations_(sub_task_forward_callback_), |
| 173 clear_embedder_data_(sub_task_forward_callback_), | 173 clear_embedder_data_(sub_task_forward_callback_), |
| 174 clear_cache_(sub_task_forward_callback_), | 174 clear_cache_(sub_task_forward_callback_), |
| 175 clear_channel_ids_(sub_task_forward_callback_), | 175 clear_channel_ids_(sub_task_forward_callback_), |
| 176 clear_http_auth_cache_(sub_task_forward_callback_), | 176 clear_http_auth_cache_(sub_task_forward_callback_), |
| 177 clear_storage_partition_data_(sub_task_forward_callback_), | 177 clear_storage_partition_data_(sub_task_forward_callback_), |
| 178 weak_ptr_factory_(this) { | 178 weak_ptr_factory_(this) { |
| 179 DCHECK(browser_context_); | 179 DCHECK(browser_context_); |
| 180 } | 180 } |
| 181 | 181 |
| 182 BrowsingDataRemover::~BrowsingDataRemover() { | 182 BrowsingDataRemoverImpl::~BrowsingDataRemoverImpl() { |
| 183 if (!task_queue_.empty()) { | 183 if (!task_queue_.empty()) { |
| 184 VLOG(1) << "BrowsingDataRemover shuts down with " << task_queue_.size() | 184 VLOG(1) << "BrowsingDataRemoverImpl shuts down with " << task_queue_.size() |
| 185 << " pending tasks"; | 185 << " pending tasks"; |
| 186 } | 186 } |
| 187 | 187 |
| 188 // 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 |
| 189 // (albeit unsucessfuly) processed, so they can unregister themselves. | 189 // (albeit unsucessfuly) processed, so they can unregister themselves. |
| 190 // 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 |
| 191 // 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. |
| 192 while (!task_queue_.empty()) { | 192 while (!task_queue_.empty()) { |
| 193 if (observer_list_.HasObserver(task_queue_.front().observer)) | 193 if (observer_list_.HasObserver(task_queue_.front().observer)) |
| 194 task_queue_.front().observer->OnBrowsingDataRemoverDone(); | 194 task_queue_.front().observer->OnBrowsingDataRemoverDone(); |
| 195 task_queue_.pop(); | 195 task_queue_.pop(); |
| 196 } | 196 } |
| 197 } | 197 } |
| 198 | 198 |
| 199 void BrowsingDataRemover::Shutdown() { | 199 void BrowsingDataRemoverImpl::Shutdown() { |
| 200 embedder_delegate_.reset(); | 200 embedder_delegate_.reset(); |
| 201 } | 201 } |
| 202 | 202 |
| 203 void BrowsingDataRemover::SetRemoving(bool is_removing) { | 203 void BrowsingDataRemoverImpl::SetRemoving(bool is_removing) { |
| 204 DCHECK_NE(is_removing_, is_removing); | 204 DCHECK_NE(is_removing_, is_removing); |
| 205 is_removing_ = is_removing; | 205 is_removing_ = is_removing; |
| 206 } | 206 } |
| 207 | 207 |
| 208 void BrowsingDataRemover::Remove(const base::Time& delete_begin, | 208 void BrowsingDataRemoverImpl::SetEmbedderDelegate( |
| 209 std::unique_ptr<BrowsingDataRemoverDelegate> embedder_delegate) { |
| 210 embedder_delegate_ = std::move(embedder_delegate); |
| 211 } |
| 212 |
| 213 BrowsingDataRemoverDelegate* |
| 214 BrowsingDataRemoverImpl::GetEmbedderDelegate() const { |
| 215 return embedder_delegate_.get(); |
| 216 } |
| 217 |
| 218 void BrowsingDataRemoverImpl::Remove(const base::Time& delete_begin, |
| 209 const base::Time& delete_end, | 219 const base::Time& delete_end, |
| 210 int remove_mask, | 220 int remove_mask, |
| 211 int origin_type_mask) { | 221 int origin_type_mask) { |
| 212 RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, | 222 RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |
| 213 std::unique_ptr<RegistrableDomainFilterBuilder>(), nullptr); | 223 std::unique_ptr<RegistrableDomainFilterBuilder>(), nullptr); |
| 214 } | 224 } |
| 215 | 225 |
| 216 void BrowsingDataRemover::RemoveAndReply( | 226 void BrowsingDataRemoverImpl::RemoveAndReply( |
| 217 const base::Time& delete_begin, | 227 const base::Time& delete_begin, |
| 218 const base::Time& delete_end, | 228 const base::Time& delete_end, |
| 219 int remove_mask, | 229 int remove_mask, |
| 220 int origin_type_mask, | 230 int origin_type_mask, |
| 221 Observer* observer) { | 231 Observer* observer) { |
| 222 DCHECK(observer); | 232 DCHECK(observer); |
| 223 RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, | 233 RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |
| 224 std::unique_ptr<RegistrableDomainFilterBuilder>(), observer); | 234 std::unique_ptr<RegistrableDomainFilterBuilder>(), observer); |
| 225 } | 235 } |
| 226 | 236 |
| 227 void BrowsingDataRemover::RemoveWithFilter( | 237 void BrowsingDataRemoverImpl::RemoveWithFilter( |
| 228 const base::Time& delete_begin, | 238 const base::Time& delete_begin, |
| 229 const base::Time& delete_end, | 239 const base::Time& delete_end, |
| 230 int remove_mask, | 240 int remove_mask, |
| 231 int origin_type_mask, | 241 int origin_type_mask, |
| 232 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder) { | 242 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder) { |
| 233 DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); | 243 DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); |
| 234 DCHECK(filter_builder); | 244 DCHECK(filter_builder); |
| 235 RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, | 245 RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |
| 236 std::move(filter_builder), nullptr); | 246 std::move(filter_builder), nullptr); |
| 237 } | 247 } |
| 238 | 248 |
| 239 void BrowsingDataRemover::RemoveWithFilterAndReply( | 249 void BrowsingDataRemoverImpl::RemoveWithFilterAndReply( |
| 240 const base::Time& delete_begin, | 250 const base::Time& delete_begin, |
| 241 const base::Time& delete_end, | 251 const base::Time& delete_end, |
| 242 int remove_mask, | 252 int remove_mask, |
| 243 int origin_type_mask, | 253 int origin_type_mask, |
| 244 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, | 254 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
| 245 Observer* observer) { | 255 Observer* observer) { |
| 246 DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); | 256 DCHECK_EQ(0, remove_mask & ~FILTERABLE_DATATYPES); |
| 247 DCHECK(filter_builder); | 257 DCHECK(filter_builder); |
| 248 DCHECK(observer); | 258 DCHECK(observer); |
| 249 RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, | 259 RemoveInternal(delete_begin, delete_end, remove_mask, origin_type_mask, |
| 250 std::move(filter_builder), observer); | 260 std::move(filter_builder), observer); |
| 251 } | 261 } |
| 252 | 262 |
| 253 void BrowsingDataRemover::RemoveInternal( | 263 void BrowsingDataRemoverImpl::RemoveInternal( |
| 254 const base::Time& delete_begin, | 264 const base::Time& delete_begin, |
| 255 const base::Time& delete_end, | 265 const base::Time& delete_end, |
| 256 int remove_mask, | 266 int remove_mask, |
| 257 int origin_type_mask, | 267 int origin_type_mask, |
| 258 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, | 268 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
| 259 Observer* observer) { | 269 Observer* observer) { |
| 260 DCHECK(!observer || observer_list_.HasObserver(observer)) | 270 DCHECK(!observer || observer_list_.HasObserver(observer)) |
| 261 << "Every observer must register itself (by calling AddObserver()) " | 271 << "Every observer must register itself (by calling AddObserver()) " |
| 262 << "before observing a removal task."; | 272 << "before observing a removal task."; |
| 263 | 273 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 279 | 289 |
| 280 // If this is the only scheduled task, execute it immediately. Otherwise, | 290 // If this is the only scheduled task, execute it immediately. Otherwise, |
| 281 // it will be automatically executed when all tasks scheduled before it | 291 // it will be automatically executed when all tasks scheduled before it |
| 282 // finish. | 292 // finish. |
| 283 if (task_queue_.size() == 1) { | 293 if (task_queue_.size() == 1) { |
| 284 SetRemoving(true); | 294 SetRemoving(true); |
| 285 RunNextTask(); | 295 RunNextTask(); |
| 286 } | 296 } |
| 287 } | 297 } |
| 288 | 298 |
| 289 void BrowsingDataRemover::RunNextTask() { | 299 void BrowsingDataRemoverImpl::RunNextTask() { |
| 290 DCHECK(!task_queue_.empty()); | 300 DCHECK(!task_queue_.empty()); |
| 291 const RemovalTask& removal_task = task_queue_.front(); | 301 const RemovalTask& removal_task = task_queue_.front(); |
| 292 | 302 |
| 293 RemoveImpl(removal_task.delete_begin, | 303 RemoveImpl(removal_task.delete_begin, |
| 294 removal_task.delete_end, | 304 removal_task.delete_end, |
| 295 removal_task.remove_mask, | 305 removal_task.remove_mask, |
| 296 *removal_task.filter_builder, | 306 *removal_task.filter_builder, |
| 297 removal_task.origin_type_mask); | 307 removal_task.origin_type_mask); |
| 298 } | 308 } |
| 299 | 309 |
| 300 void BrowsingDataRemover::RemoveImpl( | 310 void BrowsingDataRemoverImpl::RemoveImpl( |
| 301 const base::Time& delete_begin, | 311 const base::Time& delete_begin, |
| 302 const base::Time& delete_end, | 312 const base::Time& delete_end, |
| 303 int remove_mask, | 313 int remove_mask, |
| 304 const BrowsingDataFilterBuilder& filter_builder, | 314 const BrowsingDataFilterBuilder& filter_builder, |
| 305 int origin_type_mask) { | 315 int origin_type_mask) { |
| 306 // =============== README before adding more storage backends =============== | 316 // =============== README before adding more storage backends =============== |
| 307 // | 317 // |
| 308 // If you're adding a data storage backend that is included among | 318 // If you're adding a data storage backend that is included among |
| 309 // RemoveDataMask::FILTERABLE_DATATYPES, you must do one of the following: | 319 // RemoveDataMask::FILTERABLE_DATATYPES, you must do one of the following: |
| 310 // 1. Support one of the filters generated by |filter_builder|. | 320 // 1. Support one of the filters generated by |filter_builder|. |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 choice = ONLY_CACHE; | 364 choice = ONLY_CACHE; |
| 355 } | 365 } |
| 356 | 366 |
| 357 UMA_HISTOGRAM_ENUMERATION( | 367 UMA_HISTOGRAM_ENUMERATION( |
| 358 "History.ClearBrowsingData.UserDeletedCookieOrCache", | 368 "History.ClearBrowsingData.UserDeletedCookieOrCache", |
| 359 choice, MAX_CHOICE_VALUE); | 369 choice, MAX_CHOICE_VALUE); |
| 360 | 370 |
| 361 // Managed devices and supervised users can have restrictions on history | 371 // Managed devices and supervised users can have restrictions on history |
| 362 // deletion. | 372 // deletion. |
| 363 // TODO(crbug.com/668114): This should be provided via ContentBrowserClient | 373 // TODO(crbug.com/668114): This should be provided via ContentBrowserClient |
| 364 // once BrowsingDataRemover moves to content. | 374 // once BrowsingDataRemoverImpl moves to content. |
| 365 PrefService* prefs = | 375 PrefService* prefs = |
| 366 Profile::FromBrowserContext(browser_context_)->GetPrefs(); | 376 Profile::FromBrowserContext(browser_context_)->GetPrefs(); |
| 367 bool may_delete_history = | 377 bool may_delete_history = |
| 368 prefs->GetBoolean(prefs::kAllowDeletingBrowserHistory); | 378 prefs->GetBoolean(prefs::kAllowDeletingBrowserHistory); |
| 369 | 379 |
| 370 // All the UI entry points into the BrowsingDataRemover should be disabled, | 380 // All the UI entry points into the BrowsingDataRemoverImpl should be |
| 371 // but this will fire if something was missed or added. | 381 // disabled, but this will fire if something was missed or added. |
| 372 DCHECK(may_delete_history || (remove_mask & REMOVE_NOCHECKS) || | 382 DCHECK(may_delete_history || (remove_mask & REMOVE_NOCHECKS) || |
| 373 (!(remove_mask & REMOVE_HISTORY) && !(remove_mask & REMOVE_DOWNLOADS))); | 383 (!(remove_mask & REMOVE_HISTORY) && !(remove_mask & REMOVE_DOWNLOADS))); |
| 374 | 384 |
| 375 ////////////////////////////////////////////////////////////////////////////// | 385 ////////////////////////////////////////////////////////////////////////////// |
| 376 // INITIALIZATION | 386 // INITIALIZATION |
| 377 base::Callback<bool(const GURL& url)> filter = | 387 base::Callback<bool(const GURL& url)> filter = |
| 378 filter_builder.BuildGeneralFilter(); | 388 filter_builder.BuildGeneralFilter(); |
| 379 | 389 |
| 380 if ((remove_mask & REMOVE_HISTORY) && may_delete_history) { | 390 if ((remove_mask & REMOVE_HISTORY) && may_delete_history) { |
| 381 // The SSL Host State that tracks SSL interstitial "proceed" decisions may | 391 // The SSL Host State that tracks SSL interstitial "proceed" decisions may |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 523 clear_plugin_data_count_ = 1; | 533 clear_plugin_data_count_ = 1; |
| 524 | 534 |
| 525 if (filter_builder.IsEmptyBlacklist()) { | 535 if (filter_builder.IsEmptyBlacklist()) { |
| 526 DCHECK(!plugin_data_remover_); | 536 DCHECK(!plugin_data_remover_); |
| 527 plugin_data_remover_.reset( | 537 plugin_data_remover_.reset( |
| 528 content::PluginDataRemover::Create(browser_context_)); | 538 content::PluginDataRemover::Create(browser_context_)); |
| 529 base::WaitableEvent* event = | 539 base::WaitableEvent* event = |
| 530 plugin_data_remover_->StartRemoving(delete_begin_); | 540 plugin_data_remover_->StartRemoving(delete_begin_); |
| 531 | 541 |
| 532 base::WaitableEventWatcher::EventCallback watcher_callback = | 542 base::WaitableEventWatcher::EventCallback watcher_callback = |
| 533 base::Bind(&BrowsingDataRemover::OnWaitableEventSignaled, | 543 base::Bind(&BrowsingDataRemoverImpl::OnWaitableEventSignaled, |
| 534 weak_ptr_factory_.GetWeakPtr()); | 544 weak_ptr_factory_.GetWeakPtr()); |
| 535 watcher_.StartWatching(event, watcher_callback); | 545 watcher_.StartWatching(event, watcher_callback); |
| 536 } else { | 546 } else { |
| 537 // TODO(msramek): Store filters from the currently executed task on the | 547 // TODO(msramek): Store filters from the currently executed task on the |
| 538 // object to avoid having to copy them to callback methods. | 548 // object to avoid having to copy them to callback methods. |
| 539 flash_lso_helper_->StartFetching(base::Bind( | 549 flash_lso_helper_->StartFetching(base::Bind( |
| 540 &BrowsingDataRemover::OnSitesWithFlashDataFetched, | 550 &BrowsingDataRemoverImpl::OnSitesWithFlashDataFetched, |
| 541 weak_ptr_factory_.GetWeakPtr(), | 551 weak_ptr_factory_.GetWeakPtr(), |
| 542 filter_builder.BuildPluginFilter())); | 552 filter_builder.BuildPluginFilter())); |
| 543 } | 553 } |
| 544 } | 554 } |
| 545 #endif | 555 #endif |
| 546 | 556 |
| 547 ////////////////////////////////////////////////////////////////////////////// | 557 ////////////////////////////////////////////////////////////////////////////// |
| 548 // CACHE | 558 // CACHE |
| 549 if (remove_mask & REMOVE_CACHE) { | 559 if (remove_mask & REMOVE_CACHE) { |
| 550 // Tell the renderers to clear their cache. | 560 // Tell the renderers to clear their cache. |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 597 remove_mask, | 607 remove_mask, |
| 598 filter_builder, | 608 filter_builder, |
| 599 origin_type_mask, | 609 origin_type_mask, |
| 600 clear_embedder_data_.GetCompletionCallback()); | 610 clear_embedder_data_.GetCompletionCallback()); |
| 601 } | 611 } |
| 602 | 612 |
| 603 // Notify in case all actions taken were synchronous. | 613 // Notify in case all actions taken were synchronous. |
| 604 synchronous_clear_operations_.GetCompletionCallback().Run(); | 614 synchronous_clear_operations_.GetCompletionCallback().Run(); |
| 605 } | 615 } |
| 606 | 616 |
| 607 void BrowsingDataRemover::AddObserver(Observer* observer) { | 617 void BrowsingDataRemoverImpl::AddObserver(Observer* observer) { |
| 608 observer_list_.AddObserver(observer); | 618 observer_list_.AddObserver(observer); |
| 609 } | 619 } |
| 610 | 620 |
| 611 void BrowsingDataRemover::RemoveObserver(Observer* observer) { | 621 void BrowsingDataRemoverImpl::RemoveObserver(Observer* observer) { |
| 612 observer_list_.RemoveObserver(observer); | 622 observer_list_.RemoveObserver(observer); |
| 613 } | 623 } |
| 614 | 624 |
| 615 void BrowsingDataRemover::OverrideStoragePartitionForTesting( | 625 void BrowsingDataRemoverImpl::OverrideStoragePartitionForTesting( |
| 616 content::StoragePartition* storage_partition) { | 626 content::StoragePartition* storage_partition) { |
| 617 storage_partition_for_testing_ = storage_partition; | 627 storage_partition_for_testing_ = storage_partition; |
| 618 } | 628 } |
| 619 | 629 |
| 620 #if BUILDFLAG(ENABLE_PLUGINS) | 630 #if BUILDFLAG(ENABLE_PLUGINS) |
| 621 void BrowsingDataRemover::OverrideFlashLSOHelperForTesting( | 631 void BrowsingDataRemoverImpl::OverrideFlashLSOHelperForTesting( |
| 622 scoped_refptr<BrowsingDataFlashLSOHelper> flash_lso_helper) { | 632 scoped_refptr<BrowsingDataFlashLSOHelper> flash_lso_helper) { |
| 623 flash_lso_helper_ = flash_lso_helper; | 633 flash_lso_helper_ = flash_lso_helper; |
| 624 } | 634 } |
| 625 #endif | 635 #endif |
| 626 | 636 |
| 627 const base::Time& BrowsingDataRemover::GetLastUsedBeginTime() { | 637 const base::Time& BrowsingDataRemoverImpl::GetLastUsedBeginTime() { |
| 628 return delete_begin_; | 638 return delete_begin_; |
| 629 } | 639 } |
| 630 | 640 |
| 631 const base::Time& BrowsingDataRemover::GetLastUsedEndTime() { | 641 const base::Time& BrowsingDataRemoverImpl::GetLastUsedEndTime() { |
| 632 return delete_end_; | 642 return delete_end_; |
| 633 } | 643 } |
| 634 | 644 |
| 635 int BrowsingDataRemover::GetLastUsedRemovalMask() { | 645 int BrowsingDataRemoverImpl::GetLastUsedRemovalMask() { |
| 636 return remove_mask_; | 646 return remove_mask_; |
| 637 } | 647 } |
| 638 | 648 |
| 639 int BrowsingDataRemover::GetLastUsedOriginTypeMask() { | 649 int BrowsingDataRemoverImpl::GetLastUsedOriginTypeMask() { |
| 640 return origin_type_mask_; | 650 return origin_type_mask_; |
| 641 } | 651 } |
| 642 | 652 |
| 643 BrowsingDataRemover::RemovalTask::RemovalTask( | 653 BrowsingDataRemoverImpl::RemovalTask::RemovalTask( |
| 644 const base::Time& delete_begin, | 654 const base::Time& delete_begin, |
| 645 const base::Time& delete_end, | 655 const base::Time& delete_end, |
| 646 int remove_mask, | 656 int remove_mask, |
| 647 int origin_type_mask, | 657 int origin_type_mask, |
| 648 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, | 658 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
| 649 Observer* observer) | 659 Observer* observer) |
| 650 : delete_begin(delete_begin), | 660 : delete_begin(delete_begin), |
| 651 delete_end(delete_end), | 661 delete_end(delete_end), |
| 652 remove_mask(remove_mask), | 662 remove_mask(remove_mask), |
| 653 origin_type_mask(origin_type_mask), | 663 origin_type_mask(origin_type_mask), |
| 654 filter_builder(std::move(filter_builder)), | 664 filter_builder(std::move(filter_builder)), |
| 655 observer(observer) {} | 665 observer(observer) {} |
| 656 | 666 |
| 657 BrowsingDataRemover::RemovalTask::~RemovalTask() {} | 667 BrowsingDataRemoverImpl::RemovalTask::~RemovalTask() {} |
| 658 | 668 |
| 659 bool BrowsingDataRemover::AllDone() { | 669 bool BrowsingDataRemoverImpl::AllDone() { |
| 660 return !synchronous_clear_operations_.is_pending() && | 670 return !synchronous_clear_operations_.is_pending() && |
| 661 !clear_embedder_data_.is_pending() && | 671 !clear_embedder_data_.is_pending() && |
| 662 !clear_cache_.is_pending() && | 672 !clear_cache_.is_pending() && |
| 663 !clear_channel_ids_.is_pending() && | 673 !clear_channel_ids_.is_pending() && |
| 664 !clear_http_auth_cache_.is_pending() && | 674 !clear_http_auth_cache_.is_pending() && |
| 665 !clear_storage_partition_data_.is_pending() && | 675 !clear_storage_partition_data_.is_pending() && |
| 666 !clear_plugin_data_count_; | 676 !clear_plugin_data_count_; |
| 667 } | 677 } |
| 668 | 678 |
| 669 void BrowsingDataRemover::Notify() { | 679 void BrowsingDataRemoverImpl::Notify() { |
| 670 // Some tests call |RemoveImpl| directly, without using the task scheduler. | 680 // Some tests call |RemoveImpl| directly, without using the task scheduler. |
| 671 // TODO(msramek): Improve those tests so we don't have to do this. Tests | 681 // TODO(msramek): Improve those tests so we don't have to do this. Tests |
| 672 // relying on |RemoveImpl| do so because they need to pass in | 682 // relying on |RemoveImpl| do so because they need to pass in |
| 673 // BrowsingDataFilterBuilder while still keeping ownership of it. Making | 683 // BrowsingDataFilterBuilder while still keeping ownership of it. Making |
| 674 // BrowsingDataFilterBuilder copyable would solve this. | 684 // BrowsingDataFilterBuilder copyable would solve this. |
| 675 if (!is_removing_) { | 685 if (!is_removing_) { |
| 676 DCHECK(task_queue_.empty()); | 686 DCHECK(task_queue_.empty()); |
| 677 return; | 687 return; |
| 678 } | 688 } |
| 679 | 689 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 692 // All removal tasks have finished. Inform the observers that we're idle. | 702 // All removal tasks have finished. Inform the observers that we're idle. |
| 693 SetRemoving(false); | 703 SetRemoving(false); |
| 694 return; | 704 return; |
| 695 } | 705 } |
| 696 | 706 |
| 697 // Yield to the UI thread before executing the next removal task. | 707 // Yield to the UI thread before executing the next removal task. |
| 698 // TODO(msramek): Consider also adding a backoff if too many tasks | 708 // TODO(msramek): Consider also adding a backoff if too many tasks |
| 699 // are scheduled. | 709 // are scheduled. |
| 700 BrowserThread::PostTask( | 710 BrowserThread::PostTask( |
| 701 BrowserThread::UI, FROM_HERE, | 711 BrowserThread::UI, FROM_HERE, |
| 702 base::Bind(&BrowsingDataRemover::RunNextTask, | 712 base::Bind(&BrowsingDataRemoverImpl::RunNextTask, |
| 703 weak_ptr_factory_.GetWeakPtr())); | 713 weak_ptr_factory_.GetWeakPtr())); |
| 704 } | 714 } |
| 705 | 715 |
| 706 void BrowsingDataRemover::NotifyIfDone() { | 716 void BrowsingDataRemoverImpl::NotifyIfDone() { |
| 707 // TODO(brettw) http://crbug.com/305259: This should also observe session | 717 // TODO(brettw) http://crbug.com/305259: This should also observe session |
| 708 // clearing (what about other things such as passwords, etc.?) and wait for | 718 // clearing (what about other things such as passwords, etc.?) and wait for |
| 709 // them to complete before continuing. | 719 // them to complete before continuing. |
| 710 | 720 |
| 711 if (!AllDone()) | 721 if (!AllDone()) |
| 712 return; | 722 return; |
| 713 | 723 |
| 714 if (completion_inhibitor_) { | 724 if (completion_inhibitor_) { |
| 715 completion_inhibitor_->OnBrowsingDataRemoverWouldComplete( | 725 completion_inhibitor_->OnBrowsingDataRemoverWouldComplete( |
| 716 this, base::Bind(&BrowsingDataRemover::Notify, | 726 this, base::Bind(&BrowsingDataRemoverImpl::Notify, |
| 717 weak_ptr_factory_.GetWeakPtr())); | 727 weak_ptr_factory_.GetWeakPtr())); |
| 718 return; | 728 return; |
| 719 } | 729 } |
| 720 | 730 |
| 721 Notify(); | 731 Notify(); |
| 722 } | 732 } |
| 723 | 733 |
| 724 #if BUILDFLAG(ENABLE_PLUGINS) | 734 #if BUILDFLAG(ENABLE_PLUGINS) |
| 725 void BrowsingDataRemover::OnWaitableEventSignaled( | 735 void BrowsingDataRemoverImpl::OnWaitableEventSignaled( |
| 726 base::WaitableEvent* waitable_event) { | 736 base::WaitableEvent* waitable_event) { |
| 727 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 737 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 728 | 738 |
| 729 DCHECK_EQ(1, clear_plugin_data_count_); | 739 DCHECK_EQ(1, clear_plugin_data_count_); |
| 730 clear_plugin_data_count_ = 0; | 740 clear_plugin_data_count_ = 0; |
| 731 | 741 |
| 732 plugin_data_remover_.reset(); | 742 plugin_data_remover_.reset(); |
| 733 watcher_.StopWatching(); | 743 watcher_.StopWatching(); |
| 734 NotifyIfDone(); | 744 NotifyIfDone(); |
| 735 } | 745 } |
| 736 | 746 |
| 737 void BrowsingDataRemover::OnSitesWithFlashDataFetched( | 747 void BrowsingDataRemoverImpl::OnSitesWithFlashDataFetched( |
| 738 base::Callback<bool(const std::string&)> plugin_filter, | 748 base::Callback<bool(const std::string&)> plugin_filter, |
| 739 const std::vector<std::string>& sites) { | 749 const std::vector<std::string>& sites) { |
| 740 DCHECK_EQ(1, clear_plugin_data_count_); | 750 DCHECK_EQ(1, clear_plugin_data_count_); |
| 741 clear_plugin_data_count_ = 0; | 751 clear_plugin_data_count_ = 0; |
| 742 | 752 |
| 743 std::vector<std::string> sites_to_delete; | 753 std::vector<std::string> sites_to_delete; |
| 744 for (const std::string& site : sites) { | 754 for (const std::string& site : sites) { |
| 745 if (plugin_filter.Run(site)) | 755 if (plugin_filter.Run(site)) |
| 746 sites_to_delete.push_back(site); | 756 sites_to_delete.push_back(site); |
| 747 } | 757 } |
| 748 | 758 |
| 749 clear_plugin_data_count_ = sites_to_delete.size(); | 759 clear_plugin_data_count_ = sites_to_delete.size(); |
| 750 | 760 |
| 751 for (const std::string& site : sites_to_delete) { | 761 for (const std::string& site : sites_to_delete) { |
| 752 flash_lso_helper_->DeleteFlashLSOsForSite( | 762 flash_lso_helper_->DeleteFlashLSOsForSite( |
| 753 site, | 763 site, |
| 754 base::Bind(&BrowsingDataRemover::OnFlashDataDeleted, | 764 base::Bind(&BrowsingDataRemoverImpl::OnFlashDataDeleted, |
| 755 weak_ptr_factory_.GetWeakPtr())); | 765 weak_ptr_factory_.GetWeakPtr())); |
| 756 } | 766 } |
| 757 | 767 |
| 758 NotifyIfDone(); | 768 NotifyIfDone(); |
| 759 } | 769 } |
| 760 | 770 |
| 761 void BrowsingDataRemover::OnFlashDataDeleted() { | 771 void BrowsingDataRemoverImpl::OnFlashDataDeleted() { |
| 762 clear_plugin_data_count_--; | 772 clear_plugin_data_count_--; |
| 763 NotifyIfDone(); | 773 NotifyIfDone(); |
| 764 } | 774 } |
| 765 #endif | 775 #endif |
| OLD | NEW |