/* 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/. */

// This test makes sure that certificate exceptions UI behaves correctly
// in private browsing windows, based on whether it's opened from the prefs
// window or from the SSL error page (see bug 461627).

function test() {
  const EXCEPTIONS_DLG_URL = "chrome://pippki/content/exceptionDialog.xhtml";
  const EXCEPTIONS_DLG_FEATURES = "chrome,centerscreen";
  const INVALID_CERT_LOCATION = "https://nocert.example.com/";
  waitForExplicitFinish();

  // open a private browsing window
  var pbWin = OpenBrowserWindow({ private: true });
  pbWin.addEventListener(
    "load",
    function () {
      doTest();
    },
    { once: true }
  );

  // Test the certificate exceptions dialog
  function doTest() {
    let params = {
      exceptionAdded: false,
      location: INVALID_CERT_LOCATION,
      prefetchCert: true,
    };
    function testCheckbox() {
      win.removeEventListener("load", testCheckbox);
      Services.obs.addObserver(function onCertUI() {
        Services.obs.removeObserver(onCertUI, "cert-exception-ui-ready");
        ok(win.gCert, "The certificate information should be available now");

        let checkbox = win.document.getElementById("permanent");
        ok(
          checkbox.hasAttribute("disabled"),
          "the permanent checkbox should be disabled when handling the private browsing mode"
        );
        ok(
          !checkbox.hasAttribute("checked"),
          "the permanent checkbox should not be checked when handling the private browsing mode"
        );
        win.close();
        cleanup();
      }, "cert-exception-ui-ready");
    }
    var win = pbWin.openDialog(
      EXCEPTIONS_DLG_URL,
      "",
      EXCEPTIONS_DLG_FEATURES,
      params
    );
    win.addEventListener("load", testCheckbox);
  }

  function cleanup() {
    // close the private browsing window
    pbWin.close();
    finish();
  }
}
