1/*
2 * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT.
3 *
4 * This file was generated by the dom/make_names.pl script.
5 *
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2013 Apple Inc. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
21 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
25 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#include "config.h"
31#include "JSHTMLElementWrapperFactory.h"
32
33#include "JSHTMLAnchorElement.h"
34#include "JSHTMLAppletElement.h"
35#include "JSHTMLAreaElement.h"
36#include "JSHTMLBaseElement.h"
37#include "JSHTMLUnknownElement.h"
38#include "JSHTMLQuoteElement.h"
39#include "JSHTMLBodyElement.h"
40#include "JSHTMLBRElement.h"
41#include "JSHTMLButtonElement.h"
42#include "JSHTMLCanvasElement.h"
43#include "JSHTMLTableCaptionElement.h"
44#include "JSHTMLTableColElement.h"
45#include "JSHTMLDataElement.h"
46#include "JSHTMLModElement.h"
47#include "JSHTMLDetailsElement.h"
48#include "JSHTMLDirectoryElement.h"
49#include "JSHTMLDivElement.h"
50#include "JSHTMLDListElement.h"
51#include "JSHTMLEmbedElement.h"
52#include "JSHTMLFieldSetElement.h"
53#include "JSHTMLFontElement.h"
54#include "JSHTMLFormElement.h"
55#include "JSHTMLFrameElement.h"
56#include "JSHTMLFrameSetElement.h"
57#include "JSHTMLHeadingElement.h"
58#include "JSHTMLHeadElement.h"
59#include "JSHTMLHRElement.h"
60#include "JSHTMLHtmlElement.h"
61#include "JSHTMLIFrameElement.h"
62#include "JSHTMLImageElement.h"
63#include "JSHTMLInputElement.h"
64#include "JSHTMLKeygenElement.h"
65#include "JSHTMLLabelElement.h"
66#include "JSHTMLLegendElement.h"
67#include "JSHTMLLIElement.h"
68#include "JSHTMLLinkElement.h"
69#include "JSHTMLPreElement.h"
70#include "JSHTMLMapElement.h"
71#include "JSHTMLMarqueeElement.h"
72#include "JSHTMLMenuElement.h"
73#include "JSHTMLMenuItemElement.h"
74#include "JSHTMLMetaElement.h"
75#include "JSHTMLObjectElement.h"
76#include "JSHTMLOListElement.h"
77#include "JSHTMLOptGroupElement.h"
78#include "JSHTMLOptionElement.h"
79#include "JSHTMLOutputElement.h"
80#include "JSHTMLParagraphElement.h"
81#include "JSHTMLParamElement.h"
82#include "JSHTMLPictureElement.h"
83#include "JSHTMLProgressElement.h"
84#include "JSHTMLScriptElement.h"
85#include "JSHTMLSelectElement.h"
86#include "JSHTMLSlotElement.h"
87#include "JSHTMLSourceElement.h"
88#include "JSHTMLSpanElement.h"
89#include "JSHTMLStyleElement.h"
90#include "JSHTMLTableElement.h"
91#include "JSHTMLTableSectionElement.h"
92#include "JSHTMLTableCellElement.h"
93#include "JSHTMLTemplateElement.h"
94#include "JSHTMLTextAreaElement.h"
95#include "JSHTMLTimeElement.h"
96#include "JSHTMLTitleElement.h"
97#include "JSHTMLTableRowElement.h"
98#include "JSHTMLUListElement.h"
99#include "JSHTMLUnknownElement.h"
100#include "HTMLAnchorElement.h"
101#include "HTMLElement.h"
102#include "HTMLAppletElement.h"
103#include "HTMLAreaElement.h"
104#include "HTMLBaseElement.h"
105#include "HTMLBDIElement.h"
106#include "HTMLUnknownElement.h"
107#include "HTMLQuoteElement.h"
108#include "HTMLBodyElement.h"
109#include "HTMLBRElement.h"
110#include "HTMLButtonElement.h"
111#include "HTMLCanvasElement.h"
112#include "HTMLTableCaptionElement.h"
113#include "HTMLTableColElement.h"
114#include "HTMLDataElement.h"
115#include "HTMLModElement.h"
116#include "HTMLDetailsElement.h"
117#include "HTMLDirectoryElement.h"
118#include "HTMLDivElement.h"
119#include "HTMLDListElement.h"
120#include "HTMLEmbedElement.h"
121#include "HTMLFieldSetElement.h"
122#include "HTMLFontElement.h"
123#include "HTMLFormElement.h"
124#include "HTMLFrameElement.h"
125#include "HTMLFrameSetElement.h"
126#include "HTMLHeadingElement.h"
127#include "HTMLHeadElement.h"
128#include "HTMLHRElement.h"
129#include "HTMLHtmlElement.h"
130#include "HTMLIFrameElement.h"
131#include "HTMLImageElement.h"
132#include "HTMLInputElement.h"
133#include "HTMLKeygenElement.h"
134#include "HTMLLabelElement.h"
135#include "HTMLLegendElement.h"
136#include "HTMLLIElement.h"
137#include "HTMLLinkElement.h"
138#include "HTMLPreElement.h"
139#include "HTMLMapElement.h"
140#include "HTMLMarqueeElement.h"
141#include "HTMLMenuElement.h"
142#include "HTMLMenuItemElement.h"
143#include "HTMLMetaElement.h"
144#include "HTMLObjectElement.h"
145#include "HTMLOListElement.h"
146#include "HTMLOptGroupElement.h"
147#include "HTMLOptionElement.h"
148#include "HTMLOutputElement.h"
149#include "HTMLParagraphElement.h"
150#include "HTMLParamElement.h"
151#include "HTMLPictureElement.h"
152#include "HTMLProgressElement.h"
153#include "RubyTextElement.h"
154#include "RubyElement.h"
155#include "HTMLScriptElement.h"
156#include "HTMLSelectElement.h"
157#include "HTMLSlotElement.h"
158#include "HTMLSourceElement.h"
159#include "HTMLSpanElement.h"
160#include "HTMLStyleElement.h"
161#include "HTMLSummaryElement.h"
162#include "HTMLTableElement.h"
163#include "HTMLTableSectionElement.h"
164#include "HTMLTableCellElement.h"
165#include "HTMLTemplateElement.h"
166#include "HTMLTextAreaElement.h"
167#include "HTMLTimeElement.h"
168#include "HTMLTitleElement.h"
169#include "HTMLTableRowElement.h"
170#include "HTMLUListElement.h"
171#include "HTMLWBRElement.h"
172#include "HTMLUnknownElement.h"
173
174#include "HTMLNames.h"
175
176#include "Document.h"
177#include "RuntimeEnabledFeatures.h"
178#include "Settings.h"
179#include <wtf/NeverDestroyed.h>
180#include <wtf/StdLibExtras.h>
181
182#if ENABLE(ATTACHMENT_ELEMENT)
183#include "HTMLAttachmentElement.h"
184#include "JSHTMLAttachmentElement.h"
185#endif
186
187#if ENABLE(DATALIST_ELEMENT)
188#include "HTMLDataListElement.h"
189#include "JSHTMLDataListElement.h"
190#endif
191
192#if ENABLE(METER_ELEMENT)
193#include "HTMLMeterElement.h"
194#include "JSHTMLMeterElement.h"
195#endif
196
197#if ENABLE(VIDEO)
198#include "HTMLAudioElement.h"
199#include "HTMLVideoElement.h"
200#include "JSHTMLAudioElement.h"
201#include "JSHTMLVideoElement.h"
202#endif
203
204#if ENABLE(VIDEO_TRACK)
205#include "HTMLTrackElement.h"
206#include "JSHTMLTrackElement.h"
207#endif
208
209using namespace JSC;
210
211namespace WebCore {
212
213using namespace HTMLNames;
214
215typedef JSDOMObject* (*CreateHTMLElementWrapperFunction)(JSDOMGlobalObject*, Ref<HTMLElement>&&);
216
217static JSDOMObject* createHTMLAnchorElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
218{
219 return createWrapper<HTMLAnchorElement>(globalObject, WTFMove(element));
220}
221
222static JSDOMObject* createHTMLElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
223{
224 return createWrapper<HTMLElement>(globalObject, WTFMove(element));
225}
226
227static JSDOMObject* createHTMLAppletElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
228{
229 return createWrapper<HTMLAppletElement>(globalObject, WTFMove(element));
230}
231
232static JSDOMObject* createHTMLAreaElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
233{
234 return createWrapper<HTMLAreaElement>(globalObject, WTFMove(element));
235}
236
237#if ENABLE(ATTACHMENT_ELEMENT)
238
239static JSDOMObject* createHTMLAttachmentElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
240{
241 if (element->isHTMLUnknownElement())
242 return createWrapper<HTMLUnknownElement>(globalObject, WTFMove(element));
243 return createWrapper<HTMLAttachmentElement>(globalObject, WTFMove(element));
244}
245#endif
246
247#if ENABLE(VIDEO)
248
249static JSDOMObject* createHTMLAudioElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
250{
251 if (element->isHTMLUnknownElement())
252 return createWrapper<HTMLUnknownElement>(globalObject, WTFMove(element));
253 return createWrapper<HTMLAudioElement>(globalObject, WTFMove(element));
254}
255
256#endif
257
258static JSDOMObject* createHTMLBaseElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
259{
260 return createWrapper<HTMLBaseElement>(globalObject, WTFMove(element));
261}
262
263static JSDOMObject* createHTMLUnknownElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
264{
265 return createWrapper<HTMLUnknownElement>(globalObject, WTFMove(element));
266}
267
268static JSDOMObject* createHTMLQuoteElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
269{
270 return createWrapper<HTMLQuoteElement>(globalObject, WTFMove(element));
271}
272
273static JSDOMObject* createHTMLBodyElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
274{
275 return createWrapper<HTMLBodyElement>(globalObject, WTFMove(element));
276}
277
278static JSDOMObject* createHTMLBRElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
279{
280 return createWrapper<HTMLBRElement>(globalObject, WTFMove(element));
281}
282
283static JSDOMObject* createHTMLButtonElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
284{
285 return createWrapper<HTMLButtonElement>(globalObject, WTFMove(element));
286}
287
288static JSDOMObject* createHTMLCanvasElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
289{
290 return createWrapper<HTMLCanvasElement>(globalObject, WTFMove(element));
291}
292
293static JSDOMObject* createHTMLTableCaptionElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
294{
295 return createWrapper<HTMLTableCaptionElement>(globalObject, WTFMove(element));
296}
297
298static JSDOMObject* createHTMLTableColElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
299{
300 return createWrapper<HTMLTableColElement>(globalObject, WTFMove(element));
301}
302
303static JSDOMObject* createHTMLDataElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
304{
305 return createWrapper<HTMLDataElement>(globalObject, WTFMove(element));
306}
307
308#if ENABLE(DATALIST_ELEMENT)
309
310static JSDOMObject* createHTMLDataListElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
311{
312 if (element->isHTMLUnknownElement())
313 return createWrapper<HTMLUnknownElement>(globalObject, WTFMove(element));
314 return createWrapper<HTMLDataListElement>(globalObject, WTFMove(element));
315}
316#endif
317
318static JSDOMObject* createHTMLModElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
319{
320 return createWrapper<HTMLModElement>(globalObject, WTFMove(element));
321}
322
323static JSDOMObject* createHTMLDetailsElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
324{
325 return createWrapper<HTMLDetailsElement>(globalObject, WTFMove(element));
326}
327
328static JSDOMObject* createHTMLDirectoryElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
329{
330 return createWrapper<HTMLDirectoryElement>(globalObject, WTFMove(element));
331}
332
333static JSDOMObject* createHTMLDivElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
334{
335 return createWrapper<HTMLDivElement>(globalObject, WTFMove(element));
336}
337
338static JSDOMObject* createHTMLDListElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
339{
340 return createWrapper<HTMLDListElement>(globalObject, WTFMove(element));
341}
342
343static JSDOMObject* createHTMLEmbedElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
344{
345 return createWrapper<HTMLEmbedElement>(globalObject, WTFMove(element));
346}
347
348static JSDOMObject* createHTMLFieldSetElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
349{
350 return createWrapper<HTMLFieldSetElement>(globalObject, WTFMove(element));
351}
352
353static JSDOMObject* createHTMLFontElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
354{
355 return createWrapper<HTMLFontElement>(globalObject, WTFMove(element));
356}
357
358static JSDOMObject* createHTMLFormElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
359{
360 return createWrapper<HTMLFormElement>(globalObject, WTFMove(element));
361}
362
363static JSDOMObject* createHTMLFrameElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
364{
365 return createWrapper<HTMLFrameElement>(globalObject, WTFMove(element));
366}
367
368static JSDOMObject* createHTMLFrameSetElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
369{
370 return createWrapper<HTMLFrameSetElement>(globalObject, WTFMove(element));
371}
372
373static JSDOMObject* createHTMLHeadingElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
374{
375 return createWrapper<HTMLHeadingElement>(globalObject, WTFMove(element));
376}
377
378static JSDOMObject* createHTMLHeadElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
379{
380 return createWrapper<HTMLHeadElement>(globalObject, WTFMove(element));
381}
382
383static JSDOMObject* createHTMLHRElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
384{
385 return createWrapper<HTMLHRElement>(globalObject, WTFMove(element));
386}
387
388static JSDOMObject* createHTMLHtmlElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
389{
390 return createWrapper<HTMLHtmlElement>(globalObject, WTFMove(element));
391}
392
393static JSDOMObject* createHTMLIFrameElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
394{
395 return createWrapper<HTMLIFrameElement>(globalObject, WTFMove(element));
396}
397
398static JSDOMObject* createHTMLImageElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
399{
400 return createWrapper<HTMLImageElement>(globalObject, WTFMove(element));
401}
402
403static JSDOMObject* createHTMLInputElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
404{
405 return createWrapper<HTMLInputElement>(globalObject, WTFMove(element));
406}
407
408static JSDOMObject* createHTMLKeygenElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
409{
410 return createWrapper<HTMLKeygenElement>(globalObject, WTFMove(element));
411}
412
413static JSDOMObject* createHTMLLabelElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
414{
415 return createWrapper<HTMLLabelElement>(globalObject, WTFMove(element));
416}
417
418static JSDOMObject* createHTMLLegendElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
419{
420 return createWrapper<HTMLLegendElement>(globalObject, WTFMove(element));
421}
422
423static JSDOMObject* createHTMLLIElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
424{
425 return createWrapper<HTMLLIElement>(globalObject, WTFMove(element));
426}
427
428static JSDOMObject* createHTMLLinkElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
429{
430 return createWrapper<HTMLLinkElement>(globalObject, WTFMove(element));
431}
432
433static JSDOMObject* createHTMLPreElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
434{
435 return createWrapper<HTMLPreElement>(globalObject, WTFMove(element));
436}
437
438static JSDOMObject* createHTMLMapElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
439{
440 return createWrapper<HTMLMapElement>(globalObject, WTFMove(element));
441}
442
443static JSDOMObject* createHTMLMarqueeElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
444{
445 return createWrapper<HTMLMarqueeElement>(globalObject, WTFMove(element));
446}
447
448static JSDOMObject* createHTMLMenuElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
449{
450 return createWrapper<HTMLMenuElement>(globalObject, WTFMove(element));
451}
452
453static JSDOMObject* createHTMLMenuItemElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
454{
455 if (element->isHTMLUnknownElement())
456 return createWrapper<HTMLUnknownElement>(globalObject, WTFMove(element));
457 return createWrapper<HTMLMenuItemElement>(globalObject, WTFMove(element));
458}
459static JSDOMObject* createHTMLMetaElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
460{
461 return createWrapper<HTMLMetaElement>(globalObject, WTFMove(element));
462}
463
464#if ENABLE(METER_ELEMENT)
465
466static JSDOMObject* createHTMLMeterElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
467{
468 return createWrapper<HTMLMeterElement>(globalObject, WTFMove(element));
469}
470
471#endif
472
473static JSDOMObject* createHTMLObjectElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
474{
475 return createWrapper<HTMLObjectElement>(globalObject, WTFMove(element));
476}
477
478static JSDOMObject* createHTMLOListElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
479{
480 return createWrapper<HTMLOListElement>(globalObject, WTFMove(element));
481}
482
483static JSDOMObject* createHTMLOptGroupElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
484{
485 return createWrapper<HTMLOptGroupElement>(globalObject, WTFMove(element));
486}
487
488static JSDOMObject* createHTMLOptionElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
489{
490 return createWrapper<HTMLOptionElement>(globalObject, WTFMove(element));
491}
492
493static JSDOMObject* createHTMLOutputElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
494{
495 return createWrapper<HTMLOutputElement>(globalObject, WTFMove(element));
496}
497
498static JSDOMObject* createHTMLParagraphElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
499{
500 return createWrapper<HTMLParagraphElement>(globalObject, WTFMove(element));
501}
502
503static JSDOMObject* createHTMLParamElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
504{
505 return createWrapper<HTMLParamElement>(globalObject, WTFMove(element));
506}
507
508static JSDOMObject* createHTMLPictureElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
509{
510 return createWrapper<HTMLPictureElement>(globalObject, WTFMove(element));
511}
512
513static JSDOMObject* createHTMLProgressElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
514{
515 return createWrapper<HTMLProgressElement>(globalObject, WTFMove(element));
516}
517
518static JSDOMObject* createHTMLScriptElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
519{
520 return createWrapper<HTMLScriptElement>(globalObject, WTFMove(element));
521}
522
523static JSDOMObject* createHTMLSelectElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
524{
525 return createWrapper<HTMLSelectElement>(globalObject, WTFMove(element));
526}
527
528static JSDOMObject* createHTMLSlotElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
529{
530 return createWrapper<HTMLSlotElement>(globalObject, WTFMove(element));
531}
532
533static JSDOMObject* createHTMLSourceElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
534{
535 return createWrapper<HTMLSourceElement>(globalObject, WTFMove(element));
536}
537
538static JSDOMObject* createHTMLSpanElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
539{
540 return createWrapper<HTMLSpanElement>(globalObject, WTFMove(element));
541}
542
543static JSDOMObject* createHTMLStyleElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
544{
545 return createWrapper<HTMLStyleElement>(globalObject, WTFMove(element));
546}
547
548static JSDOMObject* createHTMLTableElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
549{
550 return createWrapper<HTMLTableElement>(globalObject, WTFMove(element));
551}
552
553static JSDOMObject* createHTMLTableSectionElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
554{
555 return createWrapper<HTMLTableSectionElement>(globalObject, WTFMove(element));
556}
557
558static JSDOMObject* createHTMLTableCellElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
559{
560 return createWrapper<HTMLTableCellElement>(globalObject, WTFMove(element));
561}
562
563static JSDOMObject* createHTMLTemplateElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
564{
565 return createWrapper<HTMLTemplateElement>(globalObject, WTFMove(element));
566}
567
568static JSDOMObject* createHTMLTextAreaElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
569{
570 return createWrapper<HTMLTextAreaElement>(globalObject, WTFMove(element));
571}
572
573static JSDOMObject* createHTMLTimeElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
574{
575 return createWrapper<HTMLTimeElement>(globalObject, WTFMove(element));
576}
577
578static JSDOMObject* createHTMLTitleElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
579{
580 return createWrapper<HTMLTitleElement>(globalObject, WTFMove(element));
581}
582
583static JSDOMObject* createHTMLTableRowElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
584{
585 return createWrapper<HTMLTableRowElement>(globalObject, WTFMove(element));
586}
587
588#if ENABLE(VIDEO_TRACK)
589
590static JSDOMObject* createHTMLTrackElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
591{
592 if (element->isHTMLUnknownElement())
593 return createWrapper<HTMLUnknownElement>(globalObject, WTFMove(element));
594 return createWrapper<HTMLTrackElement>(globalObject, WTFMove(element));
595}
596
597#endif
598
599static JSDOMObject* createHTMLUListElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
600{
601 return createWrapper<HTMLUListElement>(globalObject, WTFMove(element));
602}
603
604#if ENABLE(VIDEO)
605
606static JSDOMObject* createHTMLVideoElementWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
607{
608 if (element->isHTMLUnknownElement())
609 return createWrapper<HTMLUnknownElement>(globalObject, WTFMove(element));
610 return createWrapper<HTMLVideoElement>(globalObject, WTFMove(element));
611}
612
613#endif
614
615
616static NEVER_INLINE HashMap<AtomicStringImpl*, CreateHTMLElementWrapperFunction> createHTMLWrapperMap()
617{
618 struct TableEntry {
619 const QualifiedName& name;
620 CreateHTMLElementWrapperFunction function;
621 };
622
623 static const TableEntry table[] = {
624 { aTag, createHTMLAnchorElementWrapper },
625 { abbrTag, createHTMLElementWrapper },
626 { acronymTag, createHTMLElementWrapper },
627 { addressTag, createHTMLElementWrapper },
628 { appletTag, createHTMLAppletElementWrapper },
629 { areaTag, createHTMLAreaElementWrapper },
630 { articleTag, createHTMLElementWrapper },
631 { asideTag, createHTMLElementWrapper },
632#if ENABLE(ATTACHMENT_ELEMENT)
633 { attachmentTag, createHTMLAttachmentElementWrapper },
634#endif
635#if ENABLE(VIDEO)
636 { audioTag, createHTMLAudioElementWrapper },
637#endif
638 { bTag, createHTMLElementWrapper },
639 { baseTag, createHTMLBaseElementWrapper },
640 { basefontTag, createHTMLElementWrapper },
641 { bdiTag, createHTMLElementWrapper },
642 { bdoTag, createHTMLElementWrapper },
643 { bgsoundTag, createHTMLUnknownElementWrapper },
644 { bigTag, createHTMLElementWrapper },
645 { blockquoteTag, createHTMLQuoteElementWrapper },
646 { bodyTag, createHTMLBodyElementWrapper },
647 { brTag, createHTMLBRElementWrapper },
648 { buttonTag, createHTMLButtonElementWrapper },
649 { canvasTag, createHTMLCanvasElementWrapper },
650 { captionTag, createHTMLTableCaptionElementWrapper },
651 { centerTag, createHTMLElementWrapper },
652 { citeTag, createHTMLElementWrapper },
653 { codeTag, createHTMLElementWrapper },
654 { colTag, createHTMLTableColElementWrapper },
655 { colgroupTag, createHTMLTableColElementWrapper },
656 { commandTag, createHTMLUnknownElementWrapper },
657 { dataTag, createHTMLDataElementWrapper },
658#if ENABLE(DATALIST_ELEMENT)
659 { datalistTag, createHTMLDataListElementWrapper },
660#endif
661 { ddTag, createHTMLElementWrapper },
662 { delTag, createHTMLModElementWrapper },
663 { detailsTag, createHTMLDetailsElementWrapper },
664 { dfnTag, createHTMLElementWrapper },
665 { dirTag, createHTMLDirectoryElementWrapper },
666 { divTag, createHTMLDivElementWrapper },
667 { dlTag, createHTMLDListElementWrapper },
668 { dtTag, createHTMLElementWrapper },
669 { emTag, createHTMLElementWrapper },
670 { embedTag, createHTMLEmbedElementWrapper },
671 { fieldsetTag, createHTMLFieldSetElementWrapper },
672 { figcaptionTag, createHTMLElementWrapper },
673 { figureTag, createHTMLElementWrapper },
674 { fontTag, createHTMLFontElementWrapper },
675 { footerTag, createHTMLElementWrapper },
676 { formTag, createHTMLFormElementWrapper },
677 { frameTag, createHTMLFrameElementWrapper },
678 { framesetTag, createHTMLFrameSetElementWrapper },
679 { h1Tag, createHTMLHeadingElementWrapper },
680 { h2Tag, createHTMLHeadingElementWrapper },
681 { h3Tag, createHTMLHeadingElementWrapper },
682 { h4Tag, createHTMLHeadingElementWrapper },
683 { h5Tag, createHTMLHeadingElementWrapper },
684 { h6Tag, createHTMLHeadingElementWrapper },
685 { headTag, createHTMLHeadElementWrapper },
686 { headerTag, createHTMLElementWrapper },
687 { hgroupTag, createHTMLElementWrapper },
688 { hrTag, createHTMLHRElementWrapper },
689 { htmlTag, createHTMLHtmlElementWrapper },
690 { iTag, createHTMLElementWrapper },
691 { iframeTag, createHTMLIFrameElementWrapper },
692 { imageTag, createHTMLUnknownElementWrapper },
693 { imgTag, createHTMLImageElementWrapper },
694 { inputTag, createHTMLInputElementWrapper },
695 { insTag, createHTMLModElementWrapper },
696 { kbdTag, createHTMLElementWrapper },
697 { keygenTag, createHTMLKeygenElementWrapper },
698 { labelTag, createHTMLLabelElementWrapper },
699 { layerTag, createHTMLElementWrapper },
700 { legendTag, createHTMLLegendElementWrapper },
701 { liTag, createHTMLLIElementWrapper },
702 { linkTag, createHTMLLinkElementWrapper },
703 { listingTag, createHTMLPreElementWrapper },
704 { mainTag, createHTMLElementWrapper },
705 { mapTag, createHTMLMapElementWrapper },
706 { markTag, createHTMLElementWrapper },
707 { marqueeTag, createHTMLMarqueeElementWrapper },
708 { menuTag, createHTMLMenuElementWrapper },
709 { menuitemTag, createHTMLMenuItemElementWrapper },
710 { metaTag, createHTMLMetaElementWrapper },
711#if ENABLE(METER_ELEMENT)
712 { meterTag, createHTMLMeterElementWrapper },
713#endif
714 { navTag, createHTMLElementWrapper },
715 { nobrTag, createHTMLElementWrapper },
716 { noembedTag, createHTMLElementWrapper },
717 { noframesTag, createHTMLElementWrapper },
718 { nolayerTag, createHTMLElementWrapper },
719 { noscriptTag, createHTMLElementWrapper },
720 { objectTag, createHTMLObjectElementWrapper },
721 { olTag, createHTMLOListElementWrapper },
722 { optgroupTag, createHTMLOptGroupElementWrapper },
723 { optionTag, createHTMLOptionElementWrapper },
724 { outputTag, createHTMLOutputElementWrapper },
725 { pTag, createHTMLParagraphElementWrapper },
726 { paramTag, createHTMLParamElementWrapper },
727 { pictureTag, createHTMLPictureElementWrapper },
728 { plaintextTag, createHTMLElementWrapper },
729 { preTag, createHTMLPreElementWrapper },
730 { progressTag, createHTMLProgressElementWrapper },
731 { qTag, createHTMLQuoteElementWrapper },
732 { rbTag, createHTMLElementWrapper },
733 { rpTag, createHTMLElementWrapper },
734 { rtTag, createHTMLElementWrapper },
735 { rtcTag, createHTMLElementWrapper },
736 { rubyTag, createHTMLElementWrapper },
737 { sTag, createHTMLElementWrapper },
738 { sampTag, createHTMLElementWrapper },
739 { scriptTag, createHTMLScriptElementWrapper },
740 { sectionTag, createHTMLElementWrapper },
741 { selectTag, createHTMLSelectElementWrapper },
742 { slotTag, createHTMLSlotElementWrapper },
743 { smallTag, createHTMLElementWrapper },
744 { sourceTag, createHTMLSourceElementWrapper },
745 { spanTag, createHTMLSpanElementWrapper },
746 { strikeTag, createHTMLElementWrapper },
747 { strongTag, createHTMLElementWrapper },
748 { styleTag, createHTMLStyleElementWrapper },
749 { subTag, createHTMLElementWrapper },
750 { summaryTag, createHTMLElementWrapper },
751 { supTag, createHTMLElementWrapper },
752 { tableTag, createHTMLTableElementWrapper },
753 { tbodyTag, createHTMLTableSectionElementWrapper },
754 { tdTag, createHTMLTableCellElementWrapper },
755 { templateTag, createHTMLTemplateElementWrapper },
756 { textareaTag, createHTMLTextAreaElementWrapper },
757 { tfootTag, createHTMLTableSectionElementWrapper },
758 { thTag, createHTMLTableCellElementWrapper },
759 { theadTag, createHTMLTableSectionElementWrapper },
760 { timeTag, createHTMLTimeElementWrapper },
761 { titleTag, createHTMLTitleElementWrapper },
762 { trTag, createHTMLTableRowElementWrapper },
763#if ENABLE(VIDEO_TRACK)
764 { trackTag, createHTMLTrackElementWrapper },
765#endif
766 { ttTag, createHTMLElementWrapper },
767 { uTag, createHTMLElementWrapper },
768 { ulTag, createHTMLUListElementWrapper },
769 { varTag, createHTMLElementWrapper },
770#if ENABLE(VIDEO)
771 { videoTag, createHTMLVideoElementWrapper },
772#endif
773 { wbrTag, createHTMLElementWrapper },
774 { xmpTag, createHTMLPreElementWrapper },
775 };
776
777 HashMap<AtomicStringImpl*, CreateHTMLElementWrapperFunction> map;
778 for (auto& entry : table)
779 map.add(entry.name.localName().impl(), entry.function);
780 return map;
781}
782
783JSDOMObject* createJSHTMLWrapper(JSDOMGlobalObject* globalObject, Ref<HTMLElement>&& element)
784{
785 static const auto functions = makeNeverDestroyed(createHTMLWrapperMap());
786 if (auto function = functions.get().get(element->localName().impl()))
787 return function(globalObject, WTFMove(element));
788 if (element->isCustomElementUpgradeCandidate())
789 return createWrapper<HTMLElement>(globalObject, WTFMove(element));
790 return createWrapper<HTMLUnknownElement>(globalObject, WTFMove(element));
791}
792
793}
794