/*
 * Copyright (c) 2023, Andreas Kling <andreas@ladybird.org>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

#include <LibWeb/DOM/Document.h>

namespace Web::HTML {

// NOTE: This class is not currently in the specifications but it *is* implemented by all major browsers.
//       There is discussion about bringing it back:
//       https://github.com/whatwg/html/issues/4792
//       https://github.com/whatwg/dom/issues/221
class HTMLDocument final : public DOM::Document {
    WEB_PLATFORM_OBJECT(HTMLDocument, DOM::Document);
    GC_DECLARE_ALLOCATOR(HTMLDocument);

public:
    virtual ~HTMLDocument() override;

    [[nodiscard]] static GC::Ref<HTMLDocument> create(JS::Realm&, URL::URL const& url = "about:blank"sv);
    WebIDL::ExceptionOr<GC::Ref<HTMLDocument>> construct_impl(JS::Realm&);

private:
    virtual void initialize(JS::Realm&) override;

    HTMLDocument(JS::Realm&, URL::URL const&);
};

}
