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

"use strict";

const { PromptTestUtils } = ChromeUtils.importESModule(
  "resource://testing-common/PromptTestUtils.sys.mjs"
);

// Test that javascript dialog events are emitted by the page domain only if
// the dialog is created for the window of the target.
add_task(async function ({ client }) {
  const { Page } = client;

  info("Enable the page domain");
  await Page.enable();

  // Add a listener for dialogs on the test page.
  Page.javascriptDialogOpening(() => {
    ok(false, "Should never receive this event");
  });

  info("Open another tab");
  const otherTab = await BrowserTestUtils.openNewForegroundTab(
    gBrowser,
    toDataURL("test-page")
  );
  is(gBrowser.selectedTab, otherTab, "Selected tab is now the new tab");

  // Create a promise that resolve when dialog prompt is created.
  // It will also take care of closing the dialog.
  let onOtherPageDialog = PromptTestUtils.handleNextPrompt(
    gBrowser.selectedBrowser,
    { modalType: Services.prompt.MODAL_TYPE_CONTENT, promptType: "alert" },
    { buttonNumClick: 0 }
  );

  info("Trigger an alert in the second page");
  SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => {
    content.alert("test");
  });

  info("Wait for the alert to be detected and closed");
  await onOtherPageDialog;

  info("Call bringToFront on the test page to make sure we received");
  await Page.bringToFront();

  BrowserTestUtils.removeTab(otherTab);
});
