Bug 1303970: P2. Fix "If the media data fetching process is aborted by the user steps". r?jwwang draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Tue, 20 Sep 2016 19:52:06 +1000
changeset 415880 0935b9f48a4b94ec12156a26050eafc092a85317
parent 415879 62161d5fed19e1046f94802c259908aaca4eb022
child 531725 1812cbf773320ba55c78b4976f98a97b4b6a226b
push id29996
push userbmo:jyavenard@mozilla.com
push dateWed, 21 Sep 2016 06:54:19 +0000
reviewersjwwang
bugs1303970
milestone52.0a1
Bug 1303970: P2. Fix "If the media data fetching process is aborted by the user steps". r?jwwang MozReview-Commit-ID: 6n91VY00gAo
dom/html/HTMLMediaElement.cpp
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -4472,17 +4472,25 @@ void HTMLMediaElement::Error(uint16_t aE
   // MediaKeys::Terminated and EMEH264Decoder::Error. We should take the 1st
   // one only in order not to fire multiple 'error' events.
   if (mError) {
     return;
   }
   mError = new MediaError(this, aErrorCode, aErrorDetails);
 
   DispatchAsyncEvent(NS_LITERAL_STRING("error"));
-  ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_IDLE);
+  if (mReadyState == HAVE_NOTHING && aErrorCode == MEDIA_ERR_ABORTED) {
+    // https://html.spec.whatwg.org/multipage/embedded-content.html#media-data-processing-steps-list
+    // "If the media data fetching process is aborted by the user"
+    DispatchAsyncEvent(NS_LITERAL_STRING("abort"));
+    ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_EMPTY);
+    DispatchAsyncEvent(NS_LITERAL_STRING("emptied"));
+  } else {
+    ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_IDLE);
+  }
   ChangeDelayLoadStatus(false);
   UpdateAudioChannelPlayingState();
 }
 
 void HTMLMediaElement::PlaybackEnded()
 {
   // We changed state which can affect AddRemoveSelfReference
   AddRemoveSelfReference();