webextension-messages 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,1240 +4,31 @@
4
4
  else if(typeof define === 'function' && define.amd)
5
5
  define([], factory);
6
6
  else if(typeof exports === 'object')
7
- exports["WMessages"] = factory();
7
+ exports["WebextensionMessages"] = factory();
8
8
  else
9
- root["WMessages"] = factory();
9
+ root["WebextensionMessages"] = factory();
10
10
  })(this, () => {
11
11
  return /******/ (() => { // webpackBootstrap
12
12
  /******/ var __webpack_modules__ = ({
13
13
 
14
- /***/ "./node_modules/webextension-polyfill/dist/browser-polyfill.js"
15
- /*!*********************************************************************!*\
16
- !*** ./node_modules/webextension-polyfill/dist/browser-polyfill.js ***!
17
- \*********************************************************************/
14
+ /***/ "./node_modules/webextension-polyfill/dist/browser-polyfill.min.js"
15
+ /*!*************************************************************************!*\
16
+ !*** ./node_modules/webextension-polyfill/dist/browser-polyfill.min.js ***!
17
+ \*************************************************************************/
18
18
  (module, exports) {
19
19
 
20
- var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
21
- if (true) {
22
- !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
20
+ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(a,b){if(true)!(__WEBPACK_AMD_DEFINE_ARRAY__ = [module], __WEBPACK_AMD_DEFINE_FACTORY__ = (b),
23
21
  __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
24
22
  (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
25
- __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
26
- } else // removed by dead control flow
27
- { var mod; }
28
- })(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (module) {
29
- /* webextension-polyfill - v0.12.0 - Tue May 14 2024 18:01:29 */
30
- /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
31
- /* vim: set sts=2 sw=2 et tw=80: */
32
- /* This Source Code Form is subject to the terms of the Mozilla Public
33
- * License, v. 2.0. If a copy of the MPL was not distributed with this
34
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
35
- "use strict";
23
+ __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // removed by dead control flow
24
+ { var c; }})("undefined"==typeof globalThis?"undefined"==typeof self?this:self:globalThis,function(a){"use strict";if(!(globalThis.chrome&&globalThis.chrome.runtime&&globalThis.chrome.runtime.id))throw new Error("This script should only be loaded in a browser extension.");if(!(globalThis.browser&&globalThis.browser.runtime&&globalThis.browser.runtime.id)){a.exports=(a=>{const b={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2,singleCallbackArg:!1}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0},elements:{createSidebarPane:{minArgs:1,maxArgs:1}}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArgs:0,maxArgs:1},duplicate:{minArgs:1,maxArgs:1},executeScript:{minArgs:1,maxArgs:2},get:{minArgs:1,maxArgs:1},getCurrent:{minArgs:0,maxArgs:0},getZoom:{minArgs:0,maxArgs:1},getZoomSettings:{minArgs:0,maxArgs:1},goBack:{minArgs:0,maxArgs:1},goForward:{minArgs:0,maxArgs:1},highlight:{minArgs:1,maxArgs:1},insertCSS:{minArgs:1,maxArgs:2},move:{minArgs:2,maxArgs:2},query:{minArgs:1,maxArgs:1},reload:{minArgs:0,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeCSS:{minArgs:1,maxArgs:2},sendMessage:{minArgs:2,maxArgs:3},setZoom:{minArgs:1,maxArgs:2},setZoomSettings:{minArgs:1,maxArgs:2},update:{minArgs:1,maxArgs:2}},topSites:{get:{minArgs:0,maxArgs:0}},webNavigation:{getAllFrames:{minArgs:1,maxArgs:1},getFrame:{minArgs:1,maxArgs:1}},webRequest:{handlerBehaviorChanged:{minArgs:0,maxArgs:0}},windows:{create:{minArgs:0,maxArgs:1},get:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:1},getCurrent:{minArgs:0,maxArgs:1},getLastFocused:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}}};if(0===Object.keys(b).length)throw new Error("api-metadata.json has not been included in browser-polyfill");class c extends WeakMap{constructor(a,b=void 0){super(b),this.createItem=a}get(a){return this.has(a)||this.set(a,this.createItem(a)),super.get(a)}}const d=a=>a&&"object"==typeof a&&"function"==typeof a.then,e=(b,c)=>(...d)=>{a.runtime.lastError?b.reject(new Error(a.runtime.lastError.message)):c.singleCallbackArg||1>=d.length&&!1!==c.singleCallbackArg?b.resolve(d[0]):b.resolve(d)},f=a=>1==a?"argument":"arguments",g=(a,b)=>function(c,...d){if(d.length<b.minArgs)throw new Error(`Expected at least ${b.minArgs} ${f(b.minArgs)} for ${a}(), got ${d.length}`);if(d.length>b.maxArgs)throw new Error(`Expected at most ${b.maxArgs} ${f(b.maxArgs)} for ${a}(), got ${d.length}`);return new Promise((f,g)=>{if(b.fallbackToNoCallback)try{c[a](...d,e({resolve:f,reject:g},b))}catch(e){console.warn(`${a} API method doesn't seem to support the callback parameter, `+"falling back to call it without a callback: ",e),c[a](...d),b.fallbackToNoCallback=!1,b.noCallback=!0,f()}else b.noCallback?(c[a](...d),f()):c[a](...d,e({resolve:f,reject:g},b))})},h=(a,b,c)=>new Proxy(b,{apply(b,d,e){return c.call(d,a,...e)}});let i=Function.call.bind(Object.prototype.hasOwnProperty);const j=(a,b={},c={})=>{let d=Object.create(null),e=Object.create(a);return new Proxy(e,{has(b,c){return c in a||c in d},get(e,f){if(f in d)return d[f];if(!(f in a))return;let k=a[f];if("function"==typeof k){if("function"==typeof b[f])k=h(a,a[f],b[f]);else if(i(c,f)){let b=g(f,c[f]);k=h(a,a[f],b)}else k=k.bind(a);}else if("object"==typeof k&&null!==k&&(i(b,f)||i(c,f)))k=j(k,b[f],c[f]);else if(i(c,"*"))k=j(k,b[f],c["*"]);else return Object.defineProperty(d,f,{configurable:!0,enumerable:!0,get(){return a[f]},set(b){a[f]=b}}),k;return d[f]=k,k},set(b,c,e){return c in d?d[c]=e:a[c]=e,!0},defineProperty(a,b,c){return Reflect.defineProperty(d,b,c)},deleteProperty(a,b){return Reflect.deleteProperty(d,b)}})},k=a=>({addListener(b,c,...d){b.addListener(a.get(c),...d)},hasListener(b,c){return b.hasListener(a.get(c))},removeListener(b,c){b.removeListener(a.get(c))}}),l=new c(a=>"function"==typeof a?function(b){const c=j(b,{},{getContent:{minArgs:0,maxArgs:0}});a(c)}:a),m=new c(a=>"function"==typeof a?function(b,c,e){let f,g,h=!1,i=new Promise(a=>{f=function(b){h=!0,a(b)}});try{g=a(b,c,f)}catch(a){g=Promise.reject(a)}const j=!0!==g&&d(g);if(!0!==g&&!j&&!h)return!1;const k=a=>{a.then(a=>{e(a)},a=>{let b;b=a&&(a instanceof Error||"string"==typeof a.message)?a.message:"An unexpected error occurred",e({__mozWebExtensionPolyfillReject__:!0,message:b})}).catch(a=>{console.error("Failed to send onMessage rejected reply",a)})};return j?k(g):k(i),!0}:a),n=({reject:b,resolve:c},d)=>{a.runtime.lastError?a.runtime.lastError.message==="The message port closed before a response was received."?c():b(new Error(a.runtime.lastError.message)):d&&d.__mozWebExtensionPolyfillReject__?b(new Error(d.message)):c(d)},o=(a,b,c,...d)=>{if(d.length<b.minArgs)throw new Error(`Expected at least ${b.minArgs} ${f(b.minArgs)} for ${a}(), got ${d.length}`);if(d.length>b.maxArgs)throw new Error(`Expected at most ${b.maxArgs} ${f(b.maxArgs)} for ${a}(), got ${d.length}`);return new Promise((a,b)=>{const e=n.bind(null,{resolve:a,reject:b});d.push(e),c.sendMessage(...d)})},p={devtools:{network:{onRequestFinished:k(l)}},runtime:{onMessage:k(m),onMessageExternal:k(m),sendMessage:o.bind(null,"sendMessage",{minArgs:1,maxArgs:3})},tabs:{sendMessage:o.bind(null,"sendMessage",{minArgs:2,maxArgs:3})}},q={clear:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}};return b.privacy={network:{"*":q},services:{"*":q},websites:{"*":q}},j(a,p,b)})(chrome)}else a.exports=globalThis.browser});
25
+ //# sourceMappingURL=browser-polyfill.min.js.map
36
26
 
37
- if (!(globalThis.chrome && globalThis.chrome.runtime && globalThis.chrome.runtime.id)) {
38
- throw new Error("This script should only be loaded in a browser extension.");
39
- }
40
- if (!(globalThis.browser && globalThis.browser.runtime && globalThis.browser.runtime.id)) {
41
- const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE = "The message port closed before a response was received.";
27
+ // webextension-polyfill v.0.12.0 (https://github.com/mozilla/webextension-polyfill)
42
28
 
43
- // Wrapping the bulk of this polyfill in a one-time-use function is a minor
44
- // optimization for Firefox. Since Spidermonkey does not fully parse the
45
- // contents of a function until the first time it's called, and since it will
46
- // never actually need to be called, this allows the polyfill to be included
47
- // in Firefox nearly for free.
48
- const wrapAPIs = extensionAPIs => {
49
- // NOTE: apiMetadata is associated to the content of the api-metadata.json file
50
- // at build time by replacing the following "include" with the content of the
51
- // JSON file.
52
- const apiMetadata = {
53
- "alarms": {
54
- "clear": {
55
- "minArgs": 0,
56
- "maxArgs": 1
57
- },
58
- "clearAll": {
59
- "minArgs": 0,
60
- "maxArgs": 0
61
- },
62
- "get": {
63
- "minArgs": 0,
64
- "maxArgs": 1
65
- },
66
- "getAll": {
67
- "minArgs": 0,
68
- "maxArgs": 0
69
- }
70
- },
71
- "bookmarks": {
72
- "create": {
73
- "minArgs": 1,
74
- "maxArgs": 1
75
- },
76
- "get": {
77
- "minArgs": 1,
78
- "maxArgs": 1
79
- },
80
- "getChildren": {
81
- "minArgs": 1,
82
- "maxArgs": 1
83
- },
84
- "getRecent": {
85
- "minArgs": 1,
86
- "maxArgs": 1
87
- },
88
- "getSubTree": {
89
- "minArgs": 1,
90
- "maxArgs": 1
91
- },
92
- "getTree": {
93
- "minArgs": 0,
94
- "maxArgs": 0
95
- },
96
- "move": {
97
- "minArgs": 2,
98
- "maxArgs": 2
99
- },
100
- "remove": {
101
- "minArgs": 1,
102
- "maxArgs": 1
103
- },
104
- "removeTree": {
105
- "minArgs": 1,
106
- "maxArgs": 1
107
- },
108
- "search": {
109
- "minArgs": 1,
110
- "maxArgs": 1
111
- },
112
- "update": {
113
- "minArgs": 2,
114
- "maxArgs": 2
115
- }
116
- },
117
- "browserAction": {
118
- "disable": {
119
- "minArgs": 0,
120
- "maxArgs": 1,
121
- "fallbackToNoCallback": true
122
- },
123
- "enable": {
124
- "minArgs": 0,
125
- "maxArgs": 1,
126
- "fallbackToNoCallback": true
127
- },
128
- "getBadgeBackgroundColor": {
129
- "minArgs": 1,
130
- "maxArgs": 1
131
- },
132
- "getBadgeText": {
133
- "minArgs": 1,
134
- "maxArgs": 1
135
- },
136
- "getPopup": {
137
- "minArgs": 1,
138
- "maxArgs": 1
139
- },
140
- "getTitle": {
141
- "minArgs": 1,
142
- "maxArgs": 1
143
- },
144
- "openPopup": {
145
- "minArgs": 0,
146
- "maxArgs": 0
147
- },
148
- "setBadgeBackgroundColor": {
149
- "minArgs": 1,
150
- "maxArgs": 1,
151
- "fallbackToNoCallback": true
152
- },
153
- "setBadgeText": {
154
- "minArgs": 1,
155
- "maxArgs": 1,
156
- "fallbackToNoCallback": true
157
- },
158
- "setIcon": {
159
- "minArgs": 1,
160
- "maxArgs": 1
161
- },
162
- "setPopup": {
163
- "minArgs": 1,
164
- "maxArgs": 1,
165
- "fallbackToNoCallback": true
166
- },
167
- "setTitle": {
168
- "minArgs": 1,
169
- "maxArgs": 1,
170
- "fallbackToNoCallback": true
171
- }
172
- },
173
- "browsingData": {
174
- "remove": {
175
- "minArgs": 2,
176
- "maxArgs": 2
177
- },
178
- "removeCache": {
179
- "minArgs": 1,
180
- "maxArgs": 1
181
- },
182
- "removeCookies": {
183
- "minArgs": 1,
184
- "maxArgs": 1
185
- },
186
- "removeDownloads": {
187
- "minArgs": 1,
188
- "maxArgs": 1
189
- },
190
- "removeFormData": {
191
- "minArgs": 1,
192
- "maxArgs": 1
193
- },
194
- "removeHistory": {
195
- "minArgs": 1,
196
- "maxArgs": 1
197
- },
198
- "removeLocalStorage": {
199
- "minArgs": 1,
200
- "maxArgs": 1
201
- },
202
- "removePasswords": {
203
- "minArgs": 1,
204
- "maxArgs": 1
205
- },
206
- "removePluginData": {
207
- "minArgs": 1,
208
- "maxArgs": 1
209
- },
210
- "settings": {
211
- "minArgs": 0,
212
- "maxArgs": 0
213
- }
214
- },
215
- "commands": {
216
- "getAll": {
217
- "minArgs": 0,
218
- "maxArgs": 0
219
- }
220
- },
221
- "contextMenus": {
222
- "remove": {
223
- "minArgs": 1,
224
- "maxArgs": 1
225
- },
226
- "removeAll": {
227
- "minArgs": 0,
228
- "maxArgs": 0
229
- },
230
- "update": {
231
- "minArgs": 2,
232
- "maxArgs": 2
233
- }
234
- },
235
- "cookies": {
236
- "get": {
237
- "minArgs": 1,
238
- "maxArgs": 1
239
- },
240
- "getAll": {
241
- "minArgs": 1,
242
- "maxArgs": 1
243
- },
244
- "getAllCookieStores": {
245
- "minArgs": 0,
246
- "maxArgs": 0
247
- },
248
- "remove": {
249
- "minArgs": 1,
250
- "maxArgs": 1
251
- },
252
- "set": {
253
- "minArgs": 1,
254
- "maxArgs": 1
255
- }
256
- },
257
- "devtools": {
258
- "inspectedWindow": {
259
- "eval": {
260
- "minArgs": 1,
261
- "maxArgs": 2,
262
- "singleCallbackArg": false
263
- }
264
- },
265
- "panels": {
266
- "create": {
267
- "minArgs": 3,
268
- "maxArgs": 3,
269
- "singleCallbackArg": true
270
- },
271
- "elements": {
272
- "createSidebarPane": {
273
- "minArgs": 1,
274
- "maxArgs": 1
275
- }
276
- }
277
- }
278
- },
279
- "downloads": {
280
- "cancel": {
281
- "minArgs": 1,
282
- "maxArgs": 1
283
- },
284
- "download": {
285
- "minArgs": 1,
286
- "maxArgs": 1
287
- },
288
- "erase": {
289
- "minArgs": 1,
290
- "maxArgs": 1
291
- },
292
- "getFileIcon": {
293
- "minArgs": 1,
294
- "maxArgs": 2
295
- },
296
- "open": {
297
- "minArgs": 1,
298
- "maxArgs": 1,
299
- "fallbackToNoCallback": true
300
- },
301
- "pause": {
302
- "minArgs": 1,
303
- "maxArgs": 1
304
- },
305
- "removeFile": {
306
- "minArgs": 1,
307
- "maxArgs": 1
308
- },
309
- "resume": {
310
- "minArgs": 1,
311
- "maxArgs": 1
312
- },
313
- "search": {
314
- "minArgs": 1,
315
- "maxArgs": 1
316
- },
317
- "show": {
318
- "minArgs": 1,
319
- "maxArgs": 1,
320
- "fallbackToNoCallback": true
321
- }
322
- },
323
- "extension": {
324
- "isAllowedFileSchemeAccess": {
325
- "minArgs": 0,
326
- "maxArgs": 0
327
- },
328
- "isAllowedIncognitoAccess": {
329
- "minArgs": 0,
330
- "maxArgs": 0
331
- }
332
- },
333
- "history": {
334
- "addUrl": {
335
- "minArgs": 1,
336
- "maxArgs": 1
337
- },
338
- "deleteAll": {
339
- "minArgs": 0,
340
- "maxArgs": 0
341
- },
342
- "deleteRange": {
343
- "minArgs": 1,
344
- "maxArgs": 1
345
- },
346
- "deleteUrl": {
347
- "minArgs": 1,
348
- "maxArgs": 1
349
- },
350
- "getVisits": {
351
- "minArgs": 1,
352
- "maxArgs": 1
353
- },
354
- "search": {
355
- "minArgs": 1,
356
- "maxArgs": 1
357
- }
358
- },
359
- "i18n": {
360
- "detectLanguage": {
361
- "minArgs": 1,
362
- "maxArgs": 1
363
- },
364
- "getAcceptLanguages": {
365
- "minArgs": 0,
366
- "maxArgs": 0
367
- }
368
- },
369
- "identity": {
370
- "launchWebAuthFlow": {
371
- "minArgs": 1,
372
- "maxArgs": 1
373
- }
374
- },
375
- "idle": {
376
- "queryState": {
377
- "minArgs": 1,
378
- "maxArgs": 1
379
- }
380
- },
381
- "management": {
382
- "get": {
383
- "minArgs": 1,
384
- "maxArgs": 1
385
- },
386
- "getAll": {
387
- "minArgs": 0,
388
- "maxArgs": 0
389
- },
390
- "getSelf": {
391
- "minArgs": 0,
392
- "maxArgs": 0
393
- },
394
- "setEnabled": {
395
- "minArgs": 2,
396
- "maxArgs": 2
397
- },
398
- "uninstallSelf": {
399
- "minArgs": 0,
400
- "maxArgs": 1
401
- }
402
- },
403
- "notifications": {
404
- "clear": {
405
- "minArgs": 1,
406
- "maxArgs": 1
407
- },
408
- "create": {
409
- "minArgs": 1,
410
- "maxArgs": 2
411
- },
412
- "getAll": {
413
- "minArgs": 0,
414
- "maxArgs": 0
415
- },
416
- "getPermissionLevel": {
417
- "minArgs": 0,
418
- "maxArgs": 0
419
- },
420
- "update": {
421
- "minArgs": 2,
422
- "maxArgs": 2
423
- }
424
- },
425
- "pageAction": {
426
- "getPopup": {
427
- "minArgs": 1,
428
- "maxArgs": 1
429
- },
430
- "getTitle": {
431
- "minArgs": 1,
432
- "maxArgs": 1
433
- },
434
- "hide": {
435
- "minArgs": 1,
436
- "maxArgs": 1,
437
- "fallbackToNoCallback": true
438
- },
439
- "setIcon": {
440
- "minArgs": 1,
441
- "maxArgs": 1
442
- },
443
- "setPopup": {
444
- "minArgs": 1,
445
- "maxArgs": 1,
446
- "fallbackToNoCallback": true
447
- },
448
- "setTitle": {
449
- "minArgs": 1,
450
- "maxArgs": 1,
451
- "fallbackToNoCallback": true
452
- },
453
- "show": {
454
- "minArgs": 1,
455
- "maxArgs": 1,
456
- "fallbackToNoCallback": true
457
- }
458
- },
459
- "permissions": {
460
- "contains": {
461
- "minArgs": 1,
462
- "maxArgs": 1
463
- },
464
- "getAll": {
465
- "minArgs": 0,
466
- "maxArgs": 0
467
- },
468
- "remove": {
469
- "minArgs": 1,
470
- "maxArgs": 1
471
- },
472
- "request": {
473
- "minArgs": 1,
474
- "maxArgs": 1
475
- }
476
- },
477
- "runtime": {
478
- "getBackgroundPage": {
479
- "minArgs": 0,
480
- "maxArgs": 0
481
- },
482
- "getPlatformInfo": {
483
- "minArgs": 0,
484
- "maxArgs": 0
485
- },
486
- "openOptionsPage": {
487
- "minArgs": 0,
488
- "maxArgs": 0
489
- },
490
- "requestUpdateCheck": {
491
- "minArgs": 0,
492
- "maxArgs": 0
493
- },
494
- "sendMessage": {
495
- "minArgs": 1,
496
- "maxArgs": 3
497
- },
498
- "sendNativeMessage": {
499
- "minArgs": 2,
500
- "maxArgs": 2
501
- },
502
- "setUninstallURL": {
503
- "minArgs": 1,
504
- "maxArgs": 1
505
- }
506
- },
507
- "sessions": {
508
- "getDevices": {
509
- "minArgs": 0,
510
- "maxArgs": 1
511
- },
512
- "getRecentlyClosed": {
513
- "minArgs": 0,
514
- "maxArgs": 1
515
- },
516
- "restore": {
517
- "minArgs": 0,
518
- "maxArgs": 1
519
- }
520
- },
521
- "storage": {
522
- "local": {
523
- "clear": {
524
- "minArgs": 0,
525
- "maxArgs": 0
526
- },
527
- "get": {
528
- "minArgs": 0,
529
- "maxArgs": 1
530
- },
531
- "getBytesInUse": {
532
- "minArgs": 0,
533
- "maxArgs": 1
534
- },
535
- "remove": {
536
- "minArgs": 1,
537
- "maxArgs": 1
538
- },
539
- "set": {
540
- "minArgs": 1,
541
- "maxArgs": 1
542
- }
543
- },
544
- "managed": {
545
- "get": {
546
- "minArgs": 0,
547
- "maxArgs": 1
548
- },
549
- "getBytesInUse": {
550
- "minArgs": 0,
551
- "maxArgs": 1
552
- }
553
- },
554
- "sync": {
555
- "clear": {
556
- "minArgs": 0,
557
- "maxArgs": 0
558
- },
559
- "get": {
560
- "minArgs": 0,
561
- "maxArgs": 1
562
- },
563
- "getBytesInUse": {
564
- "minArgs": 0,
565
- "maxArgs": 1
566
- },
567
- "remove": {
568
- "minArgs": 1,
569
- "maxArgs": 1
570
- },
571
- "set": {
572
- "minArgs": 1,
573
- "maxArgs": 1
574
- }
575
- }
576
- },
577
- "tabs": {
578
- "captureVisibleTab": {
579
- "minArgs": 0,
580
- "maxArgs": 2
581
- },
582
- "create": {
583
- "minArgs": 1,
584
- "maxArgs": 1
585
- },
586
- "detectLanguage": {
587
- "minArgs": 0,
588
- "maxArgs": 1
589
- },
590
- "discard": {
591
- "minArgs": 0,
592
- "maxArgs": 1
593
- },
594
- "duplicate": {
595
- "minArgs": 1,
596
- "maxArgs": 1
597
- },
598
- "executeScript": {
599
- "minArgs": 1,
600
- "maxArgs": 2
601
- },
602
- "get": {
603
- "minArgs": 1,
604
- "maxArgs": 1
605
- },
606
- "getCurrent": {
607
- "minArgs": 0,
608
- "maxArgs": 0
609
- },
610
- "getZoom": {
611
- "minArgs": 0,
612
- "maxArgs": 1
613
- },
614
- "getZoomSettings": {
615
- "minArgs": 0,
616
- "maxArgs": 1
617
- },
618
- "goBack": {
619
- "minArgs": 0,
620
- "maxArgs": 1
621
- },
622
- "goForward": {
623
- "minArgs": 0,
624
- "maxArgs": 1
625
- },
626
- "highlight": {
627
- "minArgs": 1,
628
- "maxArgs": 1
629
- },
630
- "insertCSS": {
631
- "minArgs": 1,
632
- "maxArgs": 2
633
- },
634
- "move": {
635
- "minArgs": 2,
636
- "maxArgs": 2
637
- },
638
- "query": {
639
- "minArgs": 1,
640
- "maxArgs": 1
641
- },
642
- "reload": {
643
- "minArgs": 0,
644
- "maxArgs": 2
645
- },
646
- "remove": {
647
- "minArgs": 1,
648
- "maxArgs": 1
649
- },
650
- "removeCSS": {
651
- "minArgs": 1,
652
- "maxArgs": 2
653
- },
654
- "sendMessage": {
655
- "minArgs": 2,
656
- "maxArgs": 3
657
- },
658
- "setZoom": {
659
- "minArgs": 1,
660
- "maxArgs": 2
661
- },
662
- "setZoomSettings": {
663
- "minArgs": 1,
664
- "maxArgs": 2
665
- },
666
- "update": {
667
- "minArgs": 1,
668
- "maxArgs": 2
669
- }
670
- },
671
- "topSites": {
672
- "get": {
673
- "minArgs": 0,
674
- "maxArgs": 0
675
- }
676
- },
677
- "webNavigation": {
678
- "getAllFrames": {
679
- "minArgs": 1,
680
- "maxArgs": 1
681
- },
682
- "getFrame": {
683
- "minArgs": 1,
684
- "maxArgs": 1
685
- }
686
- },
687
- "webRequest": {
688
- "handlerBehaviorChanged": {
689
- "minArgs": 0,
690
- "maxArgs": 0
691
- }
692
- },
693
- "windows": {
694
- "create": {
695
- "minArgs": 0,
696
- "maxArgs": 1
697
- },
698
- "get": {
699
- "minArgs": 1,
700
- "maxArgs": 2
701
- },
702
- "getAll": {
703
- "minArgs": 0,
704
- "maxArgs": 1
705
- },
706
- "getCurrent": {
707
- "minArgs": 0,
708
- "maxArgs": 1
709
- },
710
- "getLastFocused": {
711
- "minArgs": 0,
712
- "maxArgs": 1
713
- },
714
- "remove": {
715
- "minArgs": 1,
716
- "maxArgs": 1
717
- },
718
- "update": {
719
- "minArgs": 2,
720
- "maxArgs": 2
721
- }
722
- }
723
- };
724
- if (Object.keys(apiMetadata).length === 0) {
725
- throw new Error("api-metadata.json has not been included in browser-polyfill");
726
- }
727
-
728
- /**
729
- * A WeakMap subclass which creates and stores a value for any key which does
730
- * not exist when accessed, but behaves exactly as an ordinary WeakMap
731
- * otherwise.
732
- *
733
- * @param {function} createItem
734
- * A function which will be called in order to create the value for any
735
- * key which does not exist, the first time it is accessed. The
736
- * function receives, as its only argument, the key being created.
737
- */
738
- class DefaultWeakMap extends WeakMap {
739
- constructor(createItem, items = undefined) {
740
- super(items);
741
- this.createItem = createItem;
742
- }
743
- get(key) {
744
- if (!this.has(key)) {
745
- this.set(key, this.createItem(key));
746
- }
747
- return super.get(key);
748
- }
749
- }
750
-
751
- /**
752
- * Returns true if the given object is an object with a `then` method, and can
753
- * therefore be assumed to behave as a Promise.
754
- *
755
- * @param {*} value The value to test.
756
- * @returns {boolean} True if the value is thenable.
757
- */
758
- const isThenable = value => {
759
- return value && typeof value === "object" && typeof value.then === "function";
760
- };
761
-
762
- /**
763
- * Creates and returns a function which, when called, will resolve or reject
764
- * the given promise based on how it is called:
765
- *
766
- * - If, when called, `chrome.runtime.lastError` contains a non-null object,
767
- * the promise is rejected with that value.
768
- * - If the function is called with exactly one argument, the promise is
769
- * resolved to that value.
770
- * - Otherwise, the promise is resolved to an array containing all of the
771
- * function's arguments.
772
- *
773
- * @param {object} promise
774
- * An object containing the resolution and rejection functions of a
775
- * promise.
776
- * @param {function} promise.resolve
777
- * The promise's resolution function.
778
- * @param {function} promise.reject
779
- * The promise's rejection function.
780
- * @param {object} metadata
781
- * Metadata about the wrapped method which has created the callback.
782
- * @param {boolean} metadata.singleCallbackArg
783
- * Whether or not the promise is resolved with only the first
784
- * argument of the callback, alternatively an array of all the
785
- * callback arguments is resolved. By default, if the callback
786
- * function is invoked with only a single argument, that will be
787
- * resolved to the promise, while all arguments will be resolved as
788
- * an array if multiple are given.
789
- *
790
- * @returns {function}
791
- * The generated callback function.
792
- */
793
- const makeCallback = (promise, metadata) => {
794
- return (...callbackArgs) => {
795
- if (extensionAPIs.runtime.lastError) {
796
- promise.reject(new Error(extensionAPIs.runtime.lastError.message));
797
- } else if (metadata.singleCallbackArg || callbackArgs.length <= 1 && metadata.singleCallbackArg !== false) {
798
- promise.resolve(callbackArgs[0]);
799
- } else {
800
- promise.resolve(callbackArgs);
801
- }
802
- };
803
- };
804
- const pluralizeArguments = numArgs => numArgs == 1 ? "argument" : "arguments";
805
-
806
- /**
807
- * Creates a wrapper function for a method with the given name and metadata.
808
- *
809
- * @param {string} name
810
- * The name of the method which is being wrapped.
811
- * @param {object} metadata
812
- * Metadata about the method being wrapped.
813
- * @param {integer} metadata.minArgs
814
- * The minimum number of arguments which must be passed to the
815
- * function. If called with fewer than this number of arguments, the
816
- * wrapper will raise an exception.
817
- * @param {integer} metadata.maxArgs
818
- * The maximum number of arguments which may be passed to the
819
- * function. If called with more than this number of arguments, the
820
- * wrapper will raise an exception.
821
- * @param {boolean} metadata.singleCallbackArg
822
- * Whether or not the promise is resolved with only the first
823
- * argument of the callback, alternatively an array of all the
824
- * callback arguments is resolved. By default, if the callback
825
- * function is invoked with only a single argument, that will be
826
- * resolved to the promise, while all arguments will be resolved as
827
- * an array if multiple are given.
828
- *
829
- * @returns {function(object, ...*)}
830
- * The generated wrapper function.
831
- */
832
- const wrapAsyncFunction = (name, metadata) => {
833
- return function asyncFunctionWrapper(target, ...args) {
834
- if (args.length < metadata.minArgs) {
835
- throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);
836
- }
837
- if (args.length > metadata.maxArgs) {
838
- throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);
839
- }
840
- return new Promise((resolve, reject) => {
841
- if (metadata.fallbackToNoCallback) {
842
- // This API method has currently no callback on Chrome, but it return a promise on Firefox,
843
- // and so the polyfill will try to call it with a callback first, and it will fallback
844
- // to not passing the callback if the first call fails.
845
- try {
846
- target[name](...args, makeCallback({
847
- resolve,
848
- reject
849
- }, metadata));
850
- } catch (cbError) {
851
- console.warn(`${name} API method doesn't seem to support the callback parameter, ` + "falling back to call it without a callback: ", cbError);
852
- target[name](...args);
853
-
854
- // Update the API method metadata, so that the next API calls will not try to
855
- // use the unsupported callback anymore.
856
- metadata.fallbackToNoCallback = false;
857
- metadata.noCallback = true;
858
- resolve();
859
- }
860
- } else if (metadata.noCallback) {
861
- target[name](...args);
862
- resolve();
863
- } else {
864
- target[name](...args, makeCallback({
865
- resolve,
866
- reject
867
- }, metadata));
868
- }
869
- });
870
- };
871
- };
872
-
873
- /**
874
- * Wraps an existing method of the target object, so that calls to it are
875
- * intercepted by the given wrapper function. The wrapper function receives,
876
- * as its first argument, the original `target` object, followed by each of
877
- * the arguments passed to the original method.
878
- *
879
- * @param {object} target
880
- * The original target object that the wrapped method belongs to.
881
- * @param {function} method
882
- * The method being wrapped. This is used as the target of the Proxy
883
- * object which is created to wrap the method.
884
- * @param {function} wrapper
885
- * The wrapper function which is called in place of a direct invocation
886
- * of the wrapped method.
887
- *
888
- * @returns {Proxy<function>}
889
- * A Proxy object for the given method, which invokes the given wrapper
890
- * method in its place.
891
- */
892
- const wrapMethod = (target, method, wrapper) => {
893
- return new Proxy(method, {
894
- apply(targetMethod, thisObj, args) {
895
- return wrapper.call(thisObj, target, ...args);
896
- }
897
- });
898
- };
899
- let hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty);
900
-
901
- /**
902
- * Wraps an object in a Proxy which intercepts and wraps certain methods
903
- * based on the given `wrappers` and `metadata` objects.
904
- *
905
- * @param {object} target
906
- * The target object to wrap.
907
- *
908
- * @param {object} [wrappers = {}]
909
- * An object tree containing wrapper functions for special cases. Any
910
- * function present in this object tree is called in place of the
911
- * method in the same location in the `target` object tree. These
912
- * wrapper methods are invoked as described in {@see wrapMethod}.
913
- *
914
- * @param {object} [metadata = {}]
915
- * An object tree containing metadata used to automatically generate
916
- * Promise-based wrapper functions for asynchronous. Any function in
917
- * the `target` object tree which has a corresponding metadata object
918
- * in the same location in the `metadata` tree is replaced with an
919
- * automatically-generated wrapper function, as described in
920
- * {@see wrapAsyncFunction}
921
- *
922
- * @returns {Proxy<object>}
923
- */
924
- const wrapObject = (target, wrappers = {}, metadata = {}) => {
925
- let cache = Object.create(null);
926
- let handlers = {
927
- has(proxyTarget, prop) {
928
- return prop in target || prop in cache;
929
- },
930
- get(proxyTarget, prop, receiver) {
931
- if (prop in cache) {
932
- return cache[prop];
933
- }
934
- if (!(prop in target)) {
935
- return undefined;
936
- }
937
- let value = target[prop];
938
- if (typeof value === "function") {
939
- // This is a method on the underlying object. Check if we need to do
940
- // any wrapping.
941
-
942
- if (typeof wrappers[prop] === "function") {
943
- // We have a special-case wrapper for this method.
944
- value = wrapMethod(target, target[prop], wrappers[prop]);
945
- } else if (hasOwnProperty(metadata, prop)) {
946
- // This is an async method that we have metadata for. Create a
947
- // Promise wrapper for it.
948
- let wrapper = wrapAsyncFunction(prop, metadata[prop]);
949
- value = wrapMethod(target, target[prop], wrapper);
950
- } else {
951
- // This is a method that we don't know or care about. Return the
952
- // original method, bound to the underlying object.
953
- value = value.bind(target);
954
- }
955
- } else if (typeof value === "object" && value !== null && (hasOwnProperty(wrappers, prop) || hasOwnProperty(metadata, prop))) {
956
- // This is an object that we need to do some wrapping for the children
957
- // of. Create a sub-object wrapper for it with the appropriate child
958
- // metadata.
959
- value = wrapObject(value, wrappers[prop], metadata[prop]);
960
- } else if (hasOwnProperty(metadata, "*")) {
961
- // Wrap all properties in * namespace.
962
- value = wrapObject(value, wrappers[prop], metadata["*"]);
963
- } else {
964
- // We don't need to do any wrapping for this property,
965
- // so just forward all access to the underlying object.
966
- Object.defineProperty(cache, prop, {
967
- configurable: true,
968
- enumerable: true,
969
- get() {
970
- return target[prop];
971
- },
972
- set(value) {
973
- target[prop] = value;
974
- }
975
- });
976
- return value;
977
- }
978
- cache[prop] = value;
979
- return value;
980
- },
981
- set(proxyTarget, prop, value, receiver) {
982
- if (prop in cache) {
983
- cache[prop] = value;
984
- } else {
985
- target[prop] = value;
986
- }
987
- return true;
988
- },
989
- defineProperty(proxyTarget, prop, desc) {
990
- return Reflect.defineProperty(cache, prop, desc);
991
- },
992
- deleteProperty(proxyTarget, prop) {
993
- return Reflect.deleteProperty(cache, prop);
994
- }
995
- };
996
-
997
- // Per contract of the Proxy API, the "get" proxy handler must return the
998
- // original value of the target if that value is declared read-only and
999
- // non-configurable. For this reason, we create an object with the
1000
- // prototype set to `target` instead of using `target` directly.
1001
- // Otherwise we cannot return a custom object for APIs that
1002
- // are declared read-only and non-configurable, such as `chrome.devtools`.
1003
- //
1004
- // The proxy handlers themselves will still use the original `target`
1005
- // instead of the `proxyTarget`, so that the methods and properties are
1006
- // dereferenced via the original targets.
1007
- let proxyTarget = Object.create(target);
1008
- return new Proxy(proxyTarget, handlers);
1009
- };
1010
-
1011
- /**
1012
- * Creates a set of wrapper functions for an event object, which handles
1013
- * wrapping of listener functions that those messages are passed.
1014
- *
1015
- * A single wrapper is created for each listener function, and stored in a
1016
- * map. Subsequent calls to `addListener`, `hasListener`, or `removeListener`
1017
- * retrieve the original wrapper, so that attempts to remove a
1018
- * previously-added listener work as expected.
1019
- *
1020
- * @param {DefaultWeakMap<function, function>} wrapperMap
1021
- * A DefaultWeakMap object which will create the appropriate wrapper
1022
- * for a given listener function when one does not exist, and retrieve
1023
- * an existing one when it does.
1024
- *
1025
- * @returns {object}
1026
- */
1027
- const wrapEvent = wrapperMap => ({
1028
- addListener(target, listener, ...args) {
1029
- target.addListener(wrapperMap.get(listener), ...args);
1030
- },
1031
- hasListener(target, listener) {
1032
- return target.hasListener(wrapperMap.get(listener));
1033
- },
1034
- removeListener(target, listener) {
1035
- target.removeListener(wrapperMap.get(listener));
1036
- }
1037
- });
1038
- const onRequestFinishedWrappers = new DefaultWeakMap(listener => {
1039
- if (typeof listener !== "function") {
1040
- return listener;
1041
- }
1042
-
1043
- /**
1044
- * Wraps an onRequestFinished listener function so that it will return a
1045
- * `getContent()` property which returns a `Promise` rather than using a
1046
- * callback API.
1047
- *
1048
- * @param {object} req
1049
- * The HAR entry object representing the network request.
1050
- */
1051
- return function onRequestFinished(req) {
1052
- const wrappedReq = wrapObject(req, {} /* wrappers */, {
1053
- getContent: {
1054
- minArgs: 0,
1055
- maxArgs: 0
1056
- }
1057
- });
1058
- listener(wrappedReq);
1059
- };
1060
- });
1061
- const onMessageWrappers = new DefaultWeakMap(listener => {
1062
- if (typeof listener !== "function") {
1063
- return listener;
1064
- }
1065
-
1066
- /**
1067
- * Wraps a message listener function so that it may send responses based on
1068
- * its return value, rather than by returning a sentinel value and calling a
1069
- * callback. If the listener function returns a Promise, the response is
1070
- * sent when the promise either resolves or rejects.
1071
- *
1072
- * @param {*} message
1073
- * The message sent by the other end of the channel.
1074
- * @param {object} sender
1075
- * Details about the sender of the message.
1076
- * @param {function(*)} sendResponse
1077
- * A callback which, when called with an arbitrary argument, sends
1078
- * that value as a response.
1079
- * @returns {boolean}
1080
- * True if the wrapped listener returned a Promise, which will later
1081
- * yield a response. False otherwise.
1082
- */
1083
- return function onMessage(message, sender, sendResponse) {
1084
- let didCallSendResponse = false;
1085
- let wrappedSendResponse;
1086
- let sendResponsePromise = new Promise(resolve => {
1087
- wrappedSendResponse = function (response) {
1088
- didCallSendResponse = true;
1089
- resolve(response);
1090
- };
1091
- });
1092
- let result;
1093
- try {
1094
- result = listener(message, sender, wrappedSendResponse);
1095
- } catch (err) {
1096
- result = Promise.reject(err);
1097
- }
1098
- const isResultThenable = result !== true && isThenable(result);
1099
-
1100
- // If the listener didn't returned true or a Promise, or called
1101
- // wrappedSendResponse synchronously, we can exit earlier
1102
- // because there will be no response sent from this listener.
1103
- if (result !== true && !isResultThenable && !didCallSendResponse) {
1104
- return false;
1105
- }
1106
-
1107
- // A small helper to send the message if the promise resolves
1108
- // and an error if the promise rejects (a wrapped sendMessage has
1109
- // to translate the message into a resolved promise or a rejected
1110
- // promise).
1111
- const sendPromisedResult = promise => {
1112
- promise.then(msg => {
1113
- // send the message value.
1114
- sendResponse(msg);
1115
- }, error => {
1116
- // Send a JSON representation of the error if the rejected value
1117
- // is an instance of error, or the object itself otherwise.
1118
- let message;
1119
- if (error && (error instanceof Error || typeof error.message === "string")) {
1120
- message = error.message;
1121
- } else {
1122
- message = "An unexpected error occurred";
1123
- }
1124
- sendResponse({
1125
- __mozWebExtensionPolyfillReject__: true,
1126
- message
1127
- });
1128
- }).catch(err => {
1129
- // Print an error on the console if unable to send the response.
1130
- console.error("Failed to send onMessage rejected reply", err);
1131
- });
1132
- };
1133
-
1134
- // If the listener returned a Promise, send the resolved value as a
1135
- // result, otherwise wait the promise related to the wrappedSendResponse
1136
- // callback to resolve and send it as a response.
1137
- if (isResultThenable) {
1138
- sendPromisedResult(result);
1139
- } else {
1140
- sendPromisedResult(sendResponsePromise);
1141
- }
1142
-
1143
- // Let Chrome know that the listener is replying.
1144
- return true;
1145
- };
1146
- });
1147
- const wrappedSendMessageCallback = ({
1148
- reject,
1149
- resolve
1150
- }, reply) => {
1151
- if (extensionAPIs.runtime.lastError) {
1152
- // Detect when none of the listeners replied to the sendMessage call and resolve
1153
- // the promise to undefined as in Firefox.
1154
- // See https://github.com/mozilla/webextension-polyfill/issues/130
1155
- if (extensionAPIs.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) {
1156
- resolve();
1157
- } else {
1158
- reject(new Error(extensionAPIs.runtime.lastError.message));
1159
- }
1160
- } else if (reply && reply.__mozWebExtensionPolyfillReject__) {
1161
- // Convert back the JSON representation of the error into
1162
- // an Error instance.
1163
- reject(new Error(reply.message));
1164
- } else {
1165
- resolve(reply);
1166
- }
1167
- };
1168
- const wrappedSendMessage = (name, metadata, apiNamespaceObj, ...args) => {
1169
- if (args.length < metadata.minArgs) {
1170
- throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);
1171
- }
1172
- if (args.length > metadata.maxArgs) {
1173
- throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);
1174
- }
1175
- return new Promise((resolve, reject) => {
1176
- const wrappedCb = wrappedSendMessageCallback.bind(null, {
1177
- resolve,
1178
- reject
1179
- });
1180
- args.push(wrappedCb);
1181
- apiNamespaceObj.sendMessage(...args);
1182
- });
1183
- };
1184
- const staticWrappers = {
1185
- devtools: {
1186
- network: {
1187
- onRequestFinished: wrapEvent(onRequestFinishedWrappers)
1188
- }
1189
- },
1190
- runtime: {
1191
- onMessage: wrapEvent(onMessageWrappers),
1192
- onMessageExternal: wrapEvent(onMessageWrappers),
1193
- sendMessage: wrappedSendMessage.bind(null, "sendMessage", {
1194
- minArgs: 1,
1195
- maxArgs: 3
1196
- })
1197
- },
1198
- tabs: {
1199
- sendMessage: wrappedSendMessage.bind(null, "sendMessage", {
1200
- minArgs: 2,
1201
- maxArgs: 3
1202
- })
1203
- }
1204
- };
1205
- const settingMetadata = {
1206
- clear: {
1207
- minArgs: 1,
1208
- maxArgs: 1
1209
- },
1210
- get: {
1211
- minArgs: 1,
1212
- maxArgs: 1
1213
- },
1214
- set: {
1215
- minArgs: 1,
1216
- maxArgs: 1
1217
- }
1218
- };
1219
- apiMetadata.privacy = {
1220
- network: {
1221
- "*": settingMetadata
1222
- },
1223
- services: {
1224
- "*": settingMetadata
1225
- },
1226
- websites: {
1227
- "*": settingMetadata
1228
- }
1229
- };
1230
- return wrapObject(extensionAPIs, staticWrappers, apiMetadata);
1231
- };
1232
-
1233
- // The build process adds a UMD wrapper around this file, which makes the
1234
- // `module` variable available.
1235
- module.exports = wrapAPIs(chrome);
1236
- } else {
1237
- module.exports = globalThis.browser;
1238
- }
1239
- });
1240
- //# sourceMappingURL=browser-polyfill.js.map
29
+ /* This Source Code Form is subject to the terms of the Mozilla Public
30
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
31
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
1241
32
 
1242
33
 
1243
34
  /***/ },
@@ -1248,7 +39,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
1248
39
  \**********************/
1249
40
  (module, __unused_webpack_exports, __webpack_require__) {
1250
41
 
1251
- const browser = __webpack_require__(/*! webextension-polyfill */ "./node_modules/webextension-polyfill/dist/browser-polyfill.js");
42
+ const browser = __webpack_require__(/*! webextension-polyfill/dist/browser-polyfill.min */ "./node_modules/webextension-polyfill/dist/browser-polyfill.min.js");
1252
43
 
1253
44
  const STOP_ACTION = `WEBEXTENSION_MESSAGES_STOP_COMMUNICATION`;
1254
45
  const RESULT_PROMISES = {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webextension-messages",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "Package simplifying the exchange of messages between the background process and tabs of the browser",
5
5
  "license": "MIT",
6
6
  "author": "Igor Morozov <ismorozs@gmail.com>",
package/src/index.js CHANGED
@@ -1,4 +1,4 @@
1
- const browser = require("webextension-polyfill");
1
+ const browser = require("webextension-polyfill/dist/browser-polyfill.min");
2
2
 
3
3
  const STOP_ACTION = `WEBEXTENSION_MESSAGES_STOP_COMMUNICATION`;
4
4
  const RESULT_PROMISES = {};