UNPKG

48.2 kBSource Map (JSON)View Raw
1{"version":3,"sources":["browser-polyfill.js"],"names":["global","factory","define","amd","exports","module","mod","browser","Object","getPrototypeOf","prototype","extensionAPIs","apiMetadata","keys","length","Error","DefaultWeakMap","WeakMap","constructor","createItem","items","get","key","has","set","isThenable","value","then","makeCallback","promise","metadata","callbackArgs","runtime","lastError","reject","singleCallbackArg","resolve","pluralizeArguments","numArgs","wrapAsyncFunction","name","target","args","minArgs","maxArgs","Promise","fallbackToNoCallback","cbError","console","warn","noCallback","wrapMethod","method","wrapper","Proxy","apply","targetMethod","thisObj","call","hasOwnProperty","Function","bind","wrapObject","wrappers","cache","create","handlers","proxyTarget","prop","defineProperty","configurable","enumerable","desc","Reflect","deleteProperty","wrapEvent","wrapperMap","addListener","listener","hasListener","removeListener","loggedSendResponseDeprecationWarning","onMessageWrappers","message","sender","sendResponse","wrappedSendResponse","result","didCallSendResponse","sendResponsePromise","response","stack","err","isResultThenable","sendPromisedResult","msg","error","__mozWebExtensionPolyfillReject__","catch","wrappedSendMessageCallback","reply","wrappedSendMessage","apiNamespaceObj","wrappedCb","push","sendMessage","staticWrappers","onMessage","onMessageExternal","tabs","settingMetadata","clear","privacy","network","networkPredictionEnabled","webRTCIPHandlingPolicy","services","passwordSavingEnabled","websites","hyperlinkAuditingEnabled","referrersEnabled","chrome"],"mappings":"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","file":"browser-polyfill.min.js","sourcesContent":["(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(\"webextension-polyfill\", [\"module\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module);\n } else {\n var mod = {\n exports: {}\n };\n factory(mod);\n global.browser = mod.exports;\n }\n})(this, function (module) {\n /* webextension-polyfill - v0.4.0 - Wed Feb 06 2019 11:58:31 */\n /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */\n /* vim: set sts=2 sw=2 et tw=80: */\n /* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n \"use strict\";\n\n if (typeof browser === \"undefined\" || Object.getPrototypeOf(browser) !== Object.prototype) {\n const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE = \"The message port closed before a response was received.\";\n 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)\";\n\n // Wrapping the bulk of this polyfill in a one-time-use function is a minor\n // optimization for Firefox. Since Spidermonkey does not fully parse the\n // contents of a function until the first time it's called, and since it will\n // never actually need to be called, this allows the polyfill to be included\n // in Firefox nearly for free.\n const wrapAPIs = extensionAPIs => {\n // NOTE: apiMetadata is associated to the content of the api-metadata.json file\n // at build time by replacing the following \"include\" with the content of the\n // JSON file.\n const apiMetadata = {\n \"alarms\": {\n \"clear\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"clearAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"bookmarks\": {\n \"create\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getChildren\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getRecent\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getSubTree\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getTree\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"move\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeTree\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"search\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n },\n \"browserAction\": {\n \"disable\": {\n \"minArgs\": 0,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"enable\": {\n \"minArgs\": 0,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"getBadgeBackgroundColor\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getBadgeText\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"openPopup\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"setBadgeBackgroundColor\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setBadgeText\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setIcon\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"setPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n }\n },\n \"browsingData\": {\n \"remove\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"removeCache\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeCookies\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeDownloads\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeFormData\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeHistory\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeLocalStorage\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removePasswords\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removePluginData\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"settings\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"commands\": {\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"contextMenus\": {\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n },\n \"cookies\": {\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAllCookieStores\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"set\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"devtools\": {\n \"inspectedWindow\": {\n \"eval\": {\n \"minArgs\": 1,\n \"maxArgs\": 2,\n \"singleCallbackArg\": false\n }\n },\n \"panels\": {\n \"create\": {\n \"minArgs\": 3,\n \"maxArgs\": 3,\n \"singleCallbackArg\": true\n }\n }\n },\n \"downloads\": {\n \"cancel\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"download\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"erase\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getFileIcon\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"open\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"pause\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeFile\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"resume\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"search\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"show\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n }\n },\n \"extension\": {\n \"isAllowedFileSchemeAccess\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"isAllowedIncognitoAccess\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"history\": {\n \"addUrl\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"deleteAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"deleteRange\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"deleteUrl\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getVisits\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"search\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"i18n\": {\n \"detectLanguage\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAcceptLanguages\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"identity\": {\n \"launchWebAuthFlow\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"idle\": {\n \"queryState\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"management\": {\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getSelf\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"setEnabled\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"uninstallSelf\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n }\n },\n \"notifications\": {\n \"clear\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"create\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getPermissionLevel\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n },\n \"pageAction\": {\n \"getPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"hide\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setIcon\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"setPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"show\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n }\n },\n \"permissions\": {\n \"contains\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"request\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"runtime\": {\n \"getBackgroundPage\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getBrowserInfo\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getPlatformInfo\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"openOptionsPage\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"requestUpdateCheck\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"sendMessage\": {\n \"minArgs\": 1,\n \"maxArgs\": 3\n },\n \"sendNativeMessage\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"setUninstallURL\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"sessions\": {\n \"getDevices\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getRecentlyClosed\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"restore\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n }\n },\n \"storage\": {\n \"local\": {\n \"clear\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getBytesInUse\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"set\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"managed\": {\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getBytesInUse\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n }\n },\n \"sync\": {\n \"clear\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getBytesInUse\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"set\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n }\n },\n \"tabs\": {\n \"captureVisibleTab\": {\n \"minArgs\": 0,\n \"maxArgs\": 2\n },\n \"create\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"detectLanguage\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"discard\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"duplicate\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"executeScript\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getCurrent\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getZoom\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getZoomSettings\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"highlight\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"insertCSS\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"move\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"query\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"reload\": {\n \"minArgs\": 0,\n \"maxArgs\": 2\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeCSS\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"sendMessage\": {\n \"minArgs\": 2,\n \"maxArgs\": 3\n },\n \"setZoom\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"setZoomSettings\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"update\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n }\n },\n \"topSites\": {\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"webNavigation\": {\n \"getAllFrames\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getFrame\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"webRequest\": {\n \"handlerBehaviorChanged\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"windows\": {\n \"create\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getCurrent\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getLastFocused\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n }\n };\n\n if (Object.keys(apiMetadata).length === 0) {\n throw new Error(\"api-metadata.json has not been included in browser-polyfill\");\n }\n\n /**\n * A WeakMap subclass which creates and stores a value for any key which does\n * not exist when accessed, but behaves exactly as an ordinary WeakMap\n * otherwise.\n *\n * @param {function} createItem\n * A function which will be called in order to create the value for any\n * key which does not exist, the first time it is accessed. The\n * function receives, as its only argument, the key being created.\n */\n class DefaultWeakMap extends WeakMap {\n constructor(createItem, items = undefined) {\n super(items);\n this.createItem = createItem;\n }\n\n get(key) {\n if (!this.has(key)) {\n this.set(key, this.createItem(key));\n }\n\n return super.get(key);\n }\n }\n\n /**\n * Returns true if the given object is an object with a `then` method, and can\n * therefore be assumed to behave as a Promise.\n *\n * @param {*} value The value to test.\n * @returns {boolean} True if the value is thenable.\n */\n const isThenable = value => {\n return value && typeof value === \"object\" && typeof value.then === \"function\";\n };\n\n /**\n * Creates and returns a function which, when called, will resolve or reject\n * the given promise based on how it is called:\n *\n * - If, when called, `chrome.runtime.lastError` contains a non-null object,\n * the promise is rejected with that value.\n * - If the function is called with exactly one argument, the promise is\n * resolved to that value.\n * - Otherwise, the promise is resolved to an array containing all of the\n * function's arguments.\n *\n * @param {object} promise\n * An object containing the resolution and rejection functions of a\n * promise.\n * @param {function} promise.resolve\n * The promise's resolution function.\n * @param {function} promise.rejection\n * The promise's rejection function.\n * @param {object} metadata\n * Metadata about the wrapped method which has created the callback.\n * @param {integer} metadata.maxResolvedArgs\n * The maximum number of arguments which may be passed to the\n * callback created by the wrapped async function.\n *\n * @returns {function}\n * The generated callback function.\n */\n const makeCallback = (promise, metadata) => {\n return (...callbackArgs) => {\n if (extensionAPIs.runtime.lastError) {\n promise.reject(extensionAPIs.runtime.lastError);\n } else if (metadata.singleCallbackArg || callbackArgs.length <= 1 && metadata.singleCallbackArg !== false) {\n promise.resolve(callbackArgs[0]);\n } else {\n promise.resolve(callbackArgs);\n }\n };\n };\n\n const pluralizeArguments = numArgs => numArgs == 1 ? \"argument\" : \"arguments\";\n\n /**\n * Creates a wrapper function for a method with the given name and metadata.\n *\n * @param {string} name\n * The name of the method which is being wrapped.\n * @param {object} metadata\n * Metadata about the method being wrapped.\n * @param {integer} metadata.minArgs\n * The minimum number of arguments which must be passed to the\n * function. If called with fewer than this number of arguments, the\n * wrapper will raise an exception.\n * @param {integer} metadata.maxArgs\n * The maximum number of arguments which may be passed to the\n * function. If called with more than this number of arguments, the\n * wrapper will raise an exception.\n * @param {integer} metadata.maxResolvedArgs\n * The maximum number of arguments which may be passed to the\n * callback created by the wrapped async function.\n *\n * @returns {function(object, ...*)}\n * The generated wrapper function.\n */\n const wrapAsyncFunction = (name, metadata) => {\n return function asyncFunctionWrapper(target, ...args) {\n if (args.length < metadata.minArgs) {\n throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);\n }\n\n if (args.length > metadata.maxArgs) {\n throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);\n }\n\n return new Promise((resolve, reject) => {\n if (metadata.fallbackToNoCallback) {\n // This API method has currently no callback on Chrome, but it return a promise on Firefox,\n // and so the polyfill will try to call it with a callback first, and it will fallback\n // to not passing the callback if the first call fails.\n try {\n target[name](...args, makeCallback({ resolve, reject }, metadata));\n } catch (cbError) {\n console.warn(`${name} API method doesn't seem to support the callback parameter, ` + \"falling back to call it without a callback: \", cbError);\n\n target[name](...args);\n\n // Update the API method metadata, so that the next API calls will not try to\n // use the unsupported callback anymore.\n metadata.fallbackToNoCallback = false;\n metadata.noCallback = true;\n\n resolve();\n }\n } else if (metadata.noCallback) {\n target[name](...args);\n resolve();\n } else {\n target[name](...args, makeCallback({ resolve, reject }, metadata));\n }\n });\n };\n };\n\n /**\n * Wraps an existing method of the target object, so that calls to it are\n * intercepted by the given wrapper function. The wrapper function receives,\n * as its first argument, the original `target` object, followed by each of\n * the arguments passed to the original method.\n *\n * @param {object} target\n * The original target object that the wrapped method belongs to.\n * @param {function} method\n * The method being wrapped. This is used as the target of the Proxy\n * object which is created to wrap the method.\n * @param {function} wrapper\n * The wrapper function which is called in place of a direct invocation\n * of the wrapped method.\n *\n * @returns {Proxy<function>}\n * A Proxy object for the given method, which invokes the given wrapper\n * method in its place.\n */\n const wrapMethod = (target, method, wrapper) => {\n return new Proxy(method, {\n apply(targetMethod, thisObj, args) {\n return wrapper.call(thisObj, target, ...args);\n }\n });\n };\n\n let hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty);\n\n /**\n * Wraps an object in a Proxy which intercepts and wraps certain methods\n * based on the given `wrappers` and `metadata` objects.\n *\n * @param {object} target\n * The target object to wrap.\n *\n * @param {object} [wrappers = {}]\n * An object tree containing wrapper functions for special cases. Any\n * function present in this object tree is called in place of the\n * method in the same location in the `target` object tree. These\n * wrapper methods are invoked as described in {@see wrapMethod}.\n *\n * @param {object} [metadata = {}]\n * An object tree containing metadata used to automatically generate\n * Promise-based wrapper functions for asynchronous. Any function in\n * the `target` object tree which has a corresponding metadata object\n * in the same location in the `metadata` tree is replaced with an\n * automatically-generated wrapper function, as described in\n * {@see wrapAsyncFunction}\n *\n * @returns {Proxy<object>}\n */\n const wrapObject = (target, wrappers = {}, metadata = {}) => {\n let cache = Object.create(null);\n let handlers = {\n has(proxyTarget, prop) {\n return prop in target || prop in cache;\n },\n\n get(proxyTarget, prop, receiver) {\n if (prop in cache) {\n return cache[prop];\n }\n\n if (!(prop in target)) {\n return undefined;\n }\n\n let value = target[prop];\n\n if (typeof value === \"function\") {\n // This is a method on the underlying object. Check if we need to do\n // any wrapping.\n\n if (typeof wrappers[prop] === \"function\") {\n // We have a special-case wrapper for this method.\n value = wrapMethod(target, target[prop], wrappers[prop]);\n } else if (hasOwnProperty(metadata, prop)) {\n // This is an async method that we have metadata for. Create a\n // Promise wrapper for it.\n let wrapper = wrapAsyncFunction(prop, metadata[prop]);\n value = wrapMethod(target, target[prop], wrapper);\n } else {\n // This is a method that we don't know or care about. Return the\n // original method, bound to the underlying object.\n value = value.bind(target);\n }\n } else if (typeof value === \"object\" && value !== null && (hasOwnProperty(wrappers, prop) || hasOwnProperty(metadata, prop))) {\n // This is an object that we need to do some wrapping for the children\n // of. Create a sub-object wrapper for it with the appropriate child\n // metadata.\n value = wrapObject(value, wrappers[prop], metadata[prop]);\n } else {\n // We don't need to do any wrapping for this property,\n // so just forward all access to the underlying object.\n Object.defineProperty(cache, prop, {\n configurable: true,\n enumerable: true,\n get() {\n return target[prop];\n },\n set(value) {\n target[prop] = value;\n }\n });\n\n return value;\n }\n\n cache[prop] = value;\n return value;\n },\n\n set(proxyTarget, prop, value, receiver) {\n if (prop in cache) {\n cache[prop] = value;\n } else {\n target[prop] = value;\n }\n return true;\n },\n\n defineProperty(proxyTarget, prop, desc) {\n return Reflect.defineProperty(cache, prop, desc);\n },\n\n deleteProperty(proxyTarget, prop) {\n return Reflect.deleteProperty(cache, prop);\n }\n };\n\n // Per contract of the Proxy API, the \"get\" proxy handler must return the\n // original value of the target if that value is declared read-only and\n // non-configurable. For this reason, we create an object with the\n // prototype set to `target` instead of using `target` directly.\n // Otherwise we cannot return a custom object for APIs that\n // are declared read-only and non-configurable, such as `chrome.devtools`.\n //\n // The proxy handlers themselves will still use the original `target`\n // instead of the `proxyTarget`, so that the methods and properties are\n // dereferenced via the original targets.\n let proxyTarget = Object.create(target);\n return new Proxy(proxyTarget, handlers);\n };\n\n /**\n * Creates a set of wrapper functions for an event object, which handles\n * wrapping of listener functions that those messages are passed.\n *\n * A single wrapper is created for each listener function, and stored in a\n * map. Subsequent calls to `addListener`, `hasListener`, or `removeListener`\n * retrieve the original wrapper, so that attempts to remove a\n * previously-added listener work as expected.\n *\n * @param {DefaultWeakMap<function, function>} wrapperMap\n * A DefaultWeakMap object which will create the appropriate wrapper\n * for a given listener function when one does not exist, and retrieve\n * an existing one when it does.\n *\n * @returns {object}\n */\n const wrapEvent = wrapperMap => ({\n addListener(target, listener, ...args) {\n target.addListener(wrapperMap.get(listener), ...args);\n },\n\n hasListener(target, listener) {\n return target.hasListener(wrapperMap.get(listener));\n },\n\n removeListener(target, listener) {\n target.removeListener(wrapperMap.get(listener));\n }\n });\n\n // Keep track if the deprecation warning has been logged at least once.\n let loggedSendResponseDeprecationWarning = false;\n\n const onMessageWrappers = new DefaultWeakMap(listener => {\n if (typeof listener !== \"function\") {\n return listener;\n }\n\n /**\n * Wraps a message listener function so that it may send responses based on\n * its return value, rather than by returning a sentinel value and calling a\n * callback. If the listener function returns a Promise, the response is\n * sent when the promise either resolves or rejects.\n *\n * @param {*} message\n * The message sent by the other end of the channel.\n * @param {object} sender\n * Details about the sender of the message.\n * @param {function(*)} sendResponse\n * A callback which, when called with an arbitrary argument, sends\n * that value as a response.\n * @returns {boolean}\n * True if the wrapped listener returned a Promise, which will later\n * yield a response. False otherwise.\n */\n return function onMessage(message, sender, sendResponse) {\n let didCallSendResponse = false;\n\n let wrappedSendResponse;\n let sendResponsePromise = new Promise(resolve => {\n wrappedSendResponse = function (response) {\n if (!loggedSendResponseDeprecationWarning) {\n console.warn(SEND_RESPONSE_DEPRECATION_WARNING, new Error().stack);\n loggedSendResponseDeprecationWarning = true;\n }\n didCallSendResponse = true;\n resolve(response);\n };\n });\n\n let result;\n try {\n result = listener(message, sender, wrappedSendResponse);\n } catch (err) {\n result = Promise.reject(err);\n }\n\n const isResultThenable = result !== true && isThenable(result);\n\n // If the listener didn't returned true or a Promise, or called\n // wrappedSendResponse synchronously, we can exit earlier\n // because there will be no response sent from this listener.\n if (result !== true && !isResultThenable && !didCallSendResponse) {\n return false;\n }\n\n // A small helper to send the message if the promise resolves\n // and an error if the promise rejects (a wrapped sendMessage has\n // to translate the message into a resolved promise or a rejected\n // promise).\n const sendPromisedResult = promise => {\n promise.then(msg => {\n // send the message value.\n sendResponse(msg);\n }, error => {\n // Send a JSON representation of the error if the rejected value\n // is an instance of error, or the object itself otherwise.\n let message;\n if (error && (error instanceof Error || typeof error.message === \"string\")) {\n message = error.message;\n } else {\n message = \"An unexpected error occurred\";\n }\n\n sendResponse({\n __mozWebExtensionPolyfillReject__: true,\n message\n });\n }).catch(err => {\n // Print an error on the console if unable to send the response.\n console.error(\"Failed to send onMessage rejected reply\", err);\n });\n };\n\n // If the listener returned a Promise, send the resolved value as a\n // result, otherwise wait the promise related to the wrappedSendResponse\n // callback to resolve and send it as a response.\n if (isResultThenable) {\n sendPromisedResult(result);\n } else {\n sendPromisedResult(sendResponsePromise);\n }\n\n // Let Chrome know that the listener is replying.\n return true;\n };\n });\n\n const wrappedSendMessageCallback = ({ reject, resolve }, reply) => {\n if (extensionAPIs.runtime.lastError) {\n // Detect when none of the listeners replied to the sendMessage call and resolve\n // the promise to undefined as in Firefox.\n // See https://github.com/mozilla/webextension-polyfill/issues/130\n if (extensionAPIs.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) {\n resolve();\n } else {\n reject(extensionAPIs.runtime.lastError);\n }\n } else if (reply && reply.__mozWebExtensionPolyfillReject__) {\n // Convert back the JSON representation of the error into\n // an Error instance.\n reject(new Error(reply.message));\n } else {\n resolve(reply);\n }\n };\n\n const wrappedSendMessage = (name, metadata, apiNamespaceObj, ...args) => {\n if (args.length < metadata.minArgs) {\n throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);\n }\n\n if (args.length > metadata.maxArgs) {\n throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);\n }\n\n return new Promise((resolve, reject) => {\n const wrappedCb = wrappedSendMessageCallback.bind(null, { resolve, reject });\n args.push(wrappedCb);\n apiNamespaceObj.sendMessage(...args);\n });\n };\n\n const staticWrappers = {\n runtime: {\n onMessage: wrapEvent(onMessageWrappers),\n onMessageExternal: wrapEvent(onMessageWrappers),\n sendMessage: wrappedSendMessage.bind(null, \"sendMessage\", { minArgs: 1, maxArgs: 3 })\n },\n tabs: {\n sendMessage: wrappedSendMessage.bind(null, \"sendMessage\", { minArgs: 2, maxArgs: 3 })\n }\n };\n const settingMetadata = {\n clear: { minArgs: 1, maxArgs: 1 },\n get: { minArgs: 1, maxArgs: 1 },\n set: { minArgs: 1, maxArgs: 1 }\n };\n apiMetadata.privacy = {\n network: {\n networkPredictionEnabled: settingMetadata,\n webRTCIPHandlingPolicy: settingMetadata\n },\n services: {\n passwordSavingEnabled: settingMetadata\n },\n websites: {\n hyperlinkAuditingEnabled: settingMetadata,\n referrersEnabled: settingMetadata\n }\n };\n\n return wrapObject(extensionAPIs, staticWrappers, apiMetadata);\n };\n\n // The build process adds a UMD wrapper around this file, which makes the\n // `module` variable available.\n module.exports = wrapAPIs(chrome);\n } else {\n module.exports = browser;\n }\n});\n//# sourceMappingURL=browser-polyfill.js.map\n"]}
\No newline at end of file