Index: third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.cpp |
diff --git a/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.cpp b/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.cpp |
index 9713746b3413c61ba99626773af403ac7249b3eb..98974732a7f778d09cc99b766fe2d16a27afbc4f 100644 |
--- a/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.cpp |
+++ b/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.cpp |
@@ -36,6 +36,33 @@ String stateToString(MediaRecorder::State state) |
} // namespace |
+class MediaRecorder::TrackEventListener final : public EventListener { |
+public: |
+ static PassRefPtrWillBeRawPtr<TrackEventListener> create(blink::WebMediaRecorderHandlerClient* client) |
+ { |
+ return adoptRefWillBeNoop(new TrackEventListener(client)); |
+ } |
+ |
+ bool operator==(const EventListener& other) const override |
+ { |
+ return this == &other; |
+ } |
+ |
+private: |
+ TrackEventListener(blink::WebMediaRecorderHandlerClient* client) |
+ : EventListener(JSEventListenerType) |
+ , m_client(client) |
+ { |
+ } |
+ |
+ void handleEvent(ExecutionContext* executionContext, Event*) override |
+ { |
+ m_client->onError("MediaStream got a Track added/removed"); |
+ } |
+ |
+ blink::WebMediaRecorderHandlerClient* const m_client; |
+}; |
+ |
MediaRecorder* MediaRecorder::create(ExecutionContext* context, MediaStream* stream, ExceptionState& exceptionState) |
{ |
MediaRecorder* recorder = new MediaRecorder(context, stream, MediaRecorderOptions(), exceptionState); |
@@ -76,6 +103,11 @@ MediaRecorder::MediaRecorder(ExecutionContext* context, MediaStream* stream, con |
exceptionState.throwDOMException(NotSupportedError, "Failed to initialize native MediaRecorder, the type provided " + m_mimeType + "is unsupported." ); |
return; |
} |
+ |
+ m_addOrRemoveTrackListener = TrackEventListener::create(this); |
+ stream->addEventListener(EventTypeNames::addtrack, m_addOrRemoveTrackListener, false); |
+ stream->addEventListener(EventTypeNames::removetrack, m_addOrRemoveTrackListener, false); |
+ |
m_stopped = false; |
} |