Diff
Modified: branches/safari-610-branch/LayoutTests/ChangeLog (268099 => 268100)
--- branches/safari-610-branch/LayoutTests/ChangeLog 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/LayoutTests/ChangeLog 2020-10-07 00:23:21 UTC (rev 268100)
@@ -1,5 +1,68 @@
2020-10-06 Alan Coon <[email protected]>
+ Cherry-pick r267833. rdar://problem/70024626
+
+ MediaRecorder should support MediaRecorderOptions.mimeType
+ https://bugs.webkit.org/show_bug.cgi?id=215018
+ <rdar://problem/66681508>
+
+ Reviewed by Eric Carlson.
+
+ LayoutTests/imported/w3c:
+
+ * web-platform-tests/mediacapture-record/MediaRecorder-mimetype-expected.txt:
+
+ Source/WebCore:
+
+ Instead of setting mime type right away, set it just before firing start event as per spec.
+ This will allow in the future to populate exact codec parameters if proven useful.
+
+ Covered by rebased and updated tests.
+
+ * Modules/mediarecorder/MediaRecorder.cpp:
+ (WebCore::MediaRecorder::create):
+ (WebCore::MediaRecorder::startRecording):
+ * platform/mediarecorder/MediaRecorderPrivate.h:
+ (WebCore::MediaRecorderPrivate::startRecording):
+ * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
+
+ Source/WebKit:
+
+ Update code to pass mimeType as part of startRecording callback.
+
+ * GPUProcess/webrtc/RemoteMediaRecorder.h:
+ (WebKit::RemoteMediaRecorder::mimeType const):
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.cpp:
+ (WebKit::RemoteMediaRecorderManager::createRecorder):
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.h:
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.messages.in:
+ * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
+ (WebKit::MediaRecorderPrivate::startRecording):
+ * WebProcess/GPU/webrtc/MediaRecorderPrivate.h:
+
+ LayoutTests:
+
+ Update test to expect setting of the mime type after start event.
+
+ * http/wpt/mediarecorder/mimeType.html:
+
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@267833 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2020-10-01 Youenn Fablet <[email protected]>
+
+ MediaRecorder should support MediaRecorderOptions.mimeType
+ https://bugs.webkit.org/show_bug.cgi?id=215018
+ <rdar://problem/66681508>
+
+ Reviewed by Eric Carlson.
+
+ Update test to expect setting of the mime type after start event.
+
+ * http/wpt/mediarecorder/mimeType.html:
+
+2020-10-06 Alan Coon <[email protected]>
+
Cherry-pick r267822. rdar://problem/70024621
MediaRecorder should allow setting low bit rates for audio
Modified: branches/safari-610-branch/LayoutTests/http/wpt/mediarecorder/mimeType.html (268099 => 268100)
--- branches/safari-610-branch/LayoutTests/http/wpt/mediarecorder/mimeType.html 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/LayoutTests/http/wpt/mediarecorder/mimeType.html 2020-10-07 00:23:21 UTC (rev 268100)
@@ -30,12 +30,21 @@
const mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
let recorder = new MediaRecorder(mediaStream);
- assert_equals(recorder.mimeType, "video/mp4");
+ assert_equals(recorder.mimeType, "");
+ recorder.start();
+ await new Promise(resolve => recorder._onstart_ = resolve);
+ assert_equals(recorder.mimeType, "video/mp4", "test 1 mime type");
recorder = new MediaRecorder(new MediaStream([mediaStream.getVideoTracks()[0]]));
- assert_equals(recorder.mimeType, "video/mp4");
+ assert_equals(recorder.mimeType, "");
+ recorder.start();
+ await new Promise(resolve => recorder._onstart_ = resolve);
+ assert_equals(recorder.mimeType, "video/mp4", "test 2 mime type");
recorder = new MediaRecorder(new MediaStream([mediaStream.getAudioTracks()[0]]));
+ assert_equals(recorder.mimeType, "");
+ recorder.start();
+ await new Promise(resolve => recorder._onstart_ = resolve);
assert_equals(recorder.mimeType, "audio/mp4");
}, "MediaRecorder mimeType");
</script>
Modified: branches/safari-610-branch/LayoutTests/imported/w3c/ChangeLog (268099 => 268100)
--- branches/safari-610-branch/LayoutTests/imported/w3c/ChangeLog 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/LayoutTests/imported/w3c/ChangeLog 2020-10-07 00:23:21 UTC (rev 268100)
@@ -1,5 +1,66 @@
2020-10-06 Alan Coon <[email protected]>
+ Cherry-pick r267833. rdar://problem/70024626
+
+ MediaRecorder should support MediaRecorderOptions.mimeType
+ https://bugs.webkit.org/show_bug.cgi?id=215018
+ <rdar://problem/66681508>
+
+ Reviewed by Eric Carlson.
+
+ LayoutTests/imported/w3c:
+
+ * web-platform-tests/mediacapture-record/MediaRecorder-mimetype-expected.txt:
+
+ Source/WebCore:
+
+ Instead of setting mime type right away, set it just before firing start event as per spec.
+ This will allow in the future to populate exact codec parameters if proven useful.
+
+ Covered by rebased and updated tests.
+
+ * Modules/mediarecorder/MediaRecorder.cpp:
+ (WebCore::MediaRecorder::create):
+ (WebCore::MediaRecorder::startRecording):
+ * platform/mediarecorder/MediaRecorderPrivate.h:
+ (WebCore::MediaRecorderPrivate::startRecording):
+ * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
+
+ Source/WebKit:
+
+ Update code to pass mimeType as part of startRecording callback.
+
+ * GPUProcess/webrtc/RemoteMediaRecorder.h:
+ (WebKit::RemoteMediaRecorder::mimeType const):
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.cpp:
+ (WebKit::RemoteMediaRecorderManager::createRecorder):
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.h:
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.messages.in:
+ * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
+ (WebKit::MediaRecorderPrivate::startRecording):
+ * WebProcess/GPU/webrtc/MediaRecorderPrivate.h:
+
+ LayoutTests:
+
+ Update test to expect setting of the mime type after start event.
+
+ * http/wpt/mediarecorder/mimeType.html:
+
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@267833 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2020-10-01 Youenn Fablet <[email protected]>
+
+ MediaRecorder should support MediaRecorderOptions.mimeType
+ https://bugs.webkit.org/show_bug.cgi?id=215018
+ <rdar://problem/66681508>
+
+ Reviewed by Eric Carlson.
+
+ * web-platform-tests/mediacapture-record/MediaRecorder-mimetype-expected.txt:
+
+2020-10-06 Alan Coon <[email protected]>
+
Cherry-pick r267825. rdar://problem/70024248
MediaRecorder should support isTypeSupported
Modified: branches/safari-610-branch/LayoutTests/imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-mimetype-expected.txt (268099 => 268100)
--- branches/safari-610-branch/LayoutTests/imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-mimetype-expected.txt 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/LayoutTests/imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-mimetype-expected.txt 2020-10-07 00:23:21 UTC (rev 268100)
@@ -1,13 +1,13 @@
-FAIL MediaRecorder sets no default mimeType in the constructor for audio assert_equals: MediaRecorder has no default mimeType expected "" but got "audio/mp4"
-FAIL MediaRecorder sets no default mimeType in the constructor for video assert_equals: MediaRecorder has no default mimeType expected "" but got "video/mp4"
-FAIL MediaRecorder sets no default mimeType in the constructor for audio/video assert_equals: MediaRecorder has no default mimeType expected "" but got "video/mp4"
+PASS MediaRecorder sets no default mimeType in the constructor for audio
+PASS MediaRecorder sets no default mimeType in the constructor for video
+PASS MediaRecorder sets no default mimeType in the constructor for audio/video
PASS MediaRecorder invalid audio mimeType throws
PASS MediaRecorder invalid audio mimeType is unsupported
PASS MediaRecorder invalid video mimeType throws
PASS MediaRecorder invalid video mimeType is unsupported
PASS Supported mimeType audio/mp4 is set immediately after constructing
-FAIL Supported mimeType video/mp4 is set immediately after constructing assert_equals: Supported mimeType is set expected "video/mp4" but got "audio/mp4"
+PASS Supported mimeType video/mp4 is set immediately after constructing
PASS Unsupported mimeType audio/ogg throws
PASS Unsupported mimeType audio/ogg; codecs="vorbis" throws
PASS Unsupported mimeType audio/ogg; codecs="opus" throws
@@ -26,9 +26,9 @@
PASS MediaRecorder sets a nonempty mimeType on 'onstart' for audio
PASS MediaRecorder sets a nonempty mimeType on 'onstart' for video
PASS MediaRecorder sets a nonempty mimeType on 'onstart' for audio/video
-FAIL MediaRecorder mimeType is not set before 'onstart' for audio assert_equals: expected "" but got "audio/mp4"
-FAIL MediaRecorder mimeType is not set before 'onstart' for video assert_equals: expected "" but got "video/mp4"
-FAIL MediaRecorder mimeType is not set before 'onstart' for audio/video assert_equals: expected "" but got "video/mp4"
+PASS MediaRecorder mimeType is not set before 'onstart' for audio
+PASS MediaRecorder mimeType is not set before 'onstart' for video
+PASS MediaRecorder mimeType is not set before 'onstart' for audio/video
PASS MediaRecorder doesn't fire 'onstart' multiple times for audio
PASS MediaRecorder doesn't fire 'onstart' multiple times for video
PASS MediaRecorder doesn't fire 'onstart' multiple times for audio/video
Modified: branches/safari-610-branch/Source/WebCore/ChangeLog (268099 => 268100)
--- branches/safari-610-branch/Source/WebCore/ChangeLog 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/Source/WebCore/ChangeLog 2020-10-07 00:23:21 UTC (rev 268100)
@@ -1,5 +1,76 @@
2020-10-06 Alan Coon <[email protected]>
+ Cherry-pick r267833. rdar://problem/70024626
+
+ MediaRecorder should support MediaRecorderOptions.mimeType
+ https://bugs.webkit.org/show_bug.cgi?id=215018
+ <rdar://problem/66681508>
+
+ Reviewed by Eric Carlson.
+
+ LayoutTests/imported/w3c:
+
+ * web-platform-tests/mediacapture-record/MediaRecorder-mimetype-expected.txt:
+
+ Source/WebCore:
+
+ Instead of setting mime type right away, set it just before firing start event as per spec.
+ This will allow in the future to populate exact codec parameters if proven useful.
+
+ Covered by rebased and updated tests.
+
+ * Modules/mediarecorder/MediaRecorder.cpp:
+ (WebCore::MediaRecorder::create):
+ (WebCore::MediaRecorder::startRecording):
+ * platform/mediarecorder/MediaRecorderPrivate.h:
+ (WebCore::MediaRecorderPrivate::startRecording):
+ * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
+
+ Source/WebKit:
+
+ Update code to pass mimeType as part of startRecording callback.
+
+ * GPUProcess/webrtc/RemoteMediaRecorder.h:
+ (WebKit::RemoteMediaRecorder::mimeType const):
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.cpp:
+ (WebKit::RemoteMediaRecorderManager::createRecorder):
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.h:
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.messages.in:
+ * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
+ (WebKit::MediaRecorderPrivate::startRecording):
+ * WebProcess/GPU/webrtc/MediaRecorderPrivate.h:
+
+ LayoutTests:
+
+ Update test to expect setting of the mime type after start event.
+
+ * http/wpt/mediarecorder/mimeType.html:
+
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@267833 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2020-10-01 Youenn Fablet <[email protected]>
+
+ MediaRecorder should support MediaRecorderOptions.mimeType
+ https://bugs.webkit.org/show_bug.cgi?id=215018
+ <rdar://problem/66681508>
+
+ Reviewed by Eric Carlson.
+
+ Instead of setting mime type right away, set it just before firing start event as per spec.
+ This will allow in the future to populate exact codec parameters if proven useful.
+
+ Covered by rebased and updated tests.
+
+ * Modules/mediarecorder/MediaRecorder.cpp:
+ (WebCore::MediaRecorder::create):
+ (WebCore::MediaRecorder::startRecording):
+ * platform/mediarecorder/MediaRecorderPrivate.h:
+ (WebCore::MediaRecorderPrivate::startRecording):
+ * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
+
+2020-10-06 Alan Coon <[email protected]>
+
Cherry-pick r267822. rdar://problem/70024621
MediaRecorder should allow setting low bit rates for audio
Modified: branches/safari-610-branch/Source/WebCore/Modules/mediarecorder/MediaRecorder.cpp (268099 => 268100)
--- branches/safari-610-branch/Source/WebCore/Modules/mediarecorder/MediaRecorder.cpp 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/Source/WebCore/Modules/mediarecorder/MediaRecorder.cpp 2020-10-07 00:23:21 UTC (rev 268100)
@@ -67,7 +67,6 @@
if (result.hasException())
return result.releaseException();
- options.mimeType = result.returnValue()->mimeType();
auto recorder = adoptRef(*new MediaRecorder(document, WTFMove(stream), WTFMove(options)));
recorder->suspendIfNeeded();
return recorder;
@@ -164,13 +163,13 @@
return result.releaseException();
m_private = result.releaseReturnValue();
- m_private->startRecording([this, pendingActivity = makePendingActivity(*this)](auto&& exception) mutable {
+ m_private->startRecording([this, pendingActivity = makePendingActivity(*this)](auto&& mimeTypeOrException) mutable {
if (!m_isActive)
return;
- if (exception) {
+ if (mimeTypeOrException.hasException()) {
stopRecordingInternal();
- queueTaskKeepingObjectAlive(*this, TaskSource::Networking, [this, exception = WTFMove(*exception)]() mutable {
+ queueTaskKeepingObjectAlive(*this, TaskSource::Networking, [this, exception = mimeTypeOrException.releaseException()]() mutable {
if (!m_isActive)
return;
dispatchError(WTFMove(exception));
@@ -178,9 +177,10 @@
return;
}
- queueTaskKeepingObjectAlive(*this, TaskSource::Networking, [this] {
+ queueTaskKeepingObjectAlive(*this, TaskSource::Networking, [this, mimeType = mimeTypeOrException.releaseReturnValue()]() mutable {
if (!m_isActive)
return;
+ m_options.mimeType = WTFMove(mimeType);
dispatchEvent(Event::create(eventNames().startEvent, Event::CanBubble::No, Event::IsCancelable::No));
});
});
Modified: branches/safari-610-branch/Source/WebCore/platform/mediarecorder/MediaRecorderPrivate.h (268099 => 268100)
--- branches/safari-610-branch/Source/WebCore/platform/mediarecorder/MediaRecorderPrivate.h 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/Source/WebCore/platform/mediarecorder/MediaRecorderPrivate.h 2020-10-07 00:23:21 UTC (rev 268100)
@@ -24,11 +24,11 @@
#pragma once
+#include "ExceptionOr.h"
+#include "MediaRecorderPrivateOptions.h"
+#include "RealtimeMediaSource.h"
#include <wtf/CompletionHandler.h>
#include <wtf/Forward.h>
-#include "Exception.h"
-#include "MediaRecorderPrivateOptions.h"
-#include "RealtimeMediaSource.h"
#if ENABLE(MEDIA_STREAM)
@@ -62,8 +62,8 @@
virtual void stopRecording() = 0;
virtual const String& mimeType() const = 0;
- using ErrorCallback = CompletionHandler<void(Optional<Exception>&&)>;
- virtual void startRecording(ErrorCallback&& callback) { callback({ }); }
+ using StartRecordingCallback = CompletionHandler<void(ExceptionOr<String>&&)>;
+ virtual void startRecording(StartRecordingCallback&& callback) { callback(String(mimeType())); }
protected:
void setAudioSource(RefPtr<RealtimeMediaSource>&&);
Modified: branches/safari-610-branch/Source/WebCore/platform/mediarecorder/MediaRecorderPrivateAVFImpl.h (268099 => 268100)
--- branches/safari-610-branch/Source/WebCore/platform/mediarecorder/MediaRecorderPrivateAVFImpl.h 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/Source/WebCore/platform/mediarecorder/MediaRecorderPrivateAVFImpl.h 2020-10-07 00:23:21 UTC (rev 268100)
@@ -47,6 +47,7 @@
void videoSampleAvailable(MediaSample&) final;
void fetchData(FetchDataCallback&&) final;
void audioSamplesAvailable(const WTF::MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) final;
+ void startRecording(StartRecordingCallback&& callback) final { callback(String(m_writer->mimeType())); }
const String& mimeType() const final;
void stopRecording();
Modified: branches/safari-610-branch/Source/WebKit/ChangeLog (268099 => 268100)
--- branches/safari-610-branch/Source/WebKit/ChangeLog 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/Source/WebKit/ChangeLog 2020-10-07 00:23:21 UTC (rev 268100)
@@ -1,5 +1,76 @@
2020-10-06 Alan Coon <[email protected]>
+ Cherry-pick r267833. rdar://problem/70024626
+
+ MediaRecorder should support MediaRecorderOptions.mimeType
+ https://bugs.webkit.org/show_bug.cgi?id=215018
+ <rdar://problem/66681508>
+
+ Reviewed by Eric Carlson.
+
+ LayoutTests/imported/w3c:
+
+ * web-platform-tests/mediacapture-record/MediaRecorder-mimetype-expected.txt:
+
+ Source/WebCore:
+
+ Instead of setting mime type right away, set it just before firing start event as per spec.
+ This will allow in the future to populate exact codec parameters if proven useful.
+
+ Covered by rebased and updated tests.
+
+ * Modules/mediarecorder/MediaRecorder.cpp:
+ (WebCore::MediaRecorder::create):
+ (WebCore::MediaRecorder::startRecording):
+ * platform/mediarecorder/MediaRecorderPrivate.h:
+ (WebCore::MediaRecorderPrivate::startRecording):
+ * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
+
+ Source/WebKit:
+
+ Update code to pass mimeType as part of startRecording callback.
+
+ * GPUProcess/webrtc/RemoteMediaRecorder.h:
+ (WebKit::RemoteMediaRecorder::mimeType const):
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.cpp:
+ (WebKit::RemoteMediaRecorderManager::createRecorder):
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.h:
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.messages.in:
+ * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
+ (WebKit::MediaRecorderPrivate::startRecording):
+ * WebProcess/GPU/webrtc/MediaRecorderPrivate.h:
+
+ LayoutTests:
+
+ Update test to expect setting of the mime type after start event.
+
+ * http/wpt/mediarecorder/mimeType.html:
+
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@267833 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2020-10-01 Youenn Fablet <[email protected]>
+
+ MediaRecorder should support MediaRecorderOptions.mimeType
+ https://bugs.webkit.org/show_bug.cgi?id=215018
+ <rdar://problem/66681508>
+
+ Reviewed by Eric Carlson.
+
+ Update code to pass mimeType as part of startRecording callback.
+
+ * GPUProcess/webrtc/RemoteMediaRecorder.h:
+ (WebKit::RemoteMediaRecorder::mimeType const):
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.cpp:
+ (WebKit::RemoteMediaRecorderManager::createRecorder):
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.h:
+ * GPUProcess/webrtc/RemoteMediaRecorderManager.messages.in:
+ * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
+ (WebKit::MediaRecorderPrivate::startRecording):
+ * WebProcess/GPU/webrtc/MediaRecorderPrivate.h:
+
+2020-10-06 Alan Coon <[email protected]>
+
Cherry-pick r267825. rdar://problem/70024248
MediaRecorder should support isTypeSupported
Modified: branches/safari-610-branch/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.h (268099 => 268100)
--- branches/safari-610-branch/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.h 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.h 2020-10-07 00:23:21 UTC (rev 268100)
@@ -59,6 +59,7 @@
static std::unique_ptr<RemoteMediaRecorder> create(GPUConnectionToWebProcess&, MediaRecorderIdentifier, bool recordAudio, bool recordVideo, const WebCore::MediaRecorderPrivateOptions&);
~RemoteMediaRecorder();
+ String mimeType() const { return m_writer->mimeType(); }
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
private:
Modified: branches/safari-610-branch/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorderManager.cpp (268099 => 268100)
--- branches/safari-610-branch/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorderManager.cpp 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorderManager.cpp 2020-10-07 00:23:21 UTC (rev 268100)
@@ -51,15 +51,15 @@
recorder->didReceiveMessage(connection, decoder);
}
-void RemoteMediaRecorderManager::createRecorder(MediaRecorderIdentifier identifier, bool recordAudio, bool recordVideo, const MediaRecorderPrivateOptions& options, CompletionHandler<void(Optional<ExceptionData>&&)>&& completionHandler)
+void RemoteMediaRecorderManager::createRecorder(MediaRecorderIdentifier identifier, bool recordAudio, bool recordVideo, const MediaRecorderPrivateOptions& options, CompletionHandler<void(Optional<ExceptionData>&&, String&&)>&& completionHandler)
{
ASSERT(!m_recorders.contains(identifier));
auto recorder = RemoteMediaRecorder::create(m_gpuConnectionToWebProcess, identifier, recordAudio, recordVideo, options);
if (!recorder)
- return completionHandler(ExceptionData { NotSupportedError, "Unable to create a recorder with the provided stream"_s });
+ return completionHandler(ExceptionData { NotSupportedError, "Unable to create a recorder with the provided stream"_s }, { });
+ completionHandler({ }, recorder->mimeType());
m_recorders.add(identifier, WTFMove(recorder));
- completionHandler({ });
}
void RemoteMediaRecorderManager::releaseRecorder(MediaRecorderIdentifier identifier)
Modified: branches/safari-610-branch/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorderManager.h (268099 => 268100)
--- branches/safari-610-branch/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorderManager.h 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorderManager.h 2020-10-07 00:23:21 UTC (rev 268100)
@@ -61,7 +61,7 @@
private:
// IPC::MessageReceiver
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
- void createRecorder(MediaRecorderIdentifier, bool recordAudio, bool recordVideo, const WebCore::MediaRecorderPrivateOptions&, CompletionHandler<void(Optional<WebCore::ExceptionData>&&)>&&);
+ void createRecorder(MediaRecorderIdentifier, bool recordAudio, bool recordVideo, const WebCore::MediaRecorderPrivateOptions&, CompletionHandler<void(Optional<WebCore::ExceptionData>&&, String&&)>&&);
void releaseRecorder(MediaRecorderIdentifier);
GPUConnectionToWebProcess& m_gpuConnectionToWebProcess;
Modified: branches/safari-610-branch/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorderManager.messages.in (268099 => 268100)
--- branches/safari-610-branch/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorderManager.messages.in 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorderManager.messages.in 2020-10-07 00:23:21 UTC (rev 268100)
@@ -24,7 +24,7 @@
#if PLATFORM(COCOA) && ENABLE(GPU_PROCESS) && ENABLE(MEDIA_STREAM) && HAVE(AVASSETWRITERDELEGATE)
messages -> RemoteMediaRecorderManager NotRefCounted {
- CreateRecorder(WebKit::MediaRecorderIdentifier id, bool hasAudio, bool hasVideo, struct WebCore::MediaRecorderPrivateOptions options) -> (Optional<WebCore::ExceptionData> creationError) Async
+ CreateRecorder(WebKit::MediaRecorderIdentifier id, bool hasAudio, bool hasVideo, struct WebCore::MediaRecorderPrivateOptions options) -> (Optional<WebCore::ExceptionData> creationError, String mimeType) Async
ReleaseRecorder(WebKit::MediaRecorderIdentifier id)
}
Modified: branches/safari-610-branch/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp (268099 => 268100)
--- branches/safari-610-branch/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp 2020-10-07 00:23:21 UTC (rev 268100)
@@ -52,7 +52,7 @@
{
}
-void MediaRecorderPrivate::startRecording(ErrorCallback&& errorCallback)
+void MediaRecorderPrivate::startRecording(StartRecordingCallback&& callback)
{
// FIXME: we will need to implement support for multiple audio/video tracks
// Currently we only choose the first track as the recorded track.
@@ -61,13 +61,13 @@
if (selectedTracks.audioTrack)
m_ringBuffer = makeUnique<CARingBuffer>(makeUniqueRef<SharedRingBufferStorage>(this));
- m_connection->sendWithAsyncReply(Messages::RemoteMediaRecorderManager::CreateRecorder { m_identifier, !!selectedTracks.audioTrack, !!selectedTracks.videoTrack, m_options }, [this, weakThis = makeWeakPtr(this), audioTrack = makeRefPtr(selectedTracks.audioTrack), videoTrack = makeRefPtr(selectedTracks.videoTrack), errorCallback = WTFMove(errorCallback)](auto&& exception) mutable {
+ m_connection->sendWithAsyncReply(Messages::RemoteMediaRecorderManager::CreateRecorder { m_identifier, !!selectedTracks.audioTrack, !!selectedTracks.videoTrack, m_options }, [this, weakThis = makeWeakPtr(this), audioTrack = makeRefPtr(selectedTracks.audioTrack), videoTrack = makeRefPtr(selectedTracks.videoTrack), callback = WTFMove(callback)](auto&& exception, String&& mimeType) mutable {
if (!weakThis) {
- errorCallback({ });
+ callback(Exception { InvalidStateError });
return;
}
if (exception) {
- errorCallback(Exception { exception->code, WTFMove(exception->message) });
+ callback(Exception { exception->code, WTFMove(exception->message) });
return;
}
if (audioTrack)
@@ -74,7 +74,7 @@
setAudioSource(&audioTrack->source());
if (videoTrack)
setVideoSource(&videoTrack->source());
- errorCallback({ });
+ callback(WTFMove(mimeType));
}, 0);
}
Modified: branches/safari-610-branch/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.h (268099 => 268100)
--- branches/safari-610-branch/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.h 2020-10-07 00:23:17 UTC (rev 268099)
+++ branches/safari-610-branch/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.h 2020-10-07 00:23:21 UTC (rev 268100)
@@ -58,7 +58,7 @@
void videoSampleAvailable(WebCore::MediaSample&) final;
void fetchData(CompletionHandler<void(RefPtr<WebCore::SharedBuffer>&&, const String& mimeType)>&&) final;
void stopRecording() final;
- void startRecording(ErrorCallback&&) final;
+ void startRecording(StartRecordingCallback&&) final;
void audioSamplesAvailable(const WTF::MediaTime&, const WebCore::PlatformAudioData&, const WebCore::AudioStreamDescription&, size_t) final;
const String& mimeType() const final;