Skip to content

Commit d6d5210

Browse files
committed
Bug 1888477 - Make PopupBlocking Locked policy lock all UI paths r=jmendez,desktop-theme-reviewers,emilio
Differential Revision: https://phabricator.services.mozilla.com/D298861
1 parent 6a27bbb commit d6d5210

5 files changed

Lines changed: 112 additions & 6 deletions

File tree

‎browser/base/content/browser-sitePermissionPanel.js‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,13 @@ var gPermissionPanel = {
748748
menulist.setAttribute("sizetopopup", "none");
749749
menulist.setAttribute("id", "permission-popup-menulist");
750750

751+
if (
752+
idNoSuffix == "popup" &&
753+
Services.prefs.prefIsLocked("dom.disable_open_during_load")
754+
) {
755+
menulist.setAttribute("disabled", "true");
756+
}
757+
751758
for (let state of SitePermissions.getAvailableStates(idNoSuffix)) {
752759
let menuitem = document.createXULElement("menuitem");
753760
// We need to correctly display the default/unknown state, which has its

‎browser/components/enterprisepolicies/tests/browser/browser.toml‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ https_first_disabled = true
6161
["browser_policy_disable_password_reveal.js"]
6262

6363
["browser_policy_disable_popup_blocker.js"]
64+
support-files = [
65+
"!/browser/base/content/test/popups/popup_blocker2.html",
66+
"!/browser/base/content/test/popups/popup_blocker_a.html",
67+
]
6468

6569
["browser_policy_disable_privatebrowsing.js"]
6670

‎browser/components/enterprisepolicies/tests/browser/browser_policy_disable_popup_blocker.js‎

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,3 +162,85 @@ add_task(async function test_disabled_locked() {
162162

163163
restore_prefs();
164164
});
165+
166+
add_task(async function test_locked_blocks_inpage_allow_paths() {
167+
await SpecialPowers.pushPrefEnv({
168+
set: [["dom.disable_open_click_delay", 0]],
169+
});
170+
await setupPolicyEngineWithJson({
171+
policies: {
172+
PopupBlocking: {
173+
Default: true,
174+
Locked: true,
175+
},
176+
},
177+
});
178+
179+
const POPUP_PAGE =
180+
"https://example.com/browser/browser/base/content/test/popups/popup_blocker2.html";
181+
182+
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, POPUP_PAGE);
183+
184+
await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async () => {
185+
content.document.getElementById("pop").click();
186+
});
187+
188+
await TestUtils.waitForCondition(() =>
189+
gBrowser.getNotificationBox().getNotificationWithValue("popup-blocked")
190+
);
191+
192+
// Open the notification's "Options" menu and confirm the "Allow pop-ups
193+
// for <host>" item stays hidden when the policy is locked.
194+
let blockedPopupOptions = document.getElementById("blockedPopupOptions");
195+
let popupShown = BrowserTestUtils.waitForEvent(
196+
window,
197+
"popupshown",
198+
true,
199+
event => event.target == blockedPopupOptions
200+
);
201+
let notification = gBrowser
202+
.getNotificationBox()
203+
.getNotificationWithValue("popup-blocked");
204+
notification._buttons[0].click();
205+
await popupShown;
206+
207+
let allowSite = document.getElementById("blockedPopupAllowSite");
208+
ok(
209+
allowSite.hidden,
210+
"blockedPopupAllowSite stays hidden when PopupBlocking is locked"
211+
);
212+
213+
let popupHidden = BrowserTestUtils.waitForEvent(
214+
blockedPopupOptions,
215+
"popuphidden"
216+
);
217+
blockedPopupOptions.hidePopup();
218+
await popupHidden;
219+
220+
// Open the URL-bar permission panel and confirm the popup row is
221+
// rendered as a locked policy permission (no editable menulist).
222+
let permissionShown = BrowserTestUtils.waitForEvent(
223+
window,
224+
"popupshown",
225+
true,
226+
event => event.target == gPermissionPanel._permissionPopup
227+
);
228+
gPermissionPanel._identityPermissionBox.click();
229+
await permissionShown;
230+
231+
let menulist = document.getElementById("permission-popup-menulist");
232+
ok(
233+
menulist && menulist.getAttribute("disabled") == "true",
234+
"Popup permission menulist is disabled when policy is locked"
235+
);
236+
237+
let permissionHidden = BrowserTestUtils.waitForEvent(
238+
gPermissionPanel._permissionPopup,
239+
"popuphidden"
240+
);
241+
gPermissionPanel._permissionPopup.hidePopup();
242+
await permissionHidden;
243+
244+
BrowserTestUtils.removeTab(tab);
245+
restore_prefs();
246+
});

‎browser/modules/PopupAndRedirectBlockerObserver.sys.mjs‎

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,16 @@ export var PopupAndRedirectBlockerObserver = {
166166
const blockedPopupAllowSite = document.getElementById(
167167
"blockedPopupAllowSite"
168168
);
169-
blockedPopupAllowSite.removeAttribute("hidden");
170-
document.l10n.setAttributes(
171-
blockedPopupAllowSite,
172-
"popups-infobar-allow2",
173-
{ uriHost }
174-
);
169+
if (Services.prefs.prefIsLocked("dom.disable_open_during_load")) {
170+
blockedPopupAllowSite.setAttribute("hidden", "true");
171+
} else {
172+
blockedPopupAllowSite.removeAttribute("hidden");
173+
document.l10n.setAttributes(
174+
blockedPopupAllowSite,
175+
"popups-infobar-allow2",
176+
{ uriHost }
177+
);
178+
}
175179

176180
// "Dont show this message when..."
177181
const blockedPopupDontShowMessage = document.getElementById(
@@ -368,6 +372,10 @@ export var PopupAndRedirectBlockerObserver = {
368372
const window = aEvent.originalTarget.documentGlobal;
369373
const { gBrowser } = window;
370374

375+
if (Services.prefs.prefIsLocked("dom.disable_open_during_load")) {
376+
return;
377+
}
378+
371379
// The toggle should only be visible (and therefore clickable) if
372380
// popups are currently blocked.
373381
Services.perms.addFromPrincipal(

‎browser/themes/shared/controlcenter/panel.css‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,11 @@
708708
> menupopup {
709709
min-width: 6.5em;
710710
}
711+
712+
&[disabled] {
713+
opacity: 0.5;
714+
pointer-events: none;
715+
}
711716
}
712717

713718
.protections-popup-section-header,

0 commit comments

Comments
 (0)