Skip to content

Commit

Permalink
fix: enable webextension-polyfill usage via webpack ProvidePlugin (#351)
Browse files Browse the repository at this point in the history
* Enable usage via `ProvidePlugin`
* Use `globalThis`
* Update lint to forbid `browser` global usage
  • Loading branch information
fregante authored Jan 18, 2022
1 parent 31ed31a commit 780518e
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 7 deletions.
1 change: 1 addition & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
},

"globals": {
"globalThis": true,
},

"rules": {
Expand Down
5 changes: 4 additions & 1 deletion src/.eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@
"env": {
"browser": true,
"node": false,
"webextensions": true,
// Don't use `webextensions` because it enables the browser global.
// We want to use globalThis.browser instead:
// https://github.com/mozilla/webextension-polyfill/pull/351
},
"globals": {
// Allow the `module` global, but not the `require(…)` function
"module": false,
"chrome": true,
},
}
12 changes: 6 additions & 6 deletions src/browser-polyfill.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";

if (typeof browser === "undefined" || Object.getPrototypeOf(browser) !== Object.prototype) {
if (typeof globalThis != "object" || typeof chrome != "object" || !chrome || !chrome.runtime || !chrome.runtime.id) {
throw new Error("This script should only be loaded in a browser extension.");
}

if (typeof globalThis.browser === "undefined" || Object.getPrototypeOf(globalThis.browser) !== Object.prototype) {
const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE = "The message port closed before a response was received.";
const SEND_RESPONSE_DEPRECATION_WARNING = "Returning a Promise is the preferred way to send a reply from an onMessage/onMessageExternal listener, as the sendResponse will be removed from the specs (See https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)";

Expand Down Expand Up @@ -540,13 +544,9 @@ if (typeof browser === "undefined" || Object.getPrototypeOf(browser) !== Object.
return wrapObject(extensionAPIs, staticWrappers, apiMetadata);
};

if (typeof chrome != "object" || !chrome || !chrome.runtime || !chrome.runtime.id) {
throw new Error("This script should only be loaded in a browser extension.");
}

// The build process adds a UMD wrapper around this file, which makes the
// `module` variable available.
module.exports = wrapAPIs(chrome);
} else {
module.exports = browser;
module.exports = globalThis.browser;
}

0 comments on commit 780518e

Please sign in to comment.