From 1fc69298f59426cf4cd8bb0f413c66af6a68faab Mon Sep 17 00:00:00 2001 From: hackademix Date: Sat, 16 Nov 2019 19:05:02 +0100 Subject: [PATCH] [Chromium] Prevent duplicated MSE placeholders (e.g. on Youtube). --- src/content/media.js | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/content/media.js b/src/content/media.js index ae438f9..5c258f2 100644 --- a/src/content/media.js +++ b/src/content/media.js @@ -67,16 +67,24 @@ if ("MediaSource" in window) { } else if ("SecurityPolicyViolationEvent" in window) { // Chromium + let createPlaceholders = () => { + let request = notify(false); + for (let me of document.querySelectorAll("video,audio")) { + if (!(me.src || me.currentSrc) || me.src.startsWith("blob")) { + createPlaceholder(me, request); + } + } + } + let processedURIs = new Set(); + let whenReady = false; addEventListener("securitypolicyviolation", e => { if (!e.isTrusted || ns.allows("media")) return; let {blockedURI, violatedDirective} = e; - if (blockedURI.startsWith("blob") && violatedDirective.startsWith("media-src")) { - let request = notify(false); - for (let me of document.querySelectorAll("video,audio")) { - if (!(me.src || me.currentSrc) || me.src.startsWith("blob")) { - createPlaceholder(me, request); - } - } + if (blockedURI.startsWith("blob") && + violatedDirective.startsWith("media-src") && + !processedURIs.has(blockedURI)) { + processedURIs.add(blockedURI); + setTimeout(createPlaceholders, 0); } }, true); }