Bug 1316573 - Reset the information in EncryptionInfo to make MediaElement reusable from encrypted content to plain content. draft
authorKilik Kuo <kikuo@mozilla.com>
Thu, 12 Jan 2017 11:33:55 +0800
changeset 459518 5ee66d4884d91f2a2c23ba303857800b3bc18bd3
parent 457446 d192a99be4b436f2dc839435319f7630d5d8f4b0
child 541920 419eab172d697300aa4bd1b148a14cbad0c19d4f
push id41250
push userbmo:kikuo@mozilla.com
push dateThu, 12 Jan 2017 03:44:00 +0000
bugs1316573
milestone53.0a1
Bug 1316573 - Reset the information in EncryptionInfo to make MediaElement reusable from encrypted content to plain content. MozReview-Commit-ID: 4OU0sb2OSzi
dom/html/HTMLMediaElement.cpp
dom/media/MediaInfo.h
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -1635,17 +1635,17 @@ void HTMLMediaElement::AbortExistingLoad
   mIsLoadingFromSourceChildren = false;
   mSuspendedAfterFirstFrame = false;
   mAllowSuspendAfterFirstFrame = true;
   mHaveQueuedSelectResource = false;
   mSuspendedForPreloadNone = false;
   mDownloadSuspendedByCache = false;
   mMediaInfo = MediaInfo();
   mIsEncrypted = false;
-  mPendingEncryptedInitData.mInitDatas.Clear();
+  mPendingEncryptedInitData.Reset();
   mWaitingForKey = NOT_WAITING_FOR_KEY;
   mSourcePointer = nullptr;
 
   mTags = nullptr;
 
   if (mNetworkState != nsIDOMHTMLMediaElement::NETWORK_EMPTY) {
     NS_ASSERTION(!mDecoder && !mSrcStream, "How did someone setup a new stream/decoder already?");
     // ChangeNetworkState() will call UpdateAudioChannelPlayingState()
@@ -5085,17 +5085,17 @@ void HTMLMediaElement::MetadataLoaded(co
                               "Encrypted content not supported outside of MSE"));
       return;
     }
 
     // Dispatch a distinct 'encrypted' event for each initData we have.
     for (const auto& initData : mPendingEncryptedInitData.mInitDatas) {
       DispatchEncrypted(initData.mInitData, initData.mType);
     }
-    mPendingEncryptedInitData.mInitDatas.Clear();
+    mPendingEncryptedInitData.Reset();
   }
 
   mWatchManager.ManualNotify(&HTMLMediaElement::UpdateReadyStateInternal);
 
   if (IsVideo() && aInfo->HasVideo()) {
     // We are a video element playing video so update the screen wakelock
     NotifyOwnerDocumentActivityChanged();
   }
--- a/dom/media/MediaInfo.h
+++ b/dom/media/MediaInfo.h
@@ -419,16 +419,22 @@ public:
   typedef nsTArray<InitData> InitDatas;
 
   // True if the stream has encryption metadata
   bool IsEncrypted() const
   {
     return mEncrypted;
   }
 
+  void Reset()
+  {
+    mEncrypted = false;
+    mInitDatas.Clear();
+  }
+
   template<typename AInitDatas>
   void AddInitData(const nsAString& aType, AInitDatas&& aInitData)
   {
     mInitDatas.AppendElement(InitData(aType, Forward<AInitDatas>(aInitData)));
     mEncrypted = true;
   }
 
   void AddInitData(const EncryptionInfo& aInfo)