Bug 1242599 - Create TextTrack before LoadResource(). r=rillian draft
authorbechen <bechen@mozilla.com>
Thu, 02 Jun 2016 15:37:14 +0800
changeset 374302 da2a7afa515d10532717f18a7715e6045a2fc8fe
parent 373936 22047a4eea784c15026c77911c0bd6ea1b70fa68
child 374303 b439b0cb503bb631a39c889913f1337c1b36761c
push id19987
push userbechen@mozilla.com
push dateThu, 02 Jun 2016 07:38:00 +0000
reviewersrillian
bugs1242599
milestone49.0a1
Bug 1242599 - Create TextTrack before LoadResource(). r=rillian MozReview-Commit-ID: 7deLCeKc0lc
dom/html/HTMLTrackElement.cpp
--- a/dom/html/HTMLTrackElement.cpp
+++ b/dom/html/HTMLTrackElement.cpp
@@ -197,23 +197,16 @@ HTMLTrackElement::LoadResource()
   LOG(LogLevel::Info, ("%p Trying to load from src=%s", this,
       NS_ConvertUTF16toUTF8(src).get()));
 
   if (mChannel) {
     mChannel->Cancel(NS_BINDING_ABORTED);
     mChannel = nullptr;
   }
 
-  // We may already have a TextTrack at this point if GetTrack() has already
-  // been called. This happens, for instance, if script tries to get the
-  // TextTrack before its mTrackElement has been bound to the DOM tree.
-  if (!mTrack) {
-    CreateTextTrack();
-  }
-
   nsCOMPtr<nsIChannel> channel;
   nsCOMPtr<nsILoadGroup> loadGroup = OwnerDoc()->GetDocumentLoadGroup();
   rv = NS_NewChannel(getter_AddRefs(channel),
                      uri,
                      static_cast<Element*>(this),
                      nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS,
                      nsIContentPolicy::TYPE_INTERNAL_TRACK,
                      loadGroup,
@@ -254,21 +247,26 @@ HTMLTrackElement::BindToTree(nsIDocument
   if (!aParent || !aParent->IsNodeOfType(nsINode::eMEDIA)) {
     return NS_OK;
   }
 
   // Store our parent so we can look up its frame for display.
   if (!mMediaParent) {
     mMediaParent = static_cast<HTMLMediaElement*>(aParent);
 
-    HTMLMediaElement* media = static_cast<HTMLMediaElement*>(aParent);
     // TODO: separate notification for 'alternate' tracks?
-    media->NotifyAddedSource();
+    mMediaParent->NotifyAddedSource();
     LOG(LogLevel::Debug, ("Track element sent notification to parent."));
 
+    // We may already have a TextTrack at this point if GetTrack() has already
+    // been called. This happens, for instance, if script tries to get the
+    // TextTrack before its mTrackElement has been bound to the DOM tree.
+    if (!mTrack) {
+      CreateTextTrack();
+    }
     RefPtr<Runnable> r = NewRunnableMethod(this, &HTMLTrackElement::LoadResource);
     mMediaParent->RunInStableState(r);
   }
 
   return NS_OK;
 }
 
 void