From 6d5b2217cb868aa797583dc6ac93e75e2a4957d6 Mon Sep 17 00:00:00 2001 From: idk Date: Sat, 13 Jul 2019 22:07:24 -0400 Subject: [PATCH] it almost knows how to change I2P identity based on contextual identity --- Makefile | 2 +- background.js | 257 ++--- chromium/browser-polyfill.min.js | 1773 +++++++++++++++--------------- content.js | 3 +- context.js | 108 +- info.js | 90 +- options/options.js | 299 +++-- privacy.js | 263 ++--- proxy.js | 418 +++---- 9 files changed, 1631 insertions(+), 1582 deletions(-) diff --git a/Makefile b/Makefile index 7db3815..d387975 100644 --- a/Makefile +++ b/Makefile @@ -63,4 +63,4 @@ libpolyfill: wget -O chromium/browser-polyfill.min.js https://unpkg.com/webextension-polyfill/dist/browser-polyfill.min.js fmt: - find . -name '*.js' -exec jsfmt -w {} \; + find . -name '*.js' -exec js-beautify -r -f {} \; diff --git a/background.js b/background.js index 8e97d3c..c81416e 100644 --- a/background.js +++ b/background.js @@ -1,163 +1,174 @@ - function onGot(contexts) { - var ids = [] - for (let context of contexts) { - console.log(`Name: ${context.name}`); - ids.push(context.name) - } - if (ids.indexOf("i2pbrowser") == -1) { - function onCreated(context) { - console.log(`New identity's ID: ${context.cookieStoreId}.`); + var ids = [] + for (let context of contexts) { + console.log(`Name: ${context.name}`); + ids.push(context.name) } - function onError(e) { - console.error(e); + if (ids.indexOf("i2pbrowser") == -1) { + function onCreated(context) { + console.log(`New identity's ID: ${context.cookieStoreId}.`); + } + + function onError(e) { + console.error(e); + } + browser.contextualIdentities.create({ + name: "i2pbrowser", + color: "purple", + icon: "fingerprint" + }).then(onCreated, onError); } - browser.contextualIdentities.create({ - name: "i2pbrowser", - color: "purple", - icon: "fingerprint" - }).then(onCreated, onError); - } } + function onError(e) { - console.error(e); + console.error(e); } browser.contextualIdentities.query({}).then(onGot, onError); function getChrome() { - if (browser.runtime.getBrowserInfo == undefined) { - return true - } - return false + if (browser.runtime.getBrowserInfo == undefined) { + return true + } + return false } function isDroid() { - if (!getChrome()) { - var gettingInfo = browser.runtime.getPlatformInfo(); - gettingInfo.then((got) => { - if (got.os == "android") { - console.log("android detected") - return true - } else { - console.log("desktop detected") - return false - } - }); - } - return false + if (!getChrome()) { + var gettingInfo = browser.runtime.getPlatformInfo(); + gettingInfo.then((got) => { + if (got.os == "android") { + console.log("android detected") + return true + } else { + console.log("desktop detected") + return false + } + }); + } + return false } if (!isDroid()) { - chrome.windows.onCreated.addListener(themeWindow); + chrome.windows.onCreated.addListener(themeWindow); } var titlepref = chrome.i18n.getMessage("titlePreface"); var titleprefpriv = chrome.i18n.getMessage("titlePrefacePrivate"); function themeWindow(window) { - // Check if the window is in private browsing - function logTabs(tabInfo) { - console.log(tabInfo) - function onGot(context) { - if (context.name == "i2pbrowser") { - console.log("Active in I2P window") - if (window.incognito) { - chrome.theme.update(window.id, { - colors: { - frame: "#2D4470", - toolbar: "#2D4470", - } - }); - } else { - chrome.theme.update(window.id, { - colors: { - frame: "#9DABD5", - toolbar: "#9DABD5", - } - }); - } - }else{ - console.log("Not active in I2P window") - if (window.incognito) { - chrome.theme.update(window.id, { - colors: { - frame: undefined, - toolbar: undefined, - } - }); - } else { - chrome.theme.update(window.id, { - colors: { - frame: undefined, - toolbar: undefined, - } - }); - } + // Check if the window is in private browsing + function logTabs(tabInfo) { + console.log(tabInfo) + + function onGot(context) { + if (context.name == "i2pbrowser") { + console.log("Active in I2P window") + if (window.incognito) { + chrome.theme.update(window.id, { + colors: { + frame: "#2D4470", + toolbar: "#2D4470", + } + }); + } else { + chrome.theme.update(window.id, { + colors: { + frame: "#9DABD5", + toolbar: "#9DABD5", + } + }); + } + } else { + console.log("Not active in I2P window") + if (window.incognito) { + chrome.theme.update(window.id, { + colors: { + frame: undefined, + toolbar: undefined, + } + }); + } else { + chrome.theme.update(window.id, { + colors: { + frame: undefined, + toolbar: undefined, + } + }); + } + } } + + function onError(e) { + console.error(e); + } + if (tabInfo[0].cookieStoreId != "firefox-default") + browser.contextualIdentities.get(tabInfo[0].cookieStoreId).then(onGot, onError); } - function onError(e) { - console.error(e); + + function onError(error) { + console.log(`Error: ${error}`); } - //if (tabInfo[0].cookieStoreId == "firefox-default") - browser.contextualIdentities.get(tabInfo[0].cookieStoreId).then(onGot, onError); - } - function onError(error) { - console.log(`Error: ${error}`); - } - var querying = browser.tabs.query({ - currentWindow: true, - active: true - }); - querying.then(logTabs, onError); + var querying = browser.tabs.query({ + currentWindow: true, + active: true + }); + querying.then(logTabs, onError); } function setTitle(window) { - function logTabs(tabInfo) { - console.log(tabInfo) - function onGot(context) { - if (context.name == "i2pbrowser") { - console.log("Active in I2P window") + function logTabs(tabInfo) { + console.log(tabInfo) - console.log("Active in I2P window") - if (window.incognito) { - chrome.windows.update(window.id, { - titlePreface: titleprefpriv - }); - } else { - chrome.windows.update(window.id, { - titlePreface: titlepref - }); - } + function onGot(context) { + if (context.name == "i2pbrowser") { + console.log("Active in I2P window") + + console.log("Active in I2P window") + if (window.incognito) { + chrome.windows.update(window.id, { + titlePreface: titleprefpriv + }); + } else { + chrome.windows.update(window.id, { + titlePreface: titlepref + }); + } + } + } + + function onError(e) { + console.error(e); + } + if (tabInfo[0].cookieStoreId != "firefox-default") + browser.contextualIdentities.get(tabInfo[0].cookieStoreId).then(onGot, onError); } + + function onError(error) { + console.log(`Error: ${error}`); } - function onError(e) { - console.error(e); - } - browser.contextualIdentities.get(tabInfo[0].cookieStoreId).then(onGot, onError); - } - function onError(error) { - console.log(`Error: ${error}`); - } - var querying = browser.tabs.query({ - currentWindow: true, - active: true - }); - querying.then(logTabs, onError); + var querying = browser.tabs.query({ + currentWindow: true, + active: true + }); + querying.then(logTabs, onError); } function setTitleError(window) { - alert("plugin error setting title on", window.id) + alert("plugin error setting title on", window.id) } chrome.windows.onCreated.addListener(() => { - var gettingStoredSettings = chrome.storage.local.get(); - gettingStoredSettings.then(setupProxy, onError); + //var gettingStoredSettings = chrome.storage.local.get(); + //gettingStoredSettings.then(setupProxy, onError); + chrome.storage.local.get(function(got) { + setupProxy() + }); }); chrome.tabs.onCreated.addListener(() => { - var getting = browser.windows.getCurrent({ - populate: true - }); - getting.then(setTitle, setTitleError); -}); + var getting = browser.windows.getCurrent({ + populate: true + }); + getting.then(setTitle, setTitleError); +}); \ No newline at end of file diff --git a/chromium/browser-polyfill.min.js b/chromium/browser-polyfill.min.js index ee71d07..6752521 100644 --- a/chromium/browser-polyfill.min.js +++ b/chromium/browser-polyfill.min.js @@ -1,898 +1,901 @@ (function(a, b) { - if ("function" == typeof define && define.amd) { - define("webextension-polyfill", ["module"], b); - } else if ("undefined" != typeof exports) { - b(module); - } else { - var c = { - exports: {} - }; - b(c), a.browser = c.exports - } + if ("function" == typeof define && define.amd) { + define("webextension-polyfill", ["module"], b); + } else if ("undefined" != typeof exports) { + b(module); + } else { + var c = { + exports: {} + }; + b(c), a.browser = c.exports + } })(this, function(a) { - "use strict"; - if ("undefined" == typeof browser || Object.getPrototypeOf(browser) !== Object.prototype) { - a.exports = (e => { - const f = { - alarms: { - clear: { - minArgs: 0, - maxArgs: 1 - }, - clearAll: { - minArgs: 0, - maxArgs: 0 - }, - get: { - minArgs: 0, - maxArgs: 1 - }, - getAll: { - minArgs: 0, - maxArgs: 0 - } - }, - bookmarks: { - create: { - minArgs: 1, - maxArgs: 1 - }, - get: { - minArgs: 1, - maxArgs: 1 - }, - getChildren: { - minArgs: 1, - maxArgs: 1 - }, - getRecent: { - minArgs: 1, - maxArgs: 1 - }, - getSubTree: { - minArgs: 1, - maxArgs: 1 - }, - getTree: { - minArgs: 0, - maxArgs: 0 - }, - move: { - minArgs: 2, - maxArgs: 2 - }, - remove: { - minArgs: 1, - maxArgs: 1 - }, - removeTree: { - minArgs: 1, - maxArgs: 1 - }, - search: { - minArgs: 1, - maxArgs: 1 - }, - update: { - minArgs: 2, - maxArgs: 2 - } - }, - browserAction: { - disable: { - minArgs: 0, - maxArgs: 1, - fallbackToNoCallback: !0 - }, - enable: { - minArgs: 0, - maxArgs: 1, - fallbackToNoCallback: !0 - }, - getBadgeBackgroundColor: { - minArgs: 1, - maxArgs: 1 - }, - getBadgeText: { - minArgs: 1, - maxArgs: 1 - }, - getPopup: { - minArgs: 1, - maxArgs: 1 - }, - getTitle: { - minArgs: 1, - maxArgs: 1 - }, - openPopup: { - minArgs: 0, - maxArgs: 0 - }, - setBadgeBackgroundColor: { - minArgs: 1, - maxArgs: 1, - fallbackToNoCallback: !0 - }, - setBadgeText: { - minArgs: 1, - maxArgs: 1, - fallbackToNoCallback: !0 - }, - setIcon: { - minArgs: 1, - maxArgs: 1 - }, - setPopup: { - minArgs: 1, - maxArgs: 1, - fallbackToNoCallback: !0 - }, - setTitle: { - minArgs: 1, - maxArgs: 1, - fallbackToNoCallback: !0 - } - }, - browsingData: { - remove: { - minArgs: 2, - maxArgs: 2 - }, - removeCache: { - minArgs: 1, - maxArgs: 1 - }, - removeCookies: { - minArgs: 1, - maxArgs: 1 - }, - removeDownloads: { - minArgs: 1, - maxArgs: 1 - }, - removeFormData: { - minArgs: 1, - maxArgs: 1 - }, - removeHistory: { - minArgs: 1, - maxArgs: 1 - }, - removeLocalStorage: { - minArgs: 1, - maxArgs: 1 - }, - removePasswords: { - minArgs: 1, - maxArgs: 1 - }, - removePluginData: { - minArgs: 1, - maxArgs: 1 - }, - settings: { - minArgs: 0, - maxArgs: 0 - } - }, - commands: { - getAll: { - minArgs: 0, - maxArgs: 0 - } - }, - contextMenus: { - remove: { - minArgs: 1, - maxArgs: 1 - }, - removeAll: { - minArgs: 0, - maxArgs: 0 - }, - update: { - minArgs: 2, - maxArgs: 2 - } - }, - cookies: { - get: { - minArgs: 1, - maxArgs: 1 - }, - getAll: { - minArgs: 1, - maxArgs: 1 - }, - getAllCookieStores: { - minArgs: 0, - maxArgs: 0 - }, - remove: { - minArgs: 1, - maxArgs: 1 - }, - set: { - minArgs: 1, - maxArgs: 1 - } - }, - devtools: { - inspectedWindow: { - eval: { - minArgs: 1, - maxArgs: 2, - singleCallbackArg: !1 - } - }, - panels: { - create: { - minArgs: 3, - maxArgs: 3, - singleCallbackArg: !0 - } - } - }, - downloads: { - cancel: { - minArgs: 1, - maxArgs: 1 - }, - download: { - minArgs: 1, - maxArgs: 1 - }, - erase: { - minArgs: 1, - maxArgs: 1 - }, - getFileIcon: { - minArgs: 1, - maxArgs: 2 - }, - open: { - minArgs: 1, - maxArgs: 1, - fallbackToNoCallback: !0 - }, - pause: { - minArgs: 1, - maxArgs: 1 - }, - removeFile: { - minArgs: 1, - maxArgs: 1 - }, - resume: { - minArgs: 1, - maxArgs: 1 - }, - search: { - minArgs: 1, - maxArgs: 1 - }, - show: { - minArgs: 1, - maxArgs: 1, - fallbackToNoCallback: !0 - } - }, - extension: { - isAllowedFileSchemeAccess: { - minArgs: 0, - maxArgs: 0 - }, - isAllowedIncognitoAccess: { - minArgs: 0, - maxArgs: 0 - } - }, - history: { - addUrl: { - minArgs: 1, - maxArgs: 1 - }, - deleteAll: { - minArgs: 0, - maxArgs: 0 - }, - deleteRange: { - minArgs: 1, - maxArgs: 1 - }, - deleteUrl: { - minArgs: 1, - maxArgs: 1 - }, - getVisits: { - minArgs: 1, - maxArgs: 1 - }, - search: { - minArgs: 1, - maxArgs: 1 - } - }, - i18n: { - detectLanguage: { - minArgs: 1, - maxArgs: 1 - }, - getAcceptLanguages: { - minArgs: 0, - maxArgs: 0 - } - }, - identity: { - launchWebAuthFlow: { - minArgs: 1, - maxArgs: 1 - } - }, - idle: { - queryState: { - minArgs: 1, - maxArgs: 1 - } - }, - management: { - get: { - minArgs: 1, - maxArgs: 1 - }, - getAll: { - minArgs: 0, - maxArgs: 0 - }, - getSelf: { - minArgs: 0, - maxArgs: 0 - }, - setEnabled: { - minArgs: 2, - maxArgs: 2 - }, - uninstallSelf: { - minArgs: 0, - maxArgs: 1 - } - }, - notifications: { - clear: { - minArgs: 1, - maxArgs: 1 - }, - create: { - minArgs: 1, - maxArgs: 2 - }, - getAll: { - minArgs: 0, - maxArgs: 0 - }, - getPermissionLevel: { - minArgs: 0, - maxArgs: 0 - }, - update: { - minArgs: 2, - maxArgs: 2 - } - }, - pageAction: { - getPopup: { - minArgs: 1, - maxArgs: 1 - }, - getTitle: { - minArgs: 1, - maxArgs: 1 - }, - hide: { - minArgs: 1, - maxArgs: 1, - fallbackToNoCallback: !0 - }, - setIcon: { - minArgs: 1, - maxArgs: 1 - }, - setPopup: { - minArgs: 1, - maxArgs: 1, - fallbackToNoCallback: !0 - }, - setTitle: { - minArgs: 1, - maxArgs: 1, - fallbackToNoCallback: !0 - }, - show: { - minArgs: 1, - maxArgs: 1, - fallbackToNoCallback: !0 - } - }, - permissions: { - contains: { - minArgs: 1, - maxArgs: 1 - }, - getAll: { - minArgs: 0, - maxArgs: 0 - }, - remove: { - minArgs: 1, - maxArgs: 1 - }, - request: { - minArgs: 1, - maxArgs: 1 - } - }, - runtime: { - getBackgroundPage: { - minArgs: 0, - maxArgs: 0 - }, - getBrowserInfo: { - minArgs: 0, - maxArgs: 0 - }, - getPlatformInfo: { - minArgs: 0, - maxArgs: 0 - }, - openOptionsPage: { - minArgs: 0, - maxArgs: 0 - }, - requestUpdateCheck: { - minArgs: 0, - maxArgs: 0 - }, - sendMessage: { - minArgs: 1, - maxArgs: 3 - }, - sendNativeMessage: { - minArgs: 2, - maxArgs: 2 - }, - setUninstallURL: { - minArgs: 1, - maxArgs: 1 - } - }, - sessions: { - getDevices: { - minArgs: 0, - maxArgs: 1 - }, - getRecentlyClosed: { - minArgs: 0, - maxArgs: 1 - }, - restore: { - minArgs: 0, - maxArgs: 1 - } - }, - storage: { - local: { - clear: { - minArgs: 0, - maxArgs: 0 - }, - get: { - minArgs: 0, - maxArgs: 1 - }, - getBytesInUse: { - minArgs: 0, - maxArgs: 1 - }, - remove: { - minArgs: 1, - maxArgs: 1 - }, - set: { - minArgs: 1, - maxArgs: 1 - } - }, - managed: { - get: { - minArgs: 0, - maxArgs: 1 - }, - getBytesInUse: { - minArgs: 0, - maxArgs: 1 - } - }, - sync: { - clear: { - minArgs: 0, - maxArgs: 0 - }, - get: { - minArgs: 0, - maxArgs: 1 - }, - getBytesInUse: { - minArgs: 0, - maxArgs: 1 - }, - remove: { - minArgs: 1, - maxArgs: 1 - }, - set: { - minArgs: 1, - maxArgs: 1 - } - } - }, - tabs: { - captureVisibleTab: { - minArgs: 0, - maxArgs: 2 - }, - create: { - minArgs: 1, - maxArgs: 1 - }, - detectLanguage: { - minArgs: 0, - maxArgs: 1 - }, - discard: { - minArgs: 0, - maxArgs: 1 - }, - duplicate: { - minArgs: 1, - maxArgs: 1 - }, - executeScript: { - minArgs: 1, - maxArgs: 2 - }, - get: { - minArgs: 1, - maxArgs: 1 - }, - getCurrent: { - minArgs: 0, - maxArgs: 0 - }, - getZoom: { - minArgs: 0, - maxArgs: 1 - }, - getZoomSettings: { - minArgs: 0, - maxArgs: 1 - }, - highlight: { - minArgs: 1, - maxArgs: 1 - }, - insertCSS: { - minArgs: 1, - maxArgs: 2 - }, - move: { - minArgs: 2, - maxArgs: 2 - }, - query: { - minArgs: 1, - maxArgs: 1 - }, - reload: { - minArgs: 0, - maxArgs: 2 - }, - remove: { - minArgs: 1, - maxArgs: 1 - }, - removeCSS: { - minArgs: 1, - maxArgs: 2 - }, - sendMessage: { - minArgs: 2, - maxArgs: 3 - }, - setZoom: { - minArgs: 1, - maxArgs: 2 - }, - setZoomSettings: { - minArgs: 1, - maxArgs: 2 - }, - update: { - minArgs: 1, - maxArgs: 2 - } - }, - topSites: { - get: { - minArgs: 0, - maxArgs: 0 - } - }, - webNavigation: { - getAllFrames: { - minArgs: 1, - maxArgs: 1 - }, - getFrame: { - minArgs: 1, - maxArgs: 1 - } - }, - webRequest: { - handlerBehaviorChanged: { - minArgs: 0, - maxArgs: 0 - } - }, - windows: { - create: { - minArgs: 0, - maxArgs: 1 - }, - get: { - minArgs: 1, - maxArgs: 2 - }, - getAll: { - minArgs: 0, - maxArgs: 1 - }, - getCurrent: { - minArgs: 0, - maxArgs: 1 - }, - getLastFocused: { - minArgs: 0, - maxArgs: 1 - }, - remove: { - minArgs: 1, - maxArgs: 1 - }, - update: { - minArgs: 2, - maxArgs: 2 - } - } - }; - if (0 === Object.keys(f).length) { - throw new Error("api-metadata.json has not been included in browser-polyfill"); - } - class g extends WeakMap { - constructor(v, w = void 0) { - super(w), this.createItem = v - } - get(v) { - return this.has(v) || this.set(v, this.createItem(v)), super.get(v) - } - } - const h = v => { - return v && "object" == typeof v && "function" == typeof v.then - }; - const i = (v, w) => { - return (...x) => { - e.runtime.lastError ? v.reject(e.runtime.lastError) : w.singleCallbackArg || 1 >= x.length && !1 !== w.singleCallbackArg ? v.resolve(x[0]) : v.resolve(x) - } - }; - const j = v => 1 == v ? "argument" : "arguments"; - const k = (v, w) => { - return function(y, ...z) { - if (z.length < w.minArgs) { - throw new Error(`Expected at least ${w.minArgs} ${j(w.minArgs)} for ${v}(), got ${z.length}`); - } - if (z.length > w.maxArgs) { - throw new Error(`Expected at most ${w.maxArgs} ${j(w.maxArgs)} for ${v}(), got ${z.length}`); - } - return new Promise((A, B) => { - if (w.fallbackToNoCallback) { - try { - y[v](...z, i({ - resolve: A, - reject: B - }, w)) - } catch ( C ) { - console.warn(`${v} API method doesn't seem to support the callback parameter, ` + "falling back to call it without a callback: ", C), y[v](...z), w.fallbackToNoCallback = !1, w.noCallback = !0, A() - } - } else { - w.noCallback ? (y[v](...z), A()) : y[v](...z, i({ - resolve: A, - reject: B - }, w)) - } - }) - } - }; - const l = (v, w, x) => { - return new Proxy(w, { - apply(y, z, A) { - return x.call(z, v, ...A) - } - }) - }; - let m = Function.call.bind(Object.prototype.hasOwnProperty); - const n = (v, w = {}, x = {}) => { - let y = Object.create(null); - let z = { - has(B, C) { - return C in v || C in y - }, - get(B, C) { - if (C in y) { - return y[C]; - } - if (C in v) { - let E = v[C]; - if ("function" == typeof E) { - if ("function" == typeof w[C]) { - E = l(v, v[C], w[C]); - } else if (m(x, C)) { - let F = k(C, x[C]); - E = l(v, v[C], F) - } else { - E = E.bind(v); + "use strict"; + if ("undefined" == typeof browser || Object.getPrototypeOf(browser) !== Object.prototype) { + a.exports = (e => { + const f = { + alarms: { + clear: { + minArgs: 0, + maxArgs: 1 + }, + clearAll: { + minArgs: 0, + maxArgs: 0 + }, + get: { + minArgs: 0, + maxArgs: 1 + }, + getAll: { + minArgs: 0, + maxArgs: 0 } - } else if ("object" == typeof E && null !== E && (m(w, C) || m(x, C))) { - E = n(E, w[C], x[C]); - } else { - return Object.defineProperty(y, C, { - configurable: !0, - enumerable: !0, - get() { - return v[C] - }, - set(F) { - v[C] = F + }, + bookmarks: { + create: { + minArgs: 1, + maxArgs: 1 + }, + get: { + minArgs: 1, + maxArgs: 1 + }, + getChildren: { + minArgs: 1, + maxArgs: 1 + }, + getRecent: { + minArgs: 1, + maxArgs: 1 + }, + getSubTree: { + minArgs: 1, + maxArgs: 1 + }, + getTree: { + minArgs: 0, + maxArgs: 0 + }, + move: { + minArgs: 2, + maxArgs: 2 + }, + remove: { + minArgs: 1, + maxArgs: 1 + }, + removeTree: { + minArgs: 1, + maxArgs: 1 + }, + search: { + minArgs: 1, + maxArgs: 1 + }, + update: { + minArgs: 2, + maxArgs: 2 + } + }, + browserAction: { + disable: { + minArgs: 0, + maxArgs: 1, + fallbackToNoCallback: !0 + }, + enable: { + minArgs: 0, + maxArgs: 1, + fallbackToNoCallback: !0 + }, + getBadgeBackgroundColor: { + minArgs: 1, + maxArgs: 1 + }, + getBadgeText: { + minArgs: 1, + maxArgs: 1 + }, + getPopup: { + minArgs: 1, + maxArgs: 1 + }, + getTitle: { + minArgs: 1, + maxArgs: 1 + }, + openPopup: { + minArgs: 0, + maxArgs: 0 + }, + setBadgeBackgroundColor: { + minArgs: 1, + maxArgs: 1, + fallbackToNoCallback: !0 + }, + setBadgeText: { + minArgs: 1, + maxArgs: 1, + fallbackToNoCallback: !0 + }, + setIcon: { + minArgs: 1, + maxArgs: 1 + }, + setPopup: { + minArgs: 1, + maxArgs: 1, + fallbackToNoCallback: !0 + }, + setTitle: { + minArgs: 1, + maxArgs: 1, + fallbackToNoCallback: !0 + } + }, + browsingData: { + remove: { + minArgs: 2, + maxArgs: 2 + }, + removeCache: { + minArgs: 1, + maxArgs: 1 + }, + removeCookies: { + minArgs: 1, + maxArgs: 1 + }, + removeDownloads: { + minArgs: 1, + maxArgs: 1 + }, + removeFormData: { + minArgs: 1, + maxArgs: 1 + }, + removeHistory: { + minArgs: 1, + maxArgs: 1 + }, + removeLocalStorage: { + minArgs: 1, + maxArgs: 1 + }, + removePasswords: { + minArgs: 1, + maxArgs: 1 + }, + removePluginData: { + minArgs: 1, + maxArgs: 1 + }, + settings: { + minArgs: 0, + maxArgs: 0 + } + }, + commands: { + getAll: { + minArgs: 0, + maxArgs: 0 + } + }, + contextMenus: { + remove: { + minArgs: 1, + maxArgs: 1 + }, + removeAll: { + minArgs: 0, + maxArgs: 0 + }, + update: { + minArgs: 2, + maxArgs: 2 + } + }, + cookies: { + get: { + minArgs: 1, + maxArgs: 1 + }, + getAll: { + minArgs: 1, + maxArgs: 1 + }, + getAllCookieStores: { + minArgs: 0, + maxArgs: 0 + }, + remove: { + minArgs: 1, + maxArgs: 1 + }, + set: { + minArgs: 1, + maxArgs: 1 + } + }, + devtools: { + inspectedWindow: { + eval: { + minArgs: 1, + maxArgs: 2, + singleCallbackArg: !1 } - }), E; - } - return y[C] = E, E + }, + panels: { + create: { + minArgs: 3, + maxArgs: 3, + singleCallbackArg: !0 + } + } + }, + downloads: { + cancel: { + minArgs: 1, + maxArgs: 1 + }, + download: { + minArgs: 1, + maxArgs: 1 + }, + erase: { + minArgs: 1, + maxArgs: 1 + }, + getFileIcon: { + minArgs: 1, + maxArgs: 2 + }, + open: { + minArgs: 1, + maxArgs: 1, + fallbackToNoCallback: !0 + }, + pause: { + minArgs: 1, + maxArgs: 1 + }, + removeFile: { + minArgs: 1, + maxArgs: 1 + }, + resume: { + minArgs: 1, + maxArgs: 1 + }, + search: { + minArgs: 1, + maxArgs: 1 + }, + show: { + minArgs: 1, + maxArgs: 1, + fallbackToNoCallback: !0 + } + }, + extension: { + isAllowedFileSchemeAccess: { + minArgs: 0, + maxArgs: 0 + }, + isAllowedIncognitoAccess: { + minArgs: 0, + maxArgs: 0 + } + }, + history: { + addUrl: { + minArgs: 1, + maxArgs: 1 + }, + deleteAll: { + minArgs: 0, + maxArgs: 0 + }, + deleteRange: { + minArgs: 1, + maxArgs: 1 + }, + deleteUrl: { + minArgs: 1, + maxArgs: 1 + }, + getVisits: { + minArgs: 1, + maxArgs: 1 + }, + search: { + minArgs: 1, + maxArgs: 1 + } + }, + i18n: { + detectLanguage: { + minArgs: 1, + maxArgs: 1 + }, + getAcceptLanguages: { + minArgs: 0, + maxArgs: 0 + } + }, + identity: { + launchWebAuthFlow: { + minArgs: 1, + maxArgs: 1 + } + }, + idle: { + queryState: { + minArgs: 1, + maxArgs: 1 + } + }, + management: { + get: { + minArgs: 1, + maxArgs: 1 + }, + getAll: { + minArgs: 0, + maxArgs: 0 + }, + getSelf: { + minArgs: 0, + maxArgs: 0 + }, + setEnabled: { + minArgs: 2, + maxArgs: 2 + }, + uninstallSelf: { + minArgs: 0, + maxArgs: 1 + } + }, + notifications: { + clear: { + minArgs: 1, + maxArgs: 1 + }, + create: { + minArgs: 1, + maxArgs: 2 + }, + getAll: { + minArgs: 0, + maxArgs: 0 + }, + getPermissionLevel: { + minArgs: 0, + maxArgs: 0 + }, + update: { + minArgs: 2, + maxArgs: 2 + } + }, + pageAction: { + getPopup: { + minArgs: 1, + maxArgs: 1 + }, + getTitle: { + minArgs: 1, + maxArgs: 1 + }, + hide: { + minArgs: 1, + maxArgs: 1, + fallbackToNoCallback: !0 + }, + setIcon: { + minArgs: 1, + maxArgs: 1 + }, + setPopup: { + minArgs: 1, + maxArgs: 1, + fallbackToNoCallback: !0 + }, + setTitle: { + minArgs: 1, + maxArgs: 1, + fallbackToNoCallback: !0 + }, + show: { + minArgs: 1, + maxArgs: 1, + fallbackToNoCallback: !0 + } + }, + permissions: { + contains: { + minArgs: 1, + maxArgs: 1 + }, + getAll: { + minArgs: 0, + maxArgs: 0 + }, + remove: { + minArgs: 1, + maxArgs: 1 + }, + request: { + minArgs: 1, + maxArgs: 1 + } + }, + runtime: { + getBackgroundPage: { + minArgs: 0, + maxArgs: 0 + }, + getBrowserInfo: { + minArgs: 0, + maxArgs: 0 + }, + getPlatformInfo: { + minArgs: 0, + maxArgs: 0 + }, + openOptionsPage: { + minArgs: 0, + maxArgs: 0 + }, + requestUpdateCheck: { + minArgs: 0, + maxArgs: 0 + }, + sendMessage: { + minArgs: 1, + maxArgs: 3 + }, + sendNativeMessage: { + minArgs: 2, + maxArgs: 2 + }, + setUninstallURL: { + minArgs: 1, + maxArgs: 1 + } + }, + sessions: { + getDevices: { + minArgs: 0, + maxArgs: 1 + }, + getRecentlyClosed: { + minArgs: 0, + maxArgs: 1 + }, + restore: { + minArgs: 0, + maxArgs: 1 + } + }, + storage: { + local: { + clear: { + minArgs: 0, + maxArgs: 0 + }, + get: { + minArgs: 0, + maxArgs: 1 + }, + getBytesInUse: { + minArgs: 0, + maxArgs: 1 + }, + remove: { + minArgs: 1, + maxArgs: 1 + }, + set: { + minArgs: 1, + maxArgs: 1 + } + }, + managed: { + get: { + minArgs: 0, + maxArgs: 1 + }, + getBytesInUse: { + minArgs: 0, + maxArgs: 1 + } + }, + sync: { + clear: { + minArgs: 0, + maxArgs: 0 + }, + get: { + minArgs: 0, + maxArgs: 1 + }, + getBytesInUse: { + minArgs: 0, + maxArgs: 1 + }, + remove: { + minArgs: 1, + maxArgs: 1 + }, + set: { + minArgs: 1, + maxArgs: 1 + } + } + }, + tabs: { + captureVisibleTab: { + minArgs: 0, + maxArgs: 2 + }, + create: { + minArgs: 1, + maxArgs: 1 + }, + detectLanguage: { + minArgs: 0, + maxArgs: 1 + }, + discard: { + minArgs: 0, + maxArgs: 1 + }, + duplicate: { + minArgs: 1, + maxArgs: 1 + }, + executeScript: { + minArgs: 1, + maxArgs: 2 + }, + get: { + minArgs: 1, + maxArgs: 1 + }, + getCurrent: { + minArgs: 0, + maxArgs: 0 + }, + getZoom: { + minArgs: 0, + maxArgs: 1 + }, + getZoomSettings: { + minArgs: 0, + maxArgs: 1 + }, + highlight: { + minArgs: 1, + maxArgs: 1 + }, + insertCSS: { + minArgs: 1, + maxArgs: 2 + }, + move: { + minArgs: 2, + maxArgs: 2 + }, + query: { + minArgs: 1, + maxArgs: 1 + }, + reload: { + minArgs: 0, + maxArgs: 2 + }, + remove: { + minArgs: 1, + maxArgs: 1 + }, + removeCSS: { + minArgs: 1, + maxArgs: 2 + }, + sendMessage: { + minArgs: 2, + maxArgs: 3 + }, + setZoom: { + minArgs: 1, + maxArgs: 2 + }, + setZoomSettings: { + minArgs: 1, + maxArgs: 2 + }, + update: { + minArgs: 1, + maxArgs: 2 + } + }, + topSites: { + get: { + minArgs: 0, + maxArgs: 0 + } + }, + webNavigation: { + getAllFrames: { + minArgs: 1, + maxArgs: 1 + }, + getFrame: { + minArgs: 1, + maxArgs: 1 + } + }, + webRequest: { + handlerBehaviorChanged: { + minArgs: 0, + maxArgs: 0 + } + }, + windows: { + create: { + minArgs: 0, + maxArgs: 1 + }, + get: { + minArgs: 1, + maxArgs: 2 + }, + getAll: { + minArgs: 0, + maxArgs: 1 + }, + getCurrent: { + minArgs: 0, + maxArgs: 1 + }, + getLastFocused: { + minArgs: 0, + maxArgs: 1 + }, + remove: { + minArgs: 1, + maxArgs: 1 + }, + update: { + minArgs: 2, + maxArgs: 2 + } } - }, - set(B, C, D) { - return C in y ? y[C] = D : v[C] = D, !0 - }, - defineProperty(B, C, D) { - return Reflect.defineProperty(y, C, D) - }, - deleteProperty(B, C) { - return Reflect.deleteProperty(y, C) - } }; - let A = Object.create(v); - return new Proxy(A, z) - }; - const o = v => ({ - addListener(w, x, ...y) { - w.addListener(v.get(x), ...y) - }, - hasListener(w, x) { - return w.hasListener(v.get(x)) - }, - removeListener(w, x) { - w.removeListener(v.get(x)) - } - }); - let p = !1; - const q = new g(v => { - return "function" == typeof v ? function(x, y, z) { - let B; - let D; - let A = !1; - let C = new Promise(G => { - B = function(H) { - p || (console.warn("Returning a Promise is the preferred way to send a reply from an onMessage/onMessageExternal listener, as the sendResponse will be removed from the specs (See https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)", new Error().stack), p = !0), A = !0, G(H) + if (0 === Object.keys(f).length) { + throw new Error("api-metadata.json has not been included in browser-polyfill"); + } + class g extends WeakMap { + constructor(v, w = void 0) { + super(w), this.createItem = v + } + get(v) { + return this.has(v) || this.set(v, this.createItem(v)), super.get(v) } - }); - try { - D = v(x, y, B) - } catch ( G ) { - D = Promise.reject(G) } - const E = !0 !== D && h(D); - if (!0 !== D && !E && !A) { - return !1; - } - const F = G => { - G.then(H => { - z(H) - }, H => { - let I; - I = H && (H instanceof Error || "string" == typeof H.message) ? H.message : "An unexpected error occurred", z({ - __mozWebExtensionPolyfillReject__: !0, - message: I + const h = v => { + return v && "object" == typeof v && "function" == typeof v.then + }; + const i = (v, w) => { + return (...x) => { + e.runtime.lastError ? v.reject(e.runtime.lastError) : w.singleCallbackArg || 1 >= x.length && !1 !== w.singleCallbackArg ? v.resolve(x[0]) : v.resolve(x) + } + }; + const j = v => 1 == v ? "argument" : "arguments"; + const k = (v, w) => { + return function(y, ...z) { + if (z.length < w.minArgs) { + throw new Error(`Expected at least ${w.minArgs} ${j(w.minArgs)} for ${v}(), got ${z.length}`); + } + if (z.length > w.maxArgs) { + throw new Error(`Expected at most ${w.maxArgs} ${j(w.maxArgs)} for ${v}(), got ${z.length}`); + } + return new Promise((A, B) => { + if (w.fallbackToNoCallback) { + try { + y[v](...z, i({ + resolve: A, + reject: B + }, w)) + } catch (C) { + console.warn(`${v} API method doesn't seem to support the callback parameter, ` + "falling back to call it without a callback: ", C), y[v](...z), w.fallbackToNoCallback = !1, w.noCallback = !0, A() + } + } else { + w.noCallback ? (y[v](...z), A()) : y[v](...z, i({ + resolve: A, + reject: B + }, w)) + } + }) + } + }; + const l = (v, w, x) => { + return new Proxy(w, { + apply(y, z, A) { + return x.call(z, v, ...A) + } }) - }).catch(H => { - console.error("Failed to send onMessage rejected reply", H) - }) }; - return E ? F(D) : F(C), !0 - } : v - }); - const r = ({reject:v, resolve:w} ,x) => { - e.runtime.lastError ? e.runtime.lastError.message === "The message port closed before a response was received." ? w() : v(e.runtime.lastError) : x && x.__mozWebExtensionPolyfillReject__ ? v(new Error(x.message)) : w(x) - }; - const s = (v, w, x, ...y) => { - if (y.length < w.minArgs) { - throw new Error(`Expected at least ${w.minArgs} ${j(w.minArgs)} for ${v}(), got ${y.length}`); - } - if (y.length > w.maxArgs) { - throw new Error(`Expected at most ${w.maxArgs} ${j(w.maxArgs)} for ${v}(), got ${y.length}`); - } - return new Promise((z, A) => { - const B = r.bind(null, { - resolve: z, - reject: A + let m = Function.call.bind(Object.prototype.hasOwnProperty); + const n = (v, w = {}, x = {}) => { + let y = Object.create(null); + let z = { + has(B, C) { + return C in v || C in y + }, + get(B, C) { + if (C in y) { + return y[C]; + } + if (C in v) { + let E = v[C]; + if ("function" == typeof E) { + if ("function" == typeof w[C]) { + E = l(v, v[C], w[C]); + } else if (m(x, C)) { + let F = k(C, x[C]); + E = l(v, v[C], F) + } else { + E = E.bind(v); + } + } else if ("object" == typeof E && null !== E && (m(w, C) || m(x, C))) { + E = n(E, w[C], x[C]); + } else { + return Object.defineProperty(y, C, { + configurable: !0, + enumerable: !0, + get() { + return v[C] + }, + set(F) { + v[C] = F + } + }), E; + } + return y[C] = E, E + } + }, + set(B, C, D) { + return C in y ? y[C] = D : v[C] = D, !0 + }, + defineProperty(B, C, D) { + return Reflect.defineProperty(y, C, D) + }, + deleteProperty(B, C) { + return Reflect.deleteProperty(y, C) + } + }; + let A = Object.create(v); + return new Proxy(A, z) + }; + const o = v => ({ + addListener(w, x, ...y) { + w.addListener(v.get(x), ...y) + }, + hasListener(w, x) { + return w.hasListener(v.get(x)) + }, + removeListener(w, x) { + w.removeListener(v.get(x)) + } }); - y.push(B), x.sendMessage(...y) - }) - }; - const t = { - runtime: { - onMessage: o(q), - onMessageExternal: o(q), - sendMessage: s.bind(null, "sendMessage", { - minArgs: 1, - maxArgs: 3 - }) - }, - tabs: { - sendMessage: s.bind(null, "sendMessage", { - minArgs: 2, - maxArgs: 3 - }) - } - }; - const u = { - clear: { - minArgs: 1, - maxArgs: 1 - }, - get: { - minArgs: 1, - maxArgs: 1 - }, - set: { - minArgs: 1, - maxArgs: 1 - } - }; - return f.privacy = { - network: { - networkPredictionEnabled: u, - webRTCIPHandlingPolicy: u - }, - services: { - passwordSavingEnabled: u - }, - websites: { - hyperlinkAuditingEnabled: u, - referrersEnabled: u - } - }, n(e, t, f) - })(chrome) - } else { - a.exports = browser - } + let p = !1; + const q = new g(v => { + return "function" == typeof v ? function(x, y, z) { + let B; + let D; + let A = !1; + let C = new Promise(G => { + B = function(H) { + p || (console.warn("Returning a Promise is the preferred way to send a reply from an onMessage/onMessageExternal listener, as the sendResponse will be removed from the specs (See https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)", new Error().stack), p = !0), A = !0, G(H) + } + }); + try { + D = v(x, y, B) + } catch (G) { + D = Promise.reject(G) + } + const E = !0 !== D && h(D); + if (!0 !== D && !E && !A) { + return !1; + } + const F = G => { + G.then(H => { + z(H) + }, H => { + let I; + I = H && (H instanceof Error || "string" == typeof H.message) ? H.message : "An unexpected error occurred", z({ + __mozWebExtensionPolyfillReject__: !0, + message: I + }) + }).catch(H => { + console.error("Failed to send onMessage rejected reply", H) + }) + }; + return E ? F(D) : F(C), !0 + } : v + }); + const r = ({ + reject: v, + resolve: w + }, x) => { + e.runtime.lastError ? e.runtime.lastError.message === "The message port closed before a response was received." ? w() : v(e.runtime.lastError) : x && x.__mozWebExtensionPolyfillReject__ ? v(new Error(x.message)) : w(x) + }; + const s = (v, w, x, ...y) => { + if (y.length < w.minArgs) { + throw new Error(`Expected at least ${w.minArgs} ${j(w.minArgs)} for ${v}(), got ${y.length}`); + } + if (y.length > w.maxArgs) { + throw new Error(`Expected at most ${w.maxArgs} ${j(w.maxArgs)} for ${v}(), got ${y.length}`); + } + return new Promise((z, A) => { + const B = r.bind(null, { + resolve: z, + reject: A + }); + y.push(B), x.sendMessage(...y) + }) + }; + const t = { + runtime: { + onMessage: o(q), + onMessageExternal: o(q), + sendMessage: s.bind(null, "sendMessage", { + minArgs: 1, + maxArgs: 3 + }) + }, + tabs: { + sendMessage: s.bind(null, "sendMessage", { + minArgs: 2, + maxArgs: 3 + }) + } + }; + const u = { + clear: { + minArgs: 1, + maxArgs: 1 + }, + get: { + minArgs: 1, + maxArgs: 1 + }, + set: { + minArgs: 1, + maxArgs: 1 + } + }; + return f.privacy = { + network: { + networkPredictionEnabled: u, + webRTCIPHandlingPolicy: u + }, + services: { + passwordSavingEnabled: u + }, + websites: { + hyperlinkAuditingEnabled: u, + referrersEnabled: u + } + }, n(e, t, f) + })(chrome) + } else { + a.exports = browser + } }); //# sourceMappingURL=browser-polyfill.min.js.map @@ -900,4 +903,4 @@ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ \ No newline at end of file diff --git a/content.js b/content.js index 6230f03..d408b64 100644 --- a/content.js +++ b/content.js @@ -14,5 +14,4 @@ var newsMessage = document.getElementById('window-create-news-panel'); newsMessage.textContent = chrome.i18n.getMessage("newsMessage"); var clearData = document.getElementById("clear-browser-data") -clearData.textContent = chrome.i18n.getMessage("clearData"); - +clearData.textContent = chrome.i18n.getMessage("clearData"); \ No newline at end of file diff --git a/context.js b/context.js index 8093ae5..1f53b98 100644 --- a/context.js +++ b/context.js @@ -1,68 +1,70 @@ - //var windowIds = [] function eventHandler(event) { - if (event.target.dataset.action == 'create') { - function onCreated(windowInfo) { - console.log(`Created window: ${windowInfo.id}`); - browser.tabs.create({ - windowId: windowInfo.id, - url: 'about:blank', - cookieStoreId: event.target.dataset.identity + if (event.target.dataset.action == 'create') { + function onCreated(windowInfo) { + console.log(`Created window: ${windowInfo.id}`); + browser.tabs.create({ + windowId: windowInfo.id, + url: 'about:blank', + cookieStoreId: event.target.dataset.identity + }); + } + + function onError(error) { + console.log(`Error: ${error}`); + } + var creating = browser.windows.create({ + cookieStoreId: event.target.dataset.identity + }); + creating.then(onCreated, onError); + } + if (event.target.dataset.action == 'close-all') { + browser.tabs.query({ + cookieStoreId: event.target.dataset.identity + }).then((tabs) => { + browser.tabs.remove(tabs.map((i) => i.id)); }); } - function onError(error) { - console.log(`Error: ${error}`); - } - var creating = browser.windows.create({ - cookieStoreId: event.target.dataset.identity - }); - creating.then(onCreated, onError); - } - if (event.target.dataset.action == 'close-all') { - browser.tabs.query({ - cookieStoreId: event.target.dataset.identity - }).then((tabs) => { - browser.tabs.remove(tabs.map((i) => i.id)); - }); - } - event.preventDefault(); + event.preventDefault(); } function createOptions(node, identity) { - for (let option of ['Create', 'Close All']) { - let a = document.createElement('a'); - a.href = '#'; - a.innerText = option; - a.dataset.action = option.toLowerCase().replace(' ', '-'); - a.dataset.identity = identity.cookieStoreId; - a.addEventListener('click', eventHandler); - node.appendChild(a); - } + for (let option of ['Create', 'Close All']) { + let a = document.createElement('a'); + a.href = '#'; + a.innerText = option; + a.dataset.action = option.toLowerCase().replace(' ', '-'); + a.dataset.identity = identity.cookieStoreId; + a.addEventListener('click', eventHandler); + node.appendChild(a); + } } var div = document.getElementById('identity-list'); if (browser.contextualIdentities === undefined) { - div.innerText = 'browser.contextualIdentities not available. Check that the privacy.userContext.enabled pref is set to true, and reload the add-on.'; + div.innerText = 'browser.contextualIdentities not available. Check that the privacy.userContext.enabled pref is set to true, and reload the add-on.'; } else { - browser.contextualIdentities.query({name:"i2pbrowser"}) - .then((identities) => { - if (!identities.length) { - div.innerText = 'No identities returned from the API.'; - return; - } + browser.contextualIdentities.query({ + name: "i2pbrowser" + }) + .then((identities) => { + if (!identities.length) { + div.innerText = 'No identities returned from the API.'; + return; + } - for (let identity of identities) { - let row = document.createElement('div'); - let span = document.createElement('span'); - span.className = 'identity'; - span.innerText = identity.name; - span.style = `color: ${identity.color}`; - console.log(identity); - row.appendChild(span); - createOptions(row, identity); - div.appendChild(row); - } - }); -} + for (let identity of identities) { + let row = document.createElement('div'); + let span = document.createElement('span'); + span.className = 'identity'; + span.innerText = identity.name; + span.style = `color: ${identity.color}`; + console.log(identity); + row.appendChild(span); + createOptions(row, identity); + div.appendChild(row); + } + }); +} \ No newline at end of file diff --git a/info.js b/info.js index 1c125ed..0267882 100644 --- a/info.js +++ b/info.js @@ -1,49 +1,49 @@ document.addEventListener("click", (e) => { - function getCurrentWindow() { - return chrome.windows.getCurrent(); - } - - if (e.target.id === "window-create-help-panel") { - let createData = { - type: "panel", - incognito: true, - }; - let creating = chrome.windows.create(createData); - creating.then(() => { - console.log("The help panel has been created"); - }); - } else if (e.target.id === "window-create-news-panel") { - let createData = { - type: "panel", - incognito: true, - }; - let creating = chrome.windows.create(createData); - creating.then(() => { - console.log("The news panel has been created"); - }); - } else if (e.target.id === "generate-fresh-tunnel") { - function RefreshIdentity() { - console.log("Generating new identity") - const Http = new XMLHttpRequest(); - const url = 'http://' + controlHost + ":" + controlPort - Http.open("GET", url); - Http.send(); - Http.onreadystatechange = (e) => { - console.log(Http.responseText) - } + function getCurrentWindow() { + return chrome.windows.getCurrent(); } - RefreshIdentity(); - } else if (e.target.id === "window-preface-title") { - getCurrentWindow().then((currentWindow) => { - let updateInfo = { - titlePreface: "I2P Help | " - } - chrome.windows.update(currentWindow.id, updateInfo); - }); - } else if (e.target.id === "clear-browser-data") { - forgetBrowsingData() - } - e.preventDefault(); + if (e.target.id === "window-create-help-panel") { + let createData = { + type: "panel", + incognito: true, + }; + let creating = chrome.windows.create(createData); + creating.then(() => { + console.log("The help panel has been created"); + }); + } else if (e.target.id === "window-create-news-panel") { + let createData = { + type: "panel", + incognito: true, + }; + let creating = chrome.windows.create(createData); + creating.then(() => { + console.log("The news panel has been created"); + }); + } else if (e.target.id === "generate-fresh-tunnel") { + function RefreshIdentity() { + console.log("Generating new identity") + const Http = new XMLHttpRequest(); + const url = 'http://' + controlHost + ":" + controlPort + Http.open("GET", url); + Http.send(); + Http.onreadystatechange = (e) => { + console.log(Http.responseText) + } + } + RefreshIdentity(); + } else if (e.target.id === "window-preface-title") { + getCurrentWindow().then((currentWindow) => { + let updateInfo = { + titlePreface: "I2P Help | " + } + chrome.windows.update(currentWindow.id, updateInfo); + }); + } else if (e.target.id === "clear-browser-data") { + forgetBrowsingData() + } -}); + e.preventDefault(); + +}); \ No newline at end of file diff --git a/options/options.js b/options/options.js index f2803ac..dfb5a86 100644 --- a/options/options.js +++ b/options/options.js @@ -1,214 +1,211 @@ - function isDroid() { - var gettingInfo = browser.runtime.getPlatformInfo(); - gettingInfo.then((got) => { - if (got.os == "android") { - return true - } else { - return false - } - }); + var gettingInfo = browser.runtime.getPlatformInfo(); + gettingInfo.then((got) => { + if (got.os == "android") { + return true + } else { + return false + } + }); } function SetHostText() { - var hostid = document.getElementById('hostText'); - hostid.textContent = chrome.i18n.getMessage("hostText"); + var hostid = document.getElementById('hostText'); + hostid.textContent = chrome.i18n.getMessage("hostText"); } function SetPortText() { - var portid = document.getElementById('portText'); - portid.textContent = chrome.i18n.getMessage("portText"); + var portid = document.getElementById('portText'); + portid.textContent = chrome.i18n.getMessage("portText"); } function SetControlHostText() { - var controlhostid = document.getElementById('controlHostText'); - controlhostid.textContent = chrome.i18n.getMessage("controlHostText"); + var controlhostid = document.getElementById('controlHostText'); + controlhostid.textContent = chrome.i18n.getMessage("controlHostText"); } function setupProxy() { - var controlHost = getControlHost() - var controlPort = getControlPort(); - var Host = getHost() - var Port = getPort() - var Scheme = getScheme() - if (!getChrome()) { - function handleProxyRequest(requestInfo) { - console.log("proxying request via listener") - console.log(" ", Scheme, Host, ":", Port,) - return { - type: Scheme, - host: Host, - port: Port, - proxyDns: true - } + var controlHost = getControlHost() + var controlPort = getControlPort(); + var Host = getHost() + var Port = getPort() + var Scheme = getScheme() + if (!getChrome()) { + function handleProxyRequest(requestInfo) { + console.log("proxying request via listener") + console.log(" ", Scheme, Host, ":", Port, ) + return { + type: Scheme, + host: Host, + port: Port, + proxyDns: true + } + } + console.log("Setting up Firefox WebExtension proxy") + browser.proxy.onRequest.addListener(handleProxyRequest, { + urls: [""] + }); + console.log("i2p settings created for WebExtension Proxy") + } else { + var config = { + mode: "fixed_servers", + rules: { + singleProxy: { + scheme: Scheme, + host: Host, + port: parseInt(Port), + }, + } + }; + chrome.proxy.settings.set({ + value: config, + scope: 'regular' + }, function() {}); } - console.log("Setting up Firefox WebExtension proxy") - browser.proxy.onRequest.addListener(handleProxyRequest, { - urls: [""] - }); - console.log("i2p settings created for WebExtension Proxy") - } else { - var config = { - mode: "fixed_servers", - rules: { - singleProxy: { - scheme: Scheme, - host: Host, - port: parseInt(Port), - }, - } - }; - chrome.proxy.settings.set( - { - value: config, - scope: 'regular' - }, function() {}); - } } function SetControlPortText() { - var controlportid = document.getElementById('controlPortText'); - controlportid.textContent = chrome.i18n.getMessage("controlPortText"); + var controlportid = document.getElementById('controlPortText'); + controlportid.textContent = chrome.i18n.getMessage("controlPortText"); } function SetControlHelpText() { - var portid = document.getElementById('controlHelpText'); - portid.textContent = chrome.i18n.getMessage("controlHelpText"); + var portid = document.getElementById('controlHelpText'); + portid.textContent = chrome.i18n.getMessage("controlHelpText"); } function getScheme() { - const proxy_scheme = document.querySelector("#proxy_scheme"); - console.log("Got i2p proxy scheme:", proxy_scheme.value); - if (proxy_scheme == "HTTP") { - return "http" - } - if (proxy_scheme == "SOCKS") { - return "socks" - } - return proxy_scheme.value; + const proxy_scheme = document.querySelector("#proxy_scheme"); + console.log("Got i2p proxy scheme:", proxy_scheme.value); + if (proxy_scheme == "HTTP") { + return "http" + } + if (proxy_scheme == "SOCKS") { + return "socks" + } + return proxy_scheme.value; } function getHost() { - proxy_host = document.getElementById("host").value - console.log("Got i2p proxy host:", proxy_host); - if (proxy_host == undefined) { - return "127.0.0.1" - } - return proxy_host; + proxy_host = document.getElementById("host").value + console.log("Got i2p proxy host:", proxy_host); + if (proxy_host == undefined) { + return "127.0.0.1" + } + return proxy_host; } function getPort() { - proxy_port = document.getElementById("port").value - console.log("Got i2p proxy port:", proxy_port); - if (proxy_port == undefined) { - return "4444" - } - return proxy_port; + proxy_port = document.getElementById("port").value + console.log("Got i2p proxy port:", proxy_port); + if (proxy_port == undefined) { + return "4444" + } + return proxy_port; } function getControlHost() { - control_host = document.getElementById("controlhost").value - console.log("Got i2p control host:", control_host); - if (control_host == undefined) { - return "127.0.0.1" - } - return control_host; + control_host = document.getElementById("controlhost").value + console.log("Got i2p control host:", control_host); + if (control_host == undefined) { + return "127.0.0.1" + } + return control_host; } function getControlPort() { - control_port = document.getElementById("controlport").value - console.log("Got i2p control port:", control_port); - if (control_port == undefined) { - return "4444" - } - return control_port; + control_port = document.getElementById("controlport").value + console.log("Got i2p control port:", control_port); + if (control_port == undefined) { + return "4444" + } + return control_port; } function checkStoredSettings(storedSettings) { - let defaultSettings = {}; - if (!storedSettings.proxy_scheme) { - defaultSettings["proxy_scheme"] = "http" - } - if (!storedSettings.proxy_host) { - defaultSettings["proxy_host"] = "127.0.0.1" - } - if (!storedSettings.proxy_port) { - defaultSettings["proxy_port"] = 4444 - } - if (!storedSettings.control_host) { - defaultSettings["control_host"] = "127.0.0.1" - } - if (!storedSettings.control_port) { - defaultSettings["control_port"] = 4444 - } - chrome.storage.local.set(defaultSettings); + let defaultSettings = {}; + if (!storedSettings.proxy_scheme) { + defaultSettings["proxy_scheme"] = "http" + } + if (!storedSettings.proxy_host) { + defaultSettings["proxy_host"] = "127.0.0.1" + } + if (!storedSettings.proxy_port) { + defaultSettings["proxy_port"] = 4444 + } + if (!storedSettings.control_host) { + defaultSettings["control_host"] = "127.0.0.1" + } + if (!storedSettings.control_port) { + defaultSettings["control_port"] = 4444 + } + chrome.storage.local.set(defaultSettings); } function onError(e) { - console.error(e); + console.error(e); } function storeSettings() { - let proxy_scheme = getScheme() - let proxy_host = getHost() - let proxy_port = getPort() - let control_host = getControlHost() - let control_port = getControlPort() - chrome.storage.local.set({ - proxy_scheme, - proxy_host, - proxy_port, - control_host, - control_port, - }); - console.log("storing proxy scheme:", proxy_scheme) - console.log("storing proxy host:", proxy_host) - console.log("storing proxy port:", proxy_port) - console.log("storing control host:", control_host) - console.log("storing control port:", control_port) - setupProxy() + let proxy_scheme = getScheme() + let proxy_host = getHost() + let proxy_port = getPort() + let control_host = getControlHost() + let control_port = getControlPort() + chrome.storage.local.set({ + proxy_scheme, + proxy_host, + proxy_port, + control_host, + control_port, + }); + console.log("storing proxy scheme:", proxy_scheme) + console.log("storing proxy host:", proxy_host) + console.log("storing proxy port:", proxy_port) + console.log("storing control host:", control_host) + console.log("storing control port:", control_port) + setupProxy() } function updateUI(restoredSettings) { - const selectList = document.querySelector("#proxy_scheme") - selectList.value = restoredSettings.proxy_scheme - console.log("showing proxy scheme:", selectList.value) + const selectList = document.querySelector("#proxy_scheme") + selectList.value = restoredSettings.proxy_scheme + console.log("showing proxy scheme:", selectList.value) - const hostitem = document.getElementById("host") - hostitem.value = restoredSettings.proxy_host - console.log("showing proxy host:", hostitem.value) + const hostitem = document.getElementById("host") + hostitem.value = restoredSettings.proxy_host + console.log("showing proxy host:", hostitem.value) - const portitem = document.getElementById("port") - portitem.value = restoredSettings.proxy_port - console.log("showing proxy port:", portitem.value) + const portitem = document.getElementById("port") + portitem.value = restoredSettings.proxy_port + console.log("showing proxy port:", portitem.value) - const controlhostitem = document.getElementById("controlhost") - controlhostitem.value = restoredSettings.control_host - console.log("showing control host:", controlhostitem.value) + const controlhostitem = document.getElementById("controlhost") + controlhostitem.value = restoredSettings.control_host + console.log("showing control host:", controlhostitem.value) - const controlportitem = document.getElementById("controlport") - controlportitem.value = restoredSettings.control_port - console.log("showing control port:", controlportitem.value) + const controlportitem = document.getElementById("controlport") + controlportitem.value = restoredSettings.control_port + console.log("showing control port:", controlportitem.value) - SetHostText() - SetPortText() - SetControlHostText() - SetControlPortText() - SetControlHelpText() - setupProxy() + SetHostText() + SetPortText() + SetControlHostText() + SetControlPortText() + SetControlHelpText() + setupProxy() } function onError(e) { - console.error(e); + console.error(e); } chrome.storage.local.get(function(got) { - checkStoredSettings(got) - updateUI(got) + checkStoredSettings(got) + updateUI(got) }); const saveButton = document.querySelector("#save-button"); saveButton.addEventListener("click", storeSettings); -//EXPERIMENTAL: Open in I2P Tab - +//EXPERIMENTAL: Open in I2P Tab \ No newline at end of file diff --git a/privacy.js b/privacy.js index 4e79503..3b1fecd 100644 --- a/privacy.js +++ b/privacy.js @@ -1,46 +1,27 @@ - -var ua = "MYOB/6.66 (AN/ON)"; - -function rewriteUserAgentHeader(e) { - for (var header of e.requestHeaders) { - if (header.name.toLowerCase() === "user-agent") { - header.value = ua; - console.log(header.value) - } - } - return {requestHeaders: e.requestHeaders}; -} - -browser.webRequest.onBeforeSendHeaders.addListener( - rewriteUserAgentHeader, - {urls: [""]}, - ["blocking", "requestHeaders"] -); - function getChrome() { - if (chrome.runtime.getBrowserInfo == undefined) { - return true - } - return false + if (chrome.runtime.getBrowserInfo == undefined) { + return true + } + return false } function onSet(result) { - if (result) { - console.log("->: Value was updated"); - } else { - console.log("-X: Value was not updated"); - } + if (result) { + console.log("->: Value was updated"); + } else { + console.log("-X: Value was not updated"); + } } // This disables queries to centralized databases of bad URLs to screen for // risky sites in your browser function disableHyperlinkAuditing() { - if (!getChrome()){ + if (!getChrome()) { var setting = browser.privacy.websites.hyperlinkAuditingEnabled.set({ - value: false + value: false }); console.log("Disabling hyperlink auditing/val=", { - value: false + value: false }) setting.then(onSet); } @@ -50,10 +31,10 @@ function disableHyperlinkAuditing() { function enableFirstPartyIsolation() { if (!getChrome()) { var setting = browser.privacy.websites.firstPartyIsolate.set({ - value: true + value: true }); console.log("Enabling first party isolation/val=", { - value: true + value: true }) setting.then(onSet); } @@ -66,12 +47,18 @@ function disableEvilCookies() { if (!getChrome()) { var getting = browser.privacy.websites.cookieConfig.get({}); getting.then((got) => { - var setting = browser.privacy.websites.cookieConfig.set( - {value: {behavior: "reject_third_party", - nonPersistentCookies: got.value.nonPersistentCookies}} - ); - console.log("Setting cookie behavior/val=", {value: {behavior: "reject_third_party", - nonPersistentCookies: got.value.nonPersistentCookies}}) + var setting = browser.privacy.websites.cookieConfig.set({ + value: { + behavior: "reject_third_party", + nonPersistentCookies: got.value.nonPersistentCookies + } + }); + console.log("Setting cookie behavior/val=", { + value: { + behavior: "reject_third_party", + nonPersistentCookies: got.value.nonPersistentCookies + } + }) setting.then(onSet); }); } @@ -90,27 +77,27 @@ function disableEvilCookies() { // this disables the use of referrer headers function disableReferrers() { - if (!getChrome()){ - var setting = browser.privacy.websites.referrersEnabled.set({ - value: false - }); - console.log("Disabling referrer headers/val=", { - value: false - }) - setting.then(onSet); + if (!getChrome()) { + var setting = browser.privacy.websites.referrersEnabled.set({ + value: false + }); + console.log("Disabling referrer headers/val=", { + value: false + }) + setting.then(onSet); } } // enable fingerprinting resistent features(letterboxing and stuff) function enableResistFingerprinting() { - if (!getChrome()){ - var setting = browser.privacy.websites.referrersEnabled.set({ - value: true - }); - console.log("Enabling resist fingerprinting/val=", { - value: true - }) - setting.then(onSet); + if (!getChrome()) { + var setting = browser.privacy.websites.referrersEnabled.set({ + value: true + }); + console.log("Enabling resist fingerprinting/val=", { + value: true + }) + setting.then(onSet); } } @@ -118,10 +105,10 @@ function enableResistFingerprinting() { function enableTrackingProtection() { if (!getChrome()) { var setting = browser.privacy.websites.trackingProtectionMode.set({ - value: "always" + value: "always" }); console.log("Enabling tracking protection/val=", { - value: "always" + value: "always" }) setting.then(onSet); } @@ -130,19 +117,19 @@ function enableTrackingProtection() { // This disables protected content, which is a form of digital restrictions // management dependent on identifying information function disableDigitalRestrictionsManagement() { - if (!getChrome()){ - var gettingInfo = browser.runtime.getPlatformInfo(); - gettingInfo.then((got) => { - if (got.os == "win") { - var setting = browser.privacy.websites.protectedContentEnabled.set({ - value: false - }); - console.log("Setting Protected Content(Digital Restrictions Management) false/val=", { - value: false - }) - setting.then(onSet); - } - }); + if (!getChrome()) { + var gettingInfo = browser.runtime.getPlatformInfo(); + gettingInfo.then((got) => { + if (got.os == "win") { + var setting = browser.privacy.websites.protectedContentEnabled.set({ + value: false + }); + console.log("Setting Protected Content(Digital Restrictions Management) false/val=", { + value: false + }) + setting.then(onSet); + } + }); } } @@ -158,33 +145,49 @@ function setAllPrivacy() { setAllPrivacy() -function ResetPeerConnection(){ +function ResetPeerConnection() { if (!getChrome()) { - browser.privacy.network.peerConnectionEnabled.set({value: false}); - browser.privacy.network.networkPredictionEnabled.set({value: false}); + browser.privacy.network.peerConnectionEnabled.set({ + value: false + }); + browser.privacy.network.networkPredictionEnabled.set({ + value: false + }); } - chrome.privacy.network.webRTCIPHandlingPolicy.set({value: "disable_non_proxied_udp"}); + chrome.privacy.network.webRTCIPHandlingPolicy.set({ + value: "disable_non_proxied_udp" + }); console.log("Re-disabled WebRTC") } -function EnablePeerConnection(){ +function EnablePeerConnection() { if (!getChrome()) { - browser.privacy.network.peerConnectionEnabled.set({value: true}); - browser.privacy.network.networkPredictionEnabled.set({value: false}); + browser.privacy.network.peerConnectionEnabled.set({ + value: true + }); + browser.privacy.network.networkPredictionEnabled.set({ + value: false + }); } - chrome.privacy.network.webRTCIPHandlingPolicy.set({value: "disable_non_proxied_udp"}); + chrome.privacy.network.webRTCIPHandlingPolicy.set({ + value: "disable_non_proxied_udp" + }); console.log("Enabled WebRTC") } ResetPeerConnection() -function ResetDisableSavePasswords(){ - browser.privacy.services.passwordSavingEnabled.set({value: false}); +function ResetDisableSavePasswords() { + browser.privacy.services.passwordSavingEnabled.set({ + value: false + }); console.log("Re-disabled saved passwords") } -function EnableSavePasswords(){ - browser.privacy.services.passwordSavingEnabled.set({value: true}); +function EnableSavePasswords() { + browser.privacy.services.passwordSavingEnabled.set({ + value: true + }); console.log("Enabled saved passwords") } @@ -192,82 +195,90 @@ function EnableSavePasswords(){ var defaultSettings = { - since: "forever", - dataTypes: ["history", "downloads", "cache", "cookies", "passwords", "pluginData", "formData", "serviceWorkers"] + since: "forever", + dataTypes: ["history", "downloads", "cache", "cookies", "passwords", "pluginData", "formData", "serviceWorkers"] }; var appSettings = { - since: "forever", - dataTypes: [""] + since: "forever", + dataTypes: [""] }; function onError(e) { - console.error(e); + console.error(e); } function checkStoredSettings(storedSettings) { - chrome.storage.local.set(appSettings); + chrome.storage.local.set(appSettings); } -if (!getChrome()){ +if (!getChrome()) { const gettingStoredSettings = browser.storage.local.get(); gettingStoredSettings.then(checkStoredSettings, onError); } function forgetBrowsingData(storedSettings) { - function getSince(selectedSince) { - if (selectedSince === "forever") { - return 0; + function getSince(selectedSince) { + if (selectedSince === "forever") { + return 0; + } + + const times = { + hour: () => { + return 1000 * 60 * 60 + }, + day: () => { + return 1000 * 60 * 60 * 24 + }, + week: () => { + return 1000 * 60 * 60 * 24 * 7 + } + } + + const sinceMilliseconds = times[selectedSince].call(); + return Date.now() - sinceMilliseconds; } - const times = { - hour: () => { return 1000 * 60 * 60 }, - day: () => { return 1000 * 60 * 60 * 24 }, - week: () => { return 1000 * 60 * 60 * 24 * 7} + function getTypes(selectedTypes) { + let dataTypes = {}; + for (let item of selectedTypes) { + dataTypes[item] = true; + } + return dataTypes; } - const sinceMilliseconds = times[selectedSince].call(); - return Date.now() - sinceMilliseconds; - } + const since = getSince(defaultSettings.since); + const dataTypes = getTypes(defaultSettings.dataTypes); - function getTypes(selectedTypes) { - let dataTypes = {}; - for (let item of selectedTypes) { - dataTypes[item] = true; + function notify() { + let dataTypesString = Object.keys(dataTypes).join(", "); + let sinceString = new Date(since).toLocaleString(); + browser.notifications.create({ + "type": "basic", + "title": "Removed browsing data", + "message": `Removed ${dataTypesString}\nsince ${sinceString}` + }); } - return dataTypes; - } - const since = getSince(defaultSettings.since); - const dataTypes = getTypes(defaultSettings.dataTypes); + browser.browsingData.remove({ + since + }, dataTypes).then(notify); - function notify() { - let dataTypesString = Object.keys(dataTypes).join(", "); - let sinceString = new Date(since).toLocaleString(); - browser.notifications.create({ - "type": "basic", - "title": "Removed browsing data", - "message": `Removed ${dataTypesString}\nsince ${sinceString}` - }); - } - - browser.browsingData.remove({since}, dataTypes).then(notify); - - setAllPrivacy() - ResetPeerConnection() + setAllPrivacy() + ResetPeerConnection() } function onGot(contexts) { - for (let context of contexts) { - console.log(context); - } + for (let context of contexts) { + console.log(context); + } } function onError(e) { - console.error(e); + console.error(e); } -browser.contextualIdentities.query({}).then(onGot, onError); +browser.contextualIdentities.query({}).then(onGot, onError); \ No newline at end of file diff --git a/proxy.js b/proxy.js index a426f32..0556b61 100644 --- a/proxy.js +++ b/proxy.js @@ -1,252 +1,278 @@ - function getChrome() { - if (browser.runtime.getBrowserInfo == undefined) { - return true - } - return false + if (browser.runtime.getBrowserInfo == undefined) { + return true + } + return false } function isDroid() { - if (!getChrome()) { - var gettingInfo = browser.runtime.getPlatformInfo(); - gettingInfo.then((got) => { - if (got.os == "android") { - console.log("android detected") - return true - } else { - console.log("desktop detected") - return false - } - }); - } - return false + if (!getChrome()) { + var gettingInfo = browser.runtime.getPlatformInfo(); + gettingInfo.then((got) => { + if (got.os == "android") { + console.log("android detected") + return true + } else { + console.log("desktop detected") + return false + } + }); + } + return false } if (!getChrome()) { - browser.privacy.network.peerConnectionEnabled.set({ - value: false - }); + browser.privacy.network.peerConnectionEnabled.set({ + value: false + }); } chrome.privacy.network.networkPredictionEnabled.set({ - value: false + value: false }); chrome.privacy.network.webRTCIPHandlingPolicy.set({ - value: "disable_non_proxied_udp" + value: "disable_non_proxied_udp" }); console.log("Preliminarily disabled WebRTC.") function shouldProxyRequest(requestInfo) { - return requestInfo.parentFrameId != -1; + return requestInfo.parentFrameId != -1; } function handleProxyRequest(requestInfo) { - console.log(`Proxying: ${requestInfo.url}`); - console.log(" ", getScheme(), getHost(), ":", getPort(),) - return { - type: getScheme(), - host: getHost(), - port: getPort() - }; + return { + failoverTimeout: -1, + type: getScheme(), + host: getHost(), + port: getPort(), + proxyDns: true + } +} + +function handleContextProxyRequest(requestDetails) { + console.log("Searching for context"); + var proxyInfo = handleProxyRequest(requestDetails) + try { + function onGot(context) { + if (!context) { + console.error("Context not found"); + proxyInfo = {} + return + } else { + console.log("Found context", context.name); + if (context.name = "i2pbrowser") { + proxyInfo = handleProxyRequest(requestDetails) + console.log("Using I2P proxy", proxyInfo); + return proxyInfo + } + } + } + function onError(e) { + console.error(e); + } + function tabGot(tab) { + if (!tab) { + console.error("Tab not found"); + } else { + console.log("Found cookieStoreId", tab.cookieStoreId); + if (tab.cookieStoreId != "firefox-default") + browser.contextualIdentities.get(tab.cookieStoreId).then(onGot, onError); + } + } + function tabError(e) { + console.error(e); + } + if (requestDetails.tabId > 0) + browser.tabs.get(requestDetails.tabId).then(tabGot, tabError); + } catch (error) { + console.error(error); + } + console.log(proxyInfo); + return proxyInfo } var proxy_scheme = "HTTP" function getScheme() { - if (proxy_scheme == undefined) { - proxy_scheme = "http" - } - if (proxy_scheme == "HTTP") { - proxy_scheme = "http" - } - if (proxy_scheme == "SOCKS") { - proxy_scheme = "socks" - } - if (proxy_scheme != "http" && proxy_scheme != "socks") { - proxy_scheme = "http" - } - console.log("Got i2p proxy scheme:", proxy_scheme); - return proxy_scheme; + if (proxy_scheme == undefined) { + proxy_scheme = "http" + } + if (proxy_scheme == "HTTP") { + proxy_scheme = "http" + } + if (proxy_scheme == "SOCKS") { + proxy_scheme = "socks" + } + if (proxy_scheme != "http" && proxy_scheme != "socks") { + proxy_scheme = "http" + } + //console.log("Got i2p proxy scheme:", proxy_scheme); + return proxy_scheme; } var proxy_host = "127.0.0.1" - -function getHost() { - if (proxy_host == undefined) { - proxy_host = "127.0.0.1" - } - console.log("Got i2p proxy host:", proxy_host); - return proxy_host; -} - var proxy_port = "4444" - -function getPort() { - if (proxy_port == undefined) { - var scheme = getScheme() - if (scheme == "socks") { - proxy_port = "4446" - } else { - proxy_port = "4444" - } - } - console.log("Got i2p proxy port:", proxy_port); - return proxy_port; -} - var control_host = "127.0.0.1" - -function getControlHost() { - if (control_host == undefined) { - return "127.0.0.1" - } - console.log("Got i2p control host:", control_host); - return control_host; -} - var control_port = "4444" +function getHost() { + if (proxy_host == undefined) { + proxy_host = "127.0.0.1" + } + return proxy_host; +} + +function getPort() { + if (proxy_port == undefined) { + var scheme = getScheme() + if (scheme == "socks") { + proxy_port = "4446" + } else { + proxy_port = "4444" + } + } + return proxy_port; +} + +function getControlHost() { + if (control_host == undefined) { + return "127.0.0.1" + } + return control_host; +} + function getControlPort() { - if (control_port == undefined) { - return "4444" - } - console.log("Got i2p control port:", control_port); - return control_port; + if (control_port == undefined) { + return "4444" + } + return control_port; } function setupProxy() { - var controlHost = getControlHost() - var controlPort = getControlPort(); - var Host = getHost() - var Port = getPort() - var Scheme = getScheme() - if (!getChrome()) { - function handleProxyRequest(requestInfo) { - // console.log("proxying request via listener") - // console.log(" ", Scheme, Host, ":", Port,) - return { - type: Scheme, - host: Host, - port: Port, - proxyDns: true - } + var controlHost = getControlHost() + var controlPort = getControlPort(); + var Host = getHost() + var Port = getPort() + var Scheme = getScheme() + if (!getChrome()) { + /**/ + console.log("Setting up Firefox WebExtension proxy") + browser.proxy.onRequest.addListener(handleContextProxyRequest, { + urls: [""] + }); + console.log("i2p settings created for WebExtension Proxy") + /**/ + } else { + var config = { + mode: "fixed_servers", + rules: { + singleProxy: { + scheme: Scheme, + host: Host, + port: parseInt(Port), + }, + } + }; + chrome.proxy.settings.set({ + value: config, + scope: 'regular' + }, function() {}); } - console.log("Setting up Firefox WebExtension proxy") - browser.proxy.onRequest.addListener(handleProxyRequest, { - urls: [""] - }); - console.log("i2p settings created for WebExtension Proxy") - } else { - var config = { - mode: "fixed_servers", - rules: { - singleProxy: { - scheme: Scheme, - host: Host, - port: parseInt(Port), - }, - } - }; - chrome.proxy.settings.set( - { - value: config, - scope: 'regular' - }, function() {}); - } } -function contextProxy(requestDetails) { - try { - - function onGot(context) { - if (!context) { - console.error("Context not found"); - } else { - var controlHost = getControlHost() - var controlPort = getControlPort(); - var Host = getHost() - var Port = getPort() - var Scheme = getScheme() - if (context.name = "i2pbrowser") { - requestDetails.proxyInfo = {host:Host, port:Port, type:Scheme, proxyDns:true } - console.log("PROXY INFO", requestDetails); +function contextScrub(requestDetails) { + try { + function onGot(context) { + if (!context) { + console.error("Context not found"); + } else { + if (context.name = "i2pbrowser") { + var ua = "MYOB/6.66 (AN/ON)"; + for (var header of requestDetails.requestHeaders) { + if (header.name.toLowerCase() === "user-agent") { + header.value = ua; + console.log(header.value) + } + } + return { + requestHeaders: requestDetails.requestHeaders + }; + } + } } - } + + function onError(e) { + console.error(e); + } + + function tabGot(tab) { + if (!tab) { + console.error("Tab not found"); + } else { + if (tab.cookieStoreId != "firefox-default") + browser.contextualIdentities.get(tab.cookieStoreId).then(onGot, onError); + } + } + + function tabError(e) { + console.error(e); + } + browser.tabs.get(requestDetails.tabId).then(tabGot, tabError); + } catch (error) { + console.error(error); } - - function onError(e) { - console.error(e); - } - - function tabGot(tab) { - if (!tab) { - console.error("Tab not found"); - } else { - if (tab.cookieStoreId != "firefox-default") - browser.contextualIdentities.get(tab.cookieStoreId).then(onGot, onError); - } - } - - function tabError(e) { - console.error(e); - } - - browser.tabs.get(requestDetails.tabId).then(tabGot, tabError); - - } catch (error) { - console.error(error); - } - console.log(requestDetails); + console.log(requestDetails); } -browser.webRequest.onBeforeRequest.addListener( - contextProxy, - {urls: [""]} -); +/*browser.webRequest.onBeforeSendHeaders.addListener( + contextScrub, + {urls: [""]}, + ["blocking", "requestHeaders"] +);*/ function checkStoredSettings(storedSettings) { - let defaultSettings = {}; - if (!storedSettings.proxy_scheme) { - defaultSettings["proxy_scheme"] = "http" - } - if (!storedSettings.proxy_host) { - defaultSettings["proxy_host"] = "127.0.0.1" - } - if (!storedSettings.proxy_port) { - defaultSettings["proxy_port"] = 4444 - } - if (!storedSettings.control_host) { - defaultSettings["control_host"] = "127.0.0.1" - } - if (!storedSettings.control_port) { - defaultSettings["control_port"] = 4444 - } - chrome.storage.local.set(defaultSettings); + let defaultSettings = {}; + if (!storedSettings.proxy_scheme) { + defaultSettings["proxy_scheme"] = "http" + } + if (!storedSettings.proxy_host) { + defaultSettings["proxy_host"] = "127.0.0.1" + } + if (!storedSettings.proxy_port) { + defaultSettings["proxy_port"] = 4444 + } + if (!storedSettings.control_host) { + defaultSettings["control_host"] = "127.0.0.1" + } + if (!storedSettings.control_port) { + defaultSettings["control_port"] = 4444 + } + chrome.storage.local.set(defaultSettings); } function update(restoredSettings) { - proxy_scheme = restoredSettings.proxy_scheme - console.log("restoring proxy scheme:", proxy_scheme) - proxy_host = restoredSettings.proxy_host - console.log("restoring proxy host:", proxy_host) - proxy_port = restoredSettings.proxy_port - console.log("restoring proxy port:", proxy_port) - control_host = restoredSettings.control_host - console.log("restoring control host:", control_host) - control_port = restoredSettings.control_port - console.log("restoring control port:", control_port) + proxy_scheme = restoredSettings.proxy_scheme + console.log("restoring proxy scheme:", proxy_scheme) + proxy_host = restoredSettings.proxy_host + console.log("restoring proxy host:", proxy_host) + proxy_port = restoredSettings.proxy_port + console.log("restoring proxy port:", proxy_port) + control_host = restoredSettings.control_host + console.log("restoring control host:", control_host) + control_port = restoredSettings.control_port + console.log("restoring control port:", control_port) } chrome.storage.local.get(function(got) { - checkStoredSettings(got) - update(got) - setupProxy() + checkStoredSettings(got) + update(got) + setupProxy() }); // Theme all currently open windows if (!getChrome()) { - if (!isDroid()) { - browser.windows.getAll().then(wins => wins.forEach(themeWindow)); - } + if (!isDroid()) { + browser.windows.getAll().then(wins => wins.forEach(themeWindow)); + } }