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

Side by Side Diff: ios/chrome/browser/browsing_data/browsing_data_remover_helper.cc

Issue 2270063005: Add support for time based deletion of browsing data on iOS (Closed)
Patch Set: Added partial removal for cache Created 4 years, 3 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "ios/chrome/browser/browsing_data/browsing_data_remover_helper.h" 5 #include "ios/chrome/browser/browsing_data/browsing_data_remover_helper.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "ios/chrome/browser/browser_state/chrome_browser_state.h" 9 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
10 10
11 BrowsingDataRemoverHelper::BrowsingDataRemoverHelper() 11 BrowsingDataRemoverHelper::BrowsingDataRemoverHelper()
12 : current_remover_(nullptr) {} 12 : current_remover_(nullptr) {}
13 13
14 BrowsingDataRemoverHelper::~BrowsingDataRemoverHelper() { 14 BrowsingDataRemoverHelper::~BrowsingDataRemoverHelper() {
15 DCHECK(pending_removals_.empty()); 15 DCHECK(pending_removals_.empty());
16 } 16 }
17 17
18 BrowsingDataRemoverHelper::BrowsingDataRemovalInfo::BrowsingDataRemovalInfo( 18 BrowsingDataRemoverHelper::BrowsingDataRemovalInfo::BrowsingDataRemovalInfo(
19 int remove_mask, 19 int remove_mask,
20 browsing_data::TimePeriod time_period,
20 const base::Closure& callback) 21 const base::Closure& callback)
21 : remove_mask(remove_mask) { 22 : remove_mask(remove_mask), time_period(time_period) {
22 callbacks.push_back(callback); 23 callbacks.push_back(callback);
23 } 24 }
24 25
25 BrowsingDataRemoverHelper::BrowsingDataRemovalInfo::~BrowsingDataRemovalInfo() { 26 BrowsingDataRemoverHelper::BrowsingDataRemovalInfo::~BrowsingDataRemovalInfo() {
26 } 27 }
27 28
28 void BrowsingDataRemoverHelper::Remove(ios::ChromeBrowserState* browser_state, 29 void BrowsingDataRemoverHelper::Remove(ios::ChromeBrowserState* browser_state,
29 int remove_mask, 30 int remove_mask,
31 browsing_data::TimePeriod time_period,
30 const base::Closure& callback) { 32 const base::Closure& callback) {
31 DCHECK(browser_state); 33 DCHECK(browser_state);
32 DCHECK(!browser_state->IsOffTheRecord()); 34 DCHECK(!browser_state->IsOffTheRecord());
33 // IOSChromeBrowsingDataRemover::Callbacks are called before 35 // IOSChromeBrowsingDataRemover::Callbacks are called before
34 // OnIOSChromeBrowsingDataRemoverDone() and after 36 // OnIOSChromeBrowsingDataRemoverDone() and after
35 // IOSChromeBrowsingDataRemover::is_removing() is set to false. In this 37 // IOSChromeBrowsingDataRemover::is_removing() is set to false. In this
36 // window, |current_remover_| needs to be checked as well. 38 // window, |current_remover_| needs to be checked as well.
37 if (current_remover_ || IOSChromeBrowsingDataRemover::is_removing()) { 39 if (current_remover_ || IOSChromeBrowsingDataRemover::is_removing()) {
38 // IOSChromeBrowsingDataRemover is not re-entrant. If it is already running, 40 // IOSChromeBrowsingDataRemover is not re-entrant. If it is already running,
39 // add the browser_state to |pending_removals_| for later deletion. If the 41 // add the browser_state to |pending_removals_| for later deletion. If the
40 // browser_state is already scheduled for removal of browsing data, update 42 // browser_state is already scheduled for removal of browsing data, update
41 // the remove mask and callbacks. 43 // the remove mask and callbacks.
42 DCHECK(current_remover_); 44 DCHECK(current_remover_);
43 auto pending_removals_iter = pending_removals_.find(browser_state); 45 auto pending_removals_iter = pending_removals_.find(browser_state);
44 if (pending_removals_iter == pending_removals_.end()) { 46 if (pending_removals_iter == pending_removals_.end()) {
45 std::unique_ptr<BrowsingDataRemovalInfo> removal_info( 47 std::unique_ptr<BrowsingDataRemovalInfo> removal_info(
46 new BrowsingDataRemovalInfo(remove_mask, callback)); 48 new BrowsingDataRemovalInfo(remove_mask, time_period, callback));
47 pending_removals_[browser_state] = std::move(removal_info); 49 pending_removals_[browser_state] = std::move(removal_info);
48 } else { 50 } else {
49 pending_removals_iter->second->remove_mask |= remove_mask; 51 pending_removals_iter->second->remove_mask |= remove_mask;
50 pending_removals_iter->second->callbacks.push_back(callback); 52 pending_removals_iter->second->callbacks.push_back(callback);
51 } 53 }
52 } else { 54 } else {
53 std::unique_ptr<BrowsingDataRemovalInfo> removal_info( 55 std::unique_ptr<BrowsingDataRemovalInfo> removal_info(
54 new BrowsingDataRemovalInfo(remove_mask, callback)); 56 new BrowsingDataRemovalInfo(remove_mask, time_period, callback));
55 DoRemove(browser_state, std::move(removal_info)); 57 DoRemove(browser_state, std::move(removal_info));
56 } 58 }
57 } 59 }
58 60
61 void BrowsingDataRemoverHelper::Remove(ios::ChromeBrowserState* browser_state,
62 int remove_mask,
63 const base::Closure& callback) {
64 Remove(browser_state, remove_mask, browsing_data::ALL_TIME, callback);
65 }
66
59 void BrowsingDataRemoverHelper::OnIOSChromeBrowsingDataRemoverDone() { 67 void BrowsingDataRemoverHelper::OnIOSChromeBrowsingDataRemoverDone() {
60 current_remover_ = nullptr; 68 current_remover_ = nullptr;
61 69
62 DCHECK(current_removal_info_); 70 DCHECK(current_removal_info_);
63 // Inform clients of the currently finished removal operation that browsing 71 // Inform clients of the currently finished removal operation that browsing
64 // data was removed. 72 // data was removed.
65 for (const auto& callback : current_removal_info_->callbacks) { 73 for (const auto& callback : current_removal_info_->callbacks) {
66 if (!callback.is_null()) { 74 if (!callback.is_null()) {
67 callback.Run(); 75 callback.Run();
68 } 76 }
(...skipping 11 matching lines...) Expand all
80 DoRemove(next_browser_state, std::move(removal_info)); 88 DoRemove(next_browser_state, std::move(removal_info));
81 } 89 }
82 90
83 void BrowsingDataRemoverHelper::DoRemove( 91 void BrowsingDataRemoverHelper::DoRemove(
84 ios::ChromeBrowserState* browser_state, 92 ios::ChromeBrowserState* browser_state,
85 std::unique_ptr<BrowsingDataRemovalInfo> removal_info) { 93 std::unique_ptr<BrowsingDataRemovalInfo> removal_info) {
86 DCHECK(!current_remover_ && !IOSChromeBrowsingDataRemover::is_removing()); 94 DCHECK(!current_remover_ && !IOSChromeBrowsingDataRemover::is_removing());
87 95
88 current_removal_info_ = std::move(removal_info); 96 current_removal_info_ = std::move(removal_info);
89 97
98 browsing_data::TimePeriod time_period = current_removal_info_->time_period;
msramek 2016/08/29 14:20:59 nit: I would perhaps just inline this.
ioanap 2016/08/30 11:32:08 Done.
90 // IOSChromeBrowsingDataRemover deletes itself. 99 // IOSChromeBrowsingDataRemover deletes itself.
91 IOSChromeBrowsingDataRemover* remover = 100 IOSChromeBrowsingDataRemover* remover =
92 IOSChromeBrowsingDataRemover::CreateForPeriod( 101 IOSChromeBrowsingDataRemover::CreateForPeriod(browser_state, time_period);
93 browser_state, IOSChromeBrowsingDataRemover::EVERYTHING);
94 remover->AddObserver(this); 102 remover->AddObserver(this);
95 current_remover_ = remover; 103 current_remover_ = remover;
96 int remove_mask = current_removal_info_->remove_mask; 104 int remove_mask = current_removal_info_->remove_mask;
97 remover->Remove(remove_mask); 105 remover->Remove(remove_mask);
98 } 106 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698