mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-22 17:29:01 +00:00
LibWeb: Only react to link element attribute changes when BC connected
Link elements that aren't "browsing-context connected" should not trigger a resource fetch when their attributes change. This fixes an issue where we'd waste time by loading every style sheet twice! :^)
This commit is contained in:
parent
7339409575
commit
a4625e3943
Notes:
sideshowbarker
2024-07-17 10:31:19 +09:00
Author: https://github.com/awesomekling
Commit: a4625e3943
Pull-request: https://github.com/SerenityOS/serenity/pull/24115
3 changed files with 22 additions and 11 deletions
|
@ -335,6 +335,13 @@ bool Node::is_connected() const
|
||||||
return shadow_including_root().is_document();
|
return shadow_including_root().is_document();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://html.spec.whatwg.org/multipage/infrastructure.html#browsing-context-connected
|
||||||
|
bool Node::is_browsing_context_connected() const
|
||||||
|
{
|
||||||
|
// A node is browsing-context connected when it is connected and its shadow-including root's browsing context is non-null.
|
||||||
|
return is_connected() && shadow_including_root().document().browsing_context();
|
||||||
|
}
|
||||||
|
|
||||||
// https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity
|
// https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity
|
||||||
WebIDL::ExceptionOr<void> Node::ensure_pre_insertion_validity(JS::NonnullGCPtr<Node> node, JS::GCPtr<Node> child) const
|
WebIDL::ExceptionOr<void> Node::ensure_pre_insertion_validity(JS::NonnullGCPtr<Node> node, JS::GCPtr<Node> child) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -185,6 +185,8 @@ public:
|
||||||
|
|
||||||
bool is_connected() const;
|
bool is_connected() const;
|
||||||
|
|
||||||
|
[[nodiscard]] bool is_browsing_context_connected() const;
|
||||||
|
|
||||||
Node* parent_node() { return parent(); }
|
Node* parent_node() { return parent(); }
|
||||||
Node const* parent_node() const { return parent(); }
|
Node const* parent_node() const { return parent(); }
|
||||||
|
|
||||||
|
|
|
@ -134,6 +134,8 @@ void HTMLLinkElement::attribute_changed(FlyString const& name, Optional<String>
|
||||||
// https://html.spec.whatwg.org/multipage/links.html#link-type-stylesheet:fetch-and-process-the-linked-resource
|
// https://html.spec.whatwg.org/multipage/links.html#link-type-stylesheet:fetch-and-process-the-linked-resource
|
||||||
// The appropriate times to fetch and process this type of link are:
|
// The appropriate times to fetch and process this type of link are:
|
||||||
if (
|
if (
|
||||||
|
is_browsing_context_connected()
|
||||||
|
&& (
|
||||||
// AD-HOC: When the rel attribute changes
|
// AD-HOC: When the rel attribute changes
|
||||||
name == AttributeNames::rel ||
|
name == AttributeNames::rel ||
|
||||||
// - When the href attribute of the link element of an external resource link that is already browsing-context connected is changed.
|
// - When the href attribute of the link element of an external resource link that is already browsing-context connected is changed.
|
||||||
|
@ -144,7 +146,7 @@ void HTMLLinkElement::attribute_changed(FlyString const& name, Optional<String>
|
||||||
name == AttributeNames::crossorigin
|
name == AttributeNames::crossorigin
|
||||||
// FIXME: - When the type attribute of the link element of an external resource link that is already browsing-context connected is set or changed to a value that does not or no longer matches the Content-Type metadata of the previous obtained external resource, if any.
|
// FIXME: - When the type attribute of the link element of an external resource link that is already browsing-context connected is set or changed to a value that does not or no longer matches the Content-Type metadata of the previous obtained external resource, if any.
|
||||||
// FIXME: - When the type attribute of the link element of an external resource link that is already browsing-context connected, but was previously not obtained due to the type attribute specifying an unsupported type, is removed or changed.
|
// FIXME: - When the type attribute of the link element of an external resource link that is already browsing-context connected, but was previously not obtained due to the type attribute specifying an unsupported type, is removed or changed.
|
||||||
) {
|
)) {
|
||||||
fetch_and_process_linked_resource();
|
fetch_and_process_linked_resource();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue