forked from mirrors/gecko-dev
		
	MozReview-Commit-ID: A7mVW5hbvya --HG-- extra : rebase_source : 409f0d9533a5e59ac6ba70c32ef917febba78d6b
		
			
				
	
	
		
			249 lines
		
	
	
	
		
			7.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			249 lines
		
	
	
	
		
			7.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 | 
						|
/* 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/. */
 | 
						|
 | 
						|
var Cc = Components.classes;
 | 
						|
var Ci = Components.interfaces;
 | 
						|
var Cu = Components.utils;
 | 
						|
 | 
						|
var {Sanitizer} = Cu.import("resource:///modules/Sanitizer.jsm", {});
 | 
						|
 | 
						|
var gSanitizePromptDialog = {
 | 
						|
 | 
						|
  get bundleBrowser() {
 | 
						|
    if (!this._bundleBrowser)
 | 
						|
      this._bundleBrowser = document.getElementById("bundleBrowser");
 | 
						|
    return this._bundleBrowser;
 | 
						|
  },
 | 
						|
 | 
						|
  get selectedTimespan() {
 | 
						|
    var durList = document.getElementById("sanitizeDurationChoice");
 | 
						|
    return parseInt(durList.value);
 | 
						|
  },
 | 
						|
 | 
						|
  get sanitizePreferences() {
 | 
						|
    if (!this._sanitizePreferences) {
 | 
						|
      this._sanitizePreferences =
 | 
						|
        document.getElementById("sanitizePreferences");
 | 
						|
    }
 | 
						|
    return this._sanitizePreferences;
 | 
						|
  },
 | 
						|
 | 
						|
  get warningBox() {
 | 
						|
    return document.getElementById("sanitizeEverythingWarningBox");
 | 
						|
  },
 | 
						|
 | 
						|
  init() {
 | 
						|
    // This is used by selectByTimespan() to determine if the window has loaded.
 | 
						|
    this._inited = true;
 | 
						|
 | 
						|
    var s = new Sanitizer();
 | 
						|
    s.prefDomain = "privacy.cpd.";
 | 
						|
 | 
						|
    document.documentElement.getButton("accept").label =
 | 
						|
      this.bundleBrowser.getString("sanitizeButtonOK");
 | 
						|
 | 
						|
    if (this.selectedTimespan === Sanitizer.TIMESPAN_EVERYTHING) {
 | 
						|
      this.prepareWarning();
 | 
						|
      this.warningBox.hidden = false;
 | 
						|
      document.title =
 | 
						|
        this.bundleBrowser.getString("sanitizeDialog2.everything.title");
 | 
						|
    } else
 | 
						|
      this.warningBox.hidden = true;
 | 
						|
  },
 | 
						|
 | 
						|
  selectByTimespan() {
 | 
						|
    // This method is the onselect handler for the duration dropdown.  As a
 | 
						|
    // result it's called a couple of times before onload calls init().
 | 
						|
    if (!this._inited)
 | 
						|
      return;
 | 
						|
 | 
						|
    var warningBox = this.warningBox;
 | 
						|
 | 
						|
    // If clearing everything
 | 
						|
    if (this.selectedTimespan === Sanitizer.TIMESPAN_EVERYTHING) {
 | 
						|
      this.prepareWarning();
 | 
						|
      if (warningBox.hidden) {
 | 
						|
        warningBox.hidden = false;
 | 
						|
        window.resizeBy(0, warningBox.boxObject.height);
 | 
						|
      }
 | 
						|
      window.document.title =
 | 
						|
        this.bundleBrowser.getString("sanitizeDialog2.everything.title");
 | 
						|
      return;
 | 
						|
    }
 | 
						|
 | 
						|
    // If clearing a specific time range
 | 
						|
    if (!warningBox.hidden) {
 | 
						|
      window.resizeBy(0, -warningBox.boxObject.height);
 | 
						|
      warningBox.hidden = true;
 | 
						|
    }
 | 
						|
    window.document.title =
 | 
						|
      window.document.documentElement.getAttribute("noneverythingtitle");
 | 
						|
  },
 | 
						|
 | 
						|
  sanitize() {
 | 
						|
    // Update pref values before handing off to the sanitizer (bug 453440)
 | 
						|
    this.updatePrefs();
 | 
						|
    var s = new Sanitizer();
 | 
						|
    s.prefDomain = "privacy.cpd.";
 | 
						|
 | 
						|
    s.range = Sanitizer.getClearRange(this.selectedTimespan);
 | 
						|
    s.ignoreTimespan = !s.range;
 | 
						|
 | 
						|
    // As the sanitize is async, we disable the buttons, update the label on
 | 
						|
    // the 'accept' button to indicate things are happening and return false -
 | 
						|
    // once the async operation completes (either with or without errors)
 | 
						|
    // we close the window.
 | 
						|
    let docElt = document.documentElement;
 | 
						|
    let acceptButton = docElt.getButton("accept");
 | 
						|
    acceptButton.disabled = true;
 | 
						|
    acceptButton.setAttribute("label",
 | 
						|
                              this.bundleBrowser.getString("sanitizeButtonClearing"));
 | 
						|
    docElt.getButton("cancel").disabled = true;
 | 
						|
 | 
						|
    try {
 | 
						|
      s.sanitize().then(null, Components.utils.reportError)
 | 
						|
                  .then(() => window.close())
 | 
						|
                  .then(null, Components.utils.reportError);
 | 
						|
      return false;
 | 
						|
    } catch (er) {
 | 
						|
      Components.utils.reportError("Exception during sanitize: " + er);
 | 
						|
      return true; // We *do* want to close immediately on error.
 | 
						|
    }
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * If the panel that displays a warning when the duration is "Everything" is
 | 
						|
   * not set up, sets it up.  Otherwise does nothing.
 | 
						|
   *
 | 
						|
   * @param aDontShowItemList Whether only the warning message should be updated.
 | 
						|
   *                          True means the item list visibility status should not
 | 
						|
   *                          be changed.
 | 
						|
   */
 | 
						|
  prepareWarning(aDontShowItemList) {
 | 
						|
    // If the date and time-aware locale warning string is ever used again,
 | 
						|
    // initialize it here.  Currently we use the no-visits warning string,
 | 
						|
    // which does not include date and time.  See bug 480169 comment 48.
 | 
						|
 | 
						|
    var warningStringID;
 | 
						|
    if (this.hasNonSelectedItems()) {
 | 
						|
      warningStringID = "sanitizeSelectedWarning";
 | 
						|
      if (!aDontShowItemList)
 | 
						|
        this.showItemList();
 | 
						|
    } else {
 | 
						|
      warningStringID = "sanitizeEverythingWarning2";
 | 
						|
    }
 | 
						|
 | 
						|
    var warningDesc = document.getElementById("sanitizeEverythingWarning");
 | 
						|
    warningDesc.textContent =
 | 
						|
      this.bundleBrowser.getString(warningStringID);
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Called when the value of a preference element is synced from the actual
 | 
						|
   * pref.  Enables or disables the OK button appropriately.
 | 
						|
   */
 | 
						|
  onReadGeneric() {
 | 
						|
    var found = false;
 | 
						|
 | 
						|
    // Find any other pref that's checked and enabled.
 | 
						|
    var i = 0;
 | 
						|
    while (!found && i < this.sanitizePreferences.childNodes.length) {
 | 
						|
      var preference = this.sanitizePreferences.childNodes[i];
 | 
						|
 | 
						|
      found = !!preference.value &&
 | 
						|
              !preference.disabled;
 | 
						|
      i++;
 | 
						|
    }
 | 
						|
 | 
						|
    try {
 | 
						|
      document.documentElement.getButton("accept").disabled = !found;
 | 
						|
    } catch (e) { }
 | 
						|
 | 
						|
    // Update the warning prompt if needed
 | 
						|
    this.prepareWarning(true);
 | 
						|
 | 
						|
    return undefined;
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sanitizer.prototype.sanitize() requires the prefs to be up-to-date.
 | 
						|
   * Because the type of this prefwindow is "child" -- and that's needed because
 | 
						|
   * without it the dialog has no OK and Cancel buttons -- the prefs are not
 | 
						|
   * updated on dialogaccept on platforms that don't support instant-apply
 | 
						|
   * (i.e., Windows).  We must therefore manually set the prefs from their
 | 
						|
   * corresponding preference elements.
 | 
						|
   */
 | 
						|
  updatePrefs() {
 | 
						|
    Sanitizer.prefs.setIntPref("timeSpan", this.selectedTimespan);
 | 
						|
 | 
						|
    // Keep the pref for the download history in sync with the history pref.
 | 
						|
    document.getElementById("privacy.cpd.downloads").value =
 | 
						|
      document.getElementById("privacy.cpd.history").value;
 | 
						|
 | 
						|
    // Now manually set the prefs from their corresponding preference
 | 
						|
    // elements.
 | 
						|
    var prefs = this.sanitizePreferences.rootBranch;
 | 
						|
    for (let i = 0; i < this.sanitizePreferences.childNodes.length; ++i) {
 | 
						|
      var p = this.sanitizePreferences.childNodes[i];
 | 
						|
      prefs.setBoolPref(p.name, p.value);
 | 
						|
    }
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Check if all of the history items have been selected like the default status.
 | 
						|
   */
 | 
						|
  hasNonSelectedItems() {
 | 
						|
    let checkboxes = document.querySelectorAll("#itemList > [preference]");
 | 
						|
    for (let i = 0; i < checkboxes.length; ++i) {
 | 
						|
      let pref = document.getElementById(checkboxes[i].getAttribute("preference"));
 | 
						|
      if (!pref.value)
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
    return false;
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Show the history items list.
 | 
						|
   */
 | 
						|
  showItemList() {
 | 
						|
    var itemList = document.getElementById("itemList");
 | 
						|
    var expanderButton = document.getElementById("detailsExpander");
 | 
						|
 | 
						|
    if (itemList.collapsed) {
 | 
						|
      expanderButton.className = "expander-up";
 | 
						|
      itemList.setAttribute("collapsed", "false");
 | 
						|
      if (document.documentElement.boxObject.height)
 | 
						|
        window.resizeBy(0, itemList.boxObject.height);
 | 
						|
    }
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Hide the history items list.
 | 
						|
   */
 | 
						|
  hideItemList() {
 | 
						|
    var itemList = document.getElementById("itemList");
 | 
						|
    var expanderButton = document.getElementById("detailsExpander");
 | 
						|
 | 
						|
    if (!itemList.collapsed) {
 | 
						|
      expanderButton.className = "expander-down";
 | 
						|
      window.resizeBy(0, -itemList.boxObject.height);
 | 
						|
      itemList.setAttribute("collapsed", "true");
 | 
						|
    }
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Called by the item list expander button to toggle the list's visibility.
 | 
						|
   */
 | 
						|
  toggleItemList() {
 | 
						|
    var itemList = document.getElementById("itemList");
 | 
						|
 | 
						|
    if (itemList.collapsed)
 | 
						|
      this.showItemList();
 | 
						|
    else
 | 
						|
      this.hideItemList();
 | 
						|
  }
 | 
						|
 | 
						|
 | 
						|
};
 |