gecko-dev/browser/metro/base/content/sanitizeUI.js

88 lines
3.2 KiB
JavaScript

// -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*-
/* 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/. */
"use strict";
var SanitizeUI = {
_sanitizer: null,
_privDataElement: null,
get _privData() {
if (this._privDataElement === null) {
this._privDataElement = document.getElementById("prefs-privdata");
}
return this._privDataElement;
},
init: function () {
this._sanitizer = new Sanitizer();
this._privData.addEventListener("CheckboxStateChange", this, true);
},
_clearNotificationTimeout: null,
onSanitize: function onSanitize() {
let button = document.getElementById("prefs-clear-data");
let clearNotificationDeck = document.getElementById("clear-notification");
let clearNotificationEmpty = document.getElementById("clear-notification-empty");
let clearNotificationClearing = document.getElementById("clear-notification-clearing");
let clearNotificationDone = document.getElementById("clear-notification-done");
let allCheckboxes = SanitizeUI._privData.querySelectorAll("checkbox");
let allSelected = SanitizeUI._privData.querySelectorAll(
"#prefs-privdata-history[checked], " +
"#prefs-privdata-other[checked] + #prefs-privdata-subitems .privdata-subitem-item[checked]");
// disable button and checkboxes temporarily to indicate something is happening
button.disabled = true;
for (let checkbox of allCheckboxes) {
checkbox.disabled = true;
}
clearNotificationDeck.selectedPanel = clearNotificationClearing;
document.getElementById("clearprivacythrobber").enabled = true;
// Run asynchronously to let UI update
setTimeout(function() {
for (let item of allSelected) {
let itemName = item.getAttribute("itemName");
try {
SanitizeUI._sanitizer.clearItem(itemName);
} catch(e) {
Components.utils.reportError("Error sanitizing " + itemName + ": " + e);
}
}
button.disabled = false;
for (let checkbox of allCheckboxes) {
checkbox.disabled = false;
}
clearNotificationDeck.selectedPanel = clearNotificationDone;
document.getElementById("clearprivacythrobber").enabled = false;
// Clear notifications after 4 seconds
clearTimeout(SanitizeUI._clearNotificationTimeout);
SanitizeUI._clearNotificationTimeout = setTimeout(function() {
clearNotificationDeck.selectedPanel = clearNotificationEmpty;
}, 4000);
}, 0);
},
/* Disable the clear button when nothing is selected */
_onCheckboxChange: function _onCheckboxChange() {
let anySelected = SanitizeUI._privData.querySelector(
"#prefs-privdata-history[checked], " +
"#prefs-privdata-other[checked] + #prefs-privdata-subitems .privdata-subitem-item[checked]");
let clearButton = document.getElementById("prefs-clear-data");
clearButton.disabled = !anySelected;
},
handleEvent: function (aEvent) {
switch (aEvent.type) {
case "CheckboxStateChange":
this._onCheckboxChange();
break;
}
},
};