diff --git a/Libraries/LibWeb/HTML/AttributeNames.h b/Libraries/LibWeb/HTML/AttributeNames.h
index df2577cea88..439857945b1 100644
--- a/Libraries/LibWeb/HTML/AttributeNames.h
+++ b/Libraries/LibWeb/HTML/AttributeNames.h
@@ -60,6 +60,7 @@ namespace AttributeNames {
__ENUMERATE_HTML_ATTRIBUTE(data) \
__ENUMERATE_HTML_ATTRIBUTE(datetime) \
__ENUMERATE_HTML_ATTRIBUTE(declare) \
+ __ENUMERATE_HTML_ATTRIBUTE(decoding) \
__ENUMERATE_HTML_ATTRIBUTE(default_) \
__ENUMERATE_HTML_ATTRIBUTE(defaultchecked) \
__ENUMERATE_HTML_ATTRIBUTE(defaultselected) \
diff --git a/Libraries/LibWeb/HTML/HTMLImageElement.cpp b/Libraries/LibWeb/HTML/HTMLImageElement.cpp
index f36fef3e303..0a825ebd483 100644
--- a/Libraries/LibWeb/HTML/HTMLImageElement.cpp
+++ b/Libraries/LibWeb/HTML/HTMLImageElement.cpp
@@ -127,6 +127,11 @@ void HTMLImageElement::form_associated_element_attribute_changed(FlyString const
if (layout_node())
did_update_alt_text(verify_cast(*layout_node()));
}
+
+ if (name == HTML::AttributeNames::decoding) {
+ if (value.has_value() && (value->equals_ignoring_ascii_case("sync"sv) || value->equals_ignoring_ascii_case("async"sv)))
+ dbgln("FIXME: HTMLImageElement.decoding = '{}' is not implemented yet", value->to_ascii_lowercase());
+ }
}
GC::Ptr HTMLImageElement::create_layout_node(CSS::StyleProperties style)
@@ -1171,32 +1176,6 @@ void HTMLImageElement::animate()
paintable()->set_needs_display();
}
-StringView HTMLImageElement::decoding() const
-{
- switch (m_decoding_hint) {
- case ImageDecodingHint::Sync:
- return "sync"sv;
- case ImageDecodingHint::Async:
- return "async"sv;
- case ImageDecodingHint::Auto:
- return "auto"sv;
- default:
- VERIFY_NOT_REACHED();
- }
-}
-
-void HTMLImageElement::set_decoding(String decoding)
-{
- if (decoding == "sync"sv) {
- dbgln("FIXME: HTMLImageElement.decoding = 'sync' is not implemented yet");
- m_decoding_hint = ImageDecodingHint::Sync;
- } else if (decoding == "async"sv) {
- dbgln("FIXME: HTMLImageElement.decoding = 'async' is not implemented yet");
- m_decoding_hint = ImageDecodingHint::Async;
- } else
- m_decoding_hint = ImageDecodingHint::Auto;
-}
-
bool HTMLImageElement::allows_auto_sizes() const
{
// An img element allows auto-sizes if:
diff --git a/Libraries/LibWeb/HTML/HTMLImageElement.h b/Libraries/LibWeb/HTML/HTMLImageElement.h
index d6bc229c9ae..eb8139ae019 100644
--- a/Libraries/LibWeb/HTML/HTMLImageElement.h
+++ b/Libraries/LibWeb/HTML/HTMLImageElement.h
@@ -87,10 +87,6 @@ public:
// https://html.spec.whatwg.org/multipage/images.html#select-an-image-source
[[nodiscard]] Optional select_an_image_source();
- StringView decoding() const;
-
- void set_decoding(String);
-
void set_source_set(SourceSet);
ImageRequest& current_request() { return *m_current_request; }
@@ -162,15 +158,6 @@ private:
SourceSet m_source_set;
CSSPixelSize m_last_seen_viewport_size;
-
- // https://html.spec.whatwg.org/multipage/images.html#image-decoding-hint
- enum class ImageDecodingHint {
- Auto,
- Sync,
- Async
- };
-
- ImageDecodingHint m_decoding_hint = ImageDecodingHint::Auto;
};
}
diff --git a/Libraries/LibWeb/HTML/HTMLImageElement.idl b/Libraries/LibWeb/HTML/HTMLImageElement.idl
index fa216b581a1..f3b3947a23b 100644
--- a/Libraries/LibWeb/HTML/HTMLImageElement.idl
+++ b/Libraries/LibWeb/HTML/HTMLImageElement.idl
@@ -2,6 +2,14 @@
#import
#import
+// https://html.spec.whatwg.org/multipage/images.html#image-decoding-hint
+[MissingValueDefault=auto, InvalidValueDefault=auto]
+enum Decoding {
+ "sync",
+ "async",
+ "auto"
+};
+
// https://html.spec.whatwg.org/multipage/embedded-content.html#htmlimageelement
[Exposed=Window, LegacyFactoryFunction=Image(optional unsigned long width, optional unsigned long height)]
interface HTMLImageElement : HTMLElement {
@@ -22,7 +30,7 @@ interface HTMLImageElement : HTMLElement {
readonly attribute boolean complete;
readonly attribute USVString currentSrc;
[CEReactions, Reflect=referrerpolicy, Enumerated=ReferrerPolicy] attribute DOMString referrerPolicy;
- [CEReactions] attribute DOMString decoding;
+ [CEReactions, Enumerated=Decoding, Reflect] attribute DOMString decoding;
[CEReactions, Enumerated=LazyLoadingAttribute, Reflect] attribute DOMString loading;
[CEReactions, Enumerated=FetchPriorityAttribute, Reflect=fetchpriority] attribute DOMString fetchPriority;