Compare commits
3 commits
main
...
2138-proxy
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c43d807873 | ||
![]() |
82e9a72235 | ||
![]() |
df34d8fac7 |
9 changed files with 72 additions and 17 deletions
|
@ -221,6 +221,12 @@
|
||||||
"enableBookMarkMenus": {
|
"enableBookMarkMenus": {
|
||||||
"message": "Enable Bookmark Menus"
|
"message": "Enable Bookmark Menus"
|
||||||
},
|
},
|
||||||
|
"enableProxy": {
|
||||||
|
"message": "Enable custom per-container proxy settings"
|
||||||
|
},
|
||||||
|
"enableProxyDescription": {
|
||||||
|
"message": "This setting allows you to route all traffic from a specific Container through a proxy. This feature requires the proxy permission. This permission grants the add-on to control browser proxy settings."
|
||||||
|
},
|
||||||
"enableSync": {
|
"enableSync": {
|
||||||
"message": "Enable Sync"
|
"message": "Enable Sync"
|
||||||
},
|
},
|
||||||
|
|
|
@ -585,6 +585,10 @@ manage things like container crud */
|
||||||
padding-inline-start: 0;
|
padding-inline-start: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.edit-container-panel fieldset.proxy-container-settings.is-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.edit-container-panel fieldset:last-of-type {
|
.edit-container-panel fieldset:last-of-type {
|
||||||
margin-block-start: 16px;
|
margin-block-start: 16px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -372,7 +372,7 @@ window.assignManager = {
|
||||||
return currentContainerState && currentContainerState.isIsolated;
|
return currentContainerState && currentContainerState.isIsolated;
|
||||||
},
|
},
|
||||||
|
|
||||||
init() {
|
async init() {
|
||||||
browser.contextMenus.onClicked.addListener((info, tab) => {
|
browser.contextMenus.onClicked.addListener((info, tab) => {
|
||||||
info.bookmarkId ?
|
info.bookmarkId ?
|
||||||
this._onClickedBookmark(info) :
|
this._onClickedBookmark(info) :
|
||||||
|
@ -380,7 +380,13 @@ window.assignManager = {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Before anything happens we decide if the request should be proxified
|
// Before anything happens we decide if the request should be proxified
|
||||||
|
const hasProxyPermission = await browser.permissions.contains({
|
||||||
|
permissions: ["proxy"]
|
||||||
|
});
|
||||||
|
|
||||||
|
if (hasProxyPermission) {
|
||||||
browser.proxy.onRequest.addListener(this.handleProxifiedRequest, {urls: ["<all_urls>"]});
|
browser.proxy.onRequest.addListener(this.handleProxifiedRequest, {urls: ["<all_urls>"]});
|
||||||
|
}
|
||||||
|
|
||||||
// Before a request is handled by the browser we decide if we should
|
// Before a request is handled by the browser we decide if we should
|
||||||
// route through a different container
|
// route through a different container
|
||||||
|
|
|
@ -23,6 +23,9 @@ const messageHandler = {
|
||||||
case "resetBookmarksContext":
|
case "resetBookmarksContext":
|
||||||
response = assignManager.resetBookmarksMenuItem();
|
response = assignManager.resetBookmarksMenuItem();
|
||||||
break;
|
break;
|
||||||
|
case "resetProxySupport":
|
||||||
|
response = assignManager.init();
|
||||||
|
break;
|
||||||
case "deleteContainer":
|
case "deleteContainer":
|
||||||
response = backgroundLogic.deleteContainer(m.message.userContextId);
|
response = backgroundLogic.deleteContainer(m.message.userContextId);
|
||||||
break;
|
break;
|
||||||
|
@ -106,6 +109,10 @@ const messageHandler = {
|
||||||
return assignManager._setOrRemoveAssignment(tab.id, m.url, m.newUserContextId, m.value);
|
return assignManager._setOrRemoveAssignment(tab.id, m.url, m.newUserContextId, m.value);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case "proxyPermissionCheck":
|
||||||
|
return await browser.permissions.contains({
|
||||||
|
permissions: ["proxy"],
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return response;
|
return response;
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,19 +1,30 @@
|
||||||
const NUMBER_OF_KEYBOARD_SHORTCUTS = 10;
|
const NUMBER_OF_KEYBOARD_SHORTCUTS = 10;
|
||||||
|
|
||||||
async function requestPermissions() {
|
async function requestPermissions(event) {
|
||||||
const checkbox = document.querySelector("#bookmarksPermissions");
|
const checkbox = event.target;
|
||||||
|
const permission = checkbox.dataset.permission;
|
||||||
if (checkbox.checked) {
|
if (checkbox.checked) {
|
||||||
const granted = await browser.permissions.request({permissions: ["bookmarks"]});
|
const granted = await browser.permissions.request({
|
||||||
|
permissions: [permission],
|
||||||
|
});
|
||||||
if (!granted) {
|
if (!granted) {
|
||||||
checkbox.checked = false;
|
checkbox.checked = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
await browser.permissions.remove({permissions: ["bookmarks"]});
|
await browser.permissions.remove({ permissions: [permission] });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (permission === "bookmarks") {
|
||||||
browser.runtime.sendMessage({ method: "resetBookmarksContext" });
|
browser.runtime.sendMessage({ method: "resetBookmarksContext" });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (permission === "proxy") {
|
||||||
|
browser.runtime.sendMessage({ method: "resetProxySupport" });
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
async function enableDisableSync() {
|
async function enableDisableSync() {
|
||||||
const checkbox = document.querySelector("#syncCheck");
|
const checkbox = document.querySelector("#syncCheck");
|
||||||
await browser.storage.local.set({syncEnabled: !!checkbox.checked});
|
await browser.storage.local.set({syncEnabled: !!checkbox.checked});
|
||||||
|
@ -26,11 +37,15 @@ async function enableDisableReplaceTab() {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function setupOptions() {
|
async function setupOptions() {
|
||||||
const hasPermission = await browser.permissions.contains({permissions: ["bookmarks"]});
|
const hasBookmarksPermission = await browser.permissions.contains({permissions: ["bookmarks"]});
|
||||||
|
const hasProxyPermission = await browser.permissions.contains({permissions: ["proxy"]});
|
||||||
const { syncEnabled } = await browser.storage.local.get("syncEnabled");
|
const { syncEnabled } = await browser.storage.local.get("syncEnabled");
|
||||||
const { replaceTabEnabled } = await browser.storage.local.get("replaceTabEnabled");
|
const { replaceTabEnabled } = await browser.storage.local.get("replaceTabEnabled");
|
||||||
if (hasPermission) {
|
if (hasBookmarksPermission) {
|
||||||
document.querySelector("#bookmarksPermissions").checked = true;
|
document.querySelector("#bookmarksPermission").checked = true;
|
||||||
|
}
|
||||||
|
if (hasProxyPermission) {
|
||||||
|
document.querySelector("#proxyPermission").checked = true;
|
||||||
}
|
}
|
||||||
document.querySelector("#syncCheck").checked = !!syncEnabled;
|
document.querySelector("#syncCheck").checked = !!syncEnabled;
|
||||||
document.querySelector("#replaceTabCheck").checked = !!replaceTabEnabled;
|
document.querySelector("#replaceTabCheck").checked = !!replaceTabEnabled;
|
||||||
|
@ -79,7 +94,10 @@ function resetOnboarding() {
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", setupOptions);
|
document.addEventListener("DOMContentLoaded", setupOptions);
|
||||||
document.querySelector("#bookmarksPermissions").addEventListener( "change", requestPermissions);
|
document
|
||||||
|
.querySelectorAll(".permissionCheckbox").forEach( checkbox =>{
|
||||||
|
checkbox.addEventListener("change", requestPermissions);
|
||||||
|
});
|
||||||
document.querySelector("#syncCheck").addEventListener( "change", enableDisableSync);
|
document.querySelector("#syncCheck").addEventListener( "change", enableDisableSync);
|
||||||
document.querySelector("#replaceTabCheck").addEventListener( "change", enableDisableReplaceTab);
|
document.querySelector("#replaceTabCheck").addEventListener( "change", enableDisableReplaceTab);
|
||||||
document.querySelector("button").addEventListener("click", resetOnboarding);
|
document.querySelector("button").addEventListener("click", resetOnboarding);
|
||||||
|
|
|
@ -1428,6 +1428,16 @@ Logic.registerPanel(P_CONTAINER_EDIT, {
|
||||||
iconInput.checked = iconInput.value === identity.icon;
|
iconInput.checked = iconInput.value === identity.icon;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Query if user has proxy permissions.
|
||||||
|
// If so, we want to show the custom proxy settings options for the container:
|
||||||
|
const hasProxyPermission = await browser.runtime.sendMessage({
|
||||||
|
method: "proxyPermissionCheck",
|
||||||
|
});
|
||||||
|
|
||||||
|
if (hasProxyPermission) {
|
||||||
|
document.querySelector(".proxy-container-settings").classList.remove("is-hidden");
|
||||||
|
}
|
||||||
|
|
||||||
// Clear the proxy field before doing the retrieval requests below
|
// Clear the proxy field before doing the retrieval requests below
|
||||||
document.querySelector("#edit-container-panel-proxy").value = "";
|
document.querySelector("#edit-container-panel-proxy").value = "";
|
||||||
|
|
||||||
|
|
|
@ -28,11 +28,11 @@
|
||||||
"unlimitedStorage",
|
"unlimitedStorage",
|
||||||
"tabs",
|
"tabs",
|
||||||
"webRequestBlocking",
|
"webRequestBlocking",
|
||||||
"webRequest",
|
"webRequest"
|
||||||
"proxy"
|
|
||||||
],
|
],
|
||||||
"optional_permissions": [
|
"optional_permissions": [
|
||||||
"bookmarks"
|
"bookmarks",
|
||||||
|
"proxy"
|
||||||
],
|
],
|
||||||
"commands": {
|
"commands": {
|
||||||
"_execute_browser_action": {
|
"_execute_browser_action": {
|
||||||
|
|
|
@ -11,11 +11,15 @@
|
||||||
<form>
|
<form>
|
||||||
<h3 data-i18n-message-id="optionalPermissions"></h3>
|
<h3 data-i18n-message-id="optionalPermissions"></h3>
|
||||||
<label >
|
<label >
|
||||||
<input type="checkbox" id="bookmarksPermissions">
|
<input class="permissionCheckbox" data-permission="bookmarks" type="checkbox" id="bookmarksPermission">
|
||||||
<span data-i18n-message-id="enableBookMarkMenus"></span>
|
<span data-i18n-message-id="enableBookMarkMenus"></span>
|
||||||
|
|
||||||
</label>
|
</label>
|
||||||
<p><em data-i18n-message-id="enableBookMarkMenusDescription"></em></p>
|
<p><em data-i18n-message-id="enableBookMarkMenusDescription"></em></p>
|
||||||
|
<label >
|
||||||
|
<input class="permissionCheckbox" data-permission="proxy" type="checkbox" id="proxyPermission">
|
||||||
|
<span data-i18n-message-id="enableProxy"></span>
|
||||||
|
</label>
|
||||||
|
<p><em data-i18n-message-id="enableProxyDescription"></em></p>
|
||||||
<h3 data-i18n-message-id="firefoxAccountsSync"></h3>
|
<h3 data-i18n-message-id="firefoxAccountsSync"></h3>
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" id="syncCheck">
|
<input type="checkbox" id="syncCheck">
|
||||||
|
|
|
@ -277,7 +277,7 @@
|
||||||
<fieldset id="edit-container-panel-choose-icon" class="radio-choice">
|
<fieldset id="edit-container-panel-choose-icon" class="radio-choice">
|
||||||
<legend class="form-header" data-i18n-message-id="icon"></legend>
|
<legend class="form-header" data-i18n-message-id="icon"></legend>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<fieldset>
|
<fieldset class="proxy-container-settings is-hidden">
|
||||||
<legend>Proxy (Optional)</legend>
|
<legend>Proxy (Optional)</legend>
|
||||||
<input type="text" name="container-proxy" id="edit-container-panel-proxy" maxlength="50" placeholder="type://host:port"/>
|
<input type="text" name="container-proxy" id="edit-container-panel-proxy" maxlength="50" placeholder="type://host:port"/>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
Loading…
Add table
Reference in a new issue