Bug 1208371 - Kill nsDOMUserMediaStream with fire. r?jib
MozReview-Commit-ID: 4KWvwqRj6Qc
--- a/dom/media/DOMMediaStream.cpp
+++ b/dom/media/DOMMediaStream.cpp
@@ -623,16 +623,34 @@ DOMMediaStream::HasTrack(const MediaStre
bool
DOMMediaStream::OwnsTrack(const MediaStreamTrack& aTrack) const
{
return !!FindOwnedTrackPort(aTrack);
}
bool
+DOMMediaStream::AddDirectListener(MediaStreamDirectListener* aListener)
+{
+ if (GetInputStream() && GetInputStream()->AsSourceStream()) {
+ GetInputStream()->AsSourceStream()->AddDirectListener(aListener);
+ return true; // application should ignore NotifyQueuedTrackData
+ }
+ return false;
+}
+
+void
+DOMMediaStream::RemoveDirectListener(MediaStreamDirectListener* aListener)
+{
+ if (GetInputStream() && GetInputStream()->AsSourceStream()) {
+ GetInputStream()->AsSourceStream()->RemoveDirectListener(aListener);
+ }
+}
+
+bool
DOMMediaStream::IsFinished()
{
return !mPlaybackStream || mPlaybackStream->IsFinished();
}
void
DOMMediaStream::InitSourceStream(MediaStreamGraph* aGraph)
{
--- a/dom/media/DOMMediaStream.h
+++ b/dom/media/DOMMediaStream.h
@@ -409,22 +409,21 @@ public:
/**
* Allows a video element to identify this stream as a camera stream, which
* needs special treatment.
*/
virtual MediaStream* GetCameraStream() const { return nullptr; }
/**
- * Overridden in DOMLocalMediaStreams to allow getUserMedia to pass
- * data directly to RTCPeerConnection without going through graph queuing.
- * Returns a bool to let us know if direct data will be delivered.
+ * Allows users to get access to media data without going through graph
+ * queuing. Returns a bool to let us know if direct data will be delivered.
*/
- virtual bool AddDirectListener(MediaStreamDirectListener *aListener) { return false; }
- virtual void RemoveDirectListener(MediaStreamDirectListener *aListener) {}
+ bool AddDirectListener(MediaStreamDirectListener *aListener);
+ void RemoveDirectListener(MediaStreamDirectListener *aListener);
virtual DOMLocalMediaStream* AsDOMLocalMediaStream() { return nullptr; }
virtual DOMHwMediaStream* AsDOMHwMediaStream() { return nullptr; }
bool IsFinished();
/**
* Returns a principal indicating who may access this stream. The stream contents
* can only be accessed by principals subsuming this principal.
--- a/dom/media/MediaManager.cpp
+++ b/dom/media/MediaManager.cpp
@@ -651,85 +651,16 @@ nsresult VideoDevice::Restart(const dom:
return GetSource()->Restart(aConstraints, aPrefs, mID);
}
nsresult AudioDevice::Restart(const dom::MediaTrackConstraints &aConstraints,
const MediaEnginePrefs &aPrefs) {
return GetSource()->Restart(aConstraints, aPrefs, mID);
}
-/**
- * A subclass that we only use to stash internal pointers to MediaStreamGraph objects
- * that need to be cleaned up.
- */
-class nsDOMUserMediaStream : public DOMLocalMediaStream
-{
-public:
- static already_AddRefed<nsDOMUserMediaStream>
- CreateSourceStream(nsPIDOMWindowInner* aWindow,
- GetUserMediaCallbackMediaStreamListener* aListener,
- MediaStreamGraph* aMSG,
- MediaStreamTrackSourceGetter* aTrackSourceGetter)
- {
- RefPtr<nsDOMUserMediaStream> stream =
- new nsDOMUserMediaStream(aWindow, aListener, aTrackSourceGetter);
- stream->InitSourceStream(aMSG);
- return stream.forget();
- }
-
- nsDOMUserMediaStream(nsPIDOMWindowInner* aWindow,
- GetUserMediaCallbackMediaStreamListener* aListener,
- MediaStreamTrackSourceGetter* aTrackSourceGetter) :
- DOMLocalMediaStream(aWindow, aTrackSourceGetter),
- mListener(aListener)
- {}
-
- virtual ~nsDOMUserMediaStream()
- {
- StopImpl();
-
- if (GetSourceStream()) {
- GetSourceStream()->Destroy();
- }
- }
-
- // Allow getUserMedia to pass input data directly to PeerConnection/MediaPipeline
- bool AddDirectListener(MediaStreamDirectListener *aListener) override
- {
- if (GetSourceStream()) {
- GetSourceStream()->AddDirectListener(aListener);
- return true; // application should ignore NotifyQueuedTrackData
- }
- return false;
- }
-
- void RemoveDirectListener(MediaStreamDirectListener *aListener) override
- {
- if (GetSourceStream()) {
- GetSourceStream()->RemoveDirectListener(aListener);
- }
- }
-
- DOMLocalMediaStream* AsDOMLocalMediaStream() override
- {
- return this;
- }
-
- SourceMediaStream* GetSourceStream()
- {
- if (GetInputStream()) {
- return GetInputStream()->AsSourceStream();
- }
- return nullptr;
- }
-
- RefPtr<GetUserMediaCallbackMediaStreamListener> mListener;
-};
-
-
void
MediaOperationTask::ReturnCallbackError(nsresult rv, const char* errorLog)
{
MM_LOG(("%s , rv=%d", errorLog, rv));
NS_DispatchToMainThread(do_AddRef(new ReleaseMediaOperationResource(mStream.forget(),
mOnTracksAvailableCallback.forget())));
nsString log;
@@ -930,17 +861,17 @@ public:
} 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);
+ DOMLocalMediaStream::CreateSourceStream(window, msg, nullptr);
if (mPeerIdentity) {
domStream->SetPeerIdentity(mPeerIdentity.forget());
}
if (mAudioDevice) {
nsString audioDeviceName;
mAudioDevice->GetName(audioDeviceName);