diff options
author | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2018-12-12 17:08:36 +0100 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2018-12-12 18:08:40 +0100 |
commit | 881889824053cf3892c30e6b66a29a1720781dae (patch) | |
tree | 03515756af4ce7871d89044ec2faa9a5514a1f23 | |
parent | 707b490c0f1d5f09ac481ae903e349dd2ddd97c5 (diff) | |
download | servo-881889824053cf3892c30e6b66a29a1720781dae.tar.gz servo-881889824053cf3892c30e6b66a29a1720781dae.zip |
Do not move to HaveEnoughData state if no media data is fetched from the network
5 files changed, 8 insertions, 20 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index 15d0090cba7..f843554190a 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -1528,6 +1528,8 @@ struct HTMLMediaElementContext { resource_timing: ResourceFetchTiming, /// url for the resource url: ServoUrl, + /// Amount of data fetched. + bytes_fetched: usize, } // https://html.spec.whatwg.org/multipage/#media-data-processing-steps-list @@ -1592,8 +1594,9 @@ impl FetchResponseListener for HTMLMediaElementContext { return; } - let elem = self.elem.root(); + self.bytes_fetched += payload.len(); + let elem = self.elem.root(); // Push input data into the player. if let Err(e) = elem.player.push_data(payload) { eprintln!("Could not push input data to player {:?}", e); @@ -1617,14 +1620,14 @@ impl FetchResponseListener for HTMLMediaElementContext { let elem = self.elem.root(); if self.ignore_response { // An error was received previously, skip processing the payload - // and notify the media backend that we are done pushing data. + // and notify the media backend that we are done pushing data. if let Err(e) = elem.player.end_of_stream() { warn!("Could not signal EOS to player {:?}", e); } return; } - if status.is_ok() { + if status.is_ok() && self.bytes_fetched != 0 { if elem.ready_state.get() == ReadyState::HaveNothing { // Make sure that we don't skip the HaveMetadata and HaveCurrentData // states for short streams. @@ -1711,7 +1714,8 @@ impl HTMLMediaElementContext { next_progress_event: time::get_time() + Duration::milliseconds(350), ignore_response: false, resource_timing: ResourceFetchTiming::new(ResourceTimingType::Resource), - url: url, + url, + bytes_fetched: 0, } } } diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html.ini deleted file mode 100644 index 95be7126728..00000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[load-events-networkState.html] - [NETWORK_NO_SOURCE] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-iframe.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-iframe.html.ini deleted file mode 100644 index dd5f01686e9..00000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-iframe.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[resource-selection-invoke-insert-into-iframe.html] - [NOT invoking resource selection by inserting into other document with src set] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html.ini deleted file mode 100644 index 80becaced04..00000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[resource-selection-invoke-pause-networkState.html] - [NOT invoking resource selection with pause() when networkState is not NETWORK_EMPTY] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document-networkState.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document-networkState.html.ini deleted file mode 100644 index cbd728cd5fd..00000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document-networkState.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[resource-selection-invoke-remove-from-document-networkState.html] - [NOT invoking resource selection with implicit pause() when networkState is not NETWORK_EMPTY] - expected: FAIL - |