/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";

async function openLibrary() {
  return new Promise(resolve => {
    let library = window.openDialog(
      "chrome://browser/content/places/places.xhtml",
      "",
      "chrome,toolbar=yes,dialog=no,resizable"
    );
    waitForFocus(() => resolve(library), library);
  });
}

add_task(async function test_disable_profile_import() {
  await setupPolicyEngineWithJson({
    policies: {
      DisableProfileImport: true,
    },
  });
  let library = await openLibrary();

  let menu = library.document.getElementById("maintenanceButtonPopup");
  let promisePopupShown = BrowserTestUtils.waitForEvent(menu, "popupshown");
  menu.openPopup();
  await promisePopupShown;

  let profileImportButton = library.document.getElementById("browserImport");
  is(
    profileImportButton.disabled,
    true,
    "Profile Import button should be disabled"
  );

  let promisePopupHidden = BrowserTestUtils.waitForEvent(menu, "popuphidden");
  menu.hidePopup();
  await promisePopupHidden;

  await BrowserTestUtils.closeWindow(library);

  checkLockedPref("browser.newtabpage.activity-stream.migrationExpired", true);
});

add_task(async function test_file_menu() {
  gFileMenu.updateImportCommandEnabledState();

  let command = document.getElementById("cmd_file_importFromAnotherBrowser");
  ok(
    command.getAttribute("disabled"),
    "The `Import from Another Browser…` File menu item command should be disabled"
  );

  if (Services.appinfo.OS == "Darwin") {
    // We would need to have a lot of boilerplate to open the menus on Windows
    // and Linux to test this there.
    let menuitem = document.getElementById("menu_importFromAnotherBrowser");
    ok(
      menuitem.disabled,
      "The `Import from Another Browser…` File menu item should be disabled"
    );
  }
});

add_task(async function test_import_button() {
  await PlacesUIUtils.maybeAddImportButton();
  ok(
    !document.getElementById("import-button"),
    "Import button should be hidden."
  );
});

add_task(async function test_prefs_entrypoint() {
  await SpecialPowers.pushPrefEnv({
    set: [["browser.migrate.preferences-entrypoint.enabled", true]],
  });

  let finalPaneEvent = Services.prefs.getBoolPref("identity.fxaccounts.enabled")
    ? "sync-pane-loaded"
    : "privacy-pane-loaded";
  let finalPrefPaneLoaded = TestUtils.topicObserved(finalPaneEvent, () => true);
  await BrowserTestUtils.withNewTab(
    "about:preferences#general-migrate",
    async browser => {
      await finalPrefPaneLoaded;
      await browser.contentWindow.customElements.whenDefined(
        "migration-wizard"
      );
      let doc = browser.contentDocument;
      ok(
        doc.getElementById("dataMigrationGroup"),
        "Import entrypoint group should exist."
      );
      ok(
        BrowserTestUtils.isHidden(doc.getElementById("dataMigrationGroup")),
        "Import entrypoint should be hidden in prefs if disabled via policy."
      );
      ok(
        !doc.getElementById("migrationWizardDialog").open,
        "Should not have opened the migration wizard."
      );
    }
  );
});
