diff --git a/src/browser-polyfill.js b/src/browser-polyfill.js index c6cefc9..3ae8c49 100644 --- a/src/browser-polyfill.js +++ b/src/browser-polyfill.js @@ -7,6 +7,13 @@ "use strict"; if (typeof browser === "undefined") { + 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/en-US/Add-ons/WebExtensions/API/runtime/onMessage) + `.replace(/\s+/g, " ").trim(); + // Wrapping the bulk of this polyfill in a one-time-use function is a minor // optimization for Firefox. Since Spidermonkey does not fully parse the // contents of a function until the first time it's called, and since it will @@ -338,6 +345,9 @@ if (typeof browser === "undefined") { }, }); + // Keep track if the deprecation warning has been logged at least once. + let loggedSendResponseDeprecationWarning = false; + const onMessageWrappers = new DefaultWeakMap(listener => { if (typeof listener !== "function") { return listener; @@ -366,6 +376,10 @@ if (typeof browser === "undefined") { let wrappedSendResponse; let sendResponsePromise = new Promise(resolve => { wrappedSendResponse = function(response) { + if (!loggedSendResponseDeprecationWarning) { + console.warn(SEND_RESPONSE_DEPRECATION_WARNING, new Error().stack); + loggedSendResponseDeprecationWarning = true; + } didCallSendResponse = true; resolve(response); };