mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:32:46 +00:00 
			
		
		
		
	LibWeb: Actually instantiate all the web constructors/prototypes
We now instantiate all the generated web API constructors and expose them on the window object. We also set the generated prototypes on instantiated wrappers. Also, we should obviously find a way to generate this code. :^)
This commit is contained in:
		
							parent
							
								
									252a98042d
								
							
						
					
					
						commit
						ee7fa49b88
					
				
					 4 changed files with 349 additions and 7 deletions
				
			
		|  | @ -1,5 +1,5 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2020, Andreas Kling <kling@serenityos.org> | ||||
|  * Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org> | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  | @ -35,6 +35,8 @@ | |||
| #include <LibJS/Runtime/Shape.h> | ||||
| #include <LibTextCodec/Decoder.h> | ||||
| #include <LibWeb/Bindings/DocumentWrapper.h> | ||||
| #include <LibWeb/Bindings/EventTargetConstructor.h> | ||||
| #include <LibWeb/Bindings/EventTargetPrototype.h> | ||||
| #include <LibWeb/Bindings/EventWrapper.h> | ||||
| #include <LibWeb/Bindings/EventWrapperFactory.h> | ||||
| #include <LibWeb/Bindings/LocationObject.h> | ||||
|  | @ -51,8 +53,9 @@ | |||
| #include <LibWeb/DOM/Window.h> | ||||
| #include <LibWeb/Origin.h> | ||||
| 
 | ||||
| namespace Web { | ||||
| namespace Bindings { | ||||
| #include <LibWeb/Bindings/WindowObjectHelper.h> | ||||
| 
 | ||||
| namespace Web::Bindings { | ||||
| 
 | ||||
| WindowObject::WindowObject(DOM::Window& impl) | ||||
|     : m_impl(impl) | ||||
|  | @ -86,6 +89,8 @@ void WindowObject::initialize() | |||
|     define_property("navigator", heap().allocate<NavigatorObject>(*this, *this), JS::Attribute::Enumerable | JS::Attribute::Configurable); | ||||
|     define_property("location", heap().allocate<LocationObject>(*this, *this), JS::Attribute::Enumerable | JS::Attribute::Configurable); | ||||
| 
 | ||||
|     ADD_WINDOW_OBJECT_INTERFACES; | ||||
| 
 | ||||
|     m_xhr_prototype = heap().allocate<XMLHttpRequestPrototype>(*this, *this); | ||||
|     add_constructor("XMLHttpRequest", m_xhr_constructor, m_xhr_prototype); | ||||
| 
 | ||||
|  | @ -104,6 +109,11 @@ void WindowObject::visit_edges(Visitor& visitor) | |||
|     visitor.visit(m_xhr_prototype); | ||||
|     visitor.visit(m_range_constructor); | ||||
|     visitor.visit(m_range_prototype); | ||||
| 
 | ||||
|     for (auto& it : m_prototypes) | ||||
|         visitor.visit(it.value); | ||||
|     for (auto& it : m_constructors) | ||||
|         visitor.visit(it.value); | ||||
| } | ||||
| 
 | ||||
| Origin WindowObject::origin() const | ||||
|  | @ -358,4 +368,3 @@ JS_DEFINE_NATIVE_GETTER(WindowObject::event_getter) | |||
| } | ||||
| 
 | ||||
| } | ||||
| } | ||||
|  |  | |||
|  | @ -53,6 +53,11 @@ public: | |||
|     RangePrototype* range_prototype() { return m_range_prototype; } | ||||
|     RangeConstructor* range_constructor() { return m_range_constructor; } | ||||
| 
 | ||||
|     JS::Object* web_prototype(const String& class_name) { return m_prototypes.get(class_name).value_or(nullptr); } | ||||
|     JS::NativeFunction* web_constructor(const String& class_name) { return m_constructors.get(class_name).value_or(nullptr); } | ||||
|     void set_web_prototype(const String& class_name, JS::Object* prototype) { m_prototypes.set(class_name, prototype); } | ||||
|     void set_web_constructor(const String& class_name, JS::NativeFunction* constructor) { m_constructors.set(class_name, constructor); } | ||||
| 
 | ||||
| private: | ||||
|     virtual const char* class_name() const override { return "WindowObject"; } | ||||
|     virtual void visit_edges(Visitor&) override; | ||||
|  | @ -82,6 +87,9 @@ private: | |||
| 
 | ||||
|     RangePrototype* m_range_prototype { nullptr }; | ||||
|     RangeConstructor* m_range_constructor { nullptr }; | ||||
| 
 | ||||
|     HashMap<String, JS::Object*> m_prototypes; | ||||
|     HashMap<String, JS::NativeFunction*> m_constructors; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
							
								
								
									
										323
									
								
								Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										323
									
								
								Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,323 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2021, Andreas Kling <kling@serenityos.org> | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions are met: | ||||
|  * | ||||
|  * 1. Redistributions of source code must retain the above copyright notice, this | ||||
|  *    list of conditions and the following disclaimer. | ||||
|  * | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|  *    this list of conditions and the following disclaimer in the documentation | ||||
|  *    and/or other materials provided with the distribution. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||
|  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
|  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | ||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||||
|  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||||
|  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||||
|  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
|  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| // FIXME: Find a way to generate all of this
 | ||||
| 
 | ||||
| #include <LibWeb/Bindings/CanvasRenderingContext2DConstructor.h> | ||||
| #include <LibWeb/Bindings/CanvasRenderingContext2DPrototype.h> | ||||
| #include <LibWeb/Bindings/CharacterDataConstructor.h> | ||||
| #include <LibWeb/Bindings/CharacterDataPrototype.h> | ||||
| #include <LibWeb/Bindings/CommentConstructor.h> | ||||
| #include <LibWeb/Bindings/CommentPrototype.h> | ||||
| #include <LibWeb/Bindings/DOMImplementationConstructor.h> | ||||
| #include <LibWeb/Bindings/DOMImplementationPrototype.h> | ||||
| #include <LibWeb/Bindings/DocumentConstructor.h> | ||||
| #include <LibWeb/Bindings/DocumentFragmentConstructor.h> | ||||
| #include <LibWeb/Bindings/DocumentFragmentPrototype.h> | ||||
| #include <LibWeb/Bindings/DocumentPrototype.h> | ||||
| #include <LibWeb/Bindings/DocumentTypeConstructor.h> | ||||
| #include <LibWeb/Bindings/DocumentTypePrototype.h> | ||||
| #include <LibWeb/Bindings/ElementConstructor.h> | ||||
| #include <LibWeb/Bindings/ElementPrototype.h> | ||||
| #include <LibWeb/Bindings/EventConstructor.h> | ||||
| #include <LibWeb/Bindings/EventPrototype.h> | ||||
| #include <LibWeb/Bindings/EventTargetConstructor.h> | ||||
| #include <LibWeb/Bindings/EventTargetPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLAnchorElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLAnchorElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLAreaElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLAreaElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLAudioElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLAudioElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLBRElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLBRElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLBaseElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLBaseElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLBodyElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLBodyElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLButtonElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLButtonElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLCanvasElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLCanvasElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLDListElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLDListElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLDataElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLDataElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLDataListElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLDataListElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLDetailsElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLDetailsElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLDialogElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLDialogElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLDirectoryElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLDirectoryElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLDivElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLDivElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLEmbedElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLEmbedElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLFieldSetElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLFieldSetElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLFontElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLFontElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLFormElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLFormElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLFrameElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLFrameElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLFrameSetElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLFrameSetElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLHRElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLHRElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLHeadElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLHeadElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLHeadingElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLHeadingElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLHtmlElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLHtmlElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLIFrameElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLIFrameElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLImageElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLImageElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLInputElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLInputElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLLIElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLLIElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLLabelElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLLabelElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLLegendElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLLegendElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLLinkElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLLinkElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLMapElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLMapElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLMarqueeElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLMarqueeElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLMediaElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLMediaElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLMenuElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLMenuElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLMetaElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLMetaElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLMeterElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLMeterElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLModElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLModElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLOListElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLOListElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLObjectElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLObjectElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLOptGroupElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLOptGroupElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLOptionElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLOptionElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLOutputElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLOutputElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLParagraphElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLParagraphElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLParamElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLParamElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLPictureElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLPictureElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLPreElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLPreElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLProgressElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLProgressElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLQuoteElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLQuoteElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLScriptElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLScriptElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLSelectElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLSelectElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLSlotElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLSlotElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLSourceElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLSourceElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLSpanElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLSpanElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLStyleElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLStyleElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLTableCaptionElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLTableCaptionElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLTableCellElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLTableCellElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLTableColElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLTableColElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLTableElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLTableElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLTableRowElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLTableRowElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLTableSectionElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLTableSectionElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLTemplateElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLTemplateElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLTextAreaElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLTextAreaElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLTimeElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLTimeElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLTitleElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLTitleElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLTrackElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLTrackElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLUListElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLUListElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLUnknownElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLUnknownElementPrototype.h> | ||||
| #include <LibWeb/Bindings/HTMLVideoElementConstructor.h> | ||||
| #include <LibWeb/Bindings/HTMLVideoElementPrototype.h> | ||||
| #include <LibWeb/Bindings/ImageDataConstructor.h> | ||||
| #include <LibWeb/Bindings/ImageDataPrototype.h> | ||||
| #include <LibWeb/Bindings/MouseEventConstructor.h> | ||||
| #include <LibWeb/Bindings/MouseEventPrototype.h> | ||||
| #include <LibWeb/Bindings/NodeConstructor.h> | ||||
| #include <LibWeb/Bindings/NodePrototype.h> | ||||
| #include <LibWeb/Bindings/PerformanceConstructor.h> | ||||
| #include <LibWeb/Bindings/PerformancePrototype.h> | ||||
| #include <LibWeb/Bindings/SVGElementConstructor.h> | ||||
| #include <LibWeb/Bindings/SVGElementPrototype.h> | ||||
| #include <LibWeb/Bindings/SVGGeometryElementConstructor.h> | ||||
| #include <LibWeb/Bindings/SVGGeometryElementPrototype.h> | ||||
| #include <LibWeb/Bindings/SVGGraphicsElementConstructor.h> | ||||
| #include <LibWeb/Bindings/SVGGraphicsElementPrototype.h> | ||||
| #include <LibWeb/Bindings/SVGPathElementConstructor.h> | ||||
| #include <LibWeb/Bindings/SVGPathElementPrototype.h> | ||||
| #include <LibWeb/Bindings/SVGSVGElementConstructor.h> | ||||
| #include <LibWeb/Bindings/SVGSVGElementPrototype.h> | ||||
| #include <LibWeb/Bindings/ShadowRootConstructor.h> | ||||
| #include <LibWeb/Bindings/ShadowRootPrototype.h> | ||||
| #include <LibWeb/Bindings/SubmitEventConstructor.h> | ||||
| #include <LibWeb/Bindings/SubmitEventPrototype.h> | ||||
| #include <LibWeb/Bindings/TextConstructor.h> | ||||
| #include <LibWeb/Bindings/TextPrototype.h> | ||||
| #include <LibWeb/Bindings/UIEventConstructor.h> | ||||
| #include <LibWeb/Bindings/UIEventPrototype.h> | ||||
| 
 | ||||
| #define ADD_WINDOW_OBJECT_INTERFACE(name)                                 \ | ||||
|     {                                                                     \ | ||||
|         auto* prototype = heap().allocate<name##Prototype>(*this, *this); \ | ||||
|         name##Constructor* constructor = nullptr;                         \ | ||||
|         add_constructor(#name, constructor, prototype);                   \ | ||||
|         set_web_prototype(#name, prototype);                              \ | ||||
|         set_web_constructor(#name, constructor);                          \ | ||||
|     } | ||||
| 
 | ||||
| #define ADD_WINDOW_OBJECT_INTERFACES                      \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(CanvasRenderingContext2D) \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(CharacterData)            \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(Comment)                  \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(DocumentFragment)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(Document)                 \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(DocumentType)             \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(DOMImplementation)        \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(Element)                  \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(Event)                    \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(EventTarget)              \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLAnchorElement)        \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLAreaElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLAudioElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLBaseElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLBodyElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLBRElement)            \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLButtonElement)        \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLCanvasElement)        \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLDataElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLDataListElement)      \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLDetailsElement)       \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLDialogElement)        \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLDirectoryElement)     \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLDivElement)           \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLDListElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLElement)              \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLEmbedElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLFieldSetElement)      \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLFontElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLFormElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLFrameElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLFrameSetElement)      \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLHeadElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLHeadingElement)       \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLHRElement)            \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLHtmlElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLIFrameElement)        \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLImageElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLInputElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLLabelElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLLegendElement)        \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLLIElement)            \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLLinkElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLMapElement)           \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLMarqueeElement)       \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLMediaElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLMenuElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLMetaElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLMeterElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLModElement)           \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLObjectElement)        \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLOListElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLOptGroupElement)      \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLOptionElement)        \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLOutputElement)        \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLParagraphElement)     \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLParamElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLPictureElement)       \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLPreElement)           \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLProgressElement)      \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLQuoteElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLScriptElement)        \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLSelectElement)        \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLSlotElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLSourceElement)        \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLSpanElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLStyleElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLTableCaptionElement)  \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLTableCellElement)     \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLTableColElement)      \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLTableElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLTableRowElement)      \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLTableSectionElement)  \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLTemplateElement)      \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLTextAreaElement)      \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLTimeElement)          \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLTitleElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLTrackElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLUListElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLUnknownElement)       \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(HTMLVideoElement)         \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(ImageData)                \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(MouseEvent)               \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(Node)                     \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(Performance)              \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(ShadowRoot)               \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(SubmitEvent)              \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(SVGElement)               \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(SVGGeometryElement)       \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(SVGGraphicsElement)       \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(SVGPathElement)           \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(SVGSVGElement)            \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(Text)                     \ | ||||
|     ADD_WINDOW_OBJECT_INTERFACE(UIEvent) | ||||
|  | @ -560,6 +560,7 @@ void generate_implementation(const IDL::Interface& interface) | |||
|     StringBuilder builder; | ||||
|     SourceGenerator generator { builder }; | ||||
| 
 | ||||
|     generator.set("name", interface.name); | ||||
|     generator.set("wrapper_class", interface.wrapper_class); | ||||
|     generator.set("wrapper_base_class", interface.wrapper_base_class); | ||||
|     generator.set("fully_qualified_name", interface.fully_qualified_name); | ||||
|  | @ -603,16 +604,17 @@ namespace Web::Bindings { | |||
|     if (interface.wrapper_base_class == "Wrapper") { | ||||
|         generator.append(R"~~~( | ||||
| @wrapper_class@::@wrapper_class@(JS::GlobalObject& global_object, @fully_qualified_name@& impl) | ||||
| : Wrapper(*global_object.object_prototype()) | ||||
| , m_impl(impl) | ||||
|     : Wrapper(*global_object.object_prototype()) | ||||
|     , m_impl(impl) | ||||
| { | ||||
| } | ||||
| )~~~"); | ||||
|     } else { | ||||
|         generator.append(R"~~~( | ||||
| @wrapper_class@::@wrapper_class@(JS::GlobalObject& global_object, @fully_qualified_name@& impl) | ||||
| : @wrapper_base_class@(global_object, impl) | ||||
|     : @wrapper_base_class@(global_object, impl) | ||||
| { | ||||
|     set_prototype(static_cast<WindowObject&>(global_object).web_prototype("@name@")); | ||||
| } | ||||
| )~~~"); | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling