# HG changeset patch # User Shelly Lin # Date 1390547572 -28800 # Node ID 14a4145770721496eb886180eefd3e2b97d43946 # Parent 9d650c07b5476aec4e12f100e62d7f742548b9e3 Bug 957439 - Do not assert at Pause or Resume on unsupported input stream. r=roc, r=jsmith. diff --git a/content/media/MediaRecorder.cpp b/content/media/MediaRecorder.cpp --- a/content/media/MediaRecorder.cpp +++ b/content/media/MediaRecorder.cpp @@ -225,28 +225,30 @@ public: void Stop() { MOZ_ASSERT(NS_IsMainThread()); CleanupStreams(); nsContentUtils::UnregisterShutdownObserver(this); } - void Pause() + nsresult Pause() { - MOZ_ASSERT(NS_IsMainThread() && mTrackUnionStream); + NS_ENSURE_TRUE(NS_IsMainThread() && mTrackUnionStream, NS_ERROR_FAILURE); + mTrackUnionStream->ChangeExplicitBlockerCount(-1); - mTrackUnionStream->ChangeExplicitBlockerCount(-1); + return NS_OK; } - void Resume() + nsresult Resume() { - MOZ_ASSERT(NS_IsMainThread() && mTrackUnionStream); + NS_ENSURE_TRUE(NS_IsMainThread() && mTrackUnionStream, NS_ERROR_FAILURE); + mTrackUnionStream->ChangeExplicitBlockerCount(1); - mTrackUnionStream->ChangeExplicitBlockerCount(1); + return NS_OK; } already_AddRefed GetEncodedData() { nsString mimeType; mRecorder->GetMimeType(mimeType); return mEncodedBufferCache->ExtractBlob(mimeType); @@ -494,36 +496,42 @@ MediaRecorder::Stop(ErrorResult& aResult void MediaRecorder::Pause(ErrorResult& aResult) { if (mState != RecordingState::Recording) { aResult.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); return; } - mState = RecordingState::Paused; - MOZ_ASSERT(mSession != nullptr); if (mSession) { - mSession->Pause(); + nsresult rv = mSession->Pause(); + if (NS_FAILED(rv)) { + NotifyError(rv); + return; + } mState = RecordingState::Paused; } } void MediaRecorder::Resume(ErrorResult& aResult) { if (mState != RecordingState::Paused) { aResult.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); return; } MOZ_ASSERT(mSession != nullptr); if (mSession) { - mSession->Resume(); + nsresult rv = mSession->Resume(); + if (NS_FAILED(rv)) { + NotifyError(rv); + return; + } mState = RecordingState::Recording; } } void MediaRecorder::RequestData(ErrorResult& aResult) { if (mState != RecordingState::Recording) { diff --git a/content/media/test/mochitest.ini b/content/media/test/mochitest.ini --- a/content/media/test/mochitest.ini +++ b/content/media/test/mochitest.ini @@ -251,16 +251,17 @@ support-files = [test_mozHasAudio.html] [test_source_media.html] [test_autoplay_contentEditable.html] [test_decoder_disable.html] [test_mediarecorder_record_no_timeslice.html] [test_mediarecorder_reload_crash.html] [test_mediarecorder_record_immediate_stop.html] [test_mediarecorder_record_session.html] +[test_mediarecorder_unsupported_src.html] [test_playback.html] [test_seekLies.html] [test_media_sniffer.html] [test_streams_srcObject.html] [test_reset_src.html] [test_streams_autoplay.html] [test_streams_element_capture.html] [test_streams_element_capture_reset.html] diff --git a/content/media/test/test_mediarecorder_unsupported_src.html b/content/media/test/test_mediarecorder_unsupported_src.html new file mode 100644 --- /dev/null +++ b/content/media/test/test_mediarecorder_unsupported_src.html @@ -0,0 +1,87 @@ + + + Bug 957439 - Media Recording - Assertion fail at Pause if unsupported input stream. + + + + + +Mozilla Bug 957439 +
+
+
+