parent
fd844da5e0
commit
d81a4b9766
|
@ -44,6 +44,7 @@ async function initDefaults() {
|
||||||
"maps",
|
"maps",
|
||||||
],
|
],
|
||||||
autoRedirect: false,
|
autoRedirect: false,
|
||||||
|
firstPartyIsolate: false,
|
||||||
}, () => resolve())
|
}, () => resolve())
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,9 @@ init();
|
||||||
browser.storage.onChanged.addListener(init)
|
browser.storage.onChanged.addListener(init)
|
||||||
|
|
||||||
function redirect(url, initiator) {
|
function redirect(url, initiator) {
|
||||||
|
if (disableMaps) return;
|
||||||
|
if (initiator && initiator.host === "earth.google.com") return;
|
||||||
|
if (!url.href.match(targets)) return;
|
||||||
const mapCentreRegex = /@(-?\d[0-9.]*),(-?\d[0-9.]*),(\d{1,2})[.z]/;
|
const mapCentreRegex = /@(-?\d[0-9.]*),(-?\d[0-9.]*),(\d{1,2})[.z]/;
|
||||||
const dataLatLngRegex = /!3d(-?[0-9]{1,}.[0-9]{1,})!4d(-?[0-9]{1,}.[0-9]{1,})/;
|
const dataLatLngRegex = /!3d(-?[0-9]{1,}.[0-9]{1,})!4d(-?[0-9]{1,}.[0-9]{1,})/;
|
||||||
const placeRegex = /\/place\/(.*)\//;
|
const placeRegex = /\/place\/(.*)\//;
|
||||||
|
@ -67,7 +70,6 @@ function redirect(url, initiator) {
|
||||||
traffic: "S", // not implemented on OSM, default to standard.
|
traffic: "S", // not implemented on OSM, default to standard.
|
||||||
bicycling: "C",
|
bicycling: "C",
|
||||||
};
|
};
|
||||||
|
|
||||||
function addressToLatLng(address) {
|
function addressToLatLng(address) {
|
||||||
const xmlhttp = new XMLHttpRequest();
|
const xmlhttp = new XMLHttpRequest();
|
||||||
xmlhttp.open("GET", `https://nominatim.openstreetmap.org/search/${address}?format=json&limit=1`, false);
|
xmlhttp.open("GET", `https://nominatim.openstreetmap.org/search/${address}?format=json&limit=1`, false);
|
||||||
|
@ -85,10 +87,6 @@ function redirect(url, initiator) {
|
||||||
console.info("Error: Status is " + xmlhttp.status);
|
console.info("Error: Status is " + xmlhttp.status);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (disableMaps) return;
|
|
||||||
if (initiator && initiator.host === "earth.google.com") return;
|
|
||||||
if (!url.href.match(targets)) return;
|
|
||||||
|
|
||||||
let randomInstance;
|
let randomInstance;
|
||||||
if (mapsFrontend == 'osm') randomInstance = utils.getRandomInstance(redirects.osm.normal);
|
if (mapsFrontend == 'osm') randomInstance = utils.getRandomInstance(redirects.osm.normal);
|
||||||
if (mapsFrontend == 'facil') randomInstance = utils.getRandomInstance([...facilNormalRedirectsChecks, ...facilNormalCustomRedirects]);
|
if (mapsFrontend == 'facil') randomInstance = utils.getRandomInstance([...facilNormalRedirectsChecks, ...facilNormalCustomRedirects]);
|
||||||
|
|
|
@ -283,78 +283,68 @@ async function testLatency(element, instances) {
|
||||||
resolve(myList);
|
resolve(myList);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// Complete on getting cookies working in Tor, maybe delete all the other same name cookies to prevent overlapping, see ya :)
|
||||||
function copyCookie(frontend, targetUrl, urls, name) {
|
function copyCookie(frontend, targetUrl, urls, name) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
let query;
|
browser.storage.local.get('firstPartyIsolate', r => {
|
||||||
if (window.chrome) query = { url: protocolHost(targetUrl), name: name }
|
console.log('r.firstPartyIsolate', r.firstPartyIsolate);
|
||||||
else query = { url: protocolHost(targetUrl), name: name, firstPartyDomain: null }
|
let query;
|
||||||
browser.cookies.getAll(
|
if (!r.firstPartyIsolate) query = { url: protocolHost(targetUrl), name: name }
|
||||||
query,
|
else query = { url: protocolHost(targetUrl), name: name, firstPartyDomain: null }
|
||||||
async cookies => {
|
browser.cookies.getAll(
|
||||||
function setCookie(url, name, value, expirationDate, firstPartyIsolate) {
|
query,
|
||||||
return new Promise(resolve => {
|
cookies => {
|
||||||
let query;
|
|
||||||
if (window.chrome) query = {
|
|
||||||
url: url, name: name, value: value, secure: true,
|
|
||||||
expirationDate: expirationDate,
|
|
||||||
};
|
|
||||||
else query = {
|
|
||||||
url: url, name: name, value: value, secure: true,
|
|
||||||
firstPartyDomain: firstPartyIsolate.value ? new URL(url).hostname : '',
|
|
||||||
expirationDate: firstPartyIsolate.value ? null : expirationDate,
|
|
||||||
};
|
|
||||||
browser.cookies.set(query, () => resolve())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
if (window.chrome) {
|
|
||||||
for (const cookie of cookies)
|
for (const cookie of cookies)
|
||||||
if (cookie.name == name) {
|
if (cookie.name == name) {
|
||||||
console.log('cookie', cookie);
|
for (const url of urls) {
|
||||||
for (const url of urls) await setCookie(url, cookie.name, cookie.value, cookie.expirationDate)
|
let setQuery;
|
||||||
browser.storage.local.set({ [`${frontend}_${name}`]: cookie }, () => resolve())
|
let removeQuery;
|
||||||
|
if (!r.firstPartyIsolate) {
|
||||||
|
removeQuery = { url: url, name: name };
|
||||||
|
setQuery = {
|
||||||
|
url: url, name: name, value: cookie.value, secure: true,
|
||||||
|
expirationDate: cookie.expirationDate,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
removeQuery = { url: url, name: name, firstPartyDomain: new URL(url).hostname };
|
||||||
|
setQuery = {
|
||||||
|
url: url, name: name, value: cookie.value, secure: true,
|
||||||
|
firstPartyDomain: new URL(url).hostname,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
browser.cookies.remove(removeQuery, () => {
|
||||||
|
browser.cookies.set(setQuery, () => {
|
||||||
|
browser.storage.local.set({ [`${frontend}_${name}`]: cookie }, () => resolve())
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
resolve();
|
resolve();
|
||||||
} else {
|
|
||||||
browser.privacy.websites.firstPartyIsolate.get({},
|
|
||||||
async firstPartyIsolate => {
|
|
||||||
for (const cookie of cookies)
|
|
||||||
if (cookie.name == name) {
|
|
||||||
console.log('cookie', cookie);
|
|
||||||
for (const url of urls) await setCookie(url, cookie.name, cookie.value, cookie.expirationDate, firstPartyIsolate)
|
|
||||||
browser.storage.local.set({ [`${frontend}_${name}`]: cookie }, () => resolve())
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
});
|
);
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function getCookiesFromStorage(frontend, urls, name) {
|
function getCookiesFromStorage(frontend, urls, name) {
|
||||||
let key = `${frontend}_${name}`;
|
let key = `${frontend}_${name}`;
|
||||||
browser.storage.local.get(
|
browser.storage.local.get([key, 'firstPartyIsolate'], r => {
|
||||||
key,
|
const cookie = r[key];
|
||||||
r => {
|
if (cookie === undefined) return;
|
||||||
const cookie = r[key];
|
let query;
|
||||||
if (cookie !== undefined)
|
if (!r.firstPartyIsolate) query = {
|
||||||
browser.privacy.websites.firstPartyIsolate.get({},
|
url: url, name: cookie.name, value: cookie.value, secure: true,
|
||||||
firstPartyIsolate => {
|
expirationDate: cookie.expirationDate,
|
||||||
for (const url of urls)
|
};
|
||||||
browser.cookies.set({
|
else query = {
|
||||||
url: url,
|
url: url, name: cookie.name, value: cookie.value, secure: true,
|
||||||
name: cookie.name,
|
expirationDate: null,
|
||||||
value: cookie.value,
|
firstPartyDomain: new URL(url).hostname,
|
||||||
secure: true,
|
|
||||||
expirationDate: firstPartyIsolate.value ? null : cookie.expirationDate,
|
|
||||||
firstPartyDomain: firstPartyIsolate.value ? new URL(url).hostname : '',
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
)
|
for (const url of urls) browser.cookies.set(query)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function copyRaw(test, copyRawElement) {
|
function copyRaw(test, copyRawElement) {
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
"storage",
|
"storage",
|
||||||
"unlimitedStorage",
|
"unlimitedStorage",
|
||||||
"cookies",
|
"cookies",
|
||||||
"privacy",
|
|
||||||
"clipboardWrite",
|
"clipboardWrite",
|
||||||
"contextMenus",
|
"contextMenus",
|
||||||
"<all_urls>"
|
"<all_urls>"
|
||||||
|
|
|
@ -67,6 +67,10 @@
|
||||||
<option value="dark" data-localise="__MSG_dark__">Dark</option>
|
<option value="dark" data-localise="__MSG_dark__">Dark</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="some-block option-block">
|
||||||
|
<h4>First-party isolation (Enable for Tor)</h4>
|
||||||
|
<input id="firstPartyIsolate" type="checkbox">
|
||||||
|
</div>
|
||||||
<div class="some-block option-block">
|
<div class="some-block option-block">
|
||||||
<h4 data-localise="__MSG_autoRedirect__"></h4>
|
<h4 data-localise="__MSG_autoRedirect__"></h4>
|
||||||
<input id="auto-redirect" type="checkbox">
|
<input id="auto-redirect" type="checkbox">
|
||||||
|
|
|
@ -1,12 +1,3 @@
|
||||||
import youtubeHelper from "../../assets/javascripts/youtube/youtube.js";
|
|
||||||
import twitterHelper from "../../assets/javascripts/twitter.js";
|
|
||||||
import redditHelper from "../../assets/javascripts/reddit.js";
|
|
||||||
import searchHelper from "../../assets/javascripts/search.js";
|
|
||||||
import translateHelper from "../../assets/javascripts/translate/translate.js";
|
|
||||||
import wikipediaHelper from "../../assets/javascripts/wikipedia.js";
|
|
||||||
import tiktokHelper from "../../assets/javascripts/tiktok.js";
|
|
||||||
|
|
||||||
|
|
||||||
for (const a of document.getElementById('links').getElementsByTagName('a')) {
|
for (const a of document.getElementById('links').getElementsByTagName('a')) {
|
||||||
a.addEventListener('click', e => {
|
a.addEventListener('click', e => {
|
||||||
const path = a.getAttribute('href').replace('#', '');
|
const path = a.getAttribute('href').replace('#', '');
|
||||||
|
|
|
@ -176,16 +176,21 @@ for (const frontend of generalHelper.allPopupFrontends)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const firstPartyIsolate = document.getElementById('firstPartyIsolate');
|
||||||
|
firstPartyIsolate.addEventListener("change", () => browser.storage.local.set({ firstPartyIsolate: firstPartyIsolate.checked }))
|
||||||
|
|
||||||
browser.storage.local.get(
|
browser.storage.local.get(
|
||||||
[
|
[
|
||||||
'theme',
|
'theme',
|
||||||
'autoRedirect',
|
'autoRedirect',
|
||||||
'exceptions'
|
'exceptions',
|
||||||
|
'firstPartyIsolate'
|
||||||
],
|
],
|
||||||
r => {
|
r => {
|
||||||
autoRedirectElement.checked = r.autoRedirect;
|
autoRedirectElement.checked = r.autoRedirect;
|
||||||
themeElement.value = r.theme;
|
themeElement.value = r.theme;
|
||||||
|
firstPartyIsolate.checked = r.firstPartyIsolate;
|
||||||
|
|
||||||
instanceTypeElement.addEventListener("change",
|
instanceTypeElement.addEventListener("change",
|
||||||
event => {
|
event => {
|
||||||
instanceType = event.target.options[instanceTypeElement.selectedIndex].value
|
instanceType = event.target.options[instanceTypeElement.selectedIndex].value
|
||||||
|
|
|
@ -10,6 +10,10 @@ section#general_page.option-block
|
||||||
option(value="light" data-localise="__MSG_light__") Light
|
option(value="light" data-localise="__MSG_light__") Light
|
||||||
option(value="dark" data-localise="__MSG_dark__") Dark
|
option(value="dark" data-localise="__MSG_dark__") Dark
|
||||||
|
|
||||||
|
.some-block.option-block
|
||||||
|
h4() First-party isolation (Enable for Tor)
|
||||||
|
input#firstPartyIsolate(type="checkbox")
|
||||||
|
|
||||||
.some-block.option-block
|
.some-block.option-block
|
||||||
h4(data-localise="__MSG_autoRedirect__")
|
h4(data-localise="__MSG_autoRedirect__")
|
||||||
input#auto-redirect(type="checkbox")
|
input#auto-redirect(type="checkbox")
|
||||||
|
|
Loading…
Reference in New Issue