diff options
Diffstat (limited to 'modules/QuotaManager.jsm')
-rw-r--r-- | modules/QuotaManager.jsm | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/modules/QuotaManager.jsm b/modules/QuotaManager.jsm new file mode 100644 index 0000000..48cfe88 --- /dev/null +++ b/modules/QuotaManager.jsm @@ -0,0 +1,51 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +this.EXPORTED_SYMBOLS = ["QuotaManagerHelper"]; + +Components.utils.import('resource://gre/modules/Services.jsm'); + +const Ci = Components.interfaces; +const Cc = Components.classes; +const Cu = Components.utils; + +this.QuotaManagerHelper = { + clear: function(isShutDown) { + try { + var stord = Services.dirsvc.get("ProfD", Ci.nsIFile); + stord.append("storage"); + if (stord.exists() && stord.isDirectory()) { + var doms = {}; + for (var stor of ["default", "permanent", "temporary"]) { + var storsubd = stord.clone(); + storsubd.append(stor); + if (storsubd.exists() && storsubd.isDirectory()) { + var entries = storsubd.directoryEntries; + while(entries.hasMoreElements()) { + var host, entry = entries.getNext(); + entry.QueryInterface(Ci.nsIFile); + if ((host = /^(https?|file)\+\+\+(.+)$/.exec(entry.leafName)) !== null) { + if (isShutDown) { + entry.remove(true); + } else { + doms[host[1] + "://" + host[2]] = true; + } + } + } + } + } + var qm = Cc["@mozilla.org/dom/quota-manager-service;1"] + .getService(Ci.nsIQuotaManagerService); + for (var dom in doms) { + var uri = Services.io.newURI(dom, null, null); + let principal = Services.scriptSecurityManager + .createCodebasePrincipal(uri, {}); + qm.clearStoragesForPrincipal(principal); + } + } + } catch(er) { + Cu.reportError(er); + } + } +}; |