summaryrefslogtreecommitdiffstats
path: root/browser/components/preferences/dialogs/clearSiteData.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/preferences/dialogs/clearSiteData.js')
-rw-r--r--browser/components/preferences/dialogs/clearSiteData.js96
1 files changed, 96 insertions, 0 deletions
diff --git a/browser/components/preferences/dialogs/clearSiteData.js b/browser/components/preferences/dialogs/clearSiteData.js
new file mode 100644
index 0000000000..eae2d5f772
--- /dev/null
+++ b/browser/components/preferences/dialogs/clearSiteData.js
@@ -0,0 +1,96 @@
+/* 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.import(
+ "resource:///modules/SiteDataManager.jsm"
+);
+
+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)
+ );
+ },
+
+ onCheckboxCommand(event) {
+ 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());