Skip to content

Commit 0989038

Browse files
authored
Add option to whitelist domain from containment (#108)
* Add option to whitelist domain from containment * Use textarea for input of whitelisted domains Before we used a simple text input, which wasn't able to contain multiple lines
1 parent 94d3ca0 commit 0989038

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

background.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ const canceledRequests = {};
5353
const tabsWaitingToLoad = {};
5454
const googleHostREs = [];
5555
const youtubeHostREs = [];
56+
const whitelistedHostREs = [];
5657

5758
async function isMACAddonEnabled () {
5859
try {
@@ -161,6 +162,15 @@ function generateGoogleHostREs () {
161162
}
162163
}
163164

165+
function generateWhitelistedHostREs () {
166+
if (whitelistedHostREs.length != 0) {return;}
167+
const matchOperatorsRegex = /[|\\{}()[\]^$+*?.-]/g;
168+
for (let whitelistedDomain of extensionSettings.whitelist) {
169+
whitelistedDomain = whitelistedDomain.replace(matchOperatorsRegex, '\\$&');
170+
whitelistedHostREs.push(new RegExp(`(^|\\.)${whitelistedDomain}$`));
171+
}
172+
}
173+
164174
async function loadExtensionSettings () {
165175
extensionSettings = await browser.storage.sync.get();
166176
}
@@ -264,6 +274,17 @@ function isYouTubeURL (url) {
264274
return false;
265275
}
266276

277+
function isWhitelistedURL (url) {
278+
generateWhitelistedHostREs();
279+
const parsedUrl = new URL(url);
280+
for (let whitelistedHostRE of whitelistedHostREs) {
281+
if (whitelistedHostRE.test(parsedUrl.host)) {
282+
return true;
283+
}
284+
}
285+
return false;
286+
}
287+
267288
function isSearchPageURL (url) {
268289
const parsedUrl = new URL(url);
269290
return parsedUrl.pathname.startsWith('/search');
@@ -321,6 +342,10 @@ function shouldContainInto (url, tab) {
321342
handleUrl = false;
322343
}
323344

345+
if (handleUrl && extensionSettings.whitelist.length!=0 && isWhitelistedURL(url)) {
346+
handleUrl = false;
347+
}
348+
324349
if (handleUrl) {
325350
if (tab.cookieStoreId !== googleCookieStoreId) {
326351
if (tab.cookieStoreId !== "firefox-default" && extensionSettings.dont_override_containers) {

options.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,16 @@ <h1>Settings</h1>
6262
</label>
6363
</p>
6464

65+
<p>
66+
<label>
67+
<textarea id="whitelist" value="" cols="80">
68+
</textarea>
69+
<br>
70+
Whitelisted google urls<br>
71+
<em>(Use one url per line.)</em>
72+
</label>
73+
</p>
74+
6575
<button type="submit">Save settings</button>
6676

6777
<hr>

options.js

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
1+
function validate_whitelist() {
2+
domain_regex = /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/;
3+
whitelist_element = document.querySelector("#whitelist");
4+
if (whitelist_element.value == "") {return [];}
5+
whitelist_domains = whitelist_element.value.split("\n");
6+
validated_domains = [];
7+
for (whitelist_domain of whitelist_domains) {
8+
if (whitelist_domain == "") {continue;}
9+
if (whitelist_domain.match(domain_regex)) {validated_domains.push(whitelist_domain); continue;}
10+
alert("'" + whitelist_domain + "' is not a valid domain.");
11+
return [];
12+
}
13+
return validated_domains;
14+
}
15+
16+
function fill_whitelist_option(stored_whitelist) {
17+
whitelist_text = stored_whitelist.join("\n");
18+
document.querySelector("#whitelist").value = whitelist_text ? whitelist_text : "";
19+
}
20+
21+
122
function onOptionsPageSave(e)
223
{
324
e.preventDefault();
@@ -9,7 +30,8 @@ function onOptionsPageSave(e)
930
"ignore_prefpages": document.querySelector("#ignore_prefpages").checked,
1031
"ignore_maps": document.querySelector("#ignore_maps").checked,
1132
"ignore_flights": document.querySelector("#ignore_flights").checked,
12-
"dont_override_containers": document.querySelector("#dont_override_containers").checked
33+
"dont_override_containers": document.querySelector("#dont_override_containers").checked,
34+
"whitelist": validate_whitelist()
1335
});
1436

1537
browser.runtime.reload();
@@ -27,6 +49,7 @@ function onOptionsPageLoaded()
2749
document.querySelector("#ignore_maps").checked = res.ignore_maps || false;
2850
document.querySelector("#ignore_flights").checked = res.ignore_flights || false;
2951
document.querySelector("#dont_override_containers").checked = res.dont_override_containers || false;
52+
fill_whitelist_option(res.whitelist);
3053
});
3154
}
3255

0 commit comments

Comments
 (0)