about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/assets/javascripts/services.js24
-rw-r--r--src/config.json8
-rw-r--r--src/pages/background/background.js17
-rw-r--r--src/pages/options/index.js66
4 files changed, 68 insertions, 47 deletions
diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js
index 845c5f4e..988f6348 100644
--- a/src/assets/javascripts/services.js
+++ b/src/assets/javascripts/services.js
@@ -2,13 +2,14 @@ window.browser = window.browser || window.chrome
 
 import utils from "./utils.js"
 
-let config, options, redirects, targets
+let config, options, targets
 
 function init() {
 	return new Promise(async resolve => {
-		browser.storage.local.get(["options", "redirects", "targets"], r => {
+		browser.storage.local.get(["options", "targets", "embedTabs"], r => {
 			options = r.options
 			targets = r.targets
+			embedTabs = r.embedTabs
 			fetch("/config.json")
 				.then(response => response.text())
 				.then(configData => {
@@ -55,7 +56,8 @@ function regexArray(service, url, config, frontend) {
 	return false
 }
 
-function redirect(url, type, initiator, forceRedirection) {
+let embedTabs = {}
+function redirect(url, type, initiator, forceRedirection, tabId) {
 	if (type != "main_frame" && type != "sub_frame" && type != "image") return
 	let randomInstance
 	let frontend
@@ -76,7 +78,19 @@ function redirect(url, type, initiator, forceRedirection) {
 			instanceList.push(...options[frontend])
 		}
 		if (instanceList.length === 0) return
-		randomInstance = utils.getRandomInstance(instanceList)
+
+		if ((type == "sub_frame" || type == "image") && embedTabs[tabId] && embedTabs[tabId][frontend] !== undefined) {
+			randomInstance = embedTabs[tabId][frontend]
+		} else {
+			randomInstance = utils.getRandomInstance(instanceList)
+		}
+
+		if ((type == "sub_frame" || type == "image") && embedTabs[tabId] === undefined) {
+			embedTabs[tabId] = {}
+			embedTabs[tabId][frontend] = randomInstance
+			browser.storage.local.set(embedTabs)
+		}
+
 		break
 	}
 	if (!frontend || !randomInstance) return
@@ -533,7 +547,7 @@ function initDefaults() {
 						}
 					}
 					browser.storage.local.set(
-						{ options, targets, localstorage },
+						{ options, targets, localstorage, embedTabs: {} },
 						() => resolve()
 					)
 				})
diff --git a/src/config.json b/src/config.json
index 14d80d5e..abbe668d 100644
--- a/src/config.json
+++ b/src/config.json
@@ -479,13 +479,5 @@
 			"embeddable": false,
 			"url": "https://paste.libredirect.invalid"
 		}
-	},
-	"blacklist": {
-		"cloudflare": {
-			"color": "red"
-		},
-		"authenticate": {
-			"color": "orange"
-		}
 	}
 }
\ No newline at end of file
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index 77128612..1d1cbe46 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -38,6 +38,14 @@ browser.runtime.onInstalled.addListener(async details => {
 })
 
 let tabIdRedirects = {}
+
+browser.storage.onChanged.addListener(() => {
+	browser.storage.local.get(["embedTabs"], r => {
+		embedTabs = r.embedTabs
+	})
+})
+let embedTabs = {}
+
 // true == Always redirect, false == Never redirect, null/undefined == follow options for services
 browser.webRequest.onBeforeRequest.addListener(
 	details => {
@@ -51,7 +59,7 @@ browser.webRequest.onBeforeRequest.addListener(
 			return null
 		}
 		if (tabIdRedirects[details.tabId] == false) return null
-		let newUrl = servicesHelper.redirect(url, details.type, initiator, tabIdRedirects[details.tabId])
+		let newUrl = servicesHelper.redirect(url, details.type, initiator, tabIdRedirects[details.tabId], details.tabId)
 
 		if (details.frameAncestors && details.frameAncestors.length > 0 && generalHelper.isException(new URL(details.frameAncestors[0].url))) newUrl = null
 
@@ -81,6 +89,11 @@ browser.tabs.onRemoved.addListener(tabId => {
 		delete tabIdRedirects[tabId]
 		console.log("Removed tab " + tabId + " from tabIdRedirects")
 	}
+	if (embedTabs[tab] != undefined) {
+		delete embedTabs[tabId]
+		browser.storage.local.set(embedTabs)
+		console.log("Removed tab " + tabId + " from embedTabs")
+	}
 })
 
 browser.commands.onCommand.addListener(command => {
@@ -185,4 +198,4 @@ browser.webRequest.onHeadersReceived.addListener(
 	},
 	{ urls: ["<all_urls>"] },
 	["blocking", "responseHeaders"]
-)
\ No newline at end of file
+)
diff --git a/src/pages/options/index.js b/src/pages/options/index.js
index 3c3f6d1f..006b5248 100644
--- a/src/pages/options/index.js
+++ b/src/pages/options/index.js
@@ -103,39 +103,41 @@ async function processDefaultCustomInstances(frontend, networks, document) {
 		})
 	)
 
-	const blacklist = utils.getBlacklist()
-	const redirects = utils.getList()
-
-	for (const network in networks) {
-		if (redirects[frontend][network].length > 0) {
-			document.getElementById(frontend).getElementsByClassName(network)[0].getElementsByClassName("checklist")[0].innerHTML = [
-				`
-			<div class="some-block option-block">
-				<h4>${utils.camelCase(network)}</h4>
-			</div>
-			`,
-				...redirects[frontend][network]
-					.sort((a, b) =>
-						(blacklist.cloudflare.includes(a) && !blacklist.cloudflare.includes(b))
-						||
-						(blacklist.authenticate.includes(a) && !blacklist.authenticate.includes(b))
-					)
-					.map(x => {
-						const cloudflare = blacklist.cloudflare.includes(x) ? ' <span style="color:red;">cloudflare</span>' : ""
-						const authenticate = blacklist.authenticate.includes(x) ? ' <span style="color:orange;">authenticate</span>' : ""
-
-						let warnings = [cloudflare, authenticate].join(" ")
-						return `
-					<div>
-						<x>
-							<a href="${x}" target="_blank">${x}</a>${warnings}
-						</x>
-                  	</div>`
-					}),
-				'<br>'
-			].join("\n<hr>\n")
+	!async function () {
+		const blacklist = utils.getBlacklist()
+		const redirects = utils.getList()
+
+		for (const network in networks) {
+			if (redirects[frontend][network].length > 0) {
+				document.getElementById(frontend).getElementsByClassName(network)[0].getElementsByClassName("checklist")[0].innerHTML = [
+					`
+				<div class="some-block option-block">
+					<h4>${utils.camelCase(network)}</h4>
+				</div>
+				`,
+					...redirects[frontend][network]
+						.sort((a, b) =>
+							(blacklist.cloudflare.includes(a) && !blacklist.cloudflare.includes(b))
+							||
+							(blacklist.authenticate.includes(a) && !blacklist.authenticate.includes(b))
+						)
+						.map(x => {
+							const cloudflare = blacklist.cloudflare.includes(x) ? ' <span style="color:red;">cloudflare</span>' : ""
+							const authenticate = blacklist.authenticate.includes(x) ? ' <span style="color:orange;">authenticate</span>' : ""
+
+							let warnings = [cloudflare, authenticate].join(" ")
+							return `
+						<div>
+							<x>
+								<a href="${x}" target="_blank">${x}</a>${warnings}
+							</x>
+						  </div>`
+						}),
+					'<br>'
+				].join("\n<hr>\n")
+			}
 		}
-	}
+	}()
 
 	localise.localisePage()