Skip to content

Commit

Permalink
Fix Worker conflict detection #294
Browse files Browse the repository at this point in the history
  • Loading branch information
pixeltris committed Nov 3, 2024
1 parent 13f80fa commit 722f5b9
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 14 deletions.
19 changes: 16 additions & 3 deletions vaft/vaft-ublock-origin.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,27 @@ twitch-videoad.js text/javascript
var OriginalVideoPlayerQuality = null;
var IsPlayerAutoQuality = null;
const oldWorker = window.Worker;
function isWorkerDoubleHooked(ourWorker, identifier) {
var ourWorkerString = ourWorker ? ourWorker.toString() : null;
var proto = window.Worker;
while (proto)
{
var workerString = proto.toString();
if (workerString.includes(identifier) && workerString !== ourWorkerString) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}
function hookWindowWorker() {
var newWorker = window.Worker = class Worker extends oldWorker {
constructor(twitchBlobUrl, options) {
var isTwitchWorker = false;
try {
isTwitchWorker = new URL(twitchBlobUrl).origin.endsWith('.twitch.tv');
} catch {}
if (newWorker.toString() !== window.Worker.toString()) {
if (isWorkerDoubleHooked(newWorker, 'twitch')) {
console.log('Multiple twitch adblockers installed. Skipping Worker hook (vaft)');
isTwitchWorker = false;
}
Expand Down Expand Up @@ -862,8 +875,8 @@ twitch-videoad.js text/javascript
}
}catch{}
}
if (window.Worker.toString().includes('twitch')) {
console.log('Twitch Worker is already hooked');
if (isWorkerDoubleHooked(null, 'twitch')) {
console.log('Twitch Worker is already hooked. Skipping (vaft)');
} else {
window.reloadTwitchPlayer = reloadTwitchPlayer;
declareOptions(window);
Expand Down
21 changes: 17 additions & 4 deletions vaft/vaft.user.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// ==UserScript==
// @name TwitchAdSolutions (vaft)
// @namespace https://github.com/pixeltris/TwitchAdSolutions
// @version 13.0.0
// @version 14.0.0
// @description Multiple solutions for blocking Twitch ads (vaft)
// @updateURL https://github.com/pixeltris/TwitchAdSolutions/raw/master/vaft/vaft.user.js
// @downloadURL https://github.com/pixeltris/TwitchAdSolutions/raw/master/vaft/vaft.user.js
Expand Down Expand Up @@ -38,14 +38,27 @@
var OriginalVideoPlayerQuality = null;
var IsPlayerAutoQuality = null;
const oldWorker = window.Worker;
function isWorkerDoubleHooked(ourWorker, identifier) {
var ourWorkerString = ourWorker ? ourWorker.toString() : null;
var proto = window.Worker;
while (proto)
{
var workerString = proto.toString();
if (workerString.includes(identifier) && workerString !== ourWorkerString) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}
function hookWindowWorker() {
var newWorker = window.Worker = class Worker extends oldWorker {
constructor(twitchBlobUrl, options) {
var isTwitchWorker = false;
try {
isTwitchWorker = new URL(twitchBlobUrl).origin.endsWith('.twitch.tv');
} catch {}
if (newWorker.toString() !== window.Worker.toString()) {
if (isWorkerDoubleHooked(newWorker, 'twitch')) {
console.log('Multiple twitch adblockers installed. Skipping Worker hook (vaft)');
isTwitchWorker = false;
}
Expand Down Expand Up @@ -874,8 +887,8 @@
}
}catch{}
}
if (window.Worker.toString().includes('twitch')) {
console.log('Twitch Worker is already hooked');
if (isWorkerDoubleHooked(null, 'twitch')) {
console.log('Twitch Worker is already hooked. Skipping (vaft)');
} else {
window.reloadTwitchPlayer = reloadTwitchPlayer;
declareOptions(window);
Expand Down
19 changes: 16 additions & 3 deletions video-swap-new/video-swap-new-ublock-origin.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,27 @@ twitch-videoad.js text/javascript
}
var twitchWorkers = [];
const oldWorker = window.Worker;
function isWorkerDoubleHooked(ourWorker, identifier) {
var ourWorkerString = ourWorker ? ourWorker.toString() : null;
var proto = window.Worker;
while (proto)
{
var workerString = proto.toString();
if (workerString.includes(identifier) && workerString !== ourWorkerString) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}
function hookWindowWorker() {
var newWorker = window.Worker = class Worker extends oldWorker {
constructor(twitchBlobUrl, options) {
var isTwitchWorker = false;
try {
isTwitchWorker = new URL(twitchBlobUrl).origin.endsWith('.twitch.tv');
} catch {}
if (newWorker.toString() !== window.Worker.toString()) {
if (isWorkerDoubleHooked(newWorker, 'twitch')) {
console.log('Multiple twitch adblockers installed. Skipping Worker hook (video-swap-new)');
isTwitchWorker = false;
}
Expand Down Expand Up @@ -653,8 +666,8 @@ twitch-videoad.js text/javascript
return realGetItem.apply(this, arguments);
};
}
if (window.Worker.toString().includes('twitch')) {
console.log('Twitch Worker is already hooked');
if (isWorkerDoubleHooked(null, 'twitch')) {
console.log('Twitch Worker is already hooked. Skipping (video-swap-new)');
} else {
window.reloadTwitchPlayer = reloadTwitchPlayer;
declareOptions(window);
Expand Down
21 changes: 17 additions & 4 deletions video-swap-new/video-swap-new.user.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// ==UserScript==
// @name TwitchAdSolutions (video-swap-new)
// @namespace https://github.com/pixeltris/TwitchAdSolutions
// @version 1.31
// @version 1.32
// @updateURL https://github.com/pixeltris/TwitchAdSolutions/raw/master/video-swap-new/video-swap-new.user.js
// @downloadURL https://github.com/pixeltris/TwitchAdSolutions/raw/master/video-swap-new/video-swap-new.user.js
// @description Multiple solutions for blocking Twitch ads (video-swap-new)
Expand Down Expand Up @@ -37,14 +37,27 @@
}
var twitchWorkers = [];
const oldWorker = window.Worker;
function isWorkerDoubleHooked(ourWorker, identifier) {
var ourWorkerString = ourWorker ? ourWorker.toString() : null;
var proto = window.Worker;
while (proto)
{
var workerString = proto.toString();
if (workerString.includes(identifier) && workerString !== ourWorkerString) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}
function hookWindowWorker() {
var newWorker = window.Worker = class Worker extends oldWorker {
constructor(twitchBlobUrl, options) {
var isTwitchWorker = false;
try {
isTwitchWorker = new URL(twitchBlobUrl).origin.endsWith('.twitch.tv');
} catch {}
if (newWorker.toString() !== window.Worker.toString()) {
if (isWorkerDoubleHooked(newWorker, 'twitch')) {
console.log('Multiple twitch adblockers installed. Skipping Worker hook (video-swap-new)');
isTwitchWorker = false;
}
Expand Down Expand Up @@ -665,8 +678,8 @@
return realGetItem.apply(this, arguments);
};
}
if (window.Worker.toString().includes('twitch')) {
console.log('Twitch Worker is already hooked');
if (isWorkerDoubleHooked(null, 'twitch')) {
console.log('Twitch Worker is already hooked. Skipping (video-swap-new)');
} else {
window.reloadTwitchPlayer = reloadTwitchPlayer;
declareOptions(window);
Expand Down

0 comments on commit 722f5b9

Please sign in to comment.