summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimonBrazell <simon@brazell.com.au>2020-03-29 11:34:46 +1100
committerSimonBrazell <simon@brazell.com.au>2020-03-29 11:36:01 +1100
commitb01ac7c9662f83506713094fc54bfa346a3ab9fe (patch)
treecf851ce4a98971a17595f64504b3b93f4c462222
parent1f205990eba1aaf5abf67ba29e6bcd9262df8d2b (diff)
downloadprivacy-redirect-b01ac7c9662f83506713094fc54bfa346a3ab9fe.tar.gz
privacy-redirect-b01ac7c9662f83506713094fc54bfa346a3ab9fe.tar.bz2
privacy-redirect-b01ac7c9662f83506713094fc54bfa346a3ab9fe.zip
Proactively remove Twitter service worker
-rw-r--r--content-script.js44
-rw-r--r--manifest.json17
-rw-r--r--pages/options/options.html9
-rw-r--r--pages/options/options.js9
4 files changed, 77 insertions, 2 deletions
diff --git a/content-script.js b/content-script.js
new file mode 100644
index 0000000..d13de3e
--- /dev/null
+++ b/content-script.js
@@ -0,0 +1,44 @@
+'use strict';
+
+const nitterDefault = 'https://nitter.net';
+
+let disableNitter;
+let nitterInstance;
+
+window.browser = window.browser || window.chrome;
+
+function redirectTwitter(url) {
+ if (url.host.split('.')[0] === 'pbs') {
+ return `${nitterInstance}/pic/${encodeURIComponent(url.href)}`;
+ } else if (url.host.split('.')[0] === 'video') {
+ return `${nitterInstance}/gif/${encodeURIComponent(url.href)}`;
+ } else {
+ return `${nitterInstance}${url.pathname}${url.search}`;
+ };
+}
+
+browser.storage.sync.get(
+ ['nitterInstance', 'disableNitter', 'removeTwitterSW'],
+ (result) => {
+ if (!result.removeTwitterSW) {
+ disableNitter = result.disableNitter;
+ nitterInstance = result.nitterInstance || nitterDefault;
+ navigator.serviceWorker.getRegistrations().then(registrations => {
+ for (let registration of registrations) {
+ if (registration.scope === 'https://twitter.com/') {
+ registration.unregister();
+ console.log('Unregistered Twitter SW', registration);
+ }
+ }
+ });
+ const url = new URL(window.location);
+ if (!disableNitter && url.host !== nitterInstance) {
+ const redirect = redirectTwitter(url);
+ console.info(
+ 'Redirecting', `"${url.href}"`, '=>', `"${redirect}"`
+ );
+ window.location = redirect;
+ }
+ }
+ }
+);
diff --git a/manifest.json b/manifest.json
index 3d000b2..fb5605a 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,7 +1,7 @@
{
"name": "Privacy Redirect",
"description": "Redirects Twitter, YouTube, Instagram & Google Maps requests to privacy friendly alternatives.",
- "version": "1.1.16",
+ "version": "1.1.17",
"manifest_version": 2,
"background": {
"scripts": [
@@ -31,6 +31,21 @@
"128": "images/icon128.png"
}
},
+ "content_scripts": [
+ {
+ "matches": [
+ "*://twitter.com/*",
+ "*://www.twitter.com/*",
+ "*://mobile.twitter.com/*",
+ "*://pbs.twimg.com/*",
+ "*://video.twimg.com/*"
+ ],
+ "js": [
+ "content-script.js"
+ ],
+ "run_at": "document_start"
+ }
+ ],
"options_ui": {
"page": "pages/options/options.html",
"open_in_tab": false
diff --git a/pages/options/options.html b/pages/options/options.html
index b7e273f..0a963b7 100644
--- a/pages/options/options.html
+++ b/pages/options/options.html
@@ -111,6 +111,15 @@
</select>
</section>
+ <section class="options settings_block">
+ <div class="onoffswitch switch" aria-label="Proactively remove Twitter service worker">
+ <h1>Proactively remove Twitter service worker</h1>
+ <input aria-hidden="true" id="remove-twitter-sw" type="checkbox" checked>&nbsp;
+ <label for="remove-twitter-sw" class="checkbox-label">
+ </label>
+ </div>
+ </section>
+
<script src="./options.js"></script>
</body>
diff --git a/pages/options/options.js b/pages/options/options.js
index 4a1c198..3b85038 100644
--- a/pages/options/options.js
+++ b/pages/options/options.js
@@ -11,6 +11,7 @@ let disableOsm = document.querySelector('#disable-osm');
let alwaysProxy = document.querySelector('#always-proxy');
let onlyEmbeddedVideo = document.querySelector('#only-embed');
let videoQuality = document.querySelector('#video-quality');
+let removeTwitterSW = document.querySelector('#remove-twitter-sw');
window.browser = window.browser || window.chrome;
@@ -26,7 +27,8 @@ browser.storage.sync.get(
'disableOsm',
'alwaysProxy',
'onlyEmbeddedVideo',
- 'videoQuality'
+ 'videoQuality',
+ 'removeTwitterSW'
],
result => {
nitterInstance.value = result.nitterInstance || '';
@@ -40,6 +42,7 @@ browser.storage.sync.get(
alwaysProxy.checked = result.alwaysProxy;
onlyEmbeddedVideo.checked = result.onlyEmbeddedVideo;
videoQuality.value = result.videoQuality || '';
+ removeTwitterSW.checked = !result.removeTwitterSW;
}
);
@@ -123,3 +126,7 @@ videoQuality.addEventListener('change', event => {
videoQuality: event.target.options[videoQuality.selectedIndex].value
});
});
+
+removeTwitterSW.addEventListener('change', event => {
+ browser.storage.sync.set({ removeTwitterSW: !event.target.checked });
+});