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

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

Issue 2613833004: Split BrowsingDataRemover into an abstract interface and implementation. (Closed)
Patch Set: Removed unnecessary instantiations. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/browsing_data/browsing_data_remover.h" 5 #include "chrome/browser/browsing_data/browsing_data_remover_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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698