diff --git a/Libraries/LibWeb/DOM/HTMLLinkElement.cpp b/Libraries/LibWeb/DOM/HTMLLinkElement.cpp
index c7c635be441..21337282030 100644
--- a/Libraries/LibWeb/DOM/HTMLLinkElement.cpp
+++ b/Libraries/LibWeb/DOM/HTMLLinkElement.cpp
@@ -29,8 +29,8 @@
#include
#include
#include
-#include
#include
+#include
namespace Web {
@@ -43,24 +43,40 @@ HTMLLinkElement::~HTMLLinkElement()
{
}
-void HTMLLinkElement::inserted_into(Node&)
+void HTMLLinkElement::inserted_into(Node& node)
{
- if (rel() == "stylesheet") {
- URL url = document().complete_url(href());
- ResourceLoader::the().load(url, [&](auto data, auto&) {
- if (data.is_null()) {
- dbg() << "HTMLLinkElement: Failed to load stylesheet: " << href();
- return;
- }
- auto sheet = parse_css(data);
- if (!sheet) {
- dbg() << "HTMLLinkElement: Failed to parse stylesheet: " << href();
- return;
- }
- document().add_sheet(*sheet);
- document().update_style();
- });
+ HTMLElement::inserted_into(node);
+
+ if (rel() == "stylesheet")
+ load_stylesheet(document().complete_url(href()));
+}
+
+void HTMLLinkElement::resource_did_fail()
+{
+}
+
+void HTMLLinkElement::resource_did_load()
+{
+ ASSERT(resource());
+ if (!resource()->has_encoded_data())
+ return;
+
+ dbg() << "HTMLLinkElement: Resource did load, looks good! " << href();
+
+ auto sheet = parse_css(resource()->encoded_data());
+ if (!sheet) {
+ dbg() << "HTMLLinkElement: Failed to parse stylesheet: " << href();
+ return;
}
+ document().add_sheet(*sheet);
+ document().update_style();
+}
+
+void HTMLLinkElement::load_stylesheet(const URL& url)
+{
+ LoadRequest request;
+ request.set_url(url);
+ set_resource(ResourceLoader::the().load_resource(request));
}
}
diff --git a/Libraries/LibWeb/DOM/HTMLLinkElement.h b/Libraries/LibWeb/DOM/HTMLLinkElement.h
index af44746b8cd..fcd28d96109 100644
--- a/Libraries/LibWeb/DOM/HTMLLinkElement.h
+++ b/Libraries/LibWeb/DOM/HTMLLinkElement.h
@@ -27,10 +27,13 @@
#pragma once
#include
+#include
namespace Web {
-class HTMLLinkElement final : public HTMLElement {
+class HTMLLinkElement final
+ : public HTMLElement
+ , public ResourceClient {
public:
HTMLLinkElement(Document&, const FlyString& tag_name);
virtual ~HTMLLinkElement() override;
@@ -40,6 +43,13 @@ public:
String rel() const { return attribute("rel"); }
String type() const { return attribute("type"); }
String href() const { return attribute("href"); }
+
+private:
+ // ^ResourceClient
+ virtual void resource_did_fail() override;
+ virtual void resource_did_load() override;
+
+ void load_stylesheet(const URL&);
};
template<>