From 5bb2e6597a038a9a8dc3de8df10ad92756487e3b Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 27 Sep 2021 02:06:37 +0200 Subject: [PATCH] LibWeb: Preload resources hinted by If a page is nice enough to give us some preload hints, we can tell RequestServer to get started on downloading the resources right away, instead of waiting until discovering them later on during parsing. --- Userland/Libraries/LibWeb/HTML/HTMLLinkElement.cpp | 9 +++++++++ Userland/Libraries/LibWeb/HTML/HTMLLinkElement.h | 3 +++ 2 files changed, 12 insertions(+) diff --git a/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.cpp index 1d3d24da6f..4811a8319f 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.cpp @@ -36,6 +36,13 @@ void HTMLLinkElement::inserted() if (auto sheet = m_css_loader.style_sheet()) document().style_sheets().add_sheet(sheet.release_nonnull()); } + + if (m_relationship & Relationship::Preload) { + // FIXME: Respect the "as" attribute. + LoadRequest request; + request.set_url(attribute(HTML::AttributeNames::href)); + m_preload_resource = ResourceLoader::the().load_resource(Resource::Type::Generic, request); + } } void HTMLLinkElement::parse_attribute(const FlyString& name, const String& value) @@ -48,6 +55,8 @@ void HTMLLinkElement::parse_attribute(const FlyString& name, const String& value m_relationship |= Relationship::Stylesheet; else if (part == "alternate") m_relationship |= Relationship::Alternate; + else if (part == "preload") + m_relationship |= Relationship::Preload; } } } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.h b/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.h index 7c0a88fa36..aebd3a38d1 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.h @@ -32,9 +32,12 @@ private: enum { Alternate = 1 << 0, Stylesheet = 1 << 1, + Preload = 1 << 2, }; }; + RefPtr m_preload_resource; + CSSLoader m_css_loader; unsigned m_relationship { 0 }; };