diff -r 000000000000 -r 6474c204b198 browser/metro/base/content/sanitizeUI.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/metro/base/content/sanitizeUI.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,88 @@ +// -*- 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; + } + }, +}; \ No newline at end of file