diff --git a/toolkit/components/webextensions/ExtensionChild.jsm b/toolkit/components/webextensions/ExtensionChild.jsm index 64bbad4db0..390f9cc93c 100644 --- a/toolkit/components/webextensions/ExtensionChild.jsm +++ b/toolkit/components/webextensions/ExtensionChild.jsm @@ -778,14 +778,28 @@ class ExtensionPageContextChild extends BaseContext { // native, but make the probe harmless in extension pages. if (typeof contentWindow.createImageBitmap == "function") { let nativeCreateImageBitmap = contentWindow.createImageBitmap; + let extensionCreateImageBitmap = function(...args) { + if (args.length == 0) { + return contentWindow.Promise.resolve(null); + } + return nativeCreateImageBitmap.apply(this, args); + }; try { - contentWindow.createImageBitmap = function(...args) { - if (args.length == 0) { - return contentWindow.Promise.resolve(null); - } - return nativeCreateImageBitmap.apply(this, args); - }; - } catch (e) {} + // Window.createImageBitmap is inherited from a WebIDL prototype in + // older UXP builds. Assignment can therefore leave the native + // method in place; define an own property so extension feature probes + // actually reach the compatibility wrapper. + Object.defineProperty(contentWindow, "createImageBitmap", { + configurable: true, + enumerable: true, + writable: true, + value: extensionCreateImageBitmap, + }); + } catch (e) { + try { + contentWindow.createImageBitmap = extensionCreateImageBitmap; + } catch (e2) {} + } } Schemas.exportLazyGetter(contentWindow, "browser", () => {