foxyproxy / Foxyproxy_Chrome

FoxyProxy for Google Chrome
https://chrome.google.com/webstore/detail/foxyproxy-standard/gcknhkkoolaabfmlnjonogaaifnjlfnp?hl=en
GNU General Public License v2.0
27 stars 5 forks source link

Manifest v3 #5

Closed erosman closed 2 years ago

erosman commented 2 years ago

Chrome has introduced manifest v3 which will come into force by Jan 2023. Firefox will be doing the same at a later date with some minor differences.

The future development of FoxyProxy extensions will be subject to MV3.

Chrome

Similar to the current FoxyProxy extension

Firefox

Option 1

Similar code-base as the Chrome extension

Option 2

Note: Due to MV3 service worker limitations, option 2 will entail an async storage call on every onAuthRequired which will be fairly resource intensive.

Option 3

Similar to the current FoxyProxy extension

Note: Due to MV3 service worker limitations, option 3 will entail an async storage call on every network connection which will be considerably resource intensive.

ericjung commented 2 years ago

Thanks for this excellent summary. Do any of the Firefox options allow for authentication with SOCKS?

erosman commented 2 years ago

Do any of the Firefox options allow for authentication with SOCKS?

Option 3 is the only way to handle SOCKS authentication ATM.

Due to Bug 122752 (from 21 years ago) SOCKS authentication is not available directly in Firefox. Chrome does not have the option. (Issue 256785: SOCKS5 authentication support) Other browsers also do not appear to have SOCKS authentication feature.

erosman commented 2 years ago

Option 3 in MV3 would be like

browser.proxy.onRequest.addListener(onRequest, {urls: ['<all_urls>']});

function onRequest(requestInfo) {
  /*   
    process
    ------------------
    1. get user preferences asynchronously e.g.
    await browser.storage.local.get();

    2. loop through all proxies
    3. convert all patterns to RegEx
    4. check if they match the criteria
    5. prepare a response with/without user/pass
    6. repeat the same for each network connection that can be 100s per tab
  */
}