From ef662cdc72f878a8ac7084863a83d164da738c24 Mon Sep 17 00:00:00 2001 From: Lesley Norton Date: Sat, 27 Nov 2021 13:11:14 -0600 Subject: [PATCH] Show permission warning in advanced proxy panel --- src/css/popup.css | 32 ++++++++++++++++++++++++++++++++ src/js/popup.js | 35 ++++++++++++++++++++++++++++++++++- src/popup.html | 4 ++++ 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/css/popup.css b/src/css/popup.css index 8616236..c7060b1 100644 --- a/src/css/popup.css +++ b/src/css/popup.css @@ -2031,6 +2031,38 @@ tr:hover > td > .trash-button { margin-inline-start: 8px; } +/* ----- Permissions Overlay ---------- */ + +#advanced-proxy-settings-panel, +.advanced-proxy-panel-content { + block-size: 100%; +} + +.permissions-overlay { + position: absolute; + inset-inline: 0 0; + inset-block-start: 40px; + inset-block-end: 0; + justify-content: center; + align-content: center; + flex-direction: column; + background-color: white; + padding: 2.25rem; + display: none; +} + +#enable-proxy-permissions { + block-size: var(--rowHeight); + text-align: center; + font-family: var(--fontMetropolis); + font-size: 14px; + margin-block-start: 1rem; +} + +.permissions-overlay-copy { + text-align: center; +} + @media (prefers-color-scheme: dark) { :root { --iconCloseX: url("/img/close-light.svg"); diff --git a/src/js/popup.js b/src/js/popup.js index 0b82f7f..7667331 100644 --- a/src/js/popup.js +++ b/src/js/popup.js @@ -1851,12 +1851,45 @@ Logic.registerPanel(P_CONTAINER_EDIT, { Logic.registerPanel(P_ADVANCED_PROXY_SETTINGS, { panelSelector: "#advanced-proxy-settings-panel", - initialize(){ + async initialize(){ this._proxyForm = document.querySelector(".advanced-proxy-panel-content"); this._advancedProxyInput = this._proxyForm.querySelector("#edit-advanced-proxy-input"); const clearAdvancedProxyInput = this._proxyForm.querySelector("#clear-advanced-proxy-input"); this._submitadvancedProxy = this._proxyForm.querySelector("#submit-advanced-proxy"); + const proxyPermissionEnabled = await browser.permissions.contains({ permissions: ["proxy"] }); + if (!proxyPermissionEnabled) { + + // Restrict tabbing inside advanced proxy panel to proxy permissions ui + const panel = document.getElementById("advanced-proxy-settings-panel"); + const clickableEls = panel.querySelectorAll("button, a, input"); + clickableEls.forEach(el => { + if (!el.dataset.tabGroup && el.id !== "advanced-proxy-settings-return") { + el.tabindex = "-1"; + el.disabled = true; + } + }); + + // Show proxy permission overlay + const permissionsOverlay = document.getElementById("permissions-overlay"); + permissionsOverlay.style.display = "flex"; + + // Add "enable" button handling + const enableProxyPermissionsButton = document.getElementById("enable-proxy-permissions"); + enableProxyPermissionsButton.focus(); + enableProxyPermissionsButton.addEventListener("click", async() => { + const granted = await browser.permissions.request({ permissions: ["proxy"] }); + if (granted) { + permissionsOverlay.style.display = "none"; + // restore normal panel tabbing + clickableEls.forEach(el => { + el.tabindex = "0"; + el.disabled = false; + }); + } + }); + } + this._advancedProxyInput.addEventListener("keydown", (e) => { if (e.key !== "Enter") { this.hideInvalidEntryWarning(); diff --git a/src/popup.html b/src/popup.html index b0ed48f..2e55e57 100644 --- a/src/popup.html +++ b/src/popup.html @@ -437,6 +437,10 @@ +
+

This feature requires that Proxy permissions. This permission can be revoked at any time in Settings.

+ +