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

"use strict";

const TEST_PATH = getRootDirectory(gTestPath).replace(
  "chrome://mochitests/content",
  // eslint-disable-next-line @microsoft/sdl/no-insecure-url
  "http://example.org"
);

const TEST_PAGE = TEST_PATH + "open-self-from-frame.html";

add_task(async function test_identityBlock_inherited_blank() {
  await BrowserTestUtils.withNewTab("https://example.com", async browser => {
    let identityBox = document.getElementById("identity-box");
    // Ensure we remove the 3rd party storage permission for example.org, or
    // it'll mess up other tests:
    let principal = browser.contentPrincipal;
    registerCleanupFunction(() => {
      Services.perms.removeFromPrincipal(
        principal,
        "3rdPartyStorage^http://example.org"
      );
    });
    is(
      identityBox.className,
      "verifiedDomain",
      "Should indicate a secure site."
    );
    // Open a popup from the web content.
    let popupPromise = BrowserTestUtils.waitForNewWindow();
    await SpecialPowers.spawn(browser, [TEST_PAGE], testPage => {
      content.open(testPage, "_blank", "height=300,width=300");
    });
    // Open a tab back in the main window:
    let popup = await popupPromise;
    info("Opened popup");
    let popupBC = popup.gBrowser.selectedBrowser.browsingContext;
    await TestUtils.waitForCondition(
      () => popupBC.children[0]?.currentWindowGlobal
    );

    info("Waiting for button to appear");
    await SpecialPowers.spawn(popupBC.children[0], [], async () => {
      await ContentTaskUtils.waitForCondition(() =>
        content.document.querySelector("button")
      );
    });

    info("Got frame contents.");

    let otherTabPromise = BrowserTestUtils.waitForLocationChange(
      gBrowser,
      TEST_PAGE
    );
    info("Clicking button");
    await BrowserTestUtils.synthesizeMouseAtCenter(
      "button",
      {},
      popupBC.children[0]
    );
    info("Waiting for tab");
    await otherTabPromise;

    ok(
      gURLBar.value.startsWith("example.org/"),
      "URL bar value should be correct, was " + gURLBar.value
    );
    is(
      identityBox.className,
      "notSecure",
      "Identity box should have been updated."
    );

    await BrowserTestUtils.removeTab(gBrowser.selectedTab);
    await BrowserTestUtils.closeWindow(popup);
  });
});
