Forráskód Böngészése

LibWeb: Implement the HTMLMediaElement currentSrc attribute

Timothy Flynn 2 éve
szülő
commit
1a67b86b76

+ 5 - 1
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<void> 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<void> 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.
 

+ 5 - 0
Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h

@@ -33,6 +33,8 @@ public:
 
     void queue_a_media_element_task(JS::SafeFunction<void()> 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 };
 

+ 1 - 0
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;