128 lines
3.7 KiB
JavaScript
128 lines
3.7 KiB
JavaScript
/* 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
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
const baseURL = getRootDirectory(gTestPath).replace(
|
|
"chrome://mochitests/content",
|
|
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
|
|
"http://example.com"
|
|
);
|
|
|
|
async function test_opening_blocked_popups(testURL) {
|
|
// Enable the popup blocker.
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["dom.disable_open_during_load", true]],
|
|
});
|
|
|
|
// Open the test page.
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, testURL);
|
|
|
|
let popupframeBC = await SpecialPowers.spawn(
|
|
tab.linkedBrowser,
|
|
[baseURL + "popup_blocker.html"],
|
|
uri => {
|
|
let iframe = content.document.createElement("iframe");
|
|
iframe.id = "popupframe";
|
|
iframe.src = uri;
|
|
content.document.body.appendChild(iframe);
|
|
return iframe.browsingContext;
|
|
}
|
|
);
|
|
|
|
// Wait for the popup-blocked notification.
|
|
let notification;
|
|
await TestUtils.waitForCondition(
|
|
() =>
|
|
(notification = gBrowser
|
|
.getNotificationBox()
|
|
.getNotificationWithValue("popup-blocked")),
|
|
"Waiting for the popup-blocked notification."
|
|
);
|
|
|
|
ok(notification, "Should have notification.");
|
|
|
|
let pageHideHappened = BrowserTestUtils.waitForContentEvent(
|
|
tab.linkedBrowser,
|
|
"pagehide",
|
|
true
|
|
);
|
|
await SpecialPowers.spawn(tab.linkedBrowser, [baseURL], async function (uri) {
|
|
let iframe = content.document.createElement("iframe");
|
|
content.document.body.appendChild(iframe);
|
|
iframe.src = uri;
|
|
});
|
|
|
|
await pageHideHappened;
|
|
notification = gBrowser
|
|
.getNotificationBox()
|
|
.getNotificationWithValue("popup-blocked");
|
|
ok(notification, "Should still have notification");
|
|
|
|
pageHideHappened = BrowserTestUtils.waitForContentEvent(
|
|
tab.linkedBrowser,
|
|
"pagehide",
|
|
true
|
|
);
|
|
// Now navigate the subframe.
|
|
await SpecialPowers.spawn(popupframeBC, [], async function () {
|
|
content.document.location.href = "about:blank";
|
|
});
|
|
await pageHideHappened;
|
|
await TestUtils.waitForCondition(
|
|
() =>
|
|
!gBrowser.getNotificationBox().getNotificationWithValue("popup-blocked"),
|
|
"Notification should go away"
|
|
);
|
|
ok(
|
|
!gBrowser.getNotificationBox().getNotificationWithValue("popup-blocked"),
|
|
"Should no longer have notification"
|
|
);
|
|
|
|
// Remove the frame and add another one:
|
|
await SpecialPowers.spawn(
|
|
tab.linkedBrowser,
|
|
[baseURL + "popup_blocker.html"],
|
|
uri => {
|
|
content.document.getElementById("popupframe").remove();
|
|
let iframe = content.document.createElement("iframe");
|
|
iframe.id = "popupframe";
|
|
iframe.src = uri;
|
|
content.document.body.appendChild(iframe);
|
|
}
|
|
);
|
|
|
|
// Wait for the popup-blocked notification.
|
|
await TestUtils.waitForCondition(
|
|
() =>
|
|
(notification = gBrowser
|
|
.getNotificationBox()
|
|
.getNotificationWithValue("popup-blocked"))
|
|
);
|
|
|
|
ok(notification, "Should have notification.");
|
|
|
|
await SpecialPowers.spawn(tab.linkedBrowser, [], () => {
|
|
content.document.getElementById("popupframe").remove();
|
|
});
|
|
|
|
await TestUtils.waitForCondition(
|
|
() =>
|
|
!gBrowser.getNotificationBox().getNotificationWithValue("popup-blocked")
|
|
);
|
|
ok(
|
|
!gBrowser.getNotificationBox().getNotificationWithValue("popup-blocked"),
|
|
"Should no longer have notification"
|
|
);
|
|
|
|
BrowserTestUtils.removeTab(tab);
|
|
}
|
|
|
|
add_task(async function () {
|
|
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
|
|
await test_opening_blocked_popups("http://example.com/");
|
|
});
|
|
|
|
add_task(async function () {
|
|
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
|
|
await test_opening_blocked_popups("http://w3c-test.org/");
|
|
});
|