diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp index 0b0c43acf2..516e65e3d9 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp @@ -378,6 +378,8 @@ enum class SelectMode { // https://html.spec.whatwg.org/multipage/media.html#concept-media-load-algorithm WebIDL::ExceptionOr HTMLMediaElement::select_resource() { + auto& vm = this->vm(); + // 1. Set the element's networkState attribute to the NETWORK_NO_SOURCE value. m_network_state = NetworkState::NoSource; @@ -463,7 +465,9 @@ WebIDL::ExceptionOr HTMLMediaElement::select_resource() // the URL specified by the src attribute's value relative to the media element's node document when the src attribute was last changed. auto url_record = document().parse_url(source); - // FIXME: 3. ⌛ If urlString was obtained successfully, set the currentSrc attribute to urlString. + // 3. ⌛ If urlString was obtained successfully, set the currentSrc attribute to urlString. + if (url_record.is_valid()) + m_current_src = TRY_OR_THROW_OOM(vm, String::from_deprecated_string(url_record.to_deprecated_string())); // 4. End the synchronous section, continuing the remaining steps in parallel. diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h index b3d7740927..7bc1dc62b2 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h @@ -33,6 +33,8 @@ public: void queue_a_media_element_task(JS::SafeFunction steps); + String const& current_src() const { return m_current_src; } + enum class NetworkState : u16 { Empty, Idle, @@ -142,6 +144,9 @@ private: // https://html.spec.whatwg.org/multipage/media.html#dom-media-crossorigin CORSSettingAttribute m_crossorigin { CORSSettingAttribute::NoCORS }; + // https://html.spec.whatwg.org/multipage/media.html#dom-media-currentsrc + String m_current_src; + // https://html.spec.whatwg.org/multipage/media.html#dom-media-networkstate NetworkState m_network_state { NetworkState::Empty }; diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.idl b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.idl index 3cb3440752..a9658fb3ef 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.idl +++ b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.idl @@ -14,6 +14,7 @@ interface HTMLMediaElement : HTMLElement { // network state [Reflect, CEReactions] attribute DOMString src; + readonly attribute USVString currentSrc; [Reflect=crossorigin, CEReactions] attribute DOMString? crossOrigin; const unsigned short NETWORK_EMPTY = 0; const unsigned short NETWORK_IDLE = 1;