From 8b4ef4bcb0f96044387c295bd4360475db676e03 Mon Sep 17 00:00:00 2001 From: cleanlock Date: Fri, 1 Apr 2022 11:27:46 +0200 Subject: [PATCH] Added Firefox --- background.js => chrome/background.js | 0 block_rules.json => chrome/block_rules.json | 0 content.js => chrome/content.js | 0 .../icons}/twitch-adblock-32x32.png | Bin .../icons}/twitch-adblock-48x48.png | Bin .../icons}/twitch-adblock-96x96.png | Bin manifest.json => chrome/manifest.json | 0 {popup => chrome/popup}/discord.png | Bin {popup => chrome/popup}/github.png | Bin {popup => chrome/popup}/index.html | 0 {popup => chrome/popup}/install.html | 0 {popup => chrome/popup}/logo.png | Bin {popup => chrome/popup}/popupjs.js | 0 .../remove_video_ads.js | 0 firefox/background.js | 29 + firefox/content.js | 849 ++++++++++++++++++ firefox/icons/twitch-adblock-32x32.png | Bin 0 -> 2747 bytes firefox/icons/twitch-adblock-48x48.png | Bin 0 -> 3826 bytes firefox/icons/twitch-adblock-96x96.png | Bin 0 -> 6589 bytes firefox/manifest.json | 41 + firefox/popup/discord.png | Bin 0 -> 54403 bytes firefox/popup/github.png | Bin 0 -> 16417 bytes firefox/popup/index.html | 114 +++ firefox/popup/install.html | 116 +++ firefox/popup/logo.png | Bin 0 -> 46608 bytes firefox/popup/popupjs.js | 54 ++ 26 files changed, 1203 insertions(+) rename background.js => chrome/background.js (100%) rename block_rules.json => chrome/block_rules.json (100%) rename content.js => chrome/content.js (100%) rename {icons => chrome/icons}/twitch-adblock-32x32.png (100%) rename {icons => chrome/icons}/twitch-adblock-48x48.png (100%) rename {icons => chrome/icons}/twitch-adblock-96x96.png (100%) rename manifest.json => chrome/manifest.json (100%) rename {popup => chrome/popup}/discord.png (100%) rename {popup => chrome/popup}/github.png (100%) rename {popup => chrome/popup}/index.html (100%) rename {popup => chrome/popup}/install.html (100%) rename {popup => chrome/popup}/logo.png (100%) rename {popup => chrome/popup}/popupjs.js (100%) rename remove_video_ads.js => chrome/remove_video_ads.js (100%) create mode 100644 firefox/background.js create mode 100644 firefox/content.js create mode 100644 firefox/icons/twitch-adblock-32x32.png create mode 100644 firefox/icons/twitch-adblock-48x48.png create mode 100644 firefox/icons/twitch-adblock-96x96.png create mode 100644 firefox/manifest.json create mode 100644 firefox/popup/discord.png create mode 100644 firefox/popup/github.png create mode 100644 firefox/popup/index.html create mode 100644 firefox/popup/install.html create mode 100644 firefox/popup/logo.png create mode 100644 firefox/popup/popupjs.js diff --git a/background.js b/chrome/background.js similarity index 100% rename from background.js rename to chrome/background.js diff --git a/block_rules.json b/chrome/block_rules.json similarity index 100% rename from block_rules.json rename to chrome/block_rules.json diff --git a/content.js b/chrome/content.js similarity index 100% rename from content.js rename to chrome/content.js diff --git a/icons/twitch-adblock-32x32.png b/chrome/icons/twitch-adblock-32x32.png similarity index 100% rename from icons/twitch-adblock-32x32.png rename to chrome/icons/twitch-adblock-32x32.png diff --git a/icons/twitch-adblock-48x48.png b/chrome/icons/twitch-adblock-48x48.png similarity index 100% rename from icons/twitch-adblock-48x48.png rename to chrome/icons/twitch-adblock-48x48.png diff --git a/icons/twitch-adblock-96x96.png b/chrome/icons/twitch-adblock-96x96.png similarity index 100% rename from icons/twitch-adblock-96x96.png rename to chrome/icons/twitch-adblock-96x96.png diff --git a/manifest.json b/chrome/manifest.json similarity index 100% rename from manifest.json rename to chrome/manifest.json diff --git a/popup/discord.png b/chrome/popup/discord.png similarity index 100% rename from popup/discord.png rename to chrome/popup/discord.png diff --git a/popup/github.png b/chrome/popup/github.png similarity index 100% rename from popup/github.png rename to chrome/popup/github.png diff --git a/popup/index.html b/chrome/popup/index.html similarity index 100% rename from popup/index.html rename to chrome/popup/index.html diff --git a/popup/install.html b/chrome/popup/install.html similarity index 100% rename from popup/install.html rename to chrome/popup/install.html diff --git a/popup/logo.png b/chrome/popup/logo.png similarity index 100% rename from popup/logo.png rename to chrome/popup/logo.png diff --git a/popup/popupjs.js b/chrome/popup/popupjs.js similarity index 100% rename from popup/popupjs.js rename to chrome/popup/popupjs.js diff --git a/remove_video_ads.js b/chrome/remove_video_ads.js similarity index 100% rename from remove_video_ads.js rename to chrome/remove_video_ads.js diff --git a/firefox/background.js b/firefox/background.js new file mode 100644 index 0000000..a6089e6 --- /dev/null +++ b/firefox/background.js @@ -0,0 +1,29 @@ +//Show options and install message on first install only. +function handleInstalled(details) { + if (details.reason == 'install') { + let createData = { + focused: true, + type: "popup", + url: "popup/install.html", + width: 365, + height: 750, + }; + let creating = chrome.windows.create(createData); + } +} + +chrome.runtime.onInstalled.addListener(handleInstalled); + +//Block ad trackers and ad serving scripts. +function blockURL(requestDetails) { + return { + cancel: true + }; +} + +//These are the Twitch ad trackers and ad serving script URLs. +chrome.webRequest.onBeforeRequest.addListener( + blockURL, + {urls: ["https://*.amazon-adsystem.com/*","https://cdn.krxd.net/*","https://script.ioam.de/iam.js","https://edge.quantserve.com/quant.js","https://ddacn6pr5v0tl.cloudfront.net/*","https://ddacn6pr5v0tl.cloudfront.net/custom-moat-video-native.min.js","https://d2v02itv0y9u9t.cloudfront.net/dist/1.0.5/v6s.js","https://d2v02itv0y9u9t.cloudfront.net/dist/1.0.8/v6s.js","https://d2v02itv0y9u9t.cloudfront.net/*","https://*.imrworldwide.com/*","https://countess.twitch.tv/*","https://*.scorecardresearch.com/*","https://www.googletagservices.com/tag/js/gpt.js","*://*.branch.io/*","*://comscore.com/*"]}, + ["blocking"] +); \ No newline at end of file diff --git a/firefox/content.js b/firefox/content.js new file mode 100644 index 0000000..bdddad3 --- /dev/null +++ b/firefox/content.js @@ -0,0 +1,849 @@ +//Get extension settings. +//Check if Firefox or not. +const isFirefox = !chrome.app; + +function updateSettings() { + if (isFirefox) { + var hideBlockingMessage = browser.storage.sync.get('blockingMessageTTV'); + hideBlockingMessage.then((res) => { + if (res.blockingMessageTTV == "true" || res.blockingMessageTTV == "false") { + window.postMessage({ + type: "SetHideBlockingMessage", + value: res.blockingMessageTTV + }, "*"); + } + }); + } else { + chrome.storage.local.get(['blockingMessageTTV'], function(result) { + if (result.blockingMessageTTV == "true" || result.blockingMessageTTV == "false") { + window.postMessage({ + type: "SetHideBlockingMessage", + value: result.blockingMessageTTV + }, "*"); + } + }); + } +} + +function removeVideoAds() { + //This stops Twitch from pausing the player when in another tab and an ad shows. + try { + Object.defineProperty(document, 'visibilityState', { + get() { + return 'visible'; + } + }); + Object.defineProperty(document, 'hidden', { + get() { + return false; + } + }); + const block = e => { + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + }; + const process = e => { + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + //This corrects the background tab buffer bug when switching to the background tab for the first time after an extended period. + doTwitchPlayerTask(false, false, true, false, false); + }; + document.addEventListener('visibilitychange', process, true); + document.addEventListener('webkitvisibilitychange', block, true); + document.addEventListener('mozvisibilitychange', block, true); + document.addEventListener('hasFocus', block, true); + if (/Firefox/.test(navigator.userAgent)) { + Object.defineProperty(document, 'mozHidden', { + get() { + return false; + } + }); + } else { + Object.defineProperty(document, 'webkitHidden', { + get() { + return false; + } + }); + } + } catch (err) {} + + //Send settings updates to worker. + window.addEventListener("message", (event) => { + if (event.source != window) + return; + if (event.data.type && (event.data.type == "SetHideBlockingMessage")) { + if (twitchMainWorker) { + twitchMainWorker.postMessage({ + key: 'SetHideBlockingMessage', + value: event.data.value + }); + } + } + }, false); + + function declareOptions(scope) { + scope.AdSignifier = 'stitched'; + scope.ClientID = 'kimne78kx3ncx6brgo4mv6wki5h1ko'; + scope.ClientVersion = 'null'; + scope.ClientSession = 'null'; + scope.PlayerType1 = 'site'; //Source + scope.PlayerType2 = 'thunderdome'; //480p + scope.PlayerType3 = 'pop_tart'; //480p + scope.PlayerType4 = 'picture-by-picture'; //360p + scope.CurrentChannelName = null; + scope.UsherParams = null; + scope.WasShowingAd = false; + scope.GQLDeviceID = null; + scope.HideBlockingMessage = false; + scope.IsSquadStream = false; + } + + declareOptions(window); + + var twitchMainWorker = null; + + var adBlockDiv = null; + + var OriginalVideoPlayerQuality = null; + + var IsPlayerAutoQuality = null; + + const oldWorker = window.Worker; + + window.Worker = class Worker extends oldWorker { + constructor(twitchBlobUrl) { + if (twitchMainWorker) { + super(twitchBlobUrl); + return; + } + var jsURL = getWasmWorkerUrl(twitchBlobUrl); + if (typeof jsURL !== 'string') { + super(twitchBlobUrl); + return; + } + var newBlobStr = ` + ${getNewUsher.toString()} + ${processM3U8.toString()} + ${hookWorkerFetch.toString()} + ${declareOptions.toString()} + ${getAccessToken.toString()} + ${gqlRequest.toString()} + ${adRecordgqlPacket.toString()} + ${tryNotifyTwitch.toString()} + ${parseAttributes.toString()} + declareOptions(self); + self.addEventListener('message', function(e) { + if (e.data.key == 'UpdateIsSquadStream') { + IsSquadStream = e.data.value; + } else if (e.data.key == 'UpdateClientVersion') { + ClientVersion = e.data.value; + } else if (e.data.key == 'UpdateClientSession') { + ClientSession = e.data.value; + } else if (e.data.key == 'UpdateClientId') { + ClientID = e.data.value; + } else if (e.data.key == 'UpdateDeviceId') { + GQLDeviceID = e.data.value; + } else if (e.data.key == 'SetHideBlockingMessage') { + if (e.data.value == "true") { + HideBlockingMessage = true; + } else if (e.data.value == "false") { + HideBlockingMessage = false; + } + } + }); + hookWorkerFetch(); + importScripts('${jsURL}'); + `; + super(URL.createObjectURL(new Blob([newBlobStr]))); + twitchMainWorker = this; + this.onmessage = function(e) { + if (e.data.key == 'ShowAdBlockBanner') { + if (adBlockDiv == null) { + adBlockDiv = getAdBlockDiv(); + } + adBlockDiv.P.textContent = 'Blocking ads...'; + adBlockDiv.style.display = 'block'; + } else if (e.data.key == 'HideAdBlockBanner') { + if (adBlockDiv == null) { + adBlockDiv = getAdBlockDiv(); + } + adBlockDiv.style.display = 'none'; + } else if (e.data.key == 'PauseResumePlayer') { + doTwitchPlayerTask(true, false, false, false, false); + } else if (e.data.key == 'ShowDonateBanner') { + if (adBlockDiv == null) { + adBlockDiv = getAdBlockDiv(); + } + adBlockDiv.P.textContent = 'Help support me...'; + adBlockDiv.style.display = 'block'; + } else if (e.data.key == 'ForceChangeQuality') { + //This is used to fix the bug where the video would freeze. + try { + var autoQuality = doTwitchPlayerTask(false, false, false, true, false); + var currentQuality = doTwitchPlayerTask(false, true, false, false, false); + + if (IsPlayerAutoQuality == null) { + IsPlayerAutoQuality = autoQuality; + } + if (OriginalVideoPlayerQuality == null) { + OriginalVideoPlayerQuality = currentQuality; + } + if (!currentQuality.includes('480') || e.data.value != null) { + if (!OriginalVideoPlayerQuality.includes('480')) { + var settingsMenu = document.querySelector('div[data-a-target="player-settings-menu"]'); + if (settingsMenu == null) { + var settingsCog = document.querySelector('button[data-a-target="player-settings-button"]'); + if (settingsCog) { + settingsCog.click(); + var qualityMenu = document.querySelector('button[data-a-target="player-settings-menu-item-quality"]'); + if (qualityMenu) { + qualityMenu.click(); + } + var lowQuality = document.querySelectorAll('input[data-a-target="tw-radio"'); + if (lowQuality) { + var qualityToSelect = lowQuality.length - 3; + if (e.data.value != null) { + if (e.data.value.includes('original')) { + e.data.value = OriginalVideoPlayerQuality; + if (IsPlayerAutoQuality) { + e.data.value = 'auto'; + } + } + if (e.data.value.includes('160p')) { + qualityToSelect = 5; + } + if (e.data.value.includes('360p')) { + qualityToSelect = 4; + } + if (e.data.value.includes('480p')) { + qualityToSelect = 3; + } + if (e.data.value.includes('720p')) { + qualityToSelect = 2; + } + if (e.data.value.includes('822p')) { + qualityToSelect = 2; + } + if (e.data.value.includes('864p')) { + qualityToSelect = 2; + } + if (e.data.value.includes('900p')) { + qualityToSelect = 2; + } + if (e.data.value.includes('936p')) { + qualityToSelect = 2; + } + if (e.data.value.includes('960p')) { + qualityToSelect = 2; + } + if (e.data.value.includes('1080p')) { + qualityToSelect = 2; + } + if (e.data.value.includes('source')) { + qualityToSelect = 1; + } + if (e.data.value.includes('auto')) { + qualityToSelect = 0; + } + } + lowQuality[qualityToSelect].click(); + + var originalQuality = JSON.parse(OriginalVideoPlayerQuality); + window.localStorage.setItem('video-quality', '{"default":"'+originalQuality.group+'"}'); + + if (e.data.value != null) { + OriginalVideoPlayerQuality = null; + IsPlayerAutoQuality = null; + doTwitchPlayerTask(false, false, false, true, true); + } + } + + } + } + } + } + } catch (err) { + OriginalVideoPlayerQuality = null; + IsPlayerAutoQuality = null; + } + } + }; + + function getAdBlockDiv() { + //To display a notification to the user, that an ad is being blocked. + var playerRootDiv = document.querySelector('.video-player'); + var adBlockDiv = null; + if (playerRootDiv != null) { + adBlockDiv = playerRootDiv.querySelector('.adblock-overlay'); + if (adBlockDiv == null) { + adBlockDiv = document.createElement('div'); + adBlockDiv.className = 'adblock-overlay'; + adBlockDiv.innerHTML = '

'; + adBlockDiv.style.display = 'none'; + adBlockDiv.P = adBlockDiv.querySelector('p'); + playerRootDiv.appendChild(adBlockDiv); + } + } + return adBlockDiv; + } + } + }; + + function getWasmWorkerUrl(twitchBlobUrl) { + var req = new XMLHttpRequest(); + req.open('GET', twitchBlobUrl, false); + req.send(); + return req.responseText.split("'")[1]; + } + + function hookWorkerFetch() { + var realFetch = fetch; + fetch = async function(url, options) { + if (typeof url === 'string') { + if (url.includes('video-weaver')) { + return new Promise(function(resolve, reject) { + var processAfter = async function(response) { + //Here we check the m3u8 for any ads and also try fallback player types if needed. + + var responseText = await response.text(); + var weaverText = null; + + weaverText = await processM3U8(url, responseText, realFetch, PlayerType2); + if (weaverText.includes(AdSignifier)) { + weaverText = await processM3U8(url, responseText, realFetch, PlayerType3); + } + if (weaverText.includes(AdSignifier)) { + weaverText = await processM3U8(url, responseText, realFetch, PlayerType4); + } + + resolve(new Response(weaverText)); + }; + var send = function() { + return realFetch(url, options).then(function(response) { + processAfter(response); + })['catch'](function(err) { + reject(err); + }); + }; + send(); + }); + } else if (url.includes('/api/channel/hls/')) { + var channelName = (new URL(url)).pathname.match(/([^\/]+)(?=\.\w+$)/)[0]; + UsherParams = (new URL(url)).search; + CurrentChannelName = channelName; + //To prevent pause/resume loop for mid-rolls. + var isPBYPRequest = url.includes('picture-by-picture'); + if (isPBYPRequest) { + url = ''; + } + //Make new Usher request if needed to create fallback if UBlock bypass method fails. + var useNewUsher = false; + if (url.includes('subscriber%22%3Afalse') && url.includes('hide_ads%22%3Afalse') && url.includes('show_ads%22%3Atrue')) { + useNewUsher = true; + } + if (url.includes('subscriber%22%3Atrue') && url.includes('hide_ads%22%3Afalse') && url.includes('show_ads%22%3Atrue')) { + useNewUsher = true; + } + if (useNewUsher == true) { + return new Promise(function(resolve, reject) { + var processAfter = async function(response) { + encodingsM3u8 = await getNewUsher(realFetch, response, channelName); + if (encodingsM3u8.length > 1) { + resolve(new Response(encodingsM3u8)); + } else { + postMessage({ + key: 'HideAdBlockBanner' + }); + resolve(encodingsM3u8); + } + }; + var send = function() { + return realFetch(url, options).then(function(response) { + processAfter(response); + })['catch'](function(err) { + reject(err); + }); + }; + send(); + }); + } + } + } + return realFetch.apply(this, arguments); + }; + } + + //Added as fallback for when UBlock method fails. + async function getNewUsher(realFetch, originalResponse, channelName) { + var accessTokenResponse = await getAccessToken(channelName, PlayerType1); + var encodingsM3u8 = ''; + + if (accessTokenResponse.status === 200) { + + var accessToken = await accessTokenResponse.json(); + + try { + var urlInfo = new URL('https://usher.ttvnw.net/api/channel/hls/' + channelName + '.m3u8' + UsherParams); + urlInfo.searchParams.set('sig', accessToken.data.streamPlaybackAccessToken.signature); + urlInfo.searchParams.set('token', accessToken.data.streamPlaybackAccessToken.value); + var encodingsM3u8Response = await realFetch(urlInfo.href); + if (encodingsM3u8Response.status === 200) { + encodingsM3u8 = await encodingsM3u8Response.text(); + return encodingsM3u8; + } else { + return originalResponse; + } + } catch (err) {} + return originalResponse; + } else { + return originalResponse; + } + } + + async function processM3U8(url, textStr, realFetch, playerType) { + //Checks the m3u8 for ads and if it finds one, instead returns an ad-free stream. + + //Ad blocking for squad streams is disabled due to the way multiple weaver urls are used. No workaround so far. + if (IsSquadStream == true) { + return textStr; + } + + if (!textStr) { + return textStr; + } + + //Some live streams use mp4. + if (!textStr.includes(".ts") && !textStr.includes(".mp4")) { + return textStr; + } + + var haveAdTags = textStr.includes(AdSignifier); + + if (haveAdTags) { + + //Reduces ad frequency. + try { + tryNotifyTwitch(textStr); + } catch (err) {} + + var accessTokenResponse = await getAccessToken(CurrentChannelName, playerType); + + if (accessTokenResponse.status === 200) { + + var accessToken = await accessTokenResponse.json(); + + try { + var urlInfo = new URL('https://usher.ttvnw.net/api/channel/hls/' + CurrentChannelName + '.m3u8' + UsherParams); + urlInfo.searchParams.set('sig', accessToken.data.streamPlaybackAccessToken.signature); + urlInfo.searchParams.set('token', accessToken.data.streamPlaybackAccessToken.value); + var encodingsM3u8Response = await realFetch(urlInfo.href); + if (encodingsM3u8Response.status === 200) { + + var encodingsM3u8 = await encodingsM3u8Response.text(); + + streamM3u8Url = encodingsM3u8.match(/^https:.*\.m3u8$/mg)[0]; + + var streamM3u8Response = await realFetch(streamM3u8Url); + if (streamM3u8Response.status == 200) { + var m3u8Text = await streamM3u8Response.text(); + WasShowingAd = true; + if (HideBlockingMessage == false) { + if (Math.floor(Math.random() * 4) == 3) { + postMessage({ + key: 'ShowDonateBanner' + }); + } else { + postMessage({ + key: 'ShowAdBlockBanner' + }); + } + } else if (HideBlockingMessage == true) { + postMessage({ + key: 'HideAdBlockBanner' + }); + } + + postMessage({ + key: 'ForceChangeQuality' + }); + + return m3u8Text; + } else { + return textStr; + } + } else { + return textStr; + } + } catch (err) {} + return textStr; + } else { + return textStr; + } + } else { + if (WasShowingAd) { + WasShowingAd = false; + //Here we put player back to original quality and remove the blocking message. + postMessage({ + key: 'ForceChangeQuality', + value: 'original' + }); + postMessage({ + key: 'PauseResumePlayer' + }); + postMessage({ + key: 'HideAdBlockBanner' + }); + } + return textStr; + } + return textStr; + } + + function parseAttributes(str) { + return Object.fromEntries( + str.split(/(?:^|,)((?:[^=]*)=(?:"[^"]*"|[^,]*))/) + .filter(Boolean) + .map(x => { + const idx = x.indexOf('='); + const key = x.substring(0, idx); + const value = x.substring(idx + 1); + const num = Number(value); + return [key, Number.isNaN(num) ? value.startsWith('"') ? JSON.parse(value) : value : num]; + })); + } + + async function tryNotifyTwitch(streamM3u8) { + //We notify that an ad was requested but was not visible and was also muted. + var matches = streamM3u8.match(/#EXT-X-DATERANGE:(ID="stitched-ad-[^\n]+)\n/); + if (matches.length > 1) { + const attrString = matches[1]; + const attr = parseAttributes(attrString); + var podLength = parseInt(attr['X-TV-TWITCH-AD-POD-LENGTH'] ? attr['X-TV-TWITCH-AD-POD-LENGTH'] : '1'); + var podPosition = parseInt(attr['X-TV-TWITCH-AD-POD-POSITION'] ? attr['X-TV-TWITCH-AD-POD-POSITION'] : '0'); + var radToken = attr['X-TV-TWITCH-AD-RADS-TOKEN']; + var lineItemId = attr['X-TV-TWITCH-AD-LINE-ITEM-ID']; + var orderId = attr['X-TV-TWITCH-AD-ORDER-ID']; + var creativeId = attr['X-TV-TWITCH-AD-CREATIVE-ID']; + var adId = attr['X-TV-TWITCH-AD-ADVERTISER-ID']; + var rollType = attr['X-TV-TWITCH-AD-ROLL-TYPE'].toLowerCase(); + const baseData = { + stitched: true, + roll_type: rollType, + player_mute: true, + player_volume: 0.0, + visible: false, + }; + for (let podPosition = 0; podPosition < podLength; podPosition++) { + const extendedData = { + ...baseData, + ad_id: adId, + ad_position: podPosition, + duration: 0, + creative_id: creativeId, + total_ads: podLength, + order_id: orderId, + line_item_id: lineItemId, + }; + await gqlRequest(adRecordgqlPacket('video_ad_impression', radToken, extendedData)); + for (let quartile = 0; quartile < 4; quartile++) { + await gqlRequest( + adRecordgqlPacket('video_ad_quartile_complete', radToken, { + ...extendedData, + quartile: quartile + 1, + }) + ); + } + await gqlRequest(adRecordgqlPacket('video_ad_pod_complete', radToken, baseData)); + } + } + } + + function adRecordgqlPacket(event, radToken, payload) { + return [{ + operationName: 'ClientSideAdEventHandling_RecordAdEvent', + variables: { + input: { + eventName: event, + eventPayload: JSON.stringify(payload), + radToken, + }, + }, + extensions: { + persistedQuery: { + version: 1, + sha256Hash: '7e6c69e6eb59f8ccb97ab73686f3d8b7d85a72a0298745ccd8bfc68e4054ca5b', + }, + }, + }]; + } + + function getAccessToken(channelName, playerType, realFetch) { + var body = null; + var templateQuery = 'query PlaybackAccessToken_Template($login: String!, $isLive: Boolean!, $vodID: ID!, $isVod: Boolean!, $playerType: String!) { streamPlaybackAccessToken(channelName: $login, params: {platform: "web", playerBackend: "mediaplayer", playerType: $playerType}) @include(if: $isLive) { value signature __typename } videoPlaybackAccessToken(id: $vodID, params: {platform: "web", playerBackend: "mediaplayer", playerType: $playerType}) @include(if: $isVod) { value signature __typename }}'; + body = { + operationName: 'PlaybackAccessToken_Template', + query: templateQuery, + variables: { + 'isLive': true, + 'login': channelName, + 'isVod': false, + 'vodID': '', + 'playerType': playerType + } + }; + return gqlRequest(body, realFetch); + } + + function gqlRequest(body, realFetch) { + var fetchFunc = realFetch ? realFetch : fetch; + if (!GQLDeviceID) { + var dcharacters = 'abcdefghijklmnopqrstuvwxyz0123456789'; + var dcharactersLength = dcharacters.length; + for (var i = 0; i < 32; i++) { + GQLDeviceID += dcharacters.charAt(Math.floor(Math.random() * dcharactersLength)); + } + } + return fetchFunc('https://gql.twitch.tv/gql', { + method: 'POST', + body: JSON.stringify(body), + headers: { + 'Client-ID': ClientID, + 'Device-ID': GQLDeviceID, + 'X-Device-Id': GQLDeviceID, + 'Client-Version': ClientVersion, + 'Client-Session-Id': ClientSession + } + }); + } + + function doTwitchPlayerTask(isPausePlay, isCheckQuality, isCorrectBuffer, isAutoQuality, setAutoQuality) { + //This will do an instant pause/play to return to original quality once the ad is finished. + //We also use this function to get the current video player quality set by the user. + //We also use this function to quickly pause/play the player when switching tabs to stop delays. + try { + var videoController = null; + var videoPlayer = null; + + function findReactNode(root, constraint) { + if (root.stateNode && constraint(root.stateNode)) { + return root.stateNode; + } + let node = root.child; + while (node) { + const result = findReactNode(node, constraint); + if (result) { + return result; + } + node = node.sibling; + } + return null; + } + var reactRootNode = null; + var rootNode = document.querySelector('#root'); + if (rootNode && rootNode._reactRootContainer && rootNode._reactRootContainer._internalRoot && rootNode._reactRootContainer._internalRoot.current) { + reactRootNode = rootNode._reactRootContainer._internalRoot.current; + } + videoPlayer = findReactNode(reactRootNode, node => node.setPlayerActive && node.props && node.props.mediaPlayerInstance); + videoPlayer = videoPlayer && videoPlayer.props && videoPlayer.props.mediaPlayerInstance ? videoPlayer.props.mediaPlayerInstance : null; + + if (isPausePlay) { + videoPlayer.pause(); + videoPlayer.play(); + return; + } + if (isCheckQuality) { + if (typeof videoPlayer.getQuality() == 'undefined') { + return; + } + var playerQuality = JSON.stringify(videoPlayer.getQuality()); + if (playerQuality) { + return playerQuality; + } else { + return; + } + } + if (isAutoQuality) { + if (typeof videoPlayer.isAutoQualityMode() == 'undefined') { + return false; + } + var autoQuality = videoPlayer.isAutoQualityMode(); + if (autoQuality) { + videoPlayer.setAutoQualityMode(false); + return autoQuality; + } else { + return false; + } + } + if (setAutoQuality) { + videoPlayer.setAutoQualityMode(true); + return; + } + //This only happens when switching tabs and is to correct the high latency caused when opening background tabs and going to them at a later time. + //We check that this is a live stream by the page URL, to prevent vod/clip pause/plays. + try { + var currentPageURL = document.URL; + var isLive = true; + if (currentPageURL.includes('videos/') || currentPageURL.includes('clip/')) { + isLive = false; + } + if (isCorrectBuffer && isLive) { + //A timer is needed due to the player not resuming without it. + setTimeout(function() { + //If latency to broadcaster is above 5 or 15 seconds upon switching tabs, we pause and play the player to reset the latency. + //If latency is between 0-6, user can manually pause and resume to reset latency further. + if (videoPlayer.isLiveLowLatency() && videoPlayer.getLiveLatency() > 5) { + videoPlayer.pause(); + videoPlayer.play(); + } else if (videoPlayer.getLiveLatency() > 15) { + videoPlayer.pause(); + videoPlayer.play(); + } + }, 3000); + } + } catch (err) {} + } catch (err) {} + } + + var localDeviceID = null; + localDeviceID = window.localStorage.getItem('local_copy_unique_id'); + + function hookFetch() { + var realFetch = window.fetch; + window.fetch = function(url, init, ...args) { + if (typeof url === 'string') { + //Check if squad stream. + if (window.location.pathname.includes('/squad')) { + if (twitchMainWorker) { + twitchMainWorker.postMessage({ + key: 'UpdateIsSquadStream', + value: true + }); + } + } else { + if (twitchMainWorker) { + twitchMainWorker.postMessage({ + key: 'UpdateIsSquadStream', + value: false + }); + } + } + if (url.includes('/access_token') || url.includes('gql')) { + //Device ID is used when notifying Twitch of ads. + var deviceId = init.headers['X-Device-Id']; + if (typeof deviceId !== 'string') { + deviceId = init.headers['Device-ID']; + } + //Added to prevent eventual UBlock conflicts. + if (typeof deviceId === 'string' && !deviceId.includes('twitch-web-wall-mason')) { + GQLDeviceID = deviceId; + } else if (localDeviceID) { + GQLDeviceID = localDeviceID.replace('"', ''); + GQLDeviceID = GQLDeviceID.replace('"', ''); + } + if (GQLDeviceID && twitchMainWorker) { + if (typeof init.headers['X-Device-Id'] === 'string') { + init.headers['X-Device-Id'] = GQLDeviceID; + } + if (typeof init.headers['Device-ID'] === 'string') { + init.headers['Device-ID'] = GQLDeviceID; + } + twitchMainWorker.postMessage({ + key: 'UpdateDeviceId', + value: GQLDeviceID + }); + } + //Client version is used in GQL requests. + var clientVersion = init.headers['Client-Version']; + if (clientVersion && typeof clientVersion == 'string') { + ClientVersion = clientVersion; + } + if (ClientVersion && twitchMainWorker) { + twitchMainWorker.postMessage({ + key: 'UpdateClientVersion', + value: ClientVersion + }); + } + //Client session is used in GQL requests. + var clientSession = init.headers['Client-Session-Id']; + if (clientSession && typeof clientSession == 'string') { + ClientSession = clientSession; + } + if (ClientSession && twitchMainWorker) { + twitchMainWorker.postMessage({ + key: 'UpdateClientSession', + value: ClientSession + }); + } + //Client ID is used in GQL requests. + if (url.includes('gql') && init && typeof init.body === 'string' && init.body.includes('PlaybackAccessToken')) { + var clientId = init.headers['Client-ID']; + if (clientId && typeof clientId == 'string') { + ClientID = clientId; + } else { + clientId = init.headers['Client-Id']; + if (clientId && typeof clientId == 'string') { + ClientID = clientId; + } + } + if (ClientID && twitchMainWorker) { + twitchMainWorker.postMessage({ + key: 'UpdateClientId', + value: ClientID + }); + } + } + //To prevent pause/resume loop for mid-rolls. + if (url.includes('gql') && init && typeof init.body === 'string' && init.body.includes('PlaybackAccessToken') && init.body.includes('picture-by-picture')) { + init.body = ''; + } + var isPBYPRequest = url.includes('picture-by-picture'); + if (isPBYPRequest) { + url = ''; + } + } + } + return realFetch.apply(this, arguments); + }; + } + hookFetch(); +} + +function appendBlockingScript() { + var script = document.createElement('script'); + script.appendChild(document.createTextNode('(' + removeVideoAds + ')();')); + (document.body || document.head || document.documentElement).appendChild(script); + setTimeout(function() { + updateSettings(); + }, 4000); +} + +if (isFirefox) { + var onOff = browser.storage.sync.get('onOffTTV'); + onOff.then((res) => { + if (res && res.onOffTTV) { + if (res.onOffTTV == "true") { + appendBlockingScript(); + } + } else { + appendBlockingScript(); + } + }, err => { + appendBlockingScript(); + }); +} else { + chrome.storage.local.get(['onOffTTV'], function(result) { + if (chrome.runtime.lastError) { + appendBlockingScript(); + return; + } + if (result && result.onOffTTV) { + if (result.onOffTTV == "true") { + appendBlockingScript(); + } + } else { + appendBlockingScript(); + } + }); +} \ No newline at end of file diff --git a/firefox/icons/twitch-adblock-32x32.png b/firefox/icons/twitch-adblock-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..1e6a68ff711beb9230a991d5ec70bd899da8710e GIT binary patch literal 2747 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 BgyjGL literal 0 HcmV?d00001 diff --git a/firefox/icons/twitch-adblock-48x48.png b/firefox/icons/twitch-adblock-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..abed0aa1146dd12f093525c286b9fe55b484b46c GIT binary patch literal 3826 zcmbtXc{r478<%5Ck}QdwF=rywFf+E9VN6+OY{!zB?AtJd2{X)M7ooD3jxDkzOIe0+ z6oqJPC50qJS+Xw)QIc<*Q|J5s_^$7t@42q`eV*sO?%(hJJ@`U+@S&<0DVE--> zii_(P3>k0Bur>Q#%bn`0LfG?B3G(&hpt-nEr-S?m?%pH@(2e9trs#lH9yWu3WTFnp zM#Bth=BH2cA{&L!NVpJlynBeZJCX=GjRvBEv^WI5BnAN(hrUDmR?i_mF`9L1M2Go6>Z2AA~le%w3pc*LP<1o0EvjD zQGJ1brACYVAL0LQ4IVG7JV+S9K>6 z-Q5TX&<{2a_Mb%jA8ZhgV8~wW|DzXvnm7%%xBREGIh%j(28qJC5HwEb$4Ky!xVR4J z8yo22gN9$(hx*|Mq;^L`1L4_b>DR9Dh>qd+cbWoSrvCxb}+xwB?9@_-J;aDG@Vc^seY@ifb2oK=c#4?-?lVy4*Dx0LBrS3)b1M}=ZG0mle7tbM z%%z~zQliLPTx5h+hEQ66!X|>0P1;7;(Eay1&br~w48l>@QvByTZrt$mmX_927nWU1 zmhB)^O8S=$BYC4xX;rMNGkMLlJM#?miGYg>LxmECBNC*Z=>*ALYkP<7X*D~$u~n&c zJ^SNb6e=O5j=SQ?Iay)th9Mt|sjD*eUz&1tWXpy5#F{VV%d(W7<_QNkdQVFn5q{_7 zOtH=HhrK*1T(S|Ml@}4rj_qhKDe(?0DtXfXCbm&R!l-tr;by&K*5@-o8Njz^1qDSl zEXSdGebFDcsbQ3iekXQ&zU=#D^HM{?UH4rg}i zV|{rc&m(jQ_n7uWk%I@-69EhLYc&j}Lf7W8h~LK6zVQUKks5EBgENrsRCU2AkppeA zME>Y(Nm+E_pLjPTtLwM8^rS;h$UIIJI=DSa&mTUgIDXVTSKaDGx21zhCabC9z7X(J zEPot5MG>03WwsV0hj{bE-8pPZ;C1q`E6(O6<0b<2P{j+U`9{q*vvd?ZHj$wsZ@%Fl zQg0YdiJCfO$XAfnb8UZL_ifZiDJ?BzNlyXLQNxkVU7qR}rv9*qyc*D6eg;u(GUuu4 zUzg3lEa&moi(fZ8?_5yT=WPFVr>}QKMSBgktEaxa@NnJz{$>JLy)|c!!pglh+IMyY z)pzzXb4X9|E+D~4a#|0r2lcTmyU1LKoN${AzW}kc!|t*uN?sfC`SITYg6zVD(Y~Bv z{F%aaZP1Xs`P!t{0CaJ!yO5XrL`H16l3dsh^YXB<_!8Ia9`{>ox;3;ISi{o&$Cq6! z;|{=-fWn*m?227V9y>*CA0Le?jD}RcjeBAftav0ewi}FKE=enTLR5z`?~NHCyBCG> zuz7RAFjm*~8}^F8^P9$Jd-D*1d@lYIJ1-4)Bhiz8WWfL`Ho%2$=|VYc7n_d5AE`1}XUFQ9Jn9{3$w?by*$I<<2se{nQ{ z=K|Bs9tTVa^LsyP?=bjz=>T5Jd_0p!0&K96R_C?)+TkJ+{P9)(-Pp8Q=g@-)yC^Jr zXIwT?j5n1np{M(y1~DCaOtVdjECHxfR8pML?9FJ+vQrIndYPKZ^K89fpA|cGwr<3d zSt~f2aR01H$(*$=VEb6vDrRfH%t${!D@Fu;q;-&WML+4mfUvEq!v_WiEa=5RK}@5T zAnGGGM!wIIaTjlc70^SPzvB8Hb;iGQPko0Sx0!3JYKRy&a1*X`biO3oEFZ?6t55%^ z>3OTB7h2=?O|9AdLEZ7O7^l|f=+brE`^gMN`t7Kk4B7Uf^L0{LX|pm$W(_fm&cTRx zRdKl=;;})U!WGr^+-`4Y5{i@hirUSf8?={60O_Z;0P~Mt^_zn7O>1 z+9h$JC6@cZ9oTy4K&Ce4p7~*$?1$Gf&!u;f?Y4t&>VEz*@NPUZ%OJ&!pcityVT6A? zc?zYuCG2?81RCYAUfKy+{->< zmu5p`dZcq_OqJ7YJC<)3s9K)9WHa@O<@~v(Pf+}AOaJch{XZ73Cqz1XhAls`Avk2k zM^xW87p>Q|1dEN;qQeu@H!g`Oyq9xeo+&)X{{Gq+rO01#SR*iNB42*uptr4vu~9ce zy$$?lbLoxM;ykEal3L$b@7RuG+dIj_?1JP%V z+r2AOo1C1Lbmtn}_VV-GEBV(QFsLBuhP1-rzBr%8TbD-^zi1Aa$M=h5#3SyopQap#p^;KeFPWGz z`>sql{>;mMm)niV{i_Mrzg$|Id0`k3py}~EtF10S_Z;*1*Uw7{q09CBZhYG0J~{U4 ztI*Bmq`SCc*VYIAowr3DdUDiiYVoblxn7ir!s{JB!Z!+CL>E9(K8;Epr#1~sBmI)3 z)I9Qwi}_5`!7T-tgsPB@^F$)ib?56wdtAb%K#}SY1nf{JG%zr5`J6S&{*nUR$CZEP zabd1bWs=JF2{~XM>^l7;@X^J{K~|}omJOh5CsN?r42UV8(^S^CsOH(Dexkiqdg7IW z`OVn7xDx3mi1`HxUgpEm_T5vbPMx)~ifRN``c6#5Y@@pJ(d?N@yQu9%Bjc8`TAtDQ zfhra?X*x<@C@{SvgaqfaFk^XSgc%>-5x)JIFvxN` ziVA{K@=!x}K6nRxa{C^Vl}-kTm4r84)oaMDRP?oQ9(g7OZu{sxL3?Op@oj?KUp(G@ zLoE{>-Y~vmnxWDbvtP{8(a}fof#(arlZx}+-b&e*LsuFl4@jyQSTuAi9cC9=`QHdk zW~G~&;^UjLR5t26=(8)HJ>UnYbQ)E|qOJ7jW^*5)WpYV2sTrMvzl_}U{*?N4bA^gZ zPfL?3Q85n@$j%ZIvLvM4(!U}db>d~Esj2Bu@Mmb$@XXpcFx=4=lOi8e#ZFyk{BB}8 za<8Cv-T$ODcGo8J?#49fGP9+Z#XUh=dPvNuZfKCDMWZOtd(S6s;+10j5Hf>rF+3Hn zGKAk&8*<)4QpH#9<%;PgJj$;vk9gGG_XWKC{b)(4hFO&hrlH(YK4{-O_L@$Mlb*rwEgdn8`OsLgBdXhiR*ilz_5NLfrwH!b63qmRO<7i% zFSsg3HA*$q{&2o|hZ@`h&dfh!FXtd^Utve8jlNh`4Gqn6eG%7Z+rhY3uBG?ZD~xAt z^YDcAOsE@R-x^#@=~FdZS~^y=2HW>Z$?iqOZ*vW$I6C&QP>yXwxf#z``eYM86)W2N zsRQ6V#OI8W{1$@gR5sF80)yGRlcKE$LcZs5{lXib_X{0uoXH2_z>8y$d2p7nLGSq=Sf{fE2+( zIVvbf5kUb#k=`r_0xzh?bMG7X-gp1JjO@MFUTg08&9AJrc19AcElm$_igN-0fCJ`c zC|ml~eg9x*rJvtr1!~bR9AqixWsJ$yWt~BYEIe zf_%wzGytHZA4JAreeg7(2j0`$PZzY((hdT8<8(oe>K0H7vN7Jv+bo2Fw+pef$A(9#AI;Nhk2d(=fmwU!ors8KevP!HcA~_q!n=;13ARM;BzcZxHBYVGT4UQSd-@ z6%8;JrltziM5w?tpa@m9qd-+COcMgtguvinC=3bJK*ABgUmp5fzDwg6+rg@Y6 zfcuOX50XDk7erV3(*s)Ytbnno2_l(5?K^ z`!9*9_Q7O4#1>B_`BSiXbO7FuCi|B$vKNU)qI!}3jke#z|D+Iy{cVu!Pa*yY4-N~# z6Y;)uZYmuM`=O7FG^XG&G!n(0L?Zr`DC@s00*#G0X}UI zAi5|OZ*Lq@6$AGmz+nWi1{6*J!!*@Y!3Zc$6%2=JVzCG{4?GM8|DlWiJc@+%-;cxo z^FNCgN5axMe#a7tP$PI~dC+}BU=T2{8dePf_8@4ef?@l_SR4-PfzkSl&5GhppEnrd zKeFzt!qFMwns_aB0$v>q)4*WBnyP9rFb0Ewf)NN9&I9fN$73}SAmHD2jY&ij#e#&R zN0+Yl?|yS*V`~bD;7z0tP;E_(faYjp4H!a01FWh70|9YZB!NWn#n8*l+ZW@Bhmid| z_luq`gYK@GHh}H@VgBzN`bit; zg{PDLhbs9Aqml@;Knw+M=t)n>|51aGez+XM|X}w-ytmfeVzjV0$X|GFCgBT6FQnWuPWph(5c4i~aaCS~-g7E)SKmK^?jAxEp?~ z6>En>3t>#o?g3sf<+8nwhIc4UYLNxJn6~&zoF9@&mHgf;Uc_KaBeVMgo2Kr1MqwgG zTg>B)pWhB7*GoBBN%(%C#p$a{PTVvZE0pdk%j)6P5C;+l(yBTfEKCDI>{&h%+2V*&Kkqy`P}73%mkiOMxOxBTS)D zZOFF!3{CEeN4b42Nb!Kw%(Qcp(<0y$YBuHxL@3_#&h&GZ8kSwo#s0a^79F+MYoSMX zjLSI^jB~D`Uv?!c!%p8+4mnXuEVgSC;^Td0SY7umif5B=)2M7D@cgv*i!BkGWM+2} zYgJ{~T4tnE)9TyQOi01=665=_U9wgW^_le9E=C{Cb1UGRPcpg==zOxtLmoMI`SOLm zCNkzht9iyd20dj(c0&=HXjWK4J6AQ+GVA>tFBgo@YB5&<4tP)@49l)LR~!5`&arIN z3kWW0gi*qDRv@n8I1QW5pvkk7(vxnJr}EtNoy$hH;g)Oh?m~rz)wvSU+YY_C&Rgq4 zj%Th)>NlLu*8T(3ex?=}UtPolhDtcGT$XWgJ*Ie>ubffMfYZ7#`mR-9LHqn%Rn0N6 zvd_6LyMq-vFp^u;XeYM{Qv{$IeY92RyTt8OL!d*N(Jtqtw6f6A6Xs&KK0F+9cD}=X z;P(4ZbAY;Jv0~7UQSMUU0ab>BY1!gEf@w)f(jx#C1InMX1us1{s+u>`b0zO7+v%pTp|#@cwbuSdr>$<@@Kt6mMgh*_M&S)wK#WS5% zY;sh1sz}0_q;;;^qCD=kydsZS$AQAIH20Ls$0mMJ@7dmyR)N1UM-ww{C;$nf2akJ4^Ud@E*9~r_h5Qcjl9Q*CSy`JgW308T4SJ>M zCTEsh)-OeM`l}^TS~$u)TMzg3BUHgjtKMFmygX&3+F1`TxTS3tzM?<%fNeuy)}D#ceg$LpMmn7W7Ue)XpRy5;68SkR7tWIems*7FN;*=n&> z!c8#S@dwu!1)_p`!ggI4CD*PTLZZS8p71Qaw7TAmOe1=*h~uJX39;G*^=0`&g|ybE z>7@$gO7FGj=MRe8;D;Zu9qQQKd4Lo3RkY|&F8`ROs{~}2vv&Y0I~z{F?@}1#YTr7N zt0Q)ic;ozu*cO*C9hPN!A!-=Cm-T6qaaON)>LvPxx$UsDe>*@6yZ~D80!mN$i9Iao zF6+o+e3z~f39B;^S3L-x4qlqMHF#!qCIcz}zxL{TC$0Efeq!da#pTCxxCzUeMy{O; z_UHVj@vS3uDVM4zDq0rPO=rAouTPQ4MIvgaZja8sVWwu@YroURe?RE>Vpx@M>1>C3 zAZzHMO8!)G6Z@ukcFjSi5e0+9Ma7mlzPmfiKo_rz&P~}&FufCXQ-bL`h3Md>Kr4_QePdAGe2>uUUU02^F z0^~}O1v!&=6;kd~DY>#L6}R%Vcrt=_DuCNXI4x;WDCuW z1Ha1@oRT8GY1HRdQmVvx=53#$DHX)sL&>0ZZnUO|32GfN7*!CT&c%qo%g4;#ll z&=xUdZKlk_$I%RHJ+D6u_FR3+M4=Sku`j6=mgbG{b;f@cCi$MS70D< zr(6Q1!uGc3aiO78Bkj@~jeopAFIL}*eb_9Yb1^6kd7wv#O4U*I(S+q5UX^GZ2i=%# zMo!dOSk&UVs-3ZW$~&A+H0=R^6A(NWDu8jz$d4y4Ixq;Px%O3#gvrJg>R%Z0(s1UK4xHRHROjEXd@6hQNP_b9TG}HE(*=G=JNIngHzA2;KxBk_Y!k+l=><;g6B*q> zo*Aw2?vBp7>Xph6W>|H;tiS=Xw^$F=SzP;M&D**L;HGKmJ3E+c7H+%+aLoyGKDUf? zIb~*X{(`hEq#YA8)_y^yLxR_+;3+Zg3V%c1X^RW}Pmfu#PaXV2uF_EX`@{E{k6Z&Q zG9wpZWd)DgRtevn*1;O<+7_Q>6lV@9GN5yVhF@DM-u5r5(}p9`O7=Pvr-n}t{mH}K zL4D59kaLEoP328Y=h@ODVKXso`NH)t<70zwPtJasx1M~g;87oXZiv&nzDvclj&iv4 z>V{lciAQ+h-761f_YyUEZ9^{>s;p0+#EBW{!;Jqx>Xo3^Qwb8kpa)V|ilh z>Nh{c%suNy2N*zBg!%ss}SjiW{_>jkc$0NNUH4QJ>56p>eg@HZFW6x&f45O zXGm2gsa2dgTy=78NKCGpy>XVjmXi?3_YqaZ#UmK!`o~h&BRMbmcdqRe6@*?!P%@SO znZk$A)+acr;^*TRyF`xN8Dl2p?aBo9?Iu>%g*#Yx4Csd1|H&GUi5=T$;+rgw(vwSb zRS@{9P+WfY%*|6@u6jqh4>Na5HRhL6fD_%A1xuh$5-y6d4&ZqMJI8LNH&$@{IBx6KuYEZOEe z^fhKJmu4Tukx&sVkeLD+cu}4uy9g`5o!&ls!eQlQ*K;+s+A_O5U;ff~6+-csg2&0C zZPR(D(o&ij!~`E74SA+88nE15*)}>NrDKMTY(Fwef6u7SUc$RQj-<&%dpv(fc=+;e zyrfKDUh$wW<=I3cg zY58*nazbUJtG~)pMJJG(68-qSi^9>kmnq~RMu_le9%HrHb5}0O^?RP>zMH@0mPBbSc0KLr%6Q<5k}eQ0QiCchD!NbH52yb!xR{u@)7;S7DjD;j<4xei z(#d7|>q6`6@#-VJqX`M$zZRj-Ccd~xc1%rWKlRo`$JK27T6oh@5Q;HXZ%fhKybduh z6B%F#aD4qv2v67w__C%@^wi(3boJ9o$8Q1>COP@3d^~MD3vEgr%#ut2GD}X6MHaa@ zIkVuNJW^6pYU=9g`T5KB8f;9FpyuivM84Cu$Yn=(s;}&8{4H1{uYlDVD`wN~ z#)$}Rz|hdp;P5abx$1%xpRlkn-2rY^CUtdn>1$ONFLH)v5TFNxwwD_7a4Y3iH=dR+ zzZYAW?R$R#PH55|Vp%lNTCmBu3SmhC_7~`(q^oLgiFx91wSyu)A>Aob#L+sIsPS=^ z_4V~!oTlHnSw)PjX-Ek2%9Sh6^0Y_HYl@1_4Gh?ZW|S5?Iy;+380^ta6X5t?(f zqvS7(t?}efG7qyWfud&vx(>)TEVh`H2@D@_@fog`QBq3S+6v)0q<7-FI{)z7iqf;kw8?o;=I$!q(Q@&kG~<{tFHPi?62S#z-2}szVEm zEmy&^hE=}krV0~u_X7LfP-D|H;XJ7hww{4gJvJ^bCqkN;X^P6q^^GGE#BJ@2OP8Fm z8&TPdP^*{2!yhj9RoIo~MmRb+)Oo*@MEE^TJqK4h(g+OY6?p>zwrLlZb88ty zVGl&_gfP=|$bc_4R4xi)7Nuc27&!C0a}EH-Zfiua@_ zg}e>Az~bd>b9$S>BUaL28S!y0+x?C06}{_yUq(|}smhs7pAbCUqUnaiq45>Lm-$pi zSeHbJp`89BaFDZWcwgI^9!G8BtiW@?ZTB;I6pKO18Ff|DF{t(?QlJnDoSC#l40{FptJHvW>>ur?zg&44?T>(UCN`zGIer z%TRtexAl}!0-4VPPrHU?tE;{z$q^H&e)}`>Gz+144;hOf1>^skkwQCN zt)(0&yR@L$gDr?woaB_dU%DQ!P+?ZAbokkEon`DPMYoTH;zyDOrKWwd$Mj?PBFDc3 z^N2MbOrXR@c?HCY6cc!4QR=|qm$(_FER6O*y8MxB8?@Y{B;f(^xF?@X0~ZX?r#in~ z+7zD?f4!Fbwnws4T29sGKm&+WV)w8m$u#Hi`R_p{Qcu9_6((b_XXU2N95B{uloEFg zvJK=Eh{kIWc5=dt8MKl(nR(9!x#40((ZhIFVKV7+y8^b9BqlJ IF>*imKN^@!mH+?% literal 0 HcmV?d00001 diff --git a/firefox/manifest.json b/firefox/manifest.json new file mode 100644 index 0000000..0fd9f25 --- /dev/null +++ b/firefox/manifest.json @@ -0,0 +1,41 @@ +{ + "description": "Blocks Ads on Twitch.tv.", + "manifest_version": 2, + "name": "Twitch Adblock", + "version": "5.3.7", + "icons": { + "48": "icons/twitch-adblock-48x48.png", + "96": "icons/twitch-adblock-96x96.png" + }, + "browser_action": { + "default_icon": "icons/twitch-adblock-32x32.png", + "default_title": "Twitch Adblock", + "default_popup": "popup/index.html" + }, + "options_ui": { + "page": "popup/index.html", + "browser_style": false, + "chrome_style": false + }, + "permissions": [ + "webRequest", + "webRequestBlocking", + "storage", + "https://*.twitch.tv/*", + "https://*.amazon-adsystem.com/*","https://cdn.krxd.net/*","https://script.ioam.de/iam.js","https://edge.quantserve.com/quant.js","https://ddacn6pr5v0tl.cloudfront.net/custom-moat-video-native.min.js","https://d2v02itv0y9u9t.cloudfront.net/dist/1.0.5/v6s.js","https://*.imrworldwide.com/*","https://countess.twitch.tv/*","https://*.scorecardresearch.com/*","https://www.googletagservices.com/tag/js/gpt.js","*://*.branch.io/*","*://comscore.com/*" + ], + "browser_specific_settings": { + "gecko": { + "id": "{3385c2d8-dcfd-4f92-adb7-5d8429dee164}", + "strict_min_version": "57.0" + } + }, + "background": { + "scripts": ["background.js"] + }, + "content_scripts": [{ + "matches": ["https://*.twitch.tv/*"], + "run_at": "document_start", + "js": ["content.js"] + }] +} \ No newline at end of file diff --git a/firefox/popup/discord.png b/firefox/popup/discord.png new file mode 100644 index 0000000000000000000000000000000000000000..b64ccca42b46c19ddc63067b25f993b29eca88d1 GIT binary patch literal 54403 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 yi~pr+NW+KKFmsCPzsC literal 0 HcmV?d00001 diff --git a/firefox/popup/github.png b/firefox/popup/github.png new file mode 100644 index 0000000000000000000000000000000000000000..c7a5e903c55c86c01151e5d790fc05522111d062 GIT binary patch literal 16417 zcmbWe2RK|^7btvY#t>}~H5k1_CweD(1knl6d!6V(7->i%WRj2|2$C3e^v+2#k(VHm z=yf7R8%!cf)c<(D_j{jv|L5NSKL7PRIA@==*IsR}z4qE`r(du%VWi`x0|0>0%+$~Z z0N~Ig95_J@{rep^ybJxK#h5xr0synv@h|Lp(|L9PK%NY=bBc1ZIIrOy9xChU6Yk|J z8yAX!paDQjHxA?J9qbz=;N|Nd7^W?>-rg-F5a^>VRZ-FuJ4G1)ikMOmPx3u$) z5B65~5z^HW(2CQ55QO?hc?!gZhJ;0G#AyrtjaLJDK5mv168IY=Dp*@c|9C(FCyNUL z2H_FD0?M)~GTsVGX9QH$WffH9)z2tN3!ITxP?eKcl~YiZkyp@=SJ6;Z7x?E#2pTQI z$4|q?(DphMZh%Y^-doqHK7Cznp@)y1JbF8M!lOWFQEc$SYw{o^di^ zk;4DQVCWm^9TA9$3JebuIL7Gd6&@X>Ed){e9~MF}|Dp|x{6|cXz~tgQF>(sB^2aRw z4d~6D8fWCCG6Q5$XxC8yM>8?<(7+INivMG~nSsHDh;YBa5a>gsjmcR7Ga~~P1$7k_nKQBqf0Jurplxvz?+;1q|6p};5b1Kq zll4Db$o;<={QKMgFtPs&4ta~?$A8@v^zyHx^9_T%TLk3BSZufD06?SB%uwGhE`N0< z_VFeA&ZD2P@n_d>N!r+z3#Hk07N78XOAWt0&g0P?zv?s;yuM>gi0u?AI&oX*+HE_1 zy%X0?cd`nk+}Jf>VPZ}{B>zS#B8}}>8RsZADIESTQ4Th>BRn6`**Hlk8bAX zdiIe&7HLqEu(z}D{AlJ9xCw?nKj1f)oc>J)aM;DW3$oi6lkX<0az1|Y@UqZ0%T4fC z%}UQsEIsbbIc_hQfW5c9hm^<4vzk0Yhc*O5yP2+b zR+Qew-Esm<-(JkSZ<)06{P0Ri{{`iS-H$6QU-!3@6>XUJui}%tp5vlyXwJ7r%yy6& zY*<6VI`jc$ELzbZ8nlphVP;6~R8f35Y{&t8B09kMXvjLhCr>#ED`pwDqIc*i@1Bhn zru=!5QrcDzWEoGT-5*SfC0T8NB~kE&_4q0Jdi_ZbX7hTEE9KW)6sG>D2GP<|Cf3Ixq>bq$(Y2xqJ&kqk*K z&uZ@2d^Tkz02iKy((qFAp0E6tlRIxr(gbUXNeG)&h?THWI7&!ob^S4qkt9)_SO&(X zZz61Dpf9Kwus!Cdhl(lA_`uQ#X^~MnUYh*7RwqwCL1NEn;}(CrGgKDx7?lr4gR1FX zq)*eQmnG=|`%n(d2}*=V&Npcr^giuQGT5AM4acA40LuHg!CrRiH z#$(kkt7Vq*s=^9|IT+$4pY6_{!0sv_;{^fiF`pO}U3)8)mhf3wbs3ULyaG~< zx#h-A!#kfW`L^EDQUQzX4DXw2+?dKJuc6US=uWvoD zSS%xLa#>afPj}(*g1qda`Zd| z{$x~SGHZ@C^!CLbc+n+4*39jECh`*=BO7zFS%U<>z$91W4WwRz7Hvz`IO)wmq6mAS z*ie&eS}H^1Eu`K?6)f?(+K%`8>C?E2VdlkEf2fDH%3etWxuI4hIO*+#zDRW6o%E)6 z_#WzdAmGIkXblE}V!h5H(VxW(d7{{c#PFUFw7(*W32aXZJpM4HR4lWLSX2C@#sLgO zoT%lF&H2WQYiPKX*0hxMjd%GvQctncnB2c9<1qpWNGaPsU1eD_t}Q^=2^gLWBYN?~ zZaf&KqG1WmrnxtgkJP(rftW?)qe60djBvYk5<@YaG-Hw@*+@NY?T6z@8wYV4ra>

K0J%?3Z2aR4JO>^r)or@iVT5>ssR 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 Rd3=fA%*fKP`mD#b{|8R&URwYF literal 0 HcmV?d00001 diff --git a/firefox/popup/index.html b/firefox/popup/index.html new file mode 100644 index 0000000..c70e5b4 --- /dev/null +++ b/firefox/popup/index.html @@ -0,0 +1,114 @@ + + + + + + Twitch Adblock + + + +

+ + + diff --git a/firefox/popup/install.html b/firefox/popup/install.html new file mode 100644 index 0000000..7aaede3 --- /dev/null +++ b/firefox/popup/install.html @@ -0,0 +1,116 @@ + + + + + + Twitch Adblock + + + + + + + diff --git a/firefox/popup/logo.png b/firefox/popup/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..457f42d68d0a6faf025cf519c35b58798f5a1f0d GIT binary patch literal 46608 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 literal 0 HcmV?d00001 diff --git a/firefox/popup/popupjs.js b/firefox/popup/popupjs.js new file mode 100644 index 0000000..8c840e1 --- /dev/null +++ b/firefox/popup/popupjs.js @@ -0,0 +1,54 @@ +"use strict"; + +var onOff = document.querySelector("input[name=checkbox1]"); +var blockingMessage = document.querySelector("input[name=checkbox2]"); + +onOff.addEventListener('change', function() { + saveOptions(); +}); + +blockingMessage.addEventListener('change', function() { + saveOptions(); +}); + +function saveOptions() { + if (document.querySelector("input[name=checkbox1]").checked) { + browser.storage.sync.set({ + onOffTTV: "true" + }); + } else { + browser.storage.sync.set({ + onOffTTV: "false" + }); + } + if (document.querySelector("input[name=checkbox2]").checked) { + browser.storage.sync.set({ + blockingMessageTTV: "true" + }); + } else { + browser.storage.sync.set({ + blockingMessageTTV: "false" + }); + } +} + +function restoreOptions() { + var onOff = browser.storage.sync.get('onOffTTV'); + onOff.then((res) => { + if (res.onOffTTV == "true") { + document.querySelector("input[name=checkbox1]").checked = true; + } else if (res.onOffTTV == "false") { + document.querySelector("input[name=checkbox1]").checked = false; + } + }); + var blockingMessage = browser.storage.sync.get('blockingMessageTTV'); + blockingMessage.then((res) => { + if (res.blockingMessageTTV == "true") { + document.querySelector("input[name=checkbox2]").checked = true; + } else if (res.blockingMessageTTV == "false") { + document.querySelector("input[name=checkbox2]").checked = false; + } + }); +} + +document.addEventListener('DOMContentLoaded', restoreOptions); \ No newline at end of file