forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbrowsing_data_remover.h
272 lines (231 loc) · 11.2 KB
/
browsing_data_remover.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_PUBLIC_BROWSER_BROWSING_DATA_REMOVER_H_
#define CONTENT_PUBLIC_BROWSER_BROWSING_DATA_REMOVER_H_
#include <memory>
#include "base/callback_forward.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
#include "build/build_config.h"
namespace storage {
class SpecialStoragePolicy;
}
namespace url {
class Origin;
}
namespace content {
class BrowsingDataFilterBuilder;
class BrowsingDataRemoverDelegate;
////////////////////////////////////////////////////////////////////////////////
// BrowsingDataRemover is responsible for removing data related to browsing:
// visits in url database, downloads, cookies ...
//
// USAGE:
//
// 0. Instantiation.
//
// content::BrowsingDataRemover* remover =
// browser_context->GetBrowsingDataRemover();
//
// 1. No observer.
//
// remover->Remove(base::Time(), base::Time::Max(), REMOVE_COOKIES, ALL);
//
// 2. Using an observer to report when one's own removal task is finished.
//
// class CookiesDeleter : public content::BrowsingDataRemover::Observer {
// CookiesDeleter() { remover->AddObserver(this); }
// ~CookiesDeleter() { remover->RemoveObserver(this); }
//
// void DeleteCookies() {
// remover->RemoveAndReply(base::Time(), base::Time::Max(),
// REMOVE_COOKIES, ALL, this);
// }
//
// void OnBrowsingDataRemoverDone() {
// LOG(INFO) << "Cookies were deleted.";
// }
// }
//
////////////////////////////////////////////////////////////////////////////////
//
// TODO(crbug.com/668114): BrowsingDataRemover does not currently support plugin
// data deletion. Use PluginDataRemover instead.
class BrowsingDataRemover {
public:
// Mask used for Remove.
using DataType = uint64_t;
// Storage datatypes.
static constexpr DataType DATA_TYPE_APP_CACHE_DEPRECATED = 1 << 0;
static constexpr DataType DATA_TYPE_FILE_SYSTEMS = 1 << 1;
static constexpr DataType DATA_TYPE_INDEXED_DB = 1 << 2;
static constexpr DataType DATA_TYPE_LOCAL_STORAGE = 1 << 3;
static constexpr DataType DATA_TYPE_WEB_SQL = 1 << 4;
static constexpr DataType DATA_TYPE_SERVICE_WORKERS = 1 << 5;
static constexpr DataType DATA_TYPE_CACHE_STORAGE = 1 << 6;
// This is also persisted, keep with storage datatypes.
static constexpr DataType DATA_TYPE_BACKGROUND_FETCH = 1 << 14;
// Used to request the deletion of embedder-specific storage datatypes.
static constexpr DataType DATA_TYPE_EMBEDDER_DOM_STORAGE = 1 << 7;
// DOM-accessible storage (https://www.w3.org/TR/clear-site-data/#storage).
// Has the same effect as selecting all storage datatypes listed above
// and ones defined by the embedder.
static constexpr DataType DATA_TYPE_DOM_STORAGE =
DATA_TYPE_FILE_SYSTEMS | DATA_TYPE_INDEXED_DB | DATA_TYPE_LOCAL_STORAGE |
DATA_TYPE_WEB_SQL | DATA_TYPE_SERVICE_WORKERS | DATA_TYPE_CACHE_STORAGE |
DATA_TYPE_EMBEDDER_DOM_STORAGE | DATA_TYPE_BACKGROUND_FETCH;
// Other datatypes.
static constexpr DataType DATA_TYPE_COOKIES = 1 << 8;
static constexpr DataType DATA_TYPE_CACHE = 1 << 10;
static constexpr DataType DATA_TYPE_DOWNLOADS = 1 << 11;
static constexpr DataType DATA_TYPE_MEDIA_LICENSES = 1 << 12;
// REMOVE_NOCHECKS intentionally does not check if the browser context is
// prohibited from deleting history or downloads.
static constexpr DataType DATA_TYPE_NO_CHECKS = 1 << 13;
// AVOID_CLOSING_CONNECTIONS is a pseudo-datatype indicating that when
// deleting COOKIES, BrowsingDataRemover should skip
// storage backends whose deletion would cause closing network connections.
// TODO(crbug.com/798760): Remove when fixed.
static constexpr DataType DATA_TYPE_AVOID_CLOSING_CONNECTIONS = 1 << 15;
// Trust Token API (https://github.com/wicg/trust-token-api) persistent
// storage.
static constexpr DataType DATA_TYPE_TRUST_TOKENS = 1 << 16;
// Attribution Reporting
// (https://github.com/WICG/conversion-measurement-api) persistent
// storage that was initiated by a site.
static constexpr DataType DATA_TYPE_ATTRIBUTION_REPORTING_SITE_CREATED =
1 << 17;
// Aggregation Service
// (https://github.com/WICG/attribution-reporting-api/blob/main/AGGREGATE.md#data-processing-through-a-secure-aggregation-service)
// persistent storage.
static constexpr DataType DATA_TYPE_AGGREGATION_SERVICE = 1 << 18;
// Interest groups are stored as part of the Interest Group API experiment
// Public explainer here:
// https://github.com/WICG/turtledove/blob/main/FLEDGE.md
static constexpr DataType DATA_TYPE_INTEREST_GROUPS = 1 << 19;
// Shared storage API
// (https://github.com/pythagoraskitty/shared-storage) persistent storage.
static constexpr DataType DATA_TYPE_SHARED_STORAGE = 1 << 20;
// Similar to DATA_TYPE_ATTRIBUTION_REPORTING_SITE_INITIATED, but only
// refers to data stored internally by the API, such as privacy budgeting
// information.
static constexpr DataType DATA_TYPE_ATTRIBUTION_REPORTING_INTERNAL = 1 << 21;
// Private Aggregation API
// (https://github.com/alexmturner/private-aggregation-api) persistent
// storage. This only refers to data stored internally by the API, such as
// privacy budgeting information. Note that currently the API does not persist
// any other data. Should only be cleared by user-initiated deletions.
static constexpr DataType DATA_TYPE_PRIVATE_AGGREGATION_INTERNAL = 1 << 22;
// Embedders can add more datatypes beyond this point.
static constexpr DataType DATA_TYPE_CONTENT_END =
DATA_TYPE_PRIVATE_AGGREGATION_INTERNAL;
// All data stored by the Attribution Reporting API.
static constexpr DataType DATA_TYPE_ATTRIBUTION_REPORTING =
DATA_TYPE_ATTRIBUTION_REPORTING_SITE_CREATED |
DATA_TYPE_ATTRIBUTION_REPORTING_INTERNAL;
// Data stored by APIs in The Privacy Sandbox (https://privacysandbox.com/).
static constexpr DataType DATA_TYPE_PRIVACY_SANDBOX =
DATA_TYPE_TRUST_TOKENS | DATA_TYPE_ATTRIBUTION_REPORTING |
DATA_TYPE_AGGREGATION_SERVICE | DATA_TYPE_INTEREST_GROUPS |
DATA_TYPE_SHARED_STORAGE | DATA_TYPE_PRIVATE_AGGREGATION_INTERNAL;
// Internal data stored by APIs in the Privacy Sandbox, e.g. privacy budgeting
// information.
static constexpr DataType DATA_TYPE_PRIVACY_SANDBOX_INTERNAL =
DATA_TYPE_ATTRIBUTION_REPORTING_INTERNAL |
DATA_TYPE_PRIVATE_AGGREGATION_INTERNAL;
using OriginType = uint64_t;
// Web storage origins that StoragePartition recognizes as NOT protected
// according to its special storage policy.
static constexpr OriginType ORIGIN_TYPE_UNPROTECTED_WEB = 1 << 0;
// Web storage origins that StoragePartition recognizes as protected
// according to its special storage policy.
static constexpr OriginType ORIGIN_TYPE_PROTECTED_WEB = 1 << 1;
// Embedders can add more origin types beyond this point.
static constexpr OriginType ORIGIN_TYPE_CONTENT_END =
ORIGIN_TYPE_PROTECTED_WEB;
// A helper enum to report the deletion of cookies and/or cache. Do not
// reorder the entries, as this enum is passed to UMA.
// A Java counterpart will be generated for this enum so that it can be
// logged on Android.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.browsing_data
enum CookieOrCacheDeletionChoice {
NEITHER_COOKIES_NOR_CACHE,
ONLY_COOKIES,
ONLY_CACHE,
BOTH_COOKIES_AND_CACHE,
MAX_CHOICE_VALUE
};
// Observer is notified when its own removal task is done.
class Observer {
public:
// Called when a removal task is finished. Note that every removal task can
// only have one observer attached to it, and only that one is called.
// |failed_data_types| is a bitmask of DataTypes (including those defined by
// embedders) for which the deletion did not successfully complete. It will
// always be a subset of the |remove_mask| passed into Remove*().
virtual void OnBrowsingDataRemoverDone(uint64_t failed_data_types) = 0;
protected:
virtual ~Observer() {}
};
// A delegate that will take care of deleting embedder-specific data.
virtual void SetEmbedderDelegate(
BrowsingDataRemoverDelegate* embedder_delegate) = 0;
// Determines whether |origin| matches the |origin_type_mask| according to
// the |special_storage_policy|.
virtual bool DoesOriginMatchMaskForTesting(
uint64_t origin_type_mask,
const url::Origin& origin,
storage::SpecialStoragePolicy* special_storage_policy) = 0;
// Removes browsing data within the given |time_range|, with datatypes being
// specified by |remove_mask| and origin types by |origin_type_mask|.
virtual void Remove(const base::Time& delete_begin,
const base::Time& delete_end,
uint64_t remove_mask,
uint64_t origin_type_mask) = 0;
// A version of the above that applies only removes entries that match the
// provided filter.
virtual void RemoveWithFilter(
const base::Time& delete_begin,
const base::Time& delete_end,
uint64_t remove_mask,
uint64_t origin_type_mask,
std::unique_ptr<BrowsingDataFilterBuilder> filter_builder) = 0;
// A version of the above that in addition informs the |observer| when the
// removal task is finished.
virtual void RemoveAndReply(const base::Time& delete_begin,
const base::Time& delete_end,
uint64_t remove_mask,
uint64_t origin_type_mask,
Observer* observer) = 0;
// A version of the above that in addition informs the |observer| when the
// removal task is finished.
virtual void RemoveWithFilterAndReply(
const base::Time& delete_begin,
const base::Time& delete_end,
uint64_t remove_mask,
uint64_t origin_type_mask,
std::unique_ptr<BrowsingDataFilterBuilder> filter_builder,
Observer* observer) = 0;
// Observers.
virtual void AddObserver(Observer* observer) = 0;
virtual void RemoveObserver(Observer* observer) = 0;
// A |callback| that will be called just before a deletion task is completed
// and observers are notified. The receiver must respond by calling
// |continue_to_completion| to finish the task. Used in tests to artificially
// prolong execution.
virtual void SetWouldCompleteCallbackForTesting(
const base::RepeatingCallback<
void(base::OnceClosure continue_to_completion)>& callback) = 0;
// Parameters of the last call are exposed to be used by tests. Removal and
// origin type masks equal to -1 mean that no removal has ever been executed.
// TODO(msramek): If other consumers than tests are interested in this,
// consider returning them in OnBrowsingDataRemoverDone() callback. If not,
// consider simplifying this interface by removing these methods and changing
// the tests to record the parameters using GMock instead.
virtual const base::Time& GetLastUsedBeginTimeForTesting() = 0;
virtual uint64_t GetLastUsedRemovalMaskForTesting() = 0;
virtual uint64_t GetLastUsedOriginTypeMaskForTesting() = 0;
};
} // namespace content
#endif // CONTENT_PUBLIC_BROWSER_BROWSING_DATA_REMOVER_H_