mobile/android/modules/Sanitizer.jsm

branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
equal deleted inserted replaced
-1:000000000000 0:9afc4e9b4890
1 // -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 let Cc = Components.classes;
7 let Ci = Components.interfaces;
8 let Cu = Components.utils;
9
10 Cu.import("resource://gre/modules/Services.jsm");
11 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
12 Cu.import("resource://gre/modules/LoadContextInfo.jsm");
13 Cu.import("resource://gre/modules/FormHistory.jsm");
14 Cu.import("resource://gre/modules/Messaging.jsm");
15
16 function dump(a) {
17 Services.console.logStringMessage(a);
18 }
19
20 this.EXPORTED_SYMBOLS = ["Sanitizer"];
21
22 let downloads = {
23 dlmgr: Cc["@mozilla.org/download-manager;1"].getService(Ci.nsIDownloadManager),
24
25 iterate: function (aCallback) {
26 let dlmgr = downloads.dlmgr;
27 let dbConn = dlmgr.DBConnection;
28 let stmt = dbConn.createStatement("SELECT id FROM moz_downloads WHERE " +
29 "state = ? OR state = ? OR state = ? OR state = ? OR state = ? OR state = ?");
30 stmt.bindInt32Parameter(0, Ci.nsIDownloadManager.DOWNLOAD_FINISHED);
31 stmt.bindInt32Parameter(1, Ci.nsIDownloadManager.DOWNLOAD_FAILED);
32 stmt.bindInt32Parameter(2, Ci.nsIDownloadManager.DOWNLOAD_CANCELED);
33 stmt.bindInt32Parameter(3, Ci.nsIDownloadManager.DOWNLOAD_BLOCKED_PARENTAL);
34 stmt.bindInt32Parameter(4, Ci.nsIDownloadManager.DOWNLOAD_BLOCKED_POLICY);
35 stmt.bindInt32Parameter(5, Ci.nsIDownloadManager.DOWNLOAD_DIRTY);
36 while (stmt.executeStep()) {
37 aCallback(dlmgr.getDownload(stmt.row.id));
38 }
39 stmt.finalize();
40 },
41
42 get canClear() {
43 return this.dlmgr.canCleanUp;
44 }
45 };
46
47 function Sanitizer() {}
48 Sanitizer.prototype = {
49 clearItem: function (aItemName)
50 {
51 let item = this.items[aItemName];
52 let canClear = item.canClear;
53 if (typeof canClear == "function") {
54 canClear(function clearCallback(aCanClear) {
55 if (aCanClear)
56 item.clear();
57 });
58 } else if (canClear) {
59 item.clear();
60 }
61 },
62
63 items: {
64 cache: {
65 clear: function ()
66 {
67 var cache = Cc["@mozilla.org/netwerk/cache-storage-service;1"].getService(Ci.nsICacheStorageService);
68 try {
69 cache.clear();
70 } catch(er) {}
71
72 let imageCache = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools)
73 .getImgCacheForDocument(null);
74 try {
75 imageCache.clearCache(false); // true=chrome, false=content
76 } catch(er) {}
77 },
78
79 get canClear()
80 {
81 return true;
82 }
83 },
84
85 cookies: {
86 clear: function ()
87 {
88 Services.cookies.removeAll();
89 },
90
91 get canClear()
92 {
93 return true;
94 }
95 },
96
97 siteSettings: {
98 clear: function ()
99 {
100 // Clear site-specific permissions like "Allow this site to open popups"
101 Services.perms.removeAll();
102
103 // Clear site-specific settings like page-zoom level
104 Cc["@mozilla.org/content-pref/service;1"]
105 .getService(Ci.nsIContentPrefService2)
106 .removeAllDomains(null);
107
108 // Clear "Never remember passwords for this site", which is not handled by
109 // the permission manager
110 var hosts = Services.logins.getAllDisabledHosts({})
111 for (var host of hosts) {
112 Services.logins.setLoginSavingEnabled(host, true);
113 }
114 },
115
116 get canClear()
117 {
118 return true;
119 }
120 },
121
122 offlineApps: {
123 clear: function ()
124 {
125 var cacheService = Cc["@mozilla.org/netwerk/cache-storage-service;1"].getService(Ci.nsICacheStorageService);
126 var appCacheStorage = cacheService.appCacheStorage(LoadContextInfo.default, null);
127 try {
128 appCacheStorage.asyncEvictStorage(null);
129 } catch(er) {}
130 },
131
132 get canClear()
133 {
134 return true;
135 }
136 },
137
138 history: {
139 clear: function ()
140 {
141 sendMessageToJava({ type: "Sanitize:ClearHistory" });
142
143 try {
144 Services.obs.notifyObservers(null, "browser:purge-session-history", "");
145 }
146 catch (e) { }
147
148 try {
149 var seer = Cc["@mozilla.org/network/seer;1"].getService(Ci.nsINetworkSeer);
150 seer.reset();
151 } catch (e) { }
152 },
153
154 get canClear()
155 {
156 // bug 347231: Always allow clearing history due to dependencies on
157 // the browser:purge-session-history notification. (like error console)
158 return true;
159 }
160 },
161
162 formdata: {
163 clear: function ()
164 {
165 FormHistory.update({ op: "remove" });
166 },
167
168 canClear: function (aCallback)
169 {
170 let count = 0;
171 let countDone = {
172 handleResult: function(aResult) { count = aResult; },
173 handleError: function(aError) { Cu.reportError(aError); },
174 handleCompletion: function(aReason) { aCallback(aReason == 0 && count > 0); }
175 };
176 FormHistory.count({}, countDone);
177 }
178 },
179
180 downloadFiles: {
181 clear: function ()
182 {
183 downloads.iterate(function (dl) {
184 // Delete the downloaded files themselves
185 let f = dl.targetFile;
186 if (f.exists()) {
187 f.remove(false);
188 }
189
190 // Also delete downloads from history
191 dl.remove();
192 });
193 },
194
195 get canClear()
196 {
197 return downloads.canClear;
198 }
199 },
200
201 passwords: {
202 clear: function ()
203 {
204 Services.logins.removeAllLogins();
205 },
206
207 get canClear()
208 {
209 let count = Services.logins.countLogins("", "", ""); // count all logins
210 return (count > 0);
211 }
212 },
213
214 sessions: {
215 clear: function ()
216 {
217 // clear all auth tokens
218 var sdr = Cc["@mozilla.org/security/sdr;1"].getService(Ci.nsISecretDecoderRing);
219 sdr.logoutAndTeardown();
220
221 // clear FTP and plain HTTP auth sessions
222 Services.obs.notifyObservers(null, "net:clear-active-logins", null);
223 },
224
225 get canClear()
226 {
227 return true;
228 }
229 }
230 }
231 };
232
233 this.Sanitizer = new Sanitizer();

mercurial