Revision control
Copy as Markdown
Other Tools
/* 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
const { MockExternalProtocolService } = ChromeUtils.importESModule(
);
const tabmail = document.getElementById("tabmail");
let browser,
  button,
  loadedUri = false;
add_setup(async function () {
  const tab = tabmail.openTab("contentTab", {
  });
  await BrowserTestUtils.browserLoaded(tab.browser, undefined, url =>
    url.endsWith("inAppNotificationButton.xhtml")
  );
  await SimpleTest.promiseFocus(tab.browser);
  // This test misbehaves if started immediately.
  // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
  await new Promise(resolve => setTimeout(resolve, 1000));
  browser = tab.browser;
  button = browser.contentWindow.document.querySelector(
    `[is="in-app-notification-button"]`
  );
  MockExternalProtocolService.init();
  registerCleanupFunction(() => {
    tabmail.closeOtherTabs(tabmail.tabInfo[0]);
    MockExternalProtocolService.cleanup();
  });
});
add_task(async function test_linkClickDoesntOpen() {
  loadedUri = false;
  const eventPromise = BrowserTestUtils.waitForEvent(button, "ctaclick");
  EventUtils.synthesizeMouseAtCenter(button, {}, browser.contentWindow);
  const event = await eventPromise;
  Assert.strictEqual(event.button, 0, "Should get left click event");
  Assert.ok(event.composed, "Should get a composed event");
  // We can't check the instance, because this event is from within the tab and
  // loading the module inside the tab to compare to the event is too complicated.
  Assert.equal(
    event.constructor.name,
    "InAppNotificationEvent",
    "Should get an InAppNotificationEvent"
  );
  Assert.ok(!loadedUri, "Should prevent default of click event");
});