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