#pragma once #include #include #include #include #include #include #include class Frame; class HTMLBodyElement; class HTMLHtmlElement; class HTMLHeadElement; class LayoutNode; class StyleResolver; class StyleSheet; class Document : public ParentNode { public: Document(); virtual ~Document() override; void normalize(); StyleResolver& style_resolver(); void add_sheet(const StyleSheet& sheet) { m_sheets.append(sheet); } const NonnullRefPtrVector& stylesheets() const { return m_sheets; } virtual String tag_name() const override { return "#document"; } void set_hovered_node(Node* node) { m_hovered_node = node; } Node* hovered_node() { return m_hovered_node; } const Node* hovered_node() const { return m_hovered_node; } const HTMLHtmlElement* document_element() const; const HTMLHeadElement* head() const; const HTMLBodyElement* body() const; String title() const; void attach_to_frame(Badge, Frame&); void detach_from_frame(Badge, Frame&); Frame* frame() { return m_frame.ptr(); } const Frame* frame() const { return m_frame.ptr(); } Color background_color() const; private: OwnPtr m_style_resolver; NonnullRefPtrVector m_sheets; RefPtr m_hovered_node; WeakPtr m_frame; };