2022-07-26 23:28:50 +02:00
|
|
|
"use strict"
|
|
|
|
|
|
|
|
import generalHelper from "../../assets/javascripts/general.js"
|
|
|
|
import utils from "../../assets/javascripts/utils.js"
|
2022-10-04 20:10:07 +02:00
|
|
|
import servicesHelper from "../../assets/javascripts/services.js"
|
2022-08-08 10:47:25 +02:00
|
|
|
|
2022-07-26 23:28:50 +02:00
|
|
|
window.browser = window.browser || window.chrome
|
|
|
|
|
2022-10-04 20:10:07 +02:00
|
|
|
function initDefaults() {
|
|
|
|
browser.storage.local.clear(() => {
|
2022-07-26 23:28:50 +02:00
|
|
|
fetch("/instances/blacklist.json")
|
|
|
|
.then(response => response.text())
|
|
|
|
.then(async data => {
|
2022-10-04 20:10:07 +02:00
|
|
|
browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => {
|
|
|
|
await generalHelper.initDefaults()
|
|
|
|
await servicesHelper.initDefaults()
|
2022-07-26 23:28:50 +02:00
|
|
|
})
|
|
|
|
})
|
2022-10-04 20:10:07 +02:00
|
|
|
})
|
|
|
|
}
|
2022-07-26 23:28:50 +02:00
|
|
|
|
2022-10-04 20:10:07 +02:00
|
|
|
browser.runtime.onInstalled.addListener(details => {
|
|
|
|
switch (details.reason) {
|
|
|
|
case "install":
|
|
|
|
initDefaults()
|
|
|
|
break
|
|
|
|
case "update":
|
|
|
|
fetch("/instances/blacklist.json")
|
|
|
|
.then(response => response.text())
|
|
|
|
.then(async data => {
|
|
|
|
browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => {
|
|
|
|
switch (details.previousVersion) {
|
2022-10-05 18:29:27 +02:00
|
|
|
case "2.2.0":
|
2022-10-04 20:10:07 +02:00
|
|
|
case "2.2.1":
|
|
|
|
await generalHelper.initDefaults()
|
|
|
|
await servicesHelper.initDefaults()
|
|
|
|
await servicesHelper.upgradeOptions()
|
|
|
|
break
|
2022-10-05 18:29:27 +02:00
|
|
|
default:
|
|
|
|
await servicesHelper.processUpdate()
|
2022-10-04 20:10:07 +02:00
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
2022-07-26 23:28:50 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
let BYPASSTABs = []
|
2020-02-24 04:19:56 +01:00
|
|
|
browser.webRequest.onBeforeRequest.addListener(
|
2022-07-26 23:28:50 +02:00
|
|
|
details => {
|
|
|
|
const url = new URL(details.url)
|
|
|
|
if (new RegExp(/^chrome-extension:\/{2}.*\/instances\/.*.json$/).test(url.href) && details.type == "xmlhttprequest") return
|
|
|
|
let initiator
|
|
|
|
try {
|
|
|
|
if (details.originUrl) initiator = new URL(details.originUrl)
|
|
|
|
else if (details.initiator) initiator = new URL(details.initiator)
|
|
|
|
} catch {
|
|
|
|
return null
|
|
|
|
}
|
|
|
|
|
2022-10-04 20:10:07 +02:00
|
|
|
let newUrl = servicesHelper.redirect(url, details.type, initiator)
|
2022-07-26 23:28:50 +02:00
|
|
|
|
|
|
|
if (details.frameAncestors && details.frameAncestors.length > 0 && generalHelper.isException(new URL(details.frameAncestors[0].url))) newUrl = null
|
|
|
|
|
|
|
|
if (generalHelper.isException(url)) newUrl = "BYPASSTAB"
|
|
|
|
if (BYPASSTABs.includes(details.tabId)) newUrl = null
|
|
|
|
|
|
|
|
if (newUrl) {
|
|
|
|
if (newUrl === "CANCEL") {
|
|
|
|
console.log(`Canceled ${url}`)
|
|
|
|
return { cancel: true }
|
|
|
|
}
|
|
|
|
if (newUrl === "BYPASSTAB") {
|
|
|
|
console.log(`Bypassed ${details.tabId} ${url}`)
|
|
|
|
if (!BYPASSTABs.includes(details.tabId)) BYPASSTABs.push(details.tabId)
|
|
|
|
return null
|
|
|
|
}
|
|
|
|
console.info("Redirecting", url.href, "=>", newUrl)
|
|
|
|
return { redirectUrl: newUrl }
|
|
|
|
}
|
|
|
|
return null
|
|
|
|
},
|
|
|
|
{ urls: ["<all_urls>"] },
|
|
|
|
["blocking"]
|
|
|
|
)
|
2020-04-09 11:37:56 +02:00
|
|
|
|
2022-07-26 23:28:50 +02:00
|
|
|
browser.tabs.onRemoved.addListener(tabId => {
|
|
|
|
const i = BYPASSTABs.indexOf(tabId)
|
|
|
|
if (i > -1) {
|
|
|
|
BYPASSTABs.splice(i, 1)
|
|
|
|
console.log("Removed BYPASSTABs", tabId)
|
|
|
|
}
|
|
|
|
})
|
2022-02-26 13:38:13 +01:00
|
|
|
|
2022-10-04 20:10:07 +02:00
|
|
|
/*
|
2022-03-23 11:50:51 +01:00
|
|
|
browser.webRequest.onHeadersReceived.addListener(
|
2022-07-26 23:28:50 +02:00
|
|
|
e => {
|
|
|
|
let response = youtubeHelper.removeXFrameOptions(e)
|
|
|
|
if (!response) response = twitterHelper.removeXFrameOptions(e)
|
|
|
|
return response
|
|
|
|
},
|
|
|
|
{ urls: ["<all_urls>"] },
|
|
|
|
["blocking", "responseHeaders"]
|
|
|
|
)
|
2022-10-04 20:10:07 +02:00
|
|
|
*/
|
2022-03-23 11:50:51 +01:00
|
|
|
|
2022-05-04 12:59:37 +02:00
|
|
|
async function redirectOfflineInstance(url, tabId) {
|
2022-10-04 20:10:07 +02:00
|
|
|
let newUrl = await servicesHelper.switchInstance(url, true)
|
2022-07-26 23:28:50 +02:00
|
|
|
|
|
|
|
if (newUrl) {
|
|
|
|
if (counter >= 5) {
|
|
|
|
browser.tabs.update(tabId, {
|
|
|
|
url: `/pages/errors/instance_offline.html?url=${encodeURIComponent(newUrl)}`,
|
|
|
|
})
|
|
|
|
counter = 0
|
|
|
|
} else {
|
|
|
|
browser.tabs.update(tabId, { url: newUrl })
|
|
|
|
counter++
|
|
|
|
}
|
|
|
|
}
|
2022-03-22 19:57:01 +01:00
|
|
|
}
|
2022-07-26 23:28:50 +02:00
|
|
|
let counter = 0
|
2022-05-21 15:38:28 +02:00
|
|
|
|
|
|
|
function isAutoRedirect() {
|
2022-10-04 20:10:07 +02:00
|
|
|
return new Promise(resolve => browser.storage.local.get("options", r => resolve(r.options.autoRedirect == true)))
|
2022-05-21 15:38:28 +02:00
|
|
|
}
|
|
|
|
|
2022-03-22 19:57:01 +01:00
|
|
|
browser.webRequest.onResponseStarted.addListener(
|
2022-07-26 23:28:50 +02:00
|
|
|
async details => {
|
|
|
|
if (!(await isAutoRedirect())) return null
|
|
|
|
if (details.type == "main_frame" && details.statusCode >= 500) redirectOfflineInstance(new URL(details.url), details.tabId)
|
|
|
|
},
|
|
|
|
{ urls: ["<all_urls>"] }
|
2022-03-09 20:52:58 +01:00
|
|
|
)
|
|
|
|
|
2022-03-22 19:57:01 +01:00
|
|
|
browser.webRequest.onErrorOccurred.addListener(
|
2022-07-26 23:28:50 +02:00
|
|
|
async details => {
|
|
|
|
if (!(await isAutoRedirect())) return
|
|
|
|
if (details.type == "main_frame") redirectOfflineInstance(new URL(details.url), details.tabId)
|
|
|
|
},
|
|
|
|
{ urls: ["<all_urls>"] }
|
2022-03-22 19:57:01 +01:00
|
|
|
)
|
|
|
|
|
2022-07-26 23:28:50 +02:00
|
|
|
browser.commands.onCommand.addListener(command => {
|
|
|
|
if (command === "switchInstance") utils.switchInstance()
|
|
|
|
else if (command == "copyRaw") utils.copyRaw()
|
|
|
|
else if (command == "unify") utils.unify()
|
|
|
|
})
|
2022-03-18 23:19:46 +01:00
|
|
|
|
2022-04-14 01:53:47 +02:00
|
|
|
browser.contextMenus.create({
|
2022-07-26 23:28:50 +02:00
|
|
|
id: "settings",
|
|
|
|
title: browser.i18n.getMessage("Settings"),
|
|
|
|
contexts: ["browser_action"],
|
|
|
|
})
|
2022-03-18 23:19:46 +01:00
|
|
|
|
2022-04-14 01:53:47 +02:00
|
|
|
browser.contextMenus.create({
|
2022-07-26 23:28:50 +02:00
|
|
|
id: "switchInstance",
|
|
|
|
title: browser.i18n.getMessage("switchInstance"),
|
|
|
|
contexts: ["browser_action"],
|
|
|
|
})
|
2022-03-18 23:19:46 +01:00
|
|
|
|
2022-05-21 00:46:47 +02:00
|
|
|
browser.contextMenus.create({
|
2022-07-26 23:28:50 +02:00
|
|
|
id: "copyRaw",
|
|
|
|
title: browser.i18n.getMessage("copyRaw"),
|
|
|
|
contexts: ["browser_action"],
|
|
|
|
})
|
2022-05-21 00:46:47 +02:00
|
|
|
|
|
|
|
browser.contextMenus.create({
|
2022-07-26 23:28:50 +02:00
|
|
|
id: "unify",
|
|
|
|
title: browser.i18n.getMessage("unifySettings"),
|
|
|
|
contexts: ["browser_action"],
|
|
|
|
})
|
|
|
|
|
|
|
|
browser.contextMenus.onClicked.addListener(info => {
|
|
|
|
if (info.menuItemId == "switchInstance") utils.switchInstance()
|
|
|
|
else if (info.menuItemId == "settings") browser.runtime.openOptionsPage()
|
|
|
|
else if (info.menuItemId == "copyRaw") utils.copyRaw()
|
|
|
|
else if (info.menuItemId == "unify") utils.unify()
|
|
|
|
})
|
2022-05-27 05:20:07 +02:00
|
|
|
|
2022-05-28 10:00:48 +02:00
|
|
|
browser.runtime.onMessage.addListener((message, sender, sendResponse) => {
|
2022-07-26 23:28:50 +02:00
|
|
|
if (message.function === "unify") utils.unify(false).then(r => sendResponse({ response: r }))
|
|
|
|
return true
|
|
|
|
})
|