Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* 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/. */
"use strict";
const { PermissionTestUtils } = ChromeUtils.importESModule(
);
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [
["dom.disable_open_during_load", true],
["dom.security.framebusting_intervention.enabled", true],
["dom.disable_open_click_delay", 0],
],
});
});
add_task(async function () {
const tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
"about:blank"
);
await triggerFramebustingIntervention(tab);
await openSettingsPopup();
info("Checking notification l10n...");
const notification = gBrowser
.getNotificationBox()
.getNotificationWithValue("popup-blocked");
is(
notification.messageL10nId,
"redirect-warning-with-popup-message",
"Notification message is correct"
);
// Run actual checks.
await checkLocalization();
await checkToolbarAllowSite(tab);
await checkToolbarManageSettings();
await checkToolbarDontShow(tab);
await checkToolbarRedirect(tab);
info("Cleaning up...");
await closeSettingsPopup();
BrowserTestUtils.removeTab(tab);
});
async function openSettingsPopup() {
const blockedPopupOptions = document.getElementById("blockedPopupOptions");
// Close a still open one beforehand.
if (blockedPopupOptions.state === "open") {
await closeSettingsPopup();
}
info("Waiting for notification...");
let notification;
await TestUtils.waitForCondition(
() =>
(notification = gBrowser
.getNotificationBox()
.getNotificationWithValue("popup-blocked"))
);
info("Clicking button...");
const promise = BrowserTestUtils.waitForEvent(
window,
"popupshown",
true,
event => event.target == blockedPopupOptions
);
notification._buttons[0].click();
info("Waiting for toolbar to show...");
await promise;
}
async function closeSettingsPopup() {
const blockedPopupOptions = document.getElementById("blockedPopupOptions");
info("Hiding settings popup...");
const promise = BrowserTestUtils.waitForEvent(
blockedPopupOptions,
"popuphidden"
);
blockedPopupOptions.hidePopup();
info("Waiting for popup to hide...");
await promise;
}
async function checkLocalization() {
const expectedProperties = [
{
idx: 0,
dataset: {
l10nId: "popups-infobar-allow2",
l10nArgs: JSON.stringify({
uriHost: new URL(FRAMEBUSTING_PARENT_URL).host,
}),
},
},
{ idx: 1, dataset: { l10nId: "edit-popup-settings2" } },
{
idx: 2,
dataset: { l10nId: "popups-infobar-dont-show-message2" },
},
{ idx: 3, hidden: false },
{
idx: 4,
dataset: {
l10nId: "popup-trigger-redirect-menuitem",
l10nArgs: JSON.stringify({ redirectURI: FRAMEBUSTING_FRAME_URL }),
},
},
{ idx: 5, hidden: true },
];
const blockedPopupOptions = document.getElementById("blockedPopupOptions");
is(blockedPopupOptions.children.length, expectedProperties.length);
for (const { idx, ...properties } of expectedProperties) {
const element = blockedPopupOptions.children[idx];
for (const [key, value] of Object.entries(properties)) {
Assert.deepEqual(element[key], value);
}
}
}
async function checkToolbarAllowSite(tab) {
const blockedPopupOptions = document.getElementById("blockedPopupOptions");
const allowSiteItem = blockedPopupOptions.children[0];
info("Clicking allow site item...");
allowSiteItem.click();
info("Waiting to be redirected...");
await BrowserTestUtils.waitForLocationChange(
gBrowser,
FRAMEBUSTING_FRAME_URL
);
info("Checking permission...");
is(
PermissionTestUtils.testPermission(FRAMEBUSTING_PARENT_URL, "popup"),
Services.perms.ALLOW_ACTION,
"popup permissions is allow"
);
info("Triggering framebusting intervention...");
await triggerFramebustingIntervention(tab);
// uh oh - busted!
await BrowserTestUtils.browserLoaded(
tab.linkedBrowser,
/*includeSubframes=*/ false,
FRAMEBUSTING_FRAME_URL
);
info("Removing permission...");
PermissionTestUtils.remove(FRAMEBUSTING_PARENT_URL, "popup");
info("Resetting to initial state...");
await triggerFramebustingIntervention(tab);
await openSettingsPopup();
}
async function checkToolbarManageSettings() {
const blockedPopupOptions = document.getElementById("blockedPopupOptions");
const manageSettingsItem = blockedPopupOptions.children[1];
const promise = BrowserTestUtils.waitForLocationChange(
gBrowser,
"about:preferences#privacy"
);
info("Clicking manage settings item...");
manageSettingsItem.click();
info("Waiting for navigation...");
await promise;
info("Closing new tab...");
BrowserTestUtils.removeTab(gBrowser.selectedTab);
}
async function checkToolbarDontShow(tab) {
const blockedPopupOptions = document.getElementById("blockedPopupOptions");
const dontShowItem = blockedPopupOptions.children[2];
info("Clicking don't show item...");
dontShowItem.click();
info("Checking prefs...");
is(Services.prefs.getBoolPref("privacy.popups.showBrowserMessage"), false);
info("Resetting prefs...");
Services.prefs.setBoolPref("privacy.popups.showBrowserMessage", true);
info("Resetting to initial state...");
await triggerFramebustingIntervention(tab);
await openSettingsPopup();
}
async function checkToolbarRedirect(tab) {
const blockedPopupOptions = document.getElementById("blockedPopupOptions");
const redirectItem = blockedPopupOptions.children[4];
info("Clicking redirect item...");
redirectItem.click();
info("Waiting to be redirected...");
await BrowserTestUtils.browserLoaded(
tab.linkedBrowser,
/*includeSubFrames=*/ false,
FRAMEBUSTING_FRAME_URL
);
info("Resetting to initial state...");
await triggerFramebustingIntervention(tab);
await openSettingsPopup();
}