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
3// found in the LICENSE file.
4
5// Defines the Chrome Extensions BrowsingData API functions, which entail
6// clearing browsing data, and clearing the browser's cache (which, let's be
7// honest, are the same thing), as specified in the extension API JSON.
8
9#ifndef CHROME_BROWSER_EXTENSIONS_API_BROWSING_DATA_BROWSING_DATA_API_H_
10#define CHROME_BROWSER_EXTENSIONS_API_BROWSING_DATA_BROWSING_DATA_API_H_
11
12#include <string>
13
14#include "chrome/browser/browsing_data/browsing_data_remover.h"
15#include "chrome/browser/extensions/chrome_extension_function.h"
16
17class PluginPrefs;
18
19namespace extension_browsing_data_api_constants {
20
21// Parameter name keys.
22extern const char kDataRemovalPermittedKey[];
23extern const char kDataToRemoveKey[];
24extern const char kOptionsKey[];
25
26// Type keys.
27extern const char kAppCacheKey[];
28extern const char kCacheKey[];
29extern const char kCookiesKey[];
30extern const char kDownloadsKey[];
31extern const char kFileSystemsKey[];
32extern const char kFormDataKey[];
33extern const char kHistoryKey[];
34extern const char kIndexedDBKey[];
35extern const char kPluginDataKey[];
36extern const char kLocalStorageKey[];
37extern const char kPasswordsKey[];
38extern const char kServiceWorkersKey[];
39extern const char kWebSQLKey[];
40
41// Option keys.
42extern const char kExtensionsKey[];
43extern const char kOriginTypesKey[];
44extern const char kProtectedWebKey[];
45extern const char kSinceKey[];
46extern const char kUnprotectedWebKey[];
47
48// Errors!
49extern const char kBadDataTypeDetails[];
50extern const char kDeleteProhibitedError[];
51extern const char kOneAtATimeError[];
52
53}  // namespace extension_browsing_data_api_constants
54
55class BrowsingDataSettingsFunction : public ChromeSyncExtensionFunction {
56 public:
57  DECLARE_EXTENSION_FUNCTION("browsingData.settings", BROWSINGDATA_SETTINGS)
58
59  // ExtensionFunction:
60  virtual bool RunSync() OVERRIDE;
61
62 protected:
63  virtual ~BrowsingDataSettingsFunction() {}
64
65 private:
66  // Sets a boolean value in the |selected_dict| with the |data_type| as a key,
67  // indicating whether the data type is both selected and permitted to be
68  // removed; and a value in the |permitted_dict| with the |data_type| as a
69  // key, indicating only whether the data type is permitted to be removed.
70  void SetDetails(base::DictionaryValue* selected_dict,
71                  base::DictionaryValue* permitted_dict,
72                  const char* data_type,
73                  bool is_selected);
74};
75
76// This serves as a base class from which the browsing data API removal
77// functions will inherit. Each needs to be an observer of BrowsingDataRemover
78// events, and each will handle those events in the same way (by calling the
79// passed-in callback function).
80//
81// Each child class must implement GetRemovalMask(), which returns the bitmask
82// of data types to remove.
83class BrowsingDataRemoverFunction : public ChromeAsyncExtensionFunction,
84                                    public BrowsingDataRemover::Observer {
85 public:
86  // BrowsingDataRemover::Observer interface method.
87  virtual void OnBrowsingDataRemoverDone() OVERRIDE;
88
89  // ExtensionFunction:
90  virtual bool RunAsync() OVERRIDE;
91
92 protected:
93  virtual ~BrowsingDataRemoverFunction() {}
94
95  // Children should override this method to provide the proper removal mask
96  // based on the API call they represent.
97  virtual int GetRemovalMask() = 0;
98
99 private:
100  // Updates the removal bitmask according to whether removing plugin data is
101  // supported or not.
102  void CheckRemovingPluginDataSupported(
103      scoped_refptr<PluginPrefs> plugin_prefs);
104
105  // Parse the developer-provided |origin_types| object into an origin_set_mask
106  // that can be used with the BrowsingDataRemover.
107  int ParseOriginSetMask(const base::DictionaryValue& options);
108
109  // Called when we're ready to start removing data.
110  void StartRemoving();
111
112  base::Time remove_since_;
113  int removal_mask_;
114  int origin_set_mask_;
115};
116
117class BrowsingDataRemoveAppcacheFunction : public BrowsingDataRemoverFunction {
118 public:
119  DECLARE_EXTENSION_FUNCTION("browsingData.removeAppcache",
120                             BROWSINGDATA_REMOVEAPPCACHE)
121
122 protected:
123  virtual ~BrowsingDataRemoveAppcacheFunction() {}
124
125  // BrowsingDataRemoverFunction:
126  virtual int GetRemovalMask() OVERRIDE;
127};
128
129class BrowsingDataRemoveFunction : public BrowsingDataRemoverFunction {
130 public:
131  DECLARE_EXTENSION_FUNCTION("browsingData.remove", BROWSINGDATA_REMOVE)
132
133 protected:
134  virtual ~BrowsingDataRemoveFunction() {}
135
136  // BrowsingDataRemoverFunction:
137  virtual int GetRemovalMask() OVERRIDE;
138};
139
140class BrowsingDataRemoveCacheFunction : public BrowsingDataRemoverFunction {
141 public:
142  DECLARE_EXTENSION_FUNCTION("browsingData.removeCache",
143                             BROWSINGDATA_REMOVECACHE)
144
145 protected:
146  virtual ~BrowsingDataRemoveCacheFunction() {}
147
148  // BrowsingDataRemoverFunction:
149  virtual int GetRemovalMask() OVERRIDE;
150};
151
152class BrowsingDataRemoveCookiesFunction : public BrowsingDataRemoverFunction {
153 public:
154  DECLARE_EXTENSION_FUNCTION("browsingData.removeCookies",
155                             BROWSINGDATA_REMOVECOOKIES)
156
157 protected:
158  virtual ~BrowsingDataRemoveCookiesFunction() {}
159
160  // BrowsingDataRemoverFunction:
161  virtual int GetRemovalMask() OVERRIDE;
162};
163
164class BrowsingDataRemoveDownloadsFunction : public BrowsingDataRemoverFunction {
165 public:
166  DECLARE_EXTENSION_FUNCTION("browsingData.removeDownloads",
167                             BROWSINGDATA_REMOVEDOWNLOADS)
168
169 protected:
170  virtual ~BrowsingDataRemoveDownloadsFunction() {}
171
172  // BrowsingDataRemoverFunction:
173  virtual int GetRemovalMask() OVERRIDE;
174};
175
176class BrowsingDataRemoveFileSystemsFunction
177    : public BrowsingDataRemoverFunction {
178 public:
179  DECLARE_EXTENSION_FUNCTION("browsingData.removeFileSystems",
180                             BROWSINGDATA_REMOVEFILESYSTEMS)
181
182 protected:
183  virtual ~BrowsingDataRemoveFileSystemsFunction() {}
184
185  // BrowsingDataRemoverFunction:
186  virtual int GetRemovalMask() OVERRIDE;
187};
188
189class BrowsingDataRemoveFormDataFunction : public BrowsingDataRemoverFunction {
190 public:
191  DECLARE_EXTENSION_FUNCTION("browsingData.removeFormData",
192                             BROWSINGDATA_REMOVEFORMDATA)
193
194 protected:
195  virtual ~BrowsingDataRemoveFormDataFunction() {}
196
197  // BrowsingDataRemoverFunction:
198  virtual int GetRemovalMask() OVERRIDE;
199};
200
201class BrowsingDataRemoveHistoryFunction : public BrowsingDataRemoverFunction {
202 public:
203  DECLARE_EXTENSION_FUNCTION("browsingData.removeHistory",
204                             BROWSINGDATA_REMOVEHISTORY)
205
206 protected:
207  virtual ~BrowsingDataRemoveHistoryFunction() {}
208
209  // BrowsingDataRemoverFunction:
210  virtual int GetRemovalMask() OVERRIDE;
211};
212
213class BrowsingDataRemoveIndexedDBFunction : public BrowsingDataRemoverFunction {
214 public:
215  DECLARE_EXTENSION_FUNCTION("browsingData.removeIndexedDB",
216                             BROWSINGDATA_REMOVEINDEXEDDB)
217
218 protected:
219  virtual ~BrowsingDataRemoveIndexedDBFunction() {}
220
221  // BrowsingDataRemoverFunction:
222  virtual int GetRemovalMask() OVERRIDE;
223};
224
225class BrowsingDataRemoveLocalStorageFunction
226    : public BrowsingDataRemoverFunction {
227 public:
228  DECLARE_EXTENSION_FUNCTION("browsingData.removeLocalStorage",
229                             BROWSINGDATA_REMOVELOCALSTORAGE)
230
231 protected:
232  virtual ~BrowsingDataRemoveLocalStorageFunction() {}
233
234  // BrowsingDataRemoverFunction:
235  virtual int GetRemovalMask() OVERRIDE;
236};
237
238class BrowsingDataRemovePluginDataFunction
239    : public BrowsingDataRemoverFunction {
240 public:
241  DECLARE_EXTENSION_FUNCTION("browsingData.removePluginData",
242                             BROWSINGDATA_REMOVEPLUGINDATA)
243
244 protected:
245  virtual ~BrowsingDataRemovePluginDataFunction() {}
246
247  // BrowsingDataRemoverFunction:
248  virtual int GetRemovalMask() OVERRIDE;
249};
250
251class BrowsingDataRemovePasswordsFunction : public BrowsingDataRemoverFunction {
252 public:
253  DECLARE_EXTENSION_FUNCTION("browsingData.removePasswords",
254                             BROWSINGDATA_REMOVEPASSWORDS)
255
256 protected:
257  virtual ~BrowsingDataRemovePasswordsFunction() {}
258
259  // BrowsingDataRemoverFunction:
260  virtual int GetRemovalMask() OVERRIDE;
261};
262
263class BrowsingDataRemoveServiceWorkersFunction
264    : public BrowsingDataRemoverFunction {
265 public:
266  DECLARE_EXTENSION_FUNCTION("browsingData.removeServiceWorkers",
267                             BROWSINGDATA_REMOVESERVICEWORKERS)
268
269 protected:
270  virtual ~BrowsingDataRemoveServiceWorkersFunction() {}
271
272  // BrowsingDataRemoverFunction:
273  virtual int GetRemovalMask() OVERRIDE;
274};
275
276class BrowsingDataRemoveWebSQLFunction : public BrowsingDataRemoverFunction {
277 public:
278  DECLARE_EXTENSION_FUNCTION("browsingData.removeWebSQL",
279                             BROWSINGDATA_REMOVEWEBSQL)
280
281 protected:
282  virtual ~BrowsingDataRemoveWebSQLFunction() {}
283
284  // BrowsingDataRemoverFunction:
285  virtual int GetRemovalMask() OVERRIDE;
286};
287
288#endif  // CHROME_BROWSER_EXTENSIONS_API_BROWSING_DATA_BROWSING_DATA_API_H_
289