summaryrefslogtreecommitdiff
path: root/src/content
diff options
context:
space:
mode:
Diffstat (limited to 'src/content')
-rw-r--r--src/content/media.js22
1 files 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);
}