Title: [268100] branches/safari-610-branch
Revision
268100
Author
[email protected]
Date
2020-10-06 17:23:21 -0700 (Tue, 06 Oct 2020)

Log Message

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

Modified Paths

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;
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to