From cc7d160d07053fb48c729ad4b7724c9e910c8947 Mon Sep 17 00:00:00 2001 From: David Wendt Date: Wed, 15 Feb 2023 19:56:36 -0500 Subject: [PATCH] web: Automatically inject plugin-polyfill.ts into content.ts as a string. The prior version of this code used a hardcoded copy of the script. Not only is this an outdated version of the code, this also caused us to fail our addons.mozilla.org audit. --- web/packages/extension/package.json | 4 ++-- web/packages/extension/src/content.ts | 8 ++++---- .../extension/tools/inject_plugin_polyfill.js | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 web/packages/extension/tools/inject_plugin_polyfill.js diff --git a/web/packages/extension/package.json b/web/packages/extension/package.json index 141274d9c..3145b45cf 100644 --- a/web/packages/extension/package.json +++ b/web/packages/extension/package.json @@ -6,8 +6,8 @@ "private": true, "scripts": { "build": "npm run build:generic && npm run build:firefox", - "build:generic": "webpack --env generic && node tools/zip.js dist/ruffle_extension.zip", - "build:firefox": "webpack --env firefox && node tools/zip.js dist/firefox_unsigned.xpi && npm run sign-firefox", + "build:generic": "webpack --env generic && node tools/inject_plugin_polyfill.js && node tools/zip.js dist/ruffle_extension.zip", + "build:firefox": "webpack --env firefox && node tools/inject_plugin_polyfill.js && node tools/zip.js dist/firefox_unsigned.xpi && npm run sign-firefox", "sign-firefox": "node tools/sign_xpi.js dist/firefox_unsigned.xpi dist/firefox.xpi" }, "dependencies": { diff --git a/web/packages/extension/src/content.ts b/web/packages/extension/src/content.ts index 6e2bf540f..f7b3d9af3 100644 --- a/web/packages/extension/src/content.ts +++ b/web/packages/extension/src/content.ts @@ -141,10 +141,10 @@ function isXMLDocument(): boolean { // 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). - // TODO: use plugin-polyfill.ts - injectScriptRaw( - '(function(){class RuffleMimeType{constructor(a,b,c){this.type=a,this.description=b,this.suffixes=c}}class RuffleMimeTypeArray{constructor(a){this.__mimetypes=[],this.__named_mimetypes={};for(let b of a)this.install(b)}install(a){let b=this.__mimetypes.length;this.__mimetypes.push(a),this.__named_mimetypes[a.type]=a,this[a.type]=a,this[b]=a}item(a){return this.__mimetypes[a]}namedItem(a){return this.__named_mimetypes[a]}get length(){return this.__mimetypes.length}}class RufflePlugin extends RuffleMimeTypeArray{constructor(a,b,c,d){super(d),this.name=a,this.description=b,this.filename=c}install(a){a.enabledPlugin||(a.enabledPlugin=this),super.install(a)}}class RufflePluginArray{[Symbol.iterator](){return this.__plugins[Symbol.iterator]()}constructor(a){this.__plugins=[],this.__named_plugins={};for(let b of a)this.install(b)}install(a){let b=this.__plugins.length;this.__plugins.push(a),this.__named_plugins[a.name]=a,this[a.name]=a,this[b]=a}item(a){return this.__plugins[a]}namedItem(a){return this.__named_plugins[a]}refresh(){}get length(){return this.__plugins.length}}const FLASH_PLUGIN=new RufflePlugin("Shockwave Flash","Shockwave Flash 32.0 r0","ruffle.js",[new RuffleMimeType("application/futuresplash","Shockwave Flash","spl"),new RuffleMimeType("application/x-shockwave-flash","Shockwave Flash","swf"),new RuffleMimeType("application/x-shockwave-flash2-preview","Shockwave Flash","swf"),new RuffleMimeType("application/vnd.adobe.flash.movie","Shockwave Flash","swf")]);function install_plugin(a){navigator.plugins.install||Object.defineProperty(navigator,"plugins",{value:new RufflePluginArray(navigator.plugins),writable:!1}),navigator.plugins.install(a),0