diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index 5096a174ab7..f19b6f56404 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -158,8 +158,6 @@ pub struct HTMLMediaElement {
/// Play promises which are soon to be fulfilled by a queued task.
#[ignore_malloc_size_of = "promises are hard"]
in_flight_play_promises_queue: DomRefCell]>, ErrorResult)>>,
- /// Whether the media metadata has been completely received.
- have_metadata: Cell,
#[ignore_malloc_size_of = "servo_media"]
player: Box,
#[ignore_malloc_size_of = "Arc"]
@@ -209,7 +207,6 @@ impl HTMLMediaElement {
delaying_the_load_event_flag: Default::default(),
pending_play_promises: Default::default(),
in_flight_play_promises_queue: Default::default(),
- have_metadata: Cell::new(false),
player: ServoMedia::get().unwrap().create_player().unwrap(),
frame_renderer: Arc::new(Mutex::new(MediaFrameRenderer::new(
document.window().get_webrender_api_sender(),
@@ -1008,7 +1005,6 @@ impl HTMLMediaElement {
// Step 6.
self.change_ready_state(ReadyState::HaveMetadata);
- self.have_metadata.set(true);
// XXX(ferjm) Steps 7 to 13.
},
@@ -1020,7 +1016,15 @@ impl HTMLMediaElement {
},
_ => {},
},
- PlayerEvent::EndOfStream => {},
+ PlayerEvent::EndOfStream => {
+ println!("PlayerEvent::EndOfStream");
+ // https://html.spec.whatwg.org/multipage/#media-data-processing-steps-list
+ // => "If the media data can be fetched but is found by inspection to be in
+ // an unsupported format, or can otherwise not be rendered at all"
+ if self.ready_state.get() < ReadyState::HaveMetadata {
+ self.queue_dedicated_media_source_failure_steps();
+ }
+ },
PlayerEvent::FrameUpdated => {
self.upcast::().dirty(NodeDamage::OtherNodeDamage);
},
@@ -1276,13 +1280,6 @@ impl FetchResponseListener for HTMLMediaElementContext {
return;
}
- // Make sure we don't skip the HaveMetadata state.
- if elem.have_metadata.get() {
- // https://html.spec.whatwg.org/multipage/#media-data-processing-steps-list
- // => set the element's delaying-the-load-event flag to false
- elem.change_ready_state(ReadyState::HaveCurrentData);
- }
-
// https://html.spec.whatwg.org/multipage/#concept-media-load-resource step 4,
// => "If mode is remote" step 2
if time::get_time() > self.next_progress_event {
@@ -1309,21 +1306,7 @@ impl FetchResponseListener for HTMLMediaElementContext {
eprintln!("Couldn't signal EOS to player");
}
- // => "If the media data can be fetched but is found by inspection to be in an unsupported
- // format, or can otherwise not be rendered at all"
- if !elem.have_metadata.get() {
- // FIXME(victor): adjust player's max-size (or buffering).
- //
- // In short streams the EOS might arrive before extracting the stream
- // metadata. This is because the internal queue in the GStreamer appsrc element,
- // has a size of 200K and it pushes the data until it is reached. It would be nice
- // to add a property to set the max-data in appsrc according to reported size of
- // the stream.
- // Until then, we comment out the failure steps.
- //
- //elem.queue_dedicated_media_source_failure_steps();
- // => "Once the entire media resource has been fetched..."
- } else if status.is_ok() {
+ if status.is_ok() {
elem.change_ready_state(ReadyState::HaveEnoughData);
elem.upcast::().fire_event(atom!("progress"));