Bug 1208371 - Make MediaManager pass its principal to MediaStreamTrack for gUM. r?mt draft
authorAndreas Pehrson <pehrsons@gmail.com>
Tue, 05 Jan 2016 10:16:24 +0800
changeset 342107 4f78d6335115491efef8b9114ff78da54053e49e
parent 342106 af35095f435d43c4eac25c7c270b992f7901e500
child 342108 78d4cebecf0d9195b7d10b2142f409a42ae337f1
push id13352
push userpehrsons@gmail.com
push dateFri, 18 Mar 2016 13:49:47 +0000
reviewersmt
bugs1208371
milestone47.0a1
Bug 1208371 - Make MediaManager pass its principal to MediaStreamTrack for gUM. r?mt MozReview-Commit-ID: 7f5CIDgf0TI
dom/media/MediaManager.cpp
--- a/dom/media/MediaManager.cpp
+++ b/dom/media/MediaManager.cpp
@@ -905,20 +905,21 @@ public:
       stream = msg->CreateSourceStream(nullptr); // Placeholder
       msg->RegisterCaptureStreamForWindow(
             mWindowID, domStream->GetInputStream()->AsProcessedStream());
       window->SetAudioCapture(true);
     } else {
       class LocalTrackSource : public MediaStreamTrackSource
       {
       public:
-        LocalTrackSource(GetUserMediaCallbackMediaStreamListener* aListener,
+        LocalTrackSource(nsIPrincipal* aPrincipal,
+                         GetUserMediaCallbackMediaStreamListener* aListener,
                          const MediaSourceEnum aSource,
                          const TrackID aTrackID)
-          : MediaStreamTrackSource(nullptr, false), mListener(aListener),
+          : MediaStreamTrackSource(aPrincipal, false), mListener(aListener),
             mSource(aSource), mTrackID(aTrackID) {}
 
         MediaSourceEnum GetMediaSource() const override
         {
           return mSource;
         }
 
         void Stop() override
@@ -932,51 +933,53 @@ public:
       protected:
         ~LocalTrackSource() {}
 
         RefPtr<GetUserMediaCallbackMediaStreamListener> mListener;
         const MediaSourceEnum mSource;
         const TrackID mTrackID;
       };
 
+      nsCOMPtr<nsIPrincipal> principal;
+      if (mPeerIdentity) {
+        principal = nsNullPrincipal::Create();
+      } else {
+        principal = window->GetExtantDoc()->NodePrincipal();
+      }
+
       // Normal case, connect the source stream to the track union stream to
       // avoid us blocking. Pass a null TrackSourceGetter since gUM should never
       // add tracks dynamically.
       domStream =
         nsDOMUserMediaStream::CreateSourceStream(window, mListener, msg, nullptr);
 
+      if (mPeerIdentity) {
+        domStream->SetPeerIdentity(mPeerIdentity.forget());
+      }
+
       if (mAudioDevice) {
         nsString audioDeviceName;
         mAudioDevice->GetName(audioDeviceName);
         const MediaSourceEnum source =
           mAudioDevice->GetSource()->GetMediaSource();
         RefPtr<MediaStreamTrackSource> audioSource =
-          new LocalTrackSource(mListener, source, kAudioTrack);
+          new LocalTrackSource(principal, mListener, source, kAudioTrack);
         domStream->CreateOwnDOMTrack(kAudioTrack, MediaSegment::AUDIO,
                                      audioDeviceName, audioSource);
       }
       if (mVideoDevice) {
         nsString videoDeviceName;
         mVideoDevice->GetName(videoDeviceName);
         const MediaSourceEnum source =
           mVideoDevice->GetSource()->GetMediaSource();
         RefPtr<MediaStreamTrackSource> videoSource =
-          new LocalTrackSource(mListener, source, kVideoTrack);
+          new LocalTrackSource(principal, mListener, source, kVideoTrack);
         domStream->CreateOwnDOMTrack(kVideoTrack, MediaSegment::VIDEO,
                                      videoDeviceName, videoSource);
       }
-
-      nsCOMPtr<nsIPrincipal> principal;
-      if (mPeerIdentity) {
-        principal = nsNullPrincipal::Create();
-        domStream->SetPeerIdentity(mPeerIdentity.forget());
-      } else {
-        principal = window->GetExtantDoc()->NodePrincipal();
-      }
-      domStream->CombineWithPrincipal(principal);
       stream = domStream->GetInputStream()->AsSourceStream();
     }
 
     if (!domStream || sInShutdown) {
       nsCOMPtr<nsIDOMGetUserMediaErrorCallback> onFailure = mOnFailure.forget();
       LOG(("Returning error for getUserMedia() - no stream"));
 
       if (auto* window = nsGlobalWindow::GetInnerWindowWithId(mWindowID)) {