File: clearSiteData.js

package info (click to toggle)
firefox 141.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,550,588 kB
  • sloc: cpp: 7,426,506; javascript: 6,367,238; ansic: 3,707,351; python: 1,369,002; xml: 623,983; asm: 426,918; java: 184,324; sh: 64,488; makefile: 19,203; objc: 13,059; perl: 12,955; yacc: 4,583; cs: 3,846; pascal: 3,352; lex: 1,720; ruby: 1,071; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (100 lines) | stat: -rw-r--r-- 3,041 bytes parent folder | download | duplicates (3)
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/* 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/. */

const { SiteDataManager } = ChromeUtils.importESModule(
  "resource:///modules/SiteDataManager.sys.mjs"
);

ChromeUtils.defineESModuleGetters(this, {
  DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
});

var gClearSiteDataDialog = {
  _clearSiteDataCheckbox: null,
  _clearCacheCheckbox: null,

  onLoad() {
    document.mozSubdialogReady = this.init();
  },

  async init() {
    this._dialog = document.querySelector("dialog");
    this._clearSiteDataCheckbox = document.getElementById("clearSiteData");
    this._clearCacheCheckbox = document.getElementById("clearCache");

    // We'll block init() on this because the result values may impact
    // subdialog sizing.
    await Promise.all([
      SiteDataManager.getTotalUsage().then(bytes => {
        let [amount, unit] = DownloadUtils.convertByteUnits(bytes);
        document.l10n.setAttributes(
          this._clearSiteDataCheckbox,
          "clear-site-data-cookies-with-data",
          { amount, unit }
        );
      }),
      SiteDataManager.getCacheSize().then(bytes => {
        let [amount, unit] = DownloadUtils.convertByteUnits(bytes);
        document.l10n.setAttributes(
          this._clearCacheCheckbox,
          "clear-site-data-cache-with-data",
          { amount, unit }
        );
      }),
    ]);
    await document.l10n.translateElements([
      this._clearCacheCheckbox,
      this._clearSiteDataCheckbox,
    ]);

    document.addEventListener("dialogaccept", event => this.onClear(event));

    this._clearSiteDataCheckbox.addEventListener("command", e =>
      this.onCheckboxCommand(e)
    );
    this._clearCacheCheckbox.addEventListener("command", e =>
      this.onCheckboxCommand(e)
    );

    document
      .getElementById("key_close")
      .addEventListener("command", () => window.close());
  },

  onCheckboxCommand() {
    this._dialog.setAttribute(
      "buttondisabledaccept",
      !(this._clearSiteDataCheckbox.checked || this._clearCacheCheckbox.checked)
    );
  },

  onClear(event) {
    let clearSiteData = this._clearSiteDataCheckbox.checked;
    let clearCache = this._clearCacheCheckbox.checked;

    if (clearSiteData) {
      // Ask for confirmation before clearing site data
      if (!SiteDataManager.promptSiteDataRemoval(window)) {
        clearSiteData = false;
        // Prevent closing the dialog when the data removal wasn't allowed.
        event.preventDefault();
      }
    }

    if (clearSiteData) {
      SiteDataManager.removeSiteData();
    }
    if (clearCache) {
      SiteDataManager.removeCache();

      // If we're not clearing site data, we need to tell the
      // SiteDataManager to signal that it's updating.
      if (!clearSiteData) {
        SiteDataManager.updateSites();
      }
    }
  },
};

window.addEventListener("load", () => gClearSiteDataDialog.onLoad());