diff --git a/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.cpp
index 7c75877a8c5..c3ab7b4e060 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.cpp
@@ -1,6 +1,7 @@
/*
* Copyright (c) 2018-2021, Andreas Kling
* Copyright (c) 2021, the SerenityOS developers.
+ * Copyright (c) 2024, Jamie Mansfield
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@@ -49,6 +50,33 @@ void HTMLStyleElement::removed_from(Node* old_parent)
Base::removed_from(old_parent);
}
+// https://html.spec.whatwg.org/multipage/semantics.html#dom-style-disabled
+bool HTMLStyleElement::disabled()
+{
+ // 1. If this does not have an associated CSS style sheet, return false.
+ if (!sheet())
+ return false;
+
+ // 2. If this's associated CSS style sheet's disabled flag is set, return true.
+ if (sheet()->disabled())
+ return true;
+
+ // 3. Return false.
+ return false;
+}
+
+// https://html.spec.whatwg.org/multipage/semantics.html#dom-style-disabled
+void HTMLStyleElement::set_disabled(bool disabled)
+{
+ // 1. If this does not have an associated CSS style sheet, return.
+ if (!sheet())
+ return;
+
+ // 2. If the given value is true, set this's associated CSS style sheet's disabled flag.
+ // Otherwise, unset this's associated CSS style sheet's disabled flag.
+ sheet()->set_disabled(disabled);
+}
+
// https://www.w3.org/TR/cssom/#dom-linkstyle-sheet
CSS::CSSStyleSheet* HTMLStyleElement::sheet()
{
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.h b/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.h
index 69d6e17503c..86cb2c4ca16 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.h
+++ b/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.h
@@ -23,6 +23,9 @@ public:
virtual void inserted() override;
virtual void removed_from(Node*) override;
+ bool disabled();
+ void set_disabled(bool disabled);
+
CSS::CSSStyleSheet* sheet();
CSS::CSSStyleSheet const* sheet() const;
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.idl b/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.idl
index a6311e7cc2d..2ff7d2de755 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.idl
+++ b/Userland/Libraries/LibWeb/HTML/HTMLStyleElement.idl
@@ -7,7 +7,7 @@
interface HTMLStyleElement : HTMLElement {
[HTMLConstructor] constructor();
- [FIXME] attribute boolean disabled;
+ attribute boolean disabled;
[Reflect, CEReactions] attribute DOMString media;
[FIXME, SameObject, PutForwards=value] readonly attribute DOMTokenList blocking;