Integrated proxy.onRequest functionality

This commit is contained in:
Samuel Crypto 2018-10-07 15:32:28 -04:00
parent 78330a4d20
commit 790a9273f9
3 changed files with 31 additions and 4 deletions

View file

@ -117,6 +117,16 @@ const assignManager = {
return true;
},
async handleProxifiedRequest(requestInfo) {
if(requestInfo.tabId === -1)
return {type: "direct"};
var tab = await browser.tabs.get(requestInfo.tabId);
var proxy = await window.proxifiedContainers.retrieveFromBackground(tab.cookieStoreId);
return proxy;
},
// Before a request is handled by the browser we decide if we should route through a different container
async onBeforeRequest(options) {
if (options.frameId !== 0 || options.tabId === -1) {
@ -224,6 +234,10 @@ const assignManager = {
this._onClickedHandler(info, tab);
});
// Before anything happens we decide if the request should be proxified
browser.extension.getBackgroundPage().console.log('[SAMUEL CODE] Adding proxy.onRequest listener');
browser.proxy.onRequest.addListener(this.handleProxifiedRequest, {urls: ["<all_urls>"]});
// Before a request is handled by the browser we decide if we should route through a different container
this.canceledRequests = {};
browser.webRequest.onBeforeRequest.addListener((options) => {

View file

@ -1,5 +1,17 @@
//This object allows other scripts to access the list mapping containers to their proxies
window.proxifiedContainers = {
//Slightly modified version of 'retrieve' which returns a direct proxy whenever an error is met.
retrieveFromBackground: function(cookieStoreId = null) {
return new Promise((resolve, reject) => {
window.proxifiedContainers.retrieve(cookieStoreId).then((success) => {
resolve(success.proxy);
}, (error) => {
resolve({type: "direct"});
});
});
},
//Resolves to a proxy object which can be used in the return of the listener required for browser.proxy.onRequest.addListener
retrieve: function(cookieStoreId = null) {
return new Promise((resolve, reject) => {
@ -15,10 +27,10 @@ window.proxifiedContainers = {
if (Object.getOwnPropertyNames(results).length == 0) {
reject({error: "uninitialized", message: ""});
}
else if(cookieStoreId == null) {
resolve(results_array);
}
}
else {
@ -57,7 +69,7 @@ window.proxifiedContainers = {
{
proxifiedContainersStore[index] = {cookieStoreId: cookieStoreId, proxy: proxy};
}
browser.storage.local.set({proxifiedContainersKey: proxifiedContainersStore});
resolve(proxifiedContainersStore[index]);
}, (errorObj) => {

View file

@ -30,7 +30,8 @@
"storage",
"tabs",
"webRequestBlocking",
"webRequest"
"webRequest",
"proxy"
],
"commands": {