View Javadoc
1   /*
2    * Copyright (c) 2002-2025 Gargoyle Software Inc.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * https://www.apache.org/licenses/LICENSE-2.0
8    *
9    * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  package org.htmlunit.javascript.configuration;
16  
17  import java.util.Map;
18  import java.util.WeakHashMap;
19  
20  import org.htmlunit.BrowserVersion;
21  import org.htmlunit.javascript.HtmlUnitScriptable;
22  import org.htmlunit.javascript.host.AudioScheduledSourceNode;
23  import org.htmlunit.javascript.host.BarProp;
24  import org.htmlunit.javascript.host.BatteryManager;
25  import org.htmlunit.javascript.host.BroadcastChannel;
26  import org.htmlunit.javascript.host.Cache;
27  import org.htmlunit.javascript.host.CacheStorage;
28  import org.htmlunit.javascript.host.ClientRect;
29  import org.htmlunit.javascript.host.ClientRectList;
30  import org.htmlunit.javascript.host.Element;
31  import org.htmlunit.javascript.host.External;
32  import org.htmlunit.javascript.host.FontFace;
33  import org.htmlunit.javascript.host.FontFaceSet;
34  import org.htmlunit.javascript.host.Gamepad;
35  import org.htmlunit.javascript.host.GamepadButton;
36  import org.htmlunit.javascript.host.History;
37  import org.htmlunit.javascript.host.ImageBitmap;
38  import org.htmlunit.javascript.host.Location;
39  import org.htmlunit.javascript.host.MessageChannel;
40  import org.htmlunit.javascript.host.MessagePort;
41  import org.htmlunit.javascript.host.MimeType;
42  import org.htmlunit.javascript.host.MimeTypeArray;
43  import org.htmlunit.javascript.host.NamedNodeMap;
44  import org.htmlunit.javascript.host.Navigator;
45  import org.htmlunit.javascript.host.Notification;
46  import org.htmlunit.javascript.host.PerformanceObserver;
47  import org.htmlunit.javascript.host.PerformanceObserverEntryList;
48  import org.htmlunit.javascript.host.PermissionStatus;
49  import org.htmlunit.javascript.host.Permissions;
50  import org.htmlunit.javascript.host.Plugin;
51  import org.htmlunit.javascript.host.PluginArray;
52  import org.htmlunit.javascript.host.PushManager;
53  import org.htmlunit.javascript.host.PushSubscription;
54  import org.htmlunit.javascript.host.PushSubscriptionOptions;
55  import org.htmlunit.javascript.host.ReadableStream;
56  import org.htmlunit.javascript.host.Screen;
57  import org.htmlunit.javascript.host.ScreenOrientation;
58  import org.htmlunit.javascript.host.SharedWorker;
59  import org.htmlunit.javascript.host.Storage;
60  import org.htmlunit.javascript.host.StorageManager;
61  import org.htmlunit.javascript.host.TextDecoder;
62  import org.htmlunit.javascript.host.TextEncoder;
63  import org.htmlunit.javascript.host.Touch;
64  import org.htmlunit.javascript.host.TouchList;
65  import org.htmlunit.javascript.host.URL;
66  import org.htmlunit.javascript.host.URLSearchParams;
67  import org.htmlunit.javascript.host.WebSocket;
68  import org.htmlunit.javascript.host.Window;
69  import org.htmlunit.javascript.host.abort.AbortController;
70  import org.htmlunit.javascript.host.abort.AbortSignal;
71  import org.htmlunit.javascript.host.animations.Animation;
72  import org.htmlunit.javascript.host.animations.AnimationEvent;
73  import org.htmlunit.javascript.host.animations.KeyframeEffect;
74  import org.htmlunit.javascript.host.arrays.Atomics;
75  import org.htmlunit.javascript.host.canvas.CanvasCaptureMediaStream;
76  import org.htmlunit.javascript.host.canvas.CanvasCaptureMediaStreamTrack;
77  import org.htmlunit.javascript.host.canvas.CanvasGradient;
78  import org.htmlunit.javascript.host.canvas.CanvasPattern;
79  import org.htmlunit.javascript.host.canvas.CanvasRenderingContext2D;
80  import org.htmlunit.javascript.host.canvas.ImageBitmapRenderingContext;
81  import org.htmlunit.javascript.host.canvas.ImageData;
82  import org.htmlunit.javascript.host.canvas.IntersectionObserver;
83  import org.htmlunit.javascript.host.canvas.IntersectionObserverEntry;
84  import org.htmlunit.javascript.host.canvas.Path2D;
85  import org.htmlunit.javascript.host.canvas.TextMetrics;
86  import org.htmlunit.javascript.host.canvas.WebGL2RenderingContext;
87  import org.htmlunit.javascript.host.canvas.WebGLActiveInfo;
88  import org.htmlunit.javascript.host.canvas.WebGLBuffer;
89  import org.htmlunit.javascript.host.canvas.WebGLFramebuffer;
90  import org.htmlunit.javascript.host.canvas.WebGLProgram;
91  import org.htmlunit.javascript.host.canvas.WebGLQuery;
92  import org.htmlunit.javascript.host.canvas.WebGLRenderbuffer;
93  import org.htmlunit.javascript.host.canvas.WebGLRenderingContext;
94  import org.htmlunit.javascript.host.canvas.WebGLSampler;
95  import org.htmlunit.javascript.host.canvas.WebGLShader;
96  import org.htmlunit.javascript.host.canvas.WebGLShaderPrecisionFormat;
97  import org.htmlunit.javascript.host.canvas.WebGLSync;
98  import org.htmlunit.javascript.host.canvas.WebGLTexture;
99  import org.htmlunit.javascript.host.canvas.WebGLTransformFeedback;
100 import org.htmlunit.javascript.host.canvas.WebGLUniformLocation;
101 import org.htmlunit.javascript.host.canvas.WebGLVertexArrayObject;
102 import org.htmlunit.javascript.host.crypto.Crypto;
103 import org.htmlunit.javascript.host.crypto.CryptoKey;
104 import org.htmlunit.javascript.host.crypto.SubtleCrypto;
105 import org.htmlunit.javascript.host.css.CSS;
106 import org.htmlunit.javascript.host.css.CSSConditionRule;
107 import org.htmlunit.javascript.host.css.CSSCounterStyleRule;
108 import org.htmlunit.javascript.host.css.CSSFontFaceRule;
109 import org.htmlunit.javascript.host.css.CSSGroupingRule;
110 import org.htmlunit.javascript.host.css.CSSImportRule;
111 import org.htmlunit.javascript.host.css.CSSKeyframeRule;
112 import org.htmlunit.javascript.host.css.CSSKeyframesRule;
113 import org.htmlunit.javascript.host.css.CSSMediaRule;
114 import org.htmlunit.javascript.host.css.CSSNamespaceRule;
115 import org.htmlunit.javascript.host.css.CSSPageRule;
116 import org.htmlunit.javascript.host.css.CSSRule;
117 import org.htmlunit.javascript.host.css.CSSRuleList;
118 import org.htmlunit.javascript.host.css.CSSStyleDeclaration;
119 import org.htmlunit.javascript.host.css.CSSStyleRule;
120 import org.htmlunit.javascript.host.css.CSSStyleSheet;
121 import org.htmlunit.javascript.host.css.CSSSupportsRule;
122 import org.htmlunit.javascript.host.css.CaretPosition;
123 import org.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration;
124 import org.htmlunit.javascript.host.css.MediaList;
125 import org.htmlunit.javascript.host.css.MediaQueryList;
126 import org.htmlunit.javascript.host.css.StyleMedia;
127 import org.htmlunit.javascript.host.css.StyleSheet;
128 import org.htmlunit.javascript.host.css.StyleSheetList;
129 import org.htmlunit.javascript.host.dom.AbstractList;
130 import org.htmlunit.javascript.host.dom.AbstractRange;
131 import org.htmlunit.javascript.host.dom.Attr;
132 import org.htmlunit.javascript.host.dom.CDATASection;
133 import org.htmlunit.javascript.host.dom.CharacterData;
134 import org.htmlunit.javascript.host.dom.Comment;
135 import org.htmlunit.javascript.host.dom.CustomElementRegistry;
136 import org.htmlunit.javascript.host.dom.DOMError;
137 import org.htmlunit.javascript.host.dom.DOMException;
138 import org.htmlunit.javascript.host.dom.DOMImplementation;
139 import org.htmlunit.javascript.host.dom.DOMMatrix;
140 import org.htmlunit.javascript.host.dom.DOMMatrixReadOnly;
141 import org.htmlunit.javascript.host.dom.DOMParser;
142 import org.htmlunit.javascript.host.dom.DOMPoint;
143 import org.htmlunit.javascript.host.dom.DOMPointReadOnly;
144 import org.htmlunit.javascript.host.dom.DOMRectReadOnly;
145 import org.htmlunit.javascript.host.dom.DOMStringList;
146 import org.htmlunit.javascript.host.dom.DOMStringMap;
147 import org.htmlunit.javascript.host.dom.DOMTokenList;
148 import org.htmlunit.javascript.host.dom.Document;
149 import org.htmlunit.javascript.host.dom.DocumentFragment;
150 import org.htmlunit.javascript.host.dom.DocumentType;
151 import org.htmlunit.javascript.host.dom.IdleDeadline;
152 import org.htmlunit.javascript.host.dom.MutationObserver;
153 import org.htmlunit.javascript.host.dom.MutationRecord;
154 import org.htmlunit.javascript.host.dom.Node;
155 import org.htmlunit.javascript.host.dom.NodeFilter;
156 import org.htmlunit.javascript.host.dom.NodeIterator;
157 import org.htmlunit.javascript.host.dom.NodeList;
158 import org.htmlunit.javascript.host.dom.ProcessingInstruction;
159 import org.htmlunit.javascript.host.dom.RadioNodeList;
160 import org.htmlunit.javascript.host.dom.Range;
161 import org.htmlunit.javascript.host.dom.Selection;
162 import org.htmlunit.javascript.host.dom.ShadowRoot;
163 import org.htmlunit.javascript.host.dom.Text;
164 import org.htmlunit.javascript.host.dom.TreeWalker;
165 import org.htmlunit.javascript.host.dom.XPathEvaluator;
166 import org.htmlunit.javascript.host.dom.XPathExpression;
167 import org.htmlunit.javascript.host.dom.XPathNSResolver;
168 import org.htmlunit.javascript.host.dom.XPathResult;
169 import org.htmlunit.javascript.host.draganddrop.DataTransfer;
170 import org.htmlunit.javascript.host.draganddrop.DataTransferItem;
171 import org.htmlunit.javascript.host.draganddrop.DataTransferItemList;
172 import org.htmlunit.javascript.host.event.AudioProcessingEvent;
173 import org.htmlunit.javascript.host.event.BeforeInstallPromptEvent;
174 import org.htmlunit.javascript.host.event.BeforeUnloadEvent;
175 import org.htmlunit.javascript.host.event.BlobEvent;
176 import org.htmlunit.javascript.host.event.ClipboardEvent;
177 import org.htmlunit.javascript.host.event.CloseEvent;
178 import org.htmlunit.javascript.host.event.CompositionEvent;
179 import org.htmlunit.javascript.host.event.CustomEvent;
180 import org.htmlunit.javascript.host.event.DeviceMotionEvent;
181 import org.htmlunit.javascript.host.event.DeviceOrientationEvent;
182 import org.htmlunit.javascript.host.event.DragEvent;
183 import org.htmlunit.javascript.host.event.ErrorEvent;
184 import org.htmlunit.javascript.host.event.Event;
185 import org.htmlunit.javascript.host.event.EventSource;
186 import org.htmlunit.javascript.host.event.EventTarget;
187 import org.htmlunit.javascript.host.event.FocusEvent;
188 import org.htmlunit.javascript.host.event.GamepadEvent;
189 import org.htmlunit.javascript.host.event.HashChangeEvent;
190 import org.htmlunit.javascript.host.event.IDBVersionChangeEvent;
191 import org.htmlunit.javascript.host.event.InputEvent;
192 import org.htmlunit.javascript.host.event.KeyboardEvent;
193 import org.htmlunit.javascript.host.event.MIDIConnectionEvent;
194 import org.htmlunit.javascript.host.event.MIDIMessageEvent;
195 import org.htmlunit.javascript.host.event.MediaEncryptedEvent;
196 import org.htmlunit.javascript.host.event.MediaKeyMessageEvent;
197 import org.htmlunit.javascript.host.event.MediaQueryListEvent;
198 import org.htmlunit.javascript.host.event.MediaStreamEvent;
199 import org.htmlunit.javascript.host.event.MediaStreamTrackEvent;
200 import org.htmlunit.javascript.host.event.MessageEvent;
201 import org.htmlunit.javascript.host.event.MouseEvent;
202 import org.htmlunit.javascript.host.event.MouseScrollEvent;
203 import org.htmlunit.javascript.host.event.MutationEvent;
204 import org.htmlunit.javascript.host.event.OfflineAudioCompletionEvent;
205 import org.htmlunit.javascript.host.event.PageTransitionEvent;
206 import org.htmlunit.javascript.host.event.PointerEvent;
207 import org.htmlunit.javascript.host.event.PopStateEvent;
208 import org.htmlunit.javascript.host.event.PresentationConnectionAvailableEvent;
209 import org.htmlunit.javascript.host.event.PresentationConnectionCloseEvent;
210 import org.htmlunit.javascript.host.event.ProgressEvent;
211 import org.htmlunit.javascript.host.event.PromiseRejectionEvent;
212 import org.htmlunit.javascript.host.event.RTCDataChannelEvent;
213 import org.htmlunit.javascript.host.event.RTCPeerConnectionIceEvent;
214 import org.htmlunit.javascript.host.event.SecurityPolicyViolationEvent;
215 import org.htmlunit.javascript.host.event.SpeechSynthesisEvent;
216 import org.htmlunit.javascript.host.event.StorageEvent;
217 import org.htmlunit.javascript.host.event.SubmitEvent;
218 import org.htmlunit.javascript.host.event.TextEvent;
219 import org.htmlunit.javascript.host.event.TimeEvent;
220 import org.htmlunit.javascript.host.event.TouchEvent;
221 import org.htmlunit.javascript.host.event.TrackEvent;
222 import org.htmlunit.javascript.host.event.TransitionEvent;
223 import org.htmlunit.javascript.host.event.UIEvent;
224 import org.htmlunit.javascript.host.event.WebGLContextEvent;
225 import org.htmlunit.javascript.host.event.WebkitSpeechRecognitionError;
226 import org.htmlunit.javascript.host.event.WebkitSpeechRecognitionEvent;
227 import org.htmlunit.javascript.host.event.WheelEvent;
228 import org.htmlunit.javascript.host.fetch.Headers;
229 import org.htmlunit.javascript.host.fetch.Request;
230 import org.htmlunit.javascript.host.fetch.Response;
231 import org.htmlunit.javascript.host.file.Blob;
232 import org.htmlunit.javascript.host.file.File;
233 import org.htmlunit.javascript.host.file.FileList;
234 import org.htmlunit.javascript.host.file.FileReader;
235 import org.htmlunit.javascript.host.file.FileSystem;
236 import org.htmlunit.javascript.host.file.FileSystemDirectoryEntry;
237 import org.htmlunit.javascript.host.file.FileSystemDirectoryReader;
238 import org.htmlunit.javascript.host.file.FileSystemEntry;
239 import org.htmlunit.javascript.host.file.FileSystemFileEntry;
240 import org.htmlunit.javascript.host.geo.Geolocation;
241 import org.htmlunit.javascript.host.geo.GeolocationCoordinates;
242 import org.htmlunit.javascript.host.geo.GeolocationPosition;
243 import org.htmlunit.javascript.host.geo.GeolocationPositionError;
244 import org.htmlunit.javascript.host.html.Audio;
245 import org.htmlunit.javascript.host.html.HTMLAllCollection;
246 import org.htmlunit.javascript.host.html.HTMLAnchorElement;
247 import org.htmlunit.javascript.host.html.HTMLAreaElement;
248 import org.htmlunit.javascript.host.html.HTMLAudioElement;
249 import org.htmlunit.javascript.host.html.HTMLBRElement;
250 import org.htmlunit.javascript.host.html.HTMLBaseElement;
251 import org.htmlunit.javascript.host.html.HTMLBodyElement;
252 import org.htmlunit.javascript.host.html.HTMLButtonElement;
253 import org.htmlunit.javascript.host.html.HTMLCanvasElement;
254 import org.htmlunit.javascript.host.html.HTMLCollection;
255 import org.htmlunit.javascript.host.html.HTMLDListElement;
256 import org.htmlunit.javascript.host.html.HTMLDataElement;
257 import org.htmlunit.javascript.host.html.HTMLDataListElement;
258 import org.htmlunit.javascript.host.html.HTMLDetailsElement;
259 import org.htmlunit.javascript.host.html.HTMLDialogElement;
260 import org.htmlunit.javascript.host.html.HTMLDirectoryElement;
261 import org.htmlunit.javascript.host.html.HTMLDivElement;
262 import org.htmlunit.javascript.host.html.HTMLDocument;
263 import org.htmlunit.javascript.host.html.HTMLElement;
264 import org.htmlunit.javascript.host.html.HTMLEmbedElement;
265 import org.htmlunit.javascript.host.html.HTMLFieldSetElement;
266 import org.htmlunit.javascript.host.html.HTMLFontElement;
267 import org.htmlunit.javascript.host.html.HTMLFormControlsCollection;
268 import org.htmlunit.javascript.host.html.HTMLFormElement;
269 import org.htmlunit.javascript.host.html.HTMLFrameElement;
270 import org.htmlunit.javascript.host.html.HTMLFrameSetElement;
271 import org.htmlunit.javascript.host.html.HTMLHRElement;
272 import org.htmlunit.javascript.host.html.HTMLHeadElement;
273 import org.htmlunit.javascript.host.html.HTMLHeadingElement;
274 import org.htmlunit.javascript.host.html.HTMLHtmlElement;
275 import org.htmlunit.javascript.host.html.HTMLIFrameElement;
276 import org.htmlunit.javascript.host.html.HTMLImageElement;
277 import org.htmlunit.javascript.host.html.HTMLInputElement;
278 import org.htmlunit.javascript.host.html.HTMLLIElement;
279 import org.htmlunit.javascript.host.html.HTMLLabelElement;
280 import org.htmlunit.javascript.host.html.HTMLLegendElement;
281 import org.htmlunit.javascript.host.html.HTMLLinkElement;
282 import org.htmlunit.javascript.host.html.HTMLListElement;
283 import org.htmlunit.javascript.host.html.HTMLMapElement;
284 import org.htmlunit.javascript.host.html.HTMLMarqueeElement;
285 import org.htmlunit.javascript.host.html.HTMLMediaElement;
286 import org.htmlunit.javascript.host.html.HTMLMenuElement;
287 import org.htmlunit.javascript.host.html.HTMLMetaElement;
288 import org.htmlunit.javascript.host.html.HTMLMeterElement;
289 import org.htmlunit.javascript.host.html.HTMLModElement;
290 import org.htmlunit.javascript.host.html.HTMLOListElement;
291 import org.htmlunit.javascript.host.html.HTMLObjectElement;
292 import org.htmlunit.javascript.host.html.HTMLOptGroupElement;
293 import org.htmlunit.javascript.host.html.HTMLOptionElement;
294 import org.htmlunit.javascript.host.html.HTMLOptionsCollection;
295 import org.htmlunit.javascript.host.html.HTMLOutputElement;
296 import org.htmlunit.javascript.host.html.HTMLParagraphElement;
297 import org.htmlunit.javascript.host.html.HTMLParamElement;
298 import org.htmlunit.javascript.host.html.HTMLPictureElement;
299 import org.htmlunit.javascript.host.html.HTMLPreElement;
300 import org.htmlunit.javascript.host.html.HTMLProgressElement;
301 import org.htmlunit.javascript.host.html.HTMLQuoteElement;
302 import org.htmlunit.javascript.host.html.HTMLScriptElement;
303 import org.htmlunit.javascript.host.html.HTMLSelectElement;
304 import org.htmlunit.javascript.host.html.HTMLSlotElement;
305 import org.htmlunit.javascript.host.html.HTMLSourceElement;
306 import org.htmlunit.javascript.host.html.HTMLSpanElement;
307 import org.htmlunit.javascript.host.html.HTMLStyleElement;
308 import org.htmlunit.javascript.host.html.HTMLTableCaptionElement;
309 import org.htmlunit.javascript.host.html.HTMLTableCellElement;
310 import org.htmlunit.javascript.host.html.HTMLTableColElement;
311 import org.htmlunit.javascript.host.html.HTMLTableComponent;
312 import org.htmlunit.javascript.host.html.HTMLTableElement;
313 import org.htmlunit.javascript.host.html.HTMLTableRowElement;
314 import org.htmlunit.javascript.host.html.HTMLTableSectionElement;
315 import org.htmlunit.javascript.host.html.HTMLTemplateElement;
316 import org.htmlunit.javascript.host.html.HTMLTextAreaElement;
317 import org.htmlunit.javascript.host.html.HTMLTimeElement;
318 import org.htmlunit.javascript.host.html.HTMLTitleElement;
319 import org.htmlunit.javascript.host.html.HTMLTrackElement;
320 import org.htmlunit.javascript.host.html.HTMLUListElement;
321 import org.htmlunit.javascript.host.html.HTMLUnknownElement;
322 import org.htmlunit.javascript.host.html.HTMLVideoElement;
323 import org.htmlunit.javascript.host.html.RowContainer;
324 import org.htmlunit.javascript.host.html.ValidityState;
325 import org.htmlunit.javascript.host.idb.IDBCursor;
326 import org.htmlunit.javascript.host.idb.IDBCursorWithValue;
327 import org.htmlunit.javascript.host.idb.IDBDatabase;
328 import org.htmlunit.javascript.host.idb.IDBFactory;
329 import org.htmlunit.javascript.host.idb.IDBIndex;
330 import org.htmlunit.javascript.host.idb.IDBKeyRange;
331 import org.htmlunit.javascript.host.idb.IDBObjectStore;
332 import org.htmlunit.javascript.host.idb.IDBOpenDBRequest;
333 import org.htmlunit.javascript.host.idb.IDBRequest;
334 import org.htmlunit.javascript.host.idb.IDBTransaction;
335 import org.htmlunit.javascript.host.media.AnalyserNode;
336 import org.htmlunit.javascript.host.media.AudioBuffer;
337 import org.htmlunit.javascript.host.media.AudioBufferSourceNode;
338 import org.htmlunit.javascript.host.media.AudioContext;
339 import org.htmlunit.javascript.host.media.AudioDestinationNode;
340 import org.htmlunit.javascript.host.media.AudioListener;
341 import org.htmlunit.javascript.host.media.AudioNode;
342 import org.htmlunit.javascript.host.media.AudioParam;
343 import org.htmlunit.javascript.host.media.BaseAudioContext;
344 import org.htmlunit.javascript.host.media.BiquadFilterNode;
345 import org.htmlunit.javascript.host.media.ChannelMergerNode;
346 import org.htmlunit.javascript.host.media.ChannelSplitterNode;
347 import org.htmlunit.javascript.host.media.ConstantSourceNode;
348 import org.htmlunit.javascript.host.media.ConvolverNode;
349 import org.htmlunit.javascript.host.media.DelayNode;
350 import org.htmlunit.javascript.host.media.DynamicsCompressorNode;
351 import org.htmlunit.javascript.host.media.GainNode;
352 import org.htmlunit.javascript.host.media.IIRFilterNode;
353 import org.htmlunit.javascript.host.media.InputDeviceCapabilities;
354 import org.htmlunit.javascript.host.media.MediaDeviceInfo;
355 import org.htmlunit.javascript.host.media.MediaDevices;
356 import org.htmlunit.javascript.host.media.MediaElementAudioSourceNode;
357 import org.htmlunit.javascript.host.media.MediaError;
358 import org.htmlunit.javascript.host.media.MediaKeyError;
359 import org.htmlunit.javascript.host.media.MediaKeySession;
360 import org.htmlunit.javascript.host.media.MediaKeyStatusMap;
361 import org.htmlunit.javascript.host.media.MediaKeySystemAccess;
362 import org.htmlunit.javascript.host.media.MediaKeys;
363 import org.htmlunit.javascript.host.media.MediaRecorder;
364 import org.htmlunit.javascript.host.media.MediaSource;
365 import org.htmlunit.javascript.host.media.MediaStream;
366 import org.htmlunit.javascript.host.media.MediaStreamAudioDestinationNode;
367 import org.htmlunit.javascript.host.media.MediaStreamAudioSourceNode;
368 import org.htmlunit.javascript.host.media.MediaStreamTrack;
369 import org.htmlunit.javascript.host.media.OfflineAudioContext;
370 import org.htmlunit.javascript.host.media.OscillatorNode;
371 import org.htmlunit.javascript.host.media.PannerNode;
372 import org.htmlunit.javascript.host.media.PeriodicSyncManager;
373 import org.htmlunit.javascript.host.media.PeriodicWave;
374 import org.htmlunit.javascript.host.media.RemotePlayback;
375 import org.htmlunit.javascript.host.media.ScriptProcessorNode;
376 import org.htmlunit.javascript.host.media.SourceBuffer;
377 import org.htmlunit.javascript.host.media.SourceBufferList;
378 import org.htmlunit.javascript.host.media.StereoPannerNode;
379 import org.htmlunit.javascript.host.media.TextTrack;
380 import org.htmlunit.javascript.host.media.TextTrackCue;
381 import org.htmlunit.javascript.host.media.TextTrackCueList;
382 import org.htmlunit.javascript.host.media.TextTrackList;
383 import org.htmlunit.javascript.host.media.TimeRanges;
384 import org.htmlunit.javascript.host.media.VTTCue;
385 import org.htmlunit.javascript.host.media.VideoPlaybackQuality;
386 import org.htmlunit.javascript.host.media.WaveShaperNode;
387 import org.htmlunit.javascript.host.media.midi.MIDIAccess;
388 import org.htmlunit.javascript.host.media.midi.MIDIInput;
389 import org.htmlunit.javascript.host.media.midi.MIDIInputMap;
390 import org.htmlunit.javascript.host.media.midi.MIDIOutput;
391 import org.htmlunit.javascript.host.media.midi.MIDIOutputMap;
392 import org.htmlunit.javascript.host.media.midi.MIDIPort;
393 import org.htmlunit.javascript.host.media.presentation.Presentation;
394 import org.htmlunit.javascript.host.media.presentation.PresentationAvailability;
395 import org.htmlunit.javascript.host.media.presentation.PresentationConnection;
396 import org.htmlunit.javascript.host.media.presentation.PresentationRequest;
397 import org.htmlunit.javascript.host.media.rtc.RTCCertificate;
398 import org.htmlunit.javascript.host.media.rtc.RTCIceCandidate;
399 import org.htmlunit.javascript.host.media.rtc.RTCPeerConnection;
400 import org.htmlunit.javascript.host.media.rtc.RTCSctpTransport;
401 import org.htmlunit.javascript.host.media.rtc.RTCSessionDescription;
402 import org.htmlunit.javascript.host.media.rtc.RTCStatsReport;
403 import org.htmlunit.javascript.host.network.NetworkInformation;
404 import org.htmlunit.javascript.host.payment.PaymentAddress;
405 import org.htmlunit.javascript.host.payment.PaymentRequest;
406 import org.htmlunit.javascript.host.payment.PaymentResponse;
407 import org.htmlunit.javascript.host.performance.Performance;
408 import org.htmlunit.javascript.host.performance.PerformanceEntry;
409 import org.htmlunit.javascript.host.performance.PerformanceMark;
410 import org.htmlunit.javascript.host.performance.PerformanceMeasure;
411 import org.htmlunit.javascript.host.performance.PerformanceNavigation;
412 import org.htmlunit.javascript.host.performance.PerformanceNavigationTiming;
413 import org.htmlunit.javascript.host.performance.PerformanceResourceTiming;
414 import org.htmlunit.javascript.host.performance.PerformanceTiming;
415 import org.htmlunit.javascript.host.security.Credential;
416 import org.htmlunit.javascript.host.security.CredentialsContainer;
417 import org.htmlunit.javascript.host.security.FederatedCredential;
418 import org.htmlunit.javascript.host.security.PasswordCredential;
419 import org.htmlunit.javascript.host.speech.SpeechSynthesis;
420 import org.htmlunit.javascript.host.speech.SpeechSynthesisErrorEvent;
421 import org.htmlunit.javascript.host.speech.SpeechSynthesisUtterance;
422 import org.htmlunit.javascript.host.speech.SpeechSynthesisVoice;
423 import org.htmlunit.javascript.host.speech.WebkitSpeechGrammar;
424 import org.htmlunit.javascript.host.speech.WebkitSpeechGrammarList;
425 import org.htmlunit.javascript.host.speech.WebkitSpeechRecognition;
426 import org.htmlunit.javascript.host.svg.SVGAElement;
427 import org.htmlunit.javascript.host.svg.SVGAngle;
428 import org.htmlunit.javascript.host.svg.SVGAnimateElement;
429 import org.htmlunit.javascript.host.svg.SVGAnimateMotionElement;
430 import org.htmlunit.javascript.host.svg.SVGAnimateTransformElement;
431 import org.htmlunit.javascript.host.svg.SVGAnimatedAngle;
432 import org.htmlunit.javascript.host.svg.SVGAnimatedBoolean;
433 import org.htmlunit.javascript.host.svg.SVGAnimatedEnumeration;
434 import org.htmlunit.javascript.host.svg.SVGAnimatedInteger;
435 import org.htmlunit.javascript.host.svg.SVGAnimatedLength;
436 import org.htmlunit.javascript.host.svg.SVGAnimatedLengthList;
437 import org.htmlunit.javascript.host.svg.SVGAnimatedNumber;
438 import org.htmlunit.javascript.host.svg.SVGAnimatedNumberList;
439 import org.htmlunit.javascript.host.svg.SVGAnimatedPreserveAspectRatio;
440 import org.htmlunit.javascript.host.svg.SVGAnimatedRect;
441 import org.htmlunit.javascript.host.svg.SVGAnimatedString;
442 import org.htmlunit.javascript.host.svg.SVGAnimatedTransformList;
443 import org.htmlunit.javascript.host.svg.SVGAnimationElement;
444 import org.htmlunit.javascript.host.svg.SVGCircleElement;
445 import org.htmlunit.javascript.host.svg.SVGClipPathElement;
446 import org.htmlunit.javascript.host.svg.SVGComponentTransferFunctionElement;
447 import org.htmlunit.javascript.host.svg.SVGDefsElement;
448 import org.htmlunit.javascript.host.svg.SVGDescElement;
449 import org.htmlunit.javascript.host.svg.SVGDiscardElement;
450 import org.htmlunit.javascript.host.svg.SVGElement;
451 import org.htmlunit.javascript.host.svg.SVGEllipseElement;
452 import org.htmlunit.javascript.host.svg.SVGFEBlendElement;
453 import org.htmlunit.javascript.host.svg.SVGFEColorMatrixElement;
454 import org.htmlunit.javascript.host.svg.SVGFEComponentTransferElement;
455 import org.htmlunit.javascript.host.svg.SVGFECompositeElement;
456 import org.htmlunit.javascript.host.svg.SVGFEConvolveMatrixElement;
457 import org.htmlunit.javascript.host.svg.SVGFEDiffuseLightingElement;
458 import org.htmlunit.javascript.host.svg.SVGFEDisplacementMapElement;
459 import org.htmlunit.javascript.host.svg.SVGFEDistantLightElement;
460 import org.htmlunit.javascript.host.svg.SVGFEDropShadowElement;
461 import org.htmlunit.javascript.host.svg.SVGFEFloodElement;
462 import org.htmlunit.javascript.host.svg.SVGFEFuncAElement;
463 import org.htmlunit.javascript.host.svg.SVGFEFuncBElement;
464 import org.htmlunit.javascript.host.svg.SVGFEFuncGElement;
465 import org.htmlunit.javascript.host.svg.SVGFEFuncRElement;
466 import org.htmlunit.javascript.host.svg.SVGFEGaussianBlurElement;
467 import org.htmlunit.javascript.host.svg.SVGFEImageElement;
468 import org.htmlunit.javascript.host.svg.SVGFEMergeElement;
469 import org.htmlunit.javascript.host.svg.SVGFEMergeNodeElement;
470 import org.htmlunit.javascript.host.svg.SVGFEMorphologyElement;
471 import org.htmlunit.javascript.host.svg.SVGFEOffsetElement;
472 import org.htmlunit.javascript.host.svg.SVGFEPointLightElement;
473 import org.htmlunit.javascript.host.svg.SVGFESpecularLightingElement;
474 import org.htmlunit.javascript.host.svg.SVGFESpotLightElement;
475 import org.htmlunit.javascript.host.svg.SVGFETileElement;
476 import org.htmlunit.javascript.host.svg.SVGFETurbulenceElement;
477 import org.htmlunit.javascript.host.svg.SVGFilterElement;
478 import org.htmlunit.javascript.host.svg.SVGForeignObjectElement;
479 import org.htmlunit.javascript.host.svg.SVGGElement;
480 import org.htmlunit.javascript.host.svg.SVGGeometryElement;
481 import org.htmlunit.javascript.host.svg.SVGGradientElement;
482 import org.htmlunit.javascript.host.svg.SVGGraphicsElement;
483 import org.htmlunit.javascript.host.svg.SVGImageElement;
484 import org.htmlunit.javascript.host.svg.SVGLength;
485 import org.htmlunit.javascript.host.svg.SVGLengthList;
486 import org.htmlunit.javascript.host.svg.SVGLineElement;
487 import org.htmlunit.javascript.host.svg.SVGLinearGradientElement;
488 import org.htmlunit.javascript.host.svg.SVGMPathElement;
489 import org.htmlunit.javascript.host.svg.SVGMarkerElement;
490 import org.htmlunit.javascript.host.svg.SVGMaskElement;
491 import org.htmlunit.javascript.host.svg.SVGMatrix;
492 import org.htmlunit.javascript.host.svg.SVGMetadataElement;
493 import org.htmlunit.javascript.host.svg.SVGNumber;
494 import org.htmlunit.javascript.host.svg.SVGNumberList;
495 import org.htmlunit.javascript.host.svg.SVGPathElement;
496 import org.htmlunit.javascript.host.svg.SVGPatternElement;
497 import org.htmlunit.javascript.host.svg.SVGPoint;
498 import org.htmlunit.javascript.host.svg.SVGPointList;
499 import org.htmlunit.javascript.host.svg.SVGPolygonElement;
500 import org.htmlunit.javascript.host.svg.SVGPolylineElement;
501 import org.htmlunit.javascript.host.svg.SVGPreserveAspectRatio;
502 import org.htmlunit.javascript.host.svg.SVGRadialGradientElement;
503 import org.htmlunit.javascript.host.svg.SVGRect;
504 import org.htmlunit.javascript.host.svg.SVGRectElement;
505 import org.htmlunit.javascript.host.svg.SVGSVGElement;
506 import org.htmlunit.javascript.host.svg.SVGScriptElement;
507 import org.htmlunit.javascript.host.svg.SVGSetElement;
508 import org.htmlunit.javascript.host.svg.SVGStopElement;
509 import org.htmlunit.javascript.host.svg.SVGStringList;
510 import org.htmlunit.javascript.host.svg.SVGStyleElement;
511 import org.htmlunit.javascript.host.svg.SVGSwitchElement;
512 import org.htmlunit.javascript.host.svg.SVGSymbolElement;
513 import org.htmlunit.javascript.host.svg.SVGTSpanElement;
514 import org.htmlunit.javascript.host.svg.SVGTextContentElement;
515 import org.htmlunit.javascript.host.svg.SVGTextElement;
516 import org.htmlunit.javascript.host.svg.SVGTextPathElement;
517 import org.htmlunit.javascript.host.svg.SVGTextPositioningElement;
518 import org.htmlunit.javascript.host.svg.SVGTitleElement;
519 import org.htmlunit.javascript.host.svg.SVGTransform;
520 import org.htmlunit.javascript.host.svg.SVGTransformList;
521 import org.htmlunit.javascript.host.svg.SVGUnitTypes;
522 import org.htmlunit.javascript.host.svg.SVGUseElement;
523 import org.htmlunit.javascript.host.svg.SVGViewElement;
524 import org.htmlunit.javascript.host.worker.ServiceWorker;
525 import org.htmlunit.javascript.host.worker.ServiceWorkerContainer;
526 import org.htmlunit.javascript.host.worker.ServiceWorkerRegistration;
527 import org.htmlunit.javascript.host.worker.SyncManager;
528 import org.htmlunit.javascript.host.worker.Worker;
529 import org.htmlunit.javascript.host.xml.FormData;
530 import org.htmlunit.javascript.host.xml.XMLDocument;
531 import org.htmlunit.javascript.host.xml.XMLHttpRequest;
532 import org.htmlunit.javascript.host.xml.XMLHttpRequestEventTarget;
533 import org.htmlunit.javascript.host.xml.XMLHttpRequestUpload;
534 import org.htmlunit.javascript.host.xml.XMLSerializer;
535 import org.htmlunit.javascript.host.xml.XSLTProcessor;
536 
537 /**
538  * A container for all the JavaScript configuration information.
539  *
540  * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
541  * @author Chris Erskine
542  * @author Ahmed Ashour
543  * @author Ronald Brill
544  * @author Frank Danek
545  */
546 public final class JavaScriptConfiguration extends AbstractJavaScriptConfiguration {
547 
548     @SuppressWarnings("unchecked")
549     static final Class<? extends HtmlUnitScriptable>[] CLASSES_ = new Class[] {
550         AbortController.class, AbortSignal.class,
551         AbstractList.class, AbstractRange.class, AnalyserNode.class,
552         Animation.class, AnimationEvent.class, Atomics.class,
553         Attr.class, Audio.class, AudioBuffer.class,
554         AudioBufferSourceNode.class, AudioContext.class, AudioDestinationNode.class, AudioListener.class,
555         AudioNode.class, AudioParam.class, AudioProcessingEvent.class, AudioScheduledSourceNode.class,
556         BarProp.class, BaseAudioContext.class,
557         BatteryManager.class, BeforeInstallPromptEvent.class, BeforeUnloadEvent.class, BiquadFilterNode.class,
558         Blob.class, BlobEvent.class, BroadcastChannel.class,
559         Cache.class, CacheStorage.class,
560         CanvasCaptureMediaStream.class, CanvasCaptureMediaStreamTrack.class,
561         CanvasGradient.class, CanvasPattern.class, CanvasRenderingContext2D.class, CaretPosition.class,
562         CDATASection.class, ChannelMergerNode.class, ChannelSplitterNode.class, CharacterData.class, ClientRect.class,
563         ClientRectList.class, ClipboardEvent.class,
564         CloseEvent.class, Comment.class, CompositionEvent.class, ComputedCSSStyleDeclaration.class,
565         ConstantSourceNode.class, ConvolverNode.class,
566         Credential.class, CredentialsContainer.class, Crypto.class,
567         CryptoKey.class, CSS.class, CSSConditionRule.class,
568         CSSCounterStyleRule.class, CSSFontFaceRule.class, CSSGroupingRule.class, CSSImportRule.class,
569         CSSKeyframeRule.class, CSSKeyframesRule.class, CSSMediaRule.class, CSSNamespaceRule.class, CSSPageRule.class,
570         CSSRule.class, CSSRuleList.class, CSSStyleDeclaration.class, CSSStyleRule.class,
571         CSSStyleSheet.class,
572         CSSSupportsRule.class, CustomElementRegistry.class,
573         CustomEvent.class, DataTransfer.class,
574         DataTransferItem.class, DataTransferItemList.class, DelayNode.class,
575         DeviceMotionEvent.class, DeviceOrientationEvent.class,
576         Document.class, DocumentFragment.class, DocumentType.class, DOMError.class, DOMException.class,
577         DOMImplementation.class, DOMMatrix.class, DOMMatrixReadOnly.class, DOMParser.class, DOMPoint.class,
578         DOMPointReadOnly.class, DOMRectReadOnly.class,
579         DOMStringList.class, DOMStringMap.class, DOMTokenList.class,
580         DragEvent.class, DynamicsCompressorNode.class,
581         Element.class, ErrorEvent.class, Event.class, EventSource.class,
582         EventTarget.class, External.class, FederatedCredential.class,
583         File.class, FileList.class, FileReader.class,
584         FileSystem.class, FileSystemDirectoryEntry.class, FileSystemDirectoryReader.class,
585         FileSystemEntry.class, FileSystemFileEntry.class,
586         FocusEvent.class, FontFace.class,
587         FontFaceSet.class, FormData.class, GainNode.class, Gamepad.class,
588         GamepadButton.class, GamepadEvent.class,
589         Geolocation.class, GeolocationCoordinates.class, GeolocationPosition.class, GeolocationPositionError.class,
590         HashChangeEvent.class, Headers.class, History.class,
591         HTMLAllCollection.class, HTMLAnchorElement.class, HTMLAreaElement.class, HTMLAudioElement.class,
592         HTMLBaseElement.class,
593         HTMLBodyElement.class, HTMLBRElement.class, HTMLButtonElement.class,
594         HTMLCanvasElement.class, HTMLCollection.class,
595         HTMLDataElement.class, HTMLDataListElement.class,
596         HTMLDetailsElement.class, HTMLDialogElement.class, HTMLDirectoryElement.class,
597         HTMLDivElement.class, HTMLDListElement.class, HTMLDocument.class, HTMLElement.class,
598         HTMLEmbedElement.class, HTMLFieldSetElement.class,
599         HTMLFontElement.class, HTMLFormControlsCollection.class, HTMLFormElement.class, HTMLFrameElement.class,
600         HTMLFrameSetElement.class,
601         HTMLHeadElement.class, HTMLHeadingElement.class, HTMLHRElement.class, HTMLHtmlElement.class,
602         HTMLIFrameElement.class, HTMLImageElement.class, HTMLInputElement.class, HTMLLabelElement.class,
603         HTMLLegendElement.class, HTMLLIElement.class, HTMLLinkElement.class, HTMLListElement.class,
604         HTMLMapElement.class, HTMLMarqueeElement.class,
605         HTMLMediaElement.class, HTMLMenuElement.class, HTMLMetaElement.class,
606         HTMLMeterElement.class, HTMLModElement.class,
607         HTMLObjectElement.class, HTMLOListElement.class, HTMLOptGroupElement.class,
608         HTMLOptionElement.class, HTMLOptionsCollection.class, HTMLOutputElement.class,
609         HTMLParagraphElement.class, HTMLParamElement.class, HTMLPictureElement.class,
610         HTMLPreElement.class, HTMLProgressElement.class, HTMLQuoteElement.class, HTMLScriptElement.class,
611         HTMLSelectElement.class, HTMLSlotElement.class, HTMLSourceElement.class,
612         HTMLSpanElement.class,
613         HTMLStyleElement.class, HTMLTableCaptionElement.class, HTMLTableCellElement.class, HTMLTableColElement.class,
614         HTMLTableComponent.class, HTMLTableElement.class,
615         HTMLTableRowElement.class, HTMLTableSectionElement.class,
616         HTMLTemplateElement.class, HTMLTextAreaElement.class, HTMLTimeElement.class,
617         HTMLTitleElement.class, HTMLTrackElement.class, HTMLUListElement.class, HTMLUnknownElement.class,
618         HTMLVideoElement.class,
619         IDBCursor.class, IDBCursorWithValue.class, IDBDatabase.class, IDBFactory.class, IDBIndex.class,
620         IDBKeyRange.class, IDBObjectStore.class, IDBOpenDBRequest.class, IDBRequest.class,
621         IDBTransaction.class, IDBVersionChangeEvent.class, IdleDeadline.class, IIRFilterNode.class,
622         ImageBitmap.class, ImageBitmapRenderingContext.class, ImageData.class,
623         InputDeviceCapabilities.class, InputEvent.class,
624         IntersectionObserver.class, IntersectionObserverEntry.class,
625         KeyboardEvent.class, KeyframeEffect.class,
626         Location.class,
627         MediaDeviceInfo.class,
628         MediaDevices.class, MediaElementAudioSourceNode.class, MediaEncryptedEvent.class, MediaError.class,
629         MediaKeyError.class, MediaKeyMessageEvent.class, MediaKeys.class, MediaKeySession.class,
630         MediaKeyStatusMap.class, MediaKeySystemAccess.class, MediaList.class, MediaQueryList.class,
631         MediaQueryListEvent.class, MediaRecorder.class,
632         MediaSource.class, MediaStream.class, MediaStreamAudioDestinationNode.class, MediaStreamAudioSourceNode.class,
633         MediaStreamEvent.class, MediaStreamTrack.class, MediaStreamTrackEvent.class, MessageChannel.class,
634         MessageEvent.class, MessagePort.class, MIDIAccess.class, MIDIConnectionEvent.class, MIDIInput.class,
635         MIDIInputMap.class, MIDIMessageEvent.class, MIDIOutput.class, MIDIOutputMap.class, MIDIPort.class,
636         MimeType.class, MimeTypeArray.class, MouseEvent.class, MouseScrollEvent.class,
637         MutationEvent.class, MutationObserver.class, MutationRecord.class, NamedNodeMap.class,
638         Navigator.class, NetworkInformation.class, Node.class, NodeFilter.class, NodeIterator.class,
639         NodeList.class, Notification.class,
640         OfflineAudioCompletionEvent.class,
641         OfflineAudioContext.class, OscillatorNode.class, PageTransitionEvent.class, PannerNode.class,
642         PasswordCredential.class,
643         Path2D.class,
644         PaymentAddress.class, PaymentRequest.class, PaymentResponse.class,
645         Performance.class, PerformanceEntry.class, PerformanceMark.class,
646         PerformanceMeasure.class, PerformanceNavigation.class, PerformanceNavigationTiming.class,
647         PerformanceObserver.class, PerformanceObserverEntryList.class,
648         PerformanceResourceTiming.class, PerformanceTiming.class, PeriodicSyncManager.class, PeriodicWave.class,
649         Permissions.class, PermissionStatus.class, Plugin.class, PluginArray.class,
650         PointerEvent.class, PopStateEvent.class, Presentation.class,
651         PresentationAvailability.class, PresentationConnection.class, PresentationConnectionAvailableEvent.class,
652         PresentationConnectionCloseEvent.class, PresentationRequest.class,
653         ProcessingInstruction.class, ProgressEvent.class, PromiseRejectionEvent.class,
654         PushManager.class,
655         PushSubscription.class, PushSubscriptionOptions.class, RadioNodeList.class, Range.class, ReadableStream.class,
656         RemotePlayback.class, Request.class, Response.class, RowContainer.class, RTCCertificate.class,
657         RTCDataChannelEvent.class, RTCIceCandidate.class, RTCPeerConnection.class, RTCPeerConnectionIceEvent.class,
658         RTCSctpTransport.class, RTCSessionDescription.class, RTCStatsReport.class,
659         Screen.class, ScreenOrientation.class, ScriptProcessorNode.class,
660         SecurityPolicyViolationEvent.class, Selection.class, ServiceWorker.class, ServiceWorkerContainer.class,
661         ServiceWorkerRegistration.class,
662         ShadowRoot.class, SharedWorker.class, SourceBuffer.class, SourceBufferList.class,
663         SpeechSynthesis.class, SpeechSynthesisErrorEvent.class, SpeechSynthesisEvent.class,
664         SpeechSynthesisUtterance.class, SpeechSynthesisVoice.class,
665         StereoPannerNode.class, Storage.class, StorageEvent.class, StorageManager.class,
666         StyleMedia.class, StyleSheet.class, StyleSheetList.class, SubmitEvent.class, SubtleCrypto.class,
667         SVGAElement.class, SVGAngle.class, SVGAnimatedAngle.class,
668         SVGAnimatedBoolean.class, SVGAnimatedEnumeration.class, SVGAnimatedInteger.class,
669         SVGAnimatedLength.class, SVGAnimatedLengthList.class, SVGAnimatedNumber.class, SVGAnimatedNumberList.class,
670         SVGAnimatedPreserveAspectRatio.class, SVGAnimatedRect.class, SVGAnimatedString.class,
671         SVGAnimatedTransformList.class, SVGAnimateElement.class,
672         SVGAnimateMotionElement.class, SVGAnimateTransformElement.class, SVGAnimationElement.class,
673         SVGCircleElement.class,
674         SVGClipPathElement.class, SVGComponentTransferFunctionElement.class,
675         SVGDefsElement.class, SVGDescElement.class, SVGDiscardElement.class, SVGElement.class,
676         SVGEllipseElement.class, SVGFEBlendElement.class, SVGFEColorMatrixElement.class,
677         SVGFEComponentTransferElement.class, SVGFECompositeElement.class, SVGFEConvolveMatrixElement.class,
678         SVGFEDiffuseLightingElement.class, SVGFEDisplacementMapElement.class,
679         SVGFEDistantLightElement.class, SVGFEDropShadowElement.class,
680         SVGFEFloodElement.class, SVGFEFuncAElement.class, SVGFEFuncBElement.class, SVGFEFuncGElement.class,
681         SVGFEFuncRElement.class, SVGFEGaussianBlurElement.class, SVGFEImageElement.class, SVGFEMergeElement.class,
682         SVGFEMergeNodeElement.class, SVGFEMorphologyElement.class, SVGFEOffsetElement.class,
683         SVGFEPointLightElement.class, SVGFESpecularLightingElement.class, SVGFESpotLightElement.class,
684         SVGFETileElement.class, SVGFETurbulenceElement.class, SVGFilterElement.class, SVGForeignObjectElement.class,
685         SVGGElement.class, SVGGeometryElement.class, SVGGradientElement.class, SVGGraphicsElement.class,
686         SVGImageElement.class, SVGLength.class, SVGLengthList.class, SVGLinearGradientElement.class,
687         SVGLineElement.class, SVGMarkerElement.class, SVGMaskElement.class, SVGMatrix.class,
688         SVGMetadataElement.class, SVGMPathElement.class, SVGNumber.class, SVGNumberList.class,
689         SVGPathElement.class,
690         SVGPatternElement.class,
691         SVGPoint.class, SVGPointList.class, SVGPolygonElement.class, SVGPolylineElement.class,
692         SVGPreserveAspectRatio.class, SVGRadialGradientElement.class, SVGRect.class, SVGRectElement.class,
693         SVGScriptElement.class, SVGSetElement.class, SVGStopElement.class,
694         SVGStringList.class, SVGStyleElement.class, SVGSVGElement.class, SVGSwitchElement.class,
695         SVGSymbolElement.class, SVGTextContentElement.class, SVGTextElement.class,
696         SVGTextPathElement.class, SVGTextPositioningElement.class, SVGTitleElement.class, SVGTransform.class,
697         SVGTransformList.class, SVGTSpanElement.class, SVGUnitTypes.class, SVGUseElement.class, SVGViewElement.class,
698         SyncManager.class, Text.class, TextDecoder.class,
699         TextEncoder.class, TextEvent.class, TextMetrics.class, TextTrack.class, TextTrackCue.class,
700         TextTrackCueList.class, TextTrackList.class, TimeEvent.class, TimeRanges.class,
701         Touch.class, TouchEvent.class, TouchList.class, TrackEvent.class, TransitionEvent.class, TreeWalker.class,
702         UIEvent.class,
703         URL.class,
704         URLSearchParams.class, ValidityState.class, VideoPlaybackQuality.class,
705         VTTCue.class, WaveShaperNode.class, WebGL2RenderingContext.class,
706         WebGLActiveInfo.class, WebGLBuffer.class,
707         WebGLContextEvent.class, WebGLFramebuffer.class, WebGLProgram.class,
708         WebGLQuery.class,
709         WebGLRenderbuffer.class,
710         WebGLRenderingContext.class,
711         WebGLSampler.class, WebGLShader.class, WebGLShaderPrecisionFormat.class, WebGLSync.class,
712         WebGLTexture.class, WebGLTransformFeedback.class,
713         WebGLUniformLocation.class, WebGLVertexArrayObject.class,
714         WebkitSpeechGrammar.class,
715         WebkitSpeechGrammarList.class, WebkitSpeechRecognition.class, WebkitSpeechRecognitionError.class,
716         WebkitSpeechRecognitionEvent.class,
717         WebSocket.class, WheelEvent.class, Window.class, Worker.class, XMLDocument.class,
718         XMLHttpRequest.class, XMLHttpRequestEventTarget.class, XMLHttpRequestUpload.class, XMLSerializer.class,
719         XPathEvaluator.class, XPathEvaluator.class, XPathExpression.class,
720         XPathNSResolver.class, XPathResult.class, XSLTProcessor.class
721     };
722 
723     /** Cache of browser versions and their corresponding JavaScript configurations. */
724     private static final Map<String, JavaScriptConfiguration> CONFIGURATION_MAP_ = new WeakHashMap<>();
725 
726     /**
727      * Constructor is only called from {@link #getInstance(BrowserVersion)} which is synchronized.
728      * @param browser the browser version to use
729      */
730     private JavaScriptConfiguration(final BrowserVersion browser) {
731         super(browser);
732     }
733 
734     /**
735      * Returns the instance that represents the configuration for the specified {@link BrowserVersion}.
736      * This method is synchronized to allow multi-threaded access to the JavaScript configuration.
737      * @param browserVersion the {@link BrowserVersion}
738      * @return the instance for the specified {@link BrowserVersion}
739      */
740     @SuppressWarnings("PMD.SingletonClassReturningNewInstance")
741     public static synchronized JavaScriptConfiguration getInstance(final BrowserVersion browserVersion) {
742         if (browserVersion == null) {
743             throw new IllegalArgumentException("BrowserVersion must be provided");
744         }
745         JavaScriptConfiguration configuration = CONFIGURATION_MAP_.get(browserVersion.getNickname());
746 
747         if (configuration == null) {
748             configuration = new JavaScriptConfiguration(browserVersion);
749             CONFIGURATION_MAP_.put(browserVersion.getNickname(), configuration);
750         }
751         return configuration;
752     }
753 
754     @Override
755     protected Class<? extends HtmlUnitScriptable>[] getClasses() {
756         return CLASSES_;
757     }
758 }