diff --git a/Tests/LibWeb/Text/expected/HTML/HTMLTrackElement-readyState-attribute.txt b/Tests/LibWeb/Text/expected/HTML/HTMLTrackElement-readyState-attribute.txt
new file mode 100644
index 00000000000..d7b8b6d41d9
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/HTML/HTMLTrackElement-readyState-attribute.txt
@@ -0,0 +1 @@
+track.readyState == NONE: true
diff --git a/Tests/LibWeb/Text/input/HTML/HTMLTrackElement-readyState-attribute.html b/Tests/LibWeb/Text/input/HTML/HTMLTrackElement-readyState-attribute.html
new file mode 100644
index 00000000000..6d49f5aa350
--- /dev/null
+++ b/Tests/LibWeb/Text/input/HTML/HTMLTrackElement-readyState-attribute.html
@@ -0,0 +1,8 @@
+
+
+
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLTrackElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLTrackElement.cpp
index f2ed55bfae7..fef19156005 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLTrackElement.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLTrackElement.cpp
@@ -56,4 +56,30 @@ void HTMLTrackElement::attribute_changed(FlyString const& name, Optional
}
}
+// https://html.spec.whatwg.org/multipage/media.html#dom-track-readystate
+WebIDL::UnsignedShort HTMLTrackElement::ready_state()
+{
+ // The readyState attribute must return the numeric value corresponding to the text track readiness state of the track element's text track, as defined by the following list:
+ switch (m_track->readiness_state()) {
+ case TextTrack::ReadinessState::NotLoaded:
+ // NONE (numeric value 0)
+ // The text track not loaded state.
+ return 0;
+ case TextTrack::ReadinessState::Loading:
+ // LOADING (numeric value 1)
+ // The text track loading state.
+ return 1;
+ case TextTrack::ReadinessState::Loaded:
+ // LOADED (numeric value 2)
+ // The text track loaded state.
+ return 2;
+ case TextTrack::ReadinessState::FailedToLoad:
+ // ERROR (numeric value 3)
+ // The text track failed to load state.
+ return 3;
+ }
+
+ VERIFY_NOT_REACHED();
+}
+
}
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLTrackElement.h b/Userland/Libraries/LibWeb/HTML/HTMLTrackElement.h
index ae501e0b68d..67e482127e0 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLTrackElement.h
+++ b/Userland/Libraries/LibWeb/HTML/HTMLTrackElement.h
@@ -19,6 +19,8 @@ class HTMLTrackElement final : public HTMLElement {
public:
virtual ~HTMLTrackElement() override;
+ WebIDL::UnsignedShort ready_state();
+
JS::Handle track() { return m_track; }
private:
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLTrackElement.idl b/Userland/Libraries/LibWeb/HTML/HTMLTrackElement.idl
index d59a67330df..bd4533df98e 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLTrackElement.idl
+++ b/Userland/Libraries/LibWeb/HTML/HTMLTrackElement.idl
@@ -26,7 +26,7 @@ interface HTMLTrackElement : HTMLElement {
const unsigned short LOADING = 1;
const unsigned short LOADED = 2;
const unsigned short ERROR = 3;
- [FIXME] readonly attribute unsigned short readyState;
+ readonly attribute unsigned short readyState;
readonly attribute TextTrack track;