/* * Copyright (c) 2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace Web::HTML { class HTMLObjectElement final : public BrowsingContextContainer , public FormAssociatedElement , public ResourceClient { FORM_ASSOCIATED_ELEMENT(BrowsingContextContainer, HTMLObjectElement) enum class Representation { Unknown, Image, NestedBrowsingContext, Children, }; public: using WrapperType = Bindings::HTMLObjectElementWrapper; HTMLObjectElement(DOM::Document&, DOM::QualifiedName); virtual ~HTMLObjectElement() override; virtual void parse_attribute(const FlyString& name, const String& value) override; String data() const; void set_data(String const& data) { set_attribute(HTML::AttributeNames::data, data); } String type() const { return attribute(HTML::AttributeNames::type); } // ^FormAssociatedElement // https://html.spec.whatwg.org/multipage/forms.html#category-listed virtual bool is_listed() const override { return true; } private: virtual RefPtr create_layout_node(NonnullRefPtr) override; bool has_ancestor_media_element_or_object_element_not_showing_fallback_content() const; void queue_element_task_to_run_object_representation_steps(); void run_object_representation_handler_steps(Optional resource_type); void run_object_representation_completed_steps(Representation); void run_object_representation_fallback_steps(); void convert_resource_to_image(); void update_layout_and_child_objects(Representation); // ^ResourceClient virtual void resource_did_load() override; virtual void resource_did_fail() override; Representation m_representation { Representation::Unknown }; Optional m_image_loader; }; }