summaryrefslogtreecommitdiffstats
path: root/webbrowser/modules/QuotaManager.jsm
blob: 48cfe88b3b57000886ec6e7b0308924705d7d1c0 (plain)
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
/* 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);
    }
  }
};