Serenity Operating System
1/*
2 * Copyright (c) 2020, the SerenityOS developers.
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <LibWeb/HTML/HTMLElement.h>
10
11namespace Web::HTML {
12
13class HTMLBaseElement final : public HTMLElement {
14 WEB_PLATFORM_OBJECT(HTMLBaseElement, HTMLElement);
15
16public:
17 virtual ~HTMLBaseElement() override;
18
19 DeprecatedString href() const;
20 void set_href(DeprecatedString const& href);
21
22 AK::URL const& frozen_base_url() const { return m_frozen_base_url; }
23
24 virtual void inserted() override;
25 virtual void removed_from(Node*) override;
26 virtual void parse_attribute(DeprecatedFlyString const& name, DeprecatedString const& value) override;
27
28private:
29 HTMLBaseElement(DOM::Document&, DOM::QualifiedName);
30
31 virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override;
32 virtual bool is_html_base_element() const override { return true; }
33
34 // https://html.spec.whatwg.org/multipage/semantics.html#frozen-base-url
35 // A base element that is the first base element with an href content attribute in a document tree has a frozen base URL.
36 AK::URL m_frozen_base_url;
37
38 void set_the_frozen_base_url();
39};
40
41}
42
43namespace Web::DOM {
44template<>
45inline bool Node::fast_is<HTML::HTMLBaseElement>() const { return is_html_base_element(); }
46}