// Make sure that we can open private browsing windows

function test() {
  waitForExplicitFinish();
  var nonPrivateWin = OpenBrowserWindow();
  ok(
    !PrivateBrowsingUtils.isWindowPrivate(nonPrivateWin),
    "OpenBrowserWindow() should open a normal window"
  );
  nonPrivateWin.close();

  var privateWin = OpenBrowserWindow({ private: true });
  ok(
    PrivateBrowsingUtils.isWindowPrivate(privateWin),
    "OpenBrowserWindow({private: true}) should open a private window"
  );

  nonPrivateWin = OpenBrowserWindow({ private: false });
  ok(
    !PrivateBrowsingUtils.isWindowPrivate(nonPrivateWin),
    "OpenBrowserWindow({private: false}) should open a normal window"
  );
  nonPrivateWin.close();

  whenDelayedStartupFinished(privateWin, function () {
    nonPrivateWin = privateWin.OpenBrowserWindow({ private: false });
    ok(
      !PrivateBrowsingUtils.isWindowPrivate(nonPrivateWin),
      "privateWin.OpenBrowserWindow({private: false}) should open a normal window"
    );

    nonPrivateWin.close();

    [
      {
        normal: "menu_newNavigator",
        private: "menu_newPrivateWindow",
        accesskey: true,
      },
      {
        normal: "appmenu_newNavigator",
        private: "appmenu_newPrivateWindow",
        accesskey: false,
      },
    ].forEach(function (menu) {
      let newWindow = privateWin.document.getElementById(menu.normal);
      let newPrivateWindow = privateWin.document.getElementById(menu.private);
      if (newWindow && newPrivateWindow) {
        ok(
          !newPrivateWindow.hidden,
          "New Private Window menu item should be hidden"
        );
        isnot(
          newWindow.label,
          newPrivateWindow.label,
          "New Window's label shouldn't be overwritten"
        );
        if (menu.accesskey) {
          isnot(
            newWindow.accessKey,
            newPrivateWindow.accessKey,
            "New Window's accessKey shouldn't be overwritten"
          );
        }
        isnot(
          newWindow.command,
          newPrivateWindow.command,
          "New Window's command shouldn't be overwritten"
        );
      }
    });

    is(
      privateWin.gBrowser.tabs[0].label,
      "New Private Tab",
      "New tabs in the private browsing windows should have 'New Private Tab' as the title."
    );

    privateWin.close();

    Services.prefs.setBoolPref("browser.privatebrowsing.autostart", true);
    privateWin = OpenBrowserWindow({ private: true });
    whenDelayedStartupFinished(privateWin, function () {
      [
        {
          normal: "menu_newNavigator",
          private: "menu_newPrivateWindow",
          accessKey: true,
        },
        {
          normal: "appmenu_newNavigator",
          private: "appmenu_newPrivateWindow",
          accessKey: false,
        },
      ].forEach(function (menu) {
        let newWindow = privateWin.document.getElementById(menu.normal);
        let newPrivateWindow = privateWin.document.getElementById(menu.private);
        if (newWindow && newPrivateWindow) {
          ok(
            newPrivateWindow.hidden,
            "New Private Window menu item should be hidden"
          );
          is(
            newWindow.label,
            newPrivateWindow.label,
            "New Window's label should be overwritten"
          );
          if (menu.accesskey) {
            is(
              newWindow.accessKey,
              newPrivateWindow.accessKey,
              "New Window's accessKey should be overwritten"
            );
          }
          is(
            newWindow.command,
            newPrivateWindow.command,
            "New Window's command should be overwritten"
          );
        }
      });

      is(
        privateWin.gBrowser.tabs[0].label,
        "New Tab",
        "Normal tab title is used also in the permanent private browsing mode."
      );
      privateWin.close();
      Services.prefs.clearUserPref("browser.privatebrowsing.autostart");
      finish();
    });
  });
}
