From 12dee2199e41146017a0435ea30fac4ff2b57b1c Mon Sep 17 00:00:00 2001 From: relrelb Date: Thu, 11 Mar 2021 22:09:51 +0200 Subject: [PATCH] web: Pass obfuscatedEventPrefix via query string This eliminates the need to create a script dynamically, and fixes publicPath() to correctly return the extension URL rather than the host site URL. --- web/packages/extension/js/index.js | 19 +++++++++++++++++++ web/packages/extension/js/lv0.js | 25 +++++++------------------ web/packages/extension/js/util.js | 10 +++------- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/web/packages/extension/js/index.js b/web/packages/extension/js/index.js index 95f57a159..575a3efa2 100644 --- a/web/packages/extension/js/index.js +++ b/web/packages/extension/js/index.js @@ -7,6 +7,25 @@ window.RufflePlayer = PublicAPI.negotiate( ); __webpack_public_path__ = publicPath(window.RufflePlayer.config, "extension"); +function getObfuscatedEventPrefix() { + if ( + document.currentScript !== undefined && + document.currentScript !== null && + "src" in document.currentScript && + document.currentScript.src !== "" + ) { + // Default to the directory where this script resides. + try { + return new URL(document.currentScript.src).searchParams.get( + "obfuscatedEventPrefix" + ); + } catch (e) { + return null; + } + } +} + +const obfuscatedEventPrefix = getObfuscatedEventPrefix(); if (obfuscatedEventPrefix) { document.addEventListener(obfuscatedEventPrefix + "_request", function (e) { let body = JSON.parse(e.detail); diff --git a/web/packages/extension/js/lv0.js b/web/packages/extension/js/lv0.js index d9b7209bd..d815a97ef 100644 --- a/web/packages/extension/js/lv0.js +++ b/web/packages/extension/js/lv0.js @@ -139,8 +139,6 @@ getSyncStorage(["ruffleEnable", "ignoreOptout"], function (data) { } }); - const extPath = getExtensionUrl(); - if (shouldLoadUntrustedWorld) { // We must run the plugin polyfill before any flash detection scripts. // Unfortunately, this might still be too late for some websites when using Chrome (issue #969). @@ -151,22 +149,13 @@ getSyncStorage(["ruffleEnable", "ignoreOptout"], function (data) { // Load Ruffle script asynchronously. By doing so, we can inject extra variables and isolate them from the global scope. (async function () { - let ruffleSrcResp = await fetch(extPath + "dist/ruffle.js"); - if (ruffleSrcResp.ok) { - let ruffleSource = - '(function () { var obfuscatedEventPrefix = "' + - obfuscatedEventPrefix + - '";\n' + - (await ruffleSrcResp.text()) + - "}())"; - let ruffleScript = document.createElement("script"); - ruffleScript.appendChild(document.createTextNode(ruffleSource)); - (document.head || document.documentElement).appendChild( - ruffleScript - ); - } else { - console.error("Critical error loading Ruffle into page"); - } + const ruffleScript = document.createElement("script"); + ruffleScript.src = getExtensionUrl( + `dist/ruffle.js?obfuscatedEventPrefix=${obfuscatedEventPrefix}` + ); + (document.head || document.documentElement).appendChild( + ruffleScript + ); })(); } }); diff --git a/web/packages/extension/js/util.js b/web/packages/extension/js/util.js index 9bf8e7fe7..67284272d 100644 --- a/web/packages/extension/js/util.js +++ b/web/packages/extension/js/util.js @@ -213,15 +213,11 @@ function setMessageListener(listener) { } } -function getExtensionUrl() { +function getExtensionUrl(path) { if (chrome && chrome.extension && chrome.extension.getURL) { - return chrome.extension - .getURL("dist/ruffle.js") - .replace("dist/ruffle.js", ""); + return chrome.extension.getURL(path); } else if (browser && browser.runtime && browser.runtime.getURL) { - return browser.runtime - .getURL("dist/ruffle.js") - .replace("dist/ruffle.js", ""); + return browser.runtime.getURL(path); } else { console.error("Couldn't get extension URL"); }