diff --git a/src/js/background/assignManager.js b/src/js/background/assignManager.js index dc9e991..6d34cfa 100644 --- a/src/js/background/assignManager.js +++ b/src/js/background/assignManager.js @@ -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: [""]}); + // 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) => { diff --git a/src/js/proxified-containers.js b/src/js/proxified-containers.js index 1fb77f8..e56589e 100644 --- a/src/js/proxified-containers.js +++ b/src/js/proxified-containers.js @@ -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) => { diff --git a/src/manifest.json b/src/manifest.json index bab033b..06627bd 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -30,7 +30,8 @@ "storage", "tabs", "webRequestBlocking", - "webRequest" + "webRequest", + "proxy" ], "commands": {