diff --git a/background.js b/background.js index cc8f84e..f298b00 100644 --- a/background.js +++ b/background.js @@ -33,6 +33,10 @@ const DEVELOPER_DOMAINS = [ "madewithcode.com", "design.google", "gallery.io", "domains.google", "material.io", "android.com", "chromium.org", "cobrasearch.com", "chromecast.com", "chrome.com", "chromebook.com", "madewithcode.com", "whatbrowser.org", "withgoogle.com", "web.dev", ]; +const SEARCHPAGE_PATHS = [ + "/search", "/maps", "/flights" +] + GOOGLE_DOMAINS = GOOGLE_DOMAINS.concat(GOOGLE_INTL_DOMAINS) .concat(GOOGLE_SERVICES).concat(YOUTUBE_DOMAINS).concat(BLOGSPOT_DOMAINS).concat(ALPHABET_DOMAINS) @@ -44,10 +48,12 @@ const MAC_ADDON_ID = "@testpilot-containers"; let macAddonEnabled = false; let googleCookieStoreId = null; +let extensionSettings = {}; const canceledRequests = {}; const tabsWaitingToLoad = {}; const googleHostREs = []; +const youtubeHostREs = []; async function isMACAddonEnabled () { try { @@ -147,6 +153,13 @@ function generateGoogleHostREs () { for (let googleDomain of GOOGLE_DOMAINS) { googleHostREs.push(new RegExp(`^(.*\\.)?${googleDomain}$`)); } + for (let youtubeDomain of YOUTUBE_DOMAINS) { + youtubeHostREs.push(new RegExp(`^(.*\\.)?${youtubeDomain}$`)); + } +} + +async function loadExtensionSettings () { + extensionSettings = await browser.storage.sync.get(); } async function clearGoogleCookies () { @@ -228,7 +241,25 @@ function isGoogleURL (url) { const parsedUrl = new URL(url); for (let googleHostRE of googleHostREs) { if (googleHostRE.test(parsedUrl.host)) { - return true; + + // Ignore nothing when all ignore-settings are disabled + if (! extensionSettings.ignore_searchpages && ! extensionSettings.ignore_youtube) { + return true; + } + + // Ignore YouTube host when setting is enabled and host matches + if (extensionSettings.ignore_youtube) { + for (let youtubeHostRE of youtubeHostREs) { + if (youtubeHostRE.test(parsedUrl.host)) { + return false; + } + } + } + + // Ignore search page when setting is enabled and path matches + if (extensionSettings.ignore_searchpages && ! SEARCHPAGE_PATHS.includes(parsedUrl.pathname)) { + return true; + } } } return false; @@ -376,6 +407,7 @@ async function containGoogle (options) { console.log(error); return; } + loadExtensionSettings(); clearGoogleCookies(); generateGoogleHostREs(); diff --git a/manifest.json b/manifest.json index bbb2459..c10ac87 100644 --- a/manifest.json +++ b/manifest.json @@ -26,10 +26,16 @@ "management", "tabs", "webRequestBlocking", - "webRequest" + "webRequest", + "storage" ], "background": { "scripts": ["background.js"] + }, + + "options_ui": { + "page": "options.html", + "browser_style": true } } diff --git a/options.html b/options.html new file mode 100644 index 0000000..2221e12 --- /dev/null +++ b/options.html @@ -0,0 +1,32 @@ + + + + + + + + + +
+ +

+ +

+ +

+ +

+ + + +
+ + + + diff --git a/options.js b/options.js new file mode 100644 index 0000000..19bd8dc --- /dev/null +++ b/options.js @@ -0,0 +1,26 @@ +function onOptionsPageSave(e) +{ + e.preventDefault(); + + // Save settings + browser.storage.sync.set({ + "ignore_youtube": document.querySelector("#ignore_youtube").checked, + "ignore_searchpages": document.querySelector("#ignore_searchpages").checked + }); + + browser.runtime.reload(); +} + +function onOptionsPageLoaded() +{ + // Load saved settings or use defaults when nothing was saved yet + var storageItem = browser.storage.sync.get(); + storageItem.then((res) => + { + document.querySelector("#ignore_youtube").checked = res.ignore_youtube || false; + document.querySelector("#ignore_searchpages").checked = res.ignore_searchpages || false; + }); +} + +document.addEventListener("DOMContentLoaded", onOptionsPageLoaded); +document.querySelector("form").addEventListener("submit", onOptionsPageSave);