no bug - Bumping Firefox l10n changesets r=release a=l10n-bump DONTBUILD CLOSED TREE
[gecko.git] / dom / workers / test / test_worker_interfaces.js
blob335c7d74b601506d8429e307f7f196118078c79b
1 /* eslint-disable mozilla/no-comparison-or-assignment-inside-ok */
3 // This is a list of all interfaces that are exposed to workers.
4 // Please only add things to this list with great care and proper review
5 // from the associated module peers.
7 // This file lists global interfaces we want exposed and verifies they
8 // are what we intend. Each entry in the arrays below can either be a
9 // simple string with the interface name, or an object with a 'name'
10 // property giving the interface name as a string, and additional
11 // properties which qualify the exposure of that interface. For example:
13 // [
14 //   "AGlobalInterface", // secure context only
15 //   { name: "ExperimentalThing", release: false },
16 //   { name: "ReallyExperimentalThing", nightly: true },
17 //   { name: "DesktopOnlyThing", desktop: true },
18 //   { name: "FancyControl", xbl: true },
19 //   { name: "DisabledEverywhere", disabled: true },
20 // ];
22 // See createInterfaceMap() below for a complete list of properties.
24 // The values of the properties need to be literal true/false
25 // (e.g. indicating whether something is enabled on a particular
26 // channel/OS).  If we ever end up in a situation where a propert
27 // value needs to depend on channel or OS, we will need to make sure
28 // we have that information before setting up the property lists.
30 // IMPORTANT: Do not change this list without review from
31 //            a JavaScript Engine peer!
32 let wasmGlobalEntry = {
33   name: "WebAssembly",
34   insecureContext: true,
35   disabled: !getJSTestingFunctions().wasmIsSupportedByHardware(),
37 let wasmGlobalInterfaces = [
38   { name: "Module", insecureContext: true },
39   { name: "Instance", insecureContext: true },
40   { name: "Memory", insecureContext: true },
41   { name: "Table", insecureContext: true },
42   { name: "Global", insecureContext: true },
43   { name: "CompileError", insecureContext: true },
44   { name: "LinkError", insecureContext: true },
45   { name: "RuntimeError", insecureContext: true },
46   { name: "Function", insecureContext: true, nightly: true },
47   { name: "Exception", insecureContext: true },
48   { name: "Tag", insecureContext: true },
49   { name: "compile", insecureContext: true },
50   { name: "compileStreaming", insecureContext: true },
51   { name: "instantiate", insecureContext: true },
52   { name: "instantiateStreaming", insecureContext: true },
53   { name: "validate", insecureContext: true },
55 // IMPORTANT: Do not change this list without review from
56 //            a JavaScript Engine peer!
57 let ecmaGlobals = [
58   { name: "AggregateError", insecureContext: true },
59   { name: "Array", insecureContext: true },
60   { name: "ArrayBuffer", insecureContext: true },
61   { name: "Atomics", insecureContext: true },
62   { name: "BigInt", insecureContext: true },
63   { name: "BigInt64Array", insecureContext: true },
64   { name: "BigUint64Array", insecureContext: true },
65   { name: "Boolean", insecureContext: true },
66   { name: "DataView", insecureContext: true },
67   { name: "Date", insecureContext: true },
68   { name: "Error", insecureContext: true },
69   { name: "EvalError", insecureContext: true },
70   { name: "FinalizationRegistry", insecureContext: true },
71   { name: "Float32Array", insecureContext: true },
72   { name: "Float64Array", insecureContext: true },
73   { name: "Function", insecureContext: true },
74   { name: "Infinity", insecureContext: true },
75   { name: "Int16Array", insecureContext: true },
76   { name: "Int32Array", insecureContext: true },
77   { name: "Int8Array", insecureContext: true },
78   { name: "InternalError", insecureContext: true },
79   { name: "Intl", insecureContext: true },
80   { name: "JSON", insecureContext: true },
81   { name: "Map", insecureContext: true },
82   { name: "MediaCapabilities", insecureContext: true },
83   { name: "MediaCapabilitiesInfo", insecureContext: true },
84   { name: "Math", insecureContext: true },
85   { name: "NaN", insecureContext: true },
86   { name: "Number", insecureContext: true },
87   { name: "Object", insecureContext: true },
88   { name: "Promise", insecureContext: true },
89   { name: "Proxy", insecureContext: true },
90   { name: "RangeError", insecureContext: true },
91   { name: "ReferenceError", insecureContext: true },
92   { name: "Reflect", insecureContext: true },
93   { name: "RegExp", insecureContext: true },
94   { name: "Set", insecureContext: true },
95   {
96     name: "SharedArrayBuffer",
97     insecureContext: true,
98     crossOringinIsolated: true,
99   },
100   { name: "String", insecureContext: true },
101   { name: "Symbol", insecureContext: true },
102   { name: "SyntaxError", insecureContext: true },
103   { name: "TypeError", insecureContext: true },
104   { name: "Uint16Array", insecureContext: true },
105   { name: "Uint32Array", insecureContext: true },
106   { name: "Uint8Array", insecureContext: true },
107   { name: "Uint8ClampedArray", insecureContext: true },
108   { name: "URIError", insecureContext: true },
109   { name: "WeakMap", insecureContext: true },
110   { name: "WeakRef", insecureContext: true },
111   { name: "WeakSet", insecureContext: true },
112   wasmGlobalEntry,
113   { name: "decodeURI", insecureContext: true },
114   { name: "decodeURIComponent", insecureContext: true },
115   { name: "encodeURI", insecureContext: true },
116   { name: "encodeURIComponent", insecureContext: true },
117   { name: "escape", insecureContext: true },
118   { name: "eval", insecureContext: true },
119   { name: "globalThis", insecureContext: true },
120   { name: "isFinite", insecureContext: true },
121   { name: "isNaN", insecureContext: true },
122   { name: "parseFloat", insecureContext: true },
123   { name: "parseInt", insecureContext: true },
124   { name: "undefined", insecureContext: true },
125   { name: "unescape", insecureContext: true },
127 // IMPORTANT: Do not change the list above without review from
128 //            a JavaScript Engine peer!
130 // IMPORTANT: Do not change the list below without review from a DOM peer!
131 let interfaceNamesInGlobalScope = [
132   // IMPORTANT: Do not change this list without review from a DOM peer!
133   { name: "AbortController", insecureContext: true },
134   // IMPORTANT: Do not change this list without review from a DOM peer!
135   { name: "AbortSignal", insecureContext: true },
136   // IMPORTANT: Do not change this list without review from a DOM peer!
137   { name: "Blob", insecureContext: true },
138   // IMPORTANT: Do not change this list without review from a DOM peer!
139   { name: "BroadcastChannel", insecureContext: true },
140   // IMPORTANT: Do not change this list without review from a DOM peer!
141   { name: "ByteLengthQueuingStrategy", insecureContext: true },
142   // IMPORTANT: Do not change this list without review from a DOM peer!
143   "Cache",
144   // IMPORTANT: Do not change this list without review from a DOM peer!
145   "CacheStorage",
146   // IMPORTANT: Do not change this list without review from a DOM peer!
147   { name: "CanvasGradient", insecureContext: true },
148   // IMPORTANT: Do not change this list without review from a DOM peer!
149   { name: "CanvasPattern", insecureContext: true },
150   // IMPORTANT: Do not change this list without review from a DOM peer!
151   { name: "CloseEvent", insecureContext: true },
152   // IMPORTANT: Do not change this list without review from a DOM peer!
153   { name: "CompressionStream", insecureContext: true },
154   // IMPORTANT: Do not change this list without review from a DOM peer!
155   { name: "CountQueuingStrategy", insecureContext: true },
156   // IMPORTANT: Do not change this list without review from a DOM peer!
157   { name: "Crypto", insecureContext: true },
158   // IMPORTANT: Do not change this list without review from a DOM peer!
159   { name: "CryptoKey" },
160   // IMPORTANT: Do not change this list without review from a DOM peer!
161   { name: "CustomEvent", insecureContext: true },
162   // IMPORTANT: Do not change this list without review from a DOM peer!
163   { name: "DecompressionStream", insecureContext: true },
164   // IMPORTANT: Do not change this list without review from a DOM peer!
165   { name: "DedicatedWorkerGlobalScope", insecureContext: true },
166   // IMPORTANT: Do not change this list without review from a DOM peer!
167   { name: "Directory", insecureContext: true },
168   // IMPORTANT: Do not change this list without review from a DOM peer!
169   { name: "DOMException", insecureContext: true },
170   // IMPORTANT: Do not change this list without review from a DOM peer!
171   { name: "DOMMatrix", insecureContext: true },
172   // IMPORTANT: Do not change this list without review from a DOM peer!
173   { name: "DOMMatrixReadOnly", insecureContext: true },
174   // IMPORTANT: Do not change this list without review from a DOM peer!
175   { name: "DOMPoint", insecureContext: true },
176   // IMPORTANT: Do not change this list without review from a DOM peer!
177   { name: "DOMPointReadOnly", insecureContext: true },
178   // IMPORTANT: Do not change this list without review from a DOM peer!
179   { name: "DOMQuad", insecureContext: true },
180   // IMPORTANT: Do not change this list without review from a DOM peer!
181   { name: "DOMRect", insecureContext: true },
182   // IMPORTANT: Do not change this list without review from a DOM peer!
183   { name: "DOMRectReadOnly", insecureContext: true },
184   // IMPORTANT: Do not change this list without review from a DOM peer!
185   { name: "DOMStringList", insecureContext: true },
186   // IMPORTANT: Do not change this list without review from a DOM peer!
187   { name: "EncodedVideoChunk", insecureContext: true, nightly: true },
188   // IMPORTANT: Do not change this list without review from a DOM peer!
189   { name: "ErrorEvent", insecureContext: true },
190   // IMPORTANT: Do not change this list without review from a DOM peer!
191   { name: "Event", insecureContext: true },
192   // IMPORTANT: Do not change this list without review from a DOM peer!
193   { name: "EventSource", insecureContext: true },
194   // IMPORTANT: Do not change this list without review from a DOM peer!
195   { name: "EventTarget", insecureContext: true },
196   // IMPORTANT: Do not change this list without review from a DOM peer!
197   { name: "File", insecureContext: true },
198   // IMPORTANT: Do not change this list without review from a DOM peer!
199   { name: "FileList", insecureContext: true },
200   // IMPORTANT: Do not change this list without review from a DOM peer!
201   { name: "FileReader", insecureContext: true },
202   // IMPORTANT: Do not change this list without review from a DOM peer!
203   { name: "FileReaderSync", insecureContext: true },
204   // IMPORTANT: Do not change this list without review from a DOM peer!
205   { name: "FileSystemDirectoryHandle" },
206   // IMPORTANT: Do not change this list without review from a DOM peer!
207   { name: "FileSystemFileHandle" },
208   // IMPORTANT: Do not change this list without review from a DOM peer!
209   { name: "FileSystemHandle" },
210   // IMPORTANT: Do not change this list without review from a DOM peer!
211   { name: "FileSystemSyncAccessHandle" },
212   // IMPORTANT: Do not change this list without review from a DOM peer!
213   { name: "FileSystemWritableFileStream" },
214   // IMPORTANT: Do not change this list without review from a DOM peer!
215   { name: "FontFace", insecureContext: true },
216   // IMPORTANT: Do not change this list without review from a DOM peer!
217   { name: "FontFaceSet", insecureContext: true },
218   // IMPORTANT: Do not change this list without review from a DOM peer!
219   { name: "FontFaceSetLoadEvent", insecureContext: true },
220   // IMPORTANT: Do not change this list without review from a DOM peer!
221   { name: "FormData", insecureContext: true },
222   // IMPORTANT: Do not change this list without review from a DOM peer!
223   { name: "Headers", insecureContext: true },
224   // IMPORTANT: Do not change this list without review from a DOM peer!
225   { name: "IDBCursor", insecureContext: true },
226   // IMPORTANT: Do not change this list without review from a DOM peer!
227   { name: "IDBCursorWithValue", insecureContext: true },
228   // IMPORTANT: Do not change this list without review from a DOM peer!
229   { name: "IDBDatabase", insecureContext: true },
230   // IMPORTANT: Do not change this list without review from a DOM peer!
231   { name: "IDBFactory", insecureContext: true },
232   // IMPORTANT: Do not change this list without review from a DOM peer!
233   { name: "IDBIndex", insecureContext: true },
234   // IMPORTANT: Do not change this list without review from a DOM peer!
235   { name: "IDBKeyRange", insecureContext: true },
236   // IMPORTANT: Do not change this list without review from a DOM peer!
237   { name: "IDBObjectStore", insecureContext: true },
238   // IMPORTANT: Do not change this list without review from a DOM peer!
239   { name: "IDBOpenDBRequest", insecureContext: true },
240   // IMPORTANT: Do not change this list without review from a DOM peer!
241   { name: "IDBRequest", insecureContext: true },
242   // IMPORTANT: Do not change this list without review from a DOM peer!
243   { name: "IDBTransaction", insecureContext: true },
244   // IMPORTANT: Do not change this list without review from a DOM peer!
245   { name: "IDBVersionChangeEvent", insecureContext: true },
246   // IMPORTANT: Do not change this list without review from a DOM peer!
247   { name: "ImageBitmap", insecureContext: true },
248   // IMPORTANT: Do not change this list without review from a DOM peer!
249   { name: "ImageBitmapRenderingContext", insecureContext: true },
250   // IMPORTANT: Do not change this list without review from a DOM peer!
251   { name: "ImageData", insecureContext: true },
252   // IMPORTANT: Do not change this list without review from a DOM peer!
253   "Lock",
254   // IMPORTANT: Do not change this list without review from a DOM peer!
255   "LockManager",
256   // IMPORTANT: Do not change this list without review from a DOM peer!
257   { name: "MessageChannel", insecureContext: true },
258   // IMPORTANT: Do not change this list without review from a DOM peer!
259   { name: "MessageEvent", insecureContext: true },
260   // IMPORTANT: Do not change this list without review from a DOM peer!
261   { name: "MessagePort", insecureContext: true },
262   // IMPORTANT: Do not change this list without review from a DOM peer!
263   { name: "NetworkInformation", insecureContext: true, disabled: true },
264   // IMPORTANT: Do not change this list without review from a DOM peer!
265   { name: "Notification", insecureContext: true },
266   // IMPORTANT: Do not change this list without review from a DOM peer!
267   { name: "OffscreenCanvas", insecureContext: true },
268   // IMPORTANT: Do not change this list without review from a DOM peer!
269   { name: "OffscreenCanvasRenderingContext2D", insecureContext: true },
270   // IMPORTANT: Do not change this list without review from a DOM peer!
271   { name: "Path2D", insecureContext: true },
272   // IMPORTANT: Do not change this list without review from a DOM peer!
273   { name: "Performance", insecureContext: true },
274   // IMPORTANT: Do not change this list without review from a DOM peer!
275   { name: "PerformanceEntry", insecureContext: true },
276   // IMPORTANT: Do not change this list without review from a DOM peer!
277   { name: "PerformanceMark", insecureContext: true },
278   // IMPORTANT: Do not change this list without review from a DOM peer!
279   { name: "PerformanceMeasure", insecureContext: true },
280   // IMPORTANT: Do not change this list without review from a DOM peer!
281   { name: "PerformanceObserver", insecureContext: true },
282   // IMPORTANT: Do not change this list without review from a DOM peer!
283   { name: "PerformanceObserverEntryList", insecureContext: true },
284   // IMPORTANT: Do not change this list without review from a DOM peer!
285   { name: "PerformanceResourceTiming", insecureContext: true },
286   // IMPORTANT: Do not change this list without review from a DOM peer!
287   { name: "PerformanceServerTiming", insecureContext: false },
288   // IMPORTANT: Do not change this list without review from a DOM peer!
289   { name: "ProgressEvent", insecureContext: true },
290   // IMPORTANT: Do not change this list without review from a DOM peer!
291   { name: "PromiseRejectionEvent", insecureContext: true },
292   // IMPORTANT: Do not change this list without review from a DOM peer!
293   // IMPORTANT: Do not change this list without review from a DOM peer!
294   { name: "ReadableByteStreamController", insecureContext: true },
295   // IMPORTANT: Do not change this list without review from a DOM peer!
296   { name: "ReadableStream", insecureContext: true },
297   // IMPORTANT: Do not change this list without review from a DOM peer!
298   { name: "ReadableStreamBYOBReader", insecureContext: true },
299   // IMPORTANT: Do not change this list without review from a DOM peer!
300   { name: "ReadableStreamBYOBRequest", insecureContext: true },
301   // IMPORTANT: Do not change this list without review from a DOM peer!
302   { name: "ReadableStreamDefaultController", insecureContext: true },
303   // IMPORTANT: Do not change this list without review from a DOM peer!
304   { name: "ReadableStreamDefaultReader", insecureContext: true },
305   // IMPORTANT: Do not change this list without review from a DOM peer!
306   { name: "Request", insecureContext: true },
307   // IMPORTANT: Do not change this list without review from a DOM peer!
308   { name: "Response", insecureContext: true },
309   // IMPORTANT: Do not change this list without review from a DOM peer!
310   { name: "RTCEncodedAudioFrame", insecureContext: true },
311   // IMPORTANT: Do not change this list without review from a DOM peer!
312   { name: "RTCEncodedVideoFrame", insecureContext: true },
313   // IMPORTANT: Do not change this list without review from a DOM peer!
314   { name: "RTCRtpScriptTransformer", insecureContext: true },
315   // IMPORTANT: Do not change this list without review from a DOM peer!
316   { name: "RTCTransformEvent", insecureContext: true },
317   // IMPORTANT: Do not change this list without review from a DOM peer!
318   { name: "Scheduler", insecureContext: true, nightly: true },
319   // IMPORTANT: Do not change this list without review from a DOM peer!
320   { name: "StorageManager", fennec: false },
321   // IMPORTANT: Do not change this list without review from a DOM peer!
322   { name: "SubtleCrypto" },
323   // IMPORTANT: Do not change this list without review from a DOM peer!
324   { name: "TaskController", insecureContext: true, nightly: true },
325   // IMPORTANT: Do not change this list without review from a DOM peer!
326   { name: "TaskPriorityChangeEvent", insecureContext: true, nightly: true },
327   // IMPORTANT: Do not change this list without review from a DOM peer!
328   { name: "TaskSignal", insecureContext: true, nightly: true },
329   // IMPORTANT: Do not change this list without review from a DOM peer!
330   { name: "TextDecoder", insecureContext: true },
331   // IMPORTANT: Do not change this list without review from a DOM peer!
332   { name: "TextDecoderStream", insecureContext: true },
333   // IMPORTANT: Do not change this list without review from a DOM peer!
334   { name: "TextEncoder", insecureContext: true },
335   // IMPORTANT: Do not change this list without review from a DOM peer!
336   { name: "TextEncoderStream", insecureContext: true },
337   // IMPORTANT: Do not change this list without review from a DOM peer!
338   { name: "TextMetrics", insecureContext: true },
339   // IMPORTANT: Do not change this list without review from a DOM peer!
340   { name: "TransformStream", insecureContext: true },
341   // IMPORTANT: Do not change this list without review from a DOM peer!
342   {
343     name: "TransformStreamDefaultController",
344     insecureContext: true,
345   },
346   // IMPORTANT: Do not change this list without review from a DOM peer!
347   { name: "XMLHttpRequest", insecureContext: true },
348   // IMPORTANT: Do not change this list without review from a DOM peer!
349   { name: "XMLHttpRequestEventTarget", insecureContext: true },
350   // IMPORTANT: Do not change this list without review from a DOM peer!
351   { name: "XMLHttpRequestUpload", insecureContext: true },
352   // IMPORTANT: Do not change this list without review from a DOM peer!
353   { name: "URL", insecureContext: true },
354   // IMPORTANT: Do not change this list without review from a DOM peer!
355   { name: "URLSearchParams", insecureContext: true },
356   // IMPORTANT: Do not change this list without review from a DOM peer!
357   { name: "VideoColorSpace", insecureContext: true, nightly: true },
358   // IMPORTANT: Do not change this list without review from a DOM peer!
359   { name: "VideoDecoder", nightly: true },
360   // IMPORTANT: Do not change this list without review from a DOM peer!
361   { name: "VideoEncoder", nightly: true },
362   // IMPORTANT: Do not change this list without review from a DOM peer!
363   { name: "VideoFrame", insecureContext: true, nightly: true },
364   // IMPORTANT: Do not change this list without review from a DOM peer!
365   { name: "WebGL2RenderingContext", insecureContext: true },
366   // IMPORTANT: Do not change this list without review from a DOM peer!
367   { name: "WebGLActiveInfo", insecureContext: true },
368   // IMPORTANT: Do not change this list without review from a DOM peer!
369   { name: "WebGLBuffer", insecureContext: true },
370   // IMPORTANT: Do not change this list without review from a DOM peer!
371   { name: "WebGLContextEvent", insecureContext: true },
372   // IMPORTANT: Do not change this list without review from a DOM peer!
373   { name: "WebGLFramebuffer", insecureContext: true },
374   // IMPORTANT: Do not change this list without review from a DOM peer!
375   { name: "WebGLProgram", insecureContext: true },
376   // IMPORTANT: Do not change this list without review from a DOM peer!
377   { name: "WebGLQuery", insecureContext: true },
378   // IMPORTANT: Do not change this list without review from a DOM peer!
379   { name: "WebGLRenderbuffer", insecureContext: true },
380   // IMPORTANT: Do not change this list without review from a DOM peer!
381   { name: "WebGLRenderingContext", insecureContext: true },
382   // IMPORTANT: Do not change this list without review from a DOM peer!
383   { name: "WebGLSampler", insecureContext: true },
384   // IMPORTANT: Do not change this list without review from a DOM peer!
385   { name: "WebGLShader", insecureContext: true },
386   // IMPORTANT: Do not change this list without review from a DOM peer!
387   { name: "WebGLShaderPrecisionFormat", insecureContext: true },
388   // IMPORTANT: Do not change this list without review from a DOM peer!
389   { name: "WebGLSync", insecureContext: true },
390   // IMPORTANT: Do not change this list without review from a DOM peer!
391   { name: "WebGLTexture", insecureContext: true },
392   // IMPORTANT: Do not change this list without review from a DOM peer!
393   { name: "WebGLTransformFeedback", insecureContext: true },
394   // IMPORTANT: Do not change this list without review from a DOM peer!
395   { name: "WebGLUniformLocation", insecureContext: true },
396   // IMPORTANT: Do not change this list without review from a DOM peer!
397   { name: "WebGLVertexArrayObject", insecureContext: true },
398   // IMPORTANT: Do not change this list without review from a DOM peer!
399   { name: "WebSocket", insecureContext: true },
400   // IMPORTANT: Do not change this list without review from a DOM peer!
401   { name: "WebTransport", insecureContext: false },
402   // IMPORTANT: Do not change this list without review from a DOM peer!
403   { name: "WebTransportBidirectionalStream", insecureContext: false },
404   // IMPORTANT: Do not change this list without review from a DOM peer!
405   { name: "WebTransportDatagramDuplexStream", insecureContext: false },
406   // IMPORTANT: Do not change this list without review from a DOM peer!
407   { name: "WebTransportError", insecureContext: false },
408   // IMPORTANT: Do not change this list without review from a DOM peer!
409   { name: "WebTransportReceiveStream", insecureContext: false },
410   // IMPORTANT: Do not change this list without review from a DOM peer!
411   { name: "WebTransportSendStream", insecureContext: false },
412   // IMPORTANT: Do not change this list without review from a DOM peer!
413   { name: "Worker", insecureContext: true },
414   // IMPORTANT: Do not change this list without review from a DOM peer!
415   { name: "WorkerGlobalScope", insecureContext: true },
416   // IMPORTANT: Do not change this list without review from a DOM peer!
417   { name: "WorkerLocation", insecureContext: true },
418   // IMPORTANT: Do not change this list without review from a DOM peer!
419   { name: "WorkerNavigator", insecureContext: true },
420   // IMPORTANT: Do not change this list without review from a DOM peer!
421   { name: "WritableStream", insecureContext: true },
422   // IMPORTANT: Do not change this list without review from a DOM peer!
423   { name: "WritableStreamDefaultController", insecureContext: true },
424   // IMPORTANT: Do not change this list without review from a DOM peer!
425   { name: "WritableStreamDefaultWriter", insecureContext: true },
426   // IMPORTANT: Do not change this list without review from a DOM peer!
427   { name: "cancelAnimationFrame", insecureContext: true },
428   // IMPORTANT: Do not change this list without review from a DOM peer!
429   { name: "close", insecureContext: true },
430   // IMPORTANT: Do not change this list without review from a DOM peer!
431   { name: "console", insecureContext: true },
432   // IMPORTANT: Do not change this list without review from a DOM peer!
433   { name: "name", insecureContext: true },
434   // IMPORTANT: Do not change this list without review from a DOM peer!
435   { name: "onmessage", insecureContext: true },
436   // IMPORTANT: Do not change this list without review from a DOM peer!
437   { name: "onmessageerror", insecureContext: true },
438   // IMPORTANT: Do not change this list without review from a DOM peer!
439   { name: "onrtctransform", insecureContext: true },
440   // IMPORTANT: Do not change this list without review from a DOM peer!
441   { name: "postMessage", insecureContext: true },
442   // IMPORTANT: Do not change this list without review from a DOM peer!
443   { name: "requestAnimationFrame", insecureContext: true },
444   // IMPORTANT: Do not change this list without review from a DOM peer!
446 // IMPORTANT: Do not change the list above without review from a DOM peer!
448 // List of functions defined on the global by the test harness or this test
449 // file.
450 let testFunctions = [
451   "ok",
452   "is",
453   "workerTestArrayEquals",
454   "workerTestDone",
455   "workerTestGetPermissions",
456   "workerTestGetHelperData",
457   "entryDisabled",
458   "createInterfaceMap",
459   "runTest",
462 function entryDisabled(
463   entry,
464   {
465     isNightly,
466     isEarlyBetaOrEarlier,
467     isRelease,
468     isDesktop,
469     isAndroid,
470     isInsecureContext,
471     isFennec,
472     isCrossOringinIsolated,
473   }
474 ) {
475   return (
476     entry.nightly === !isNightly ||
477     (entry.nightlyAndroid === !(isAndroid && isNightly) && isAndroid) ||
478     entry.desktop === !isDesktop ||
479     (entry.android === !isAndroid && !entry.nightlyAndroid) ||
480     entry.fennecOrDesktop === (isAndroid && !isFennec) ||
481     entry.fennec === !isFennec ||
482     entry.release === !isRelease ||
483     // The insecureContext test is very purposefully converting
484     // entry.insecureContext to boolean, so undefined will convert to
485     // false.  That way entries without an insecureContext annotation
486     // will get treated as "insecureContext: false", which means exposed
487     // only in secure contexts.
488     (isInsecureContext && !entry.insecureContext) ||
489     entry.earlyBetaOrEarlier === !isEarlyBetaOrEarlier ||
490     entry.crossOringinIsolated === !isCrossOringinIsolated ||
491     entry.disabled
492   );
495 function createInterfaceMap(data, ...interfaceGroups) {
496   var interfaceMap = {};
498   function addInterfaces(interfaces) {
499     for (var entry of interfaces) {
500       if (typeof entry === "string") {
501         ok(!(entry in interfaceMap), "duplicate entry for " + entry);
502         interfaceMap[entry] = !data.isInsecureContext;
503       } else {
504         ok(!(entry.name in interfaceMap), "duplicate entry for " + entry.name);
505         ok(!("pref" in entry), "Bogus pref annotation for " + entry.name);
506         interfaceMap[entry.name] = !entryDisabled(entry, data);
507       }
508     }
509   }
511   for (let interfaceGroup of interfaceGroups) {
512     addInterfaces(interfaceGroup);
513   }
515   return interfaceMap;
518 function runTest(parentName, parent, data, ...interfaceGroups) {
519   var interfaceMap = createInterfaceMap(data, ...interfaceGroups);
520   for (var name of Object.getOwnPropertyNames(parent)) {
521     // Ignore functions on the global that are part of the test (harness).
522     if (parent === self && testFunctions.includes(name)) {
523       continue;
524     }
525     ok(
526       interfaceMap[name],
527       "If this is failing: DANGER, are you sure you want to expose the new interface " +
528         name +
529         " to all webpages as a property of " +
530         parentName +
531         "? Do not make a change to this file without a " +
532         " review from a DOM peer for that specific change!!! (or a JS peer for changes to ecmaGlobals)"
533     );
534     delete interfaceMap[name];
535   }
536   for (var name of Object.keys(interfaceMap)) {
537     ok(
538       name in parent === interfaceMap[name],
539       name +
540         " should " +
541         (interfaceMap[name] ? "" : " NOT") +
542         " be defined on " +
543         parentName
544     );
545     if (!interfaceMap[name]) {
546       delete interfaceMap[name];
547     }
548   }
549   is(
550     Object.keys(interfaceMap).length,
551     0,
552     "The following interface(s) are not enumerated: " +
553       Object.keys(interfaceMap).join(", ")
554   );
557 workerTestGetHelperData(function (data) {
558   runTest("self", self, data, ecmaGlobals, interfaceNamesInGlobalScope);
559   if (WebAssembly && !entryDisabled(wasmGlobalEntry, data)) {
560     runTest("WebAssembly", WebAssembly, data, wasmGlobalInterfaces);
561   }
562   workerTestDone();