Serenity Operating System
at master 68 lines 2.0 kB view raw
1/* 2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> 3 * Copyright (c) 2021, the SerenityOS developers. 4 * Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org> 5 * 6 * SPDX-License-Identifier: BSD-2-Clause 7 */ 8 9#pragma once 10 11#include <LibWeb/DOM/DocumentLoadEventDelayer.h> 12#include <LibWeb/HTML/HTMLElement.h> 13 14namespace Web::HTML { 15 16class HTMLLinkElement final 17 : public HTMLElement 18 , public ResourceClient { 19 WEB_PLATFORM_OBJECT(HTMLLinkElement, HTMLElement); 20 21public: 22 virtual ~HTMLLinkElement() override; 23 24 virtual void inserted() override; 25 26 DeprecatedString rel() const { return attribute(HTML::AttributeNames::rel); } 27 DeprecatedString type() const { return attribute(HTML::AttributeNames::type); } 28 DeprecatedString href() const { return attribute(HTML::AttributeNames::href); } 29 30 bool has_loaded_icon() const; 31 bool load_favicon_and_use_if_window_is_active(); 32 33private: 34 HTMLLinkElement(DOM::Document&, DOM::QualifiedName); 35 36 virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override; 37 void parse_attribute(DeprecatedFlyString const&, DeprecatedString const&) override; 38 39 // ^ResourceClient 40 virtual void resource_did_fail() override; 41 virtual void resource_did_load() override; 42 43 // ^ HTMLElement 44 virtual void did_remove_attribute(DeprecatedFlyString const&) override; 45 virtual void visit_edges(Cell::Visitor&) override; 46 47 void resource_did_load_stylesheet(); 48 void resource_did_load_favicon(); 49 50 struct Relationship { 51 enum { 52 Alternate = 1 << 0, 53 Stylesheet = 1 << 1, 54 Preload = 1 << 2, 55 DNSPrefetch = 1 << 3, 56 Preconnect = 1 << 4, 57 Icon = 1 << 5, 58 }; 59 }; 60 61 RefPtr<Resource> m_preload_resource; 62 JS::GCPtr<CSS::CSSStyleSheet> m_loaded_style_sheet; 63 64 Optional<DOM::DocumentLoadEventDelayer> m_document_load_event_delayer; 65 unsigned m_relationship { 0 }; 66}; 67 68}