Bug 1208371 - Make MediaManager pass its principal to MediaStreamTrack for gUM. r?mt
MozReview-Commit-ID: 7f5CIDgf0TI
--- 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)) {