Changeset 268477 in webkit


Ignore:
Timestamp:
Oct 14, 2020 11:56:04 AM (4 years ago)
Author:
youenn@apple.com
Message:

MediaRecorder .stop should not throw in Inactive state
https://bugs.webkit.org/show_bug.cgi?id=217705

Reviewed by Eric Carlson.

LayoutTests/imported/w3c:

fix-217705

  • web-platform-tests/mediacapture-record/MediaRecorder-stop-expected.txt:
  • web-platform-tests/mediacapture-record/MediaRecorder-stop.html:

Source/WebCore:

Update according spec changes in https://github.com/w3c/mediacapture-record/pull/158.
stop no longer throws if media recorder is inactive.
Covered by updated test.

  • Modules/mediarecorder/MediaRecorder.cpp:

(WebCore::MediaRecorder::stopRecording):

  • Modules/mediarecorder/MediaRecorder.h:
  • Modules/mediarecorder/MediaRecorder.idl:
Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r268424 r268477  
     12020-10-14  Youenn Fablet  <youenn@apple.com>
     2
     3        MediaRecorder .stop should not throw in Inactive state
     4        https://bugs.webkit.org/show_bug.cgi?id=217705
     5
     6        Reviewed by Eric Carlson.
     7
     8        fix-217705
     9
     10        * web-platform-tests/mediacapture-record/MediaRecorder-stop-expected.txt:
     11        * web-platform-tests/mediacapture-record/MediaRecorder-stop.html:
     12
    1132020-10-13  Chris Dumez  <cdumez@apple.com>
    214
  • trunk/LayoutTests/imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-stop-expected.txt

    r268119 r268477  
    22PASS MediaRecorder will stop recording and fire a stop event when all tracks are ended
    33PASS MediaRecorder will stop recording and fire a stop event when stop() is called
    4 PASS MediaRecorder will fire an exception when stopped after creation
    5 PASS MediaRecorder will fire an exception when stopped after having just been stopped
    6 PASS MediaRecorder will fire an exception when stopped after having just been spontaneously stopped
     4PASS MediaRecorder will not fire an exception when stopped after creation
     5PASS MediaRecorder will not fire an exception when stopped after having just been stopped
     6PASS MediaRecorder will not fire an exception when stopped after having just been spontaneously stopped
    77PASS MediaRecorder will fire start event even if stopped synchronously
    88PASS MediaRecorder will fire start event even if a track is removed synchronously
  • trunk/LayoutTests/imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-stop.html

    r268119 r268477  
    8484    promise_test(async t => {
    8585        const recorder = new MediaRecorder(createVideoStream());
    86         assert_throws_dom("InvalidStateError", () => { recorder.stop(); });
     86        recorder.stop();
    8787        await Promise.race([
    8888            new Promise((_, reject) => recorder.onstop =
    8989                _ => reject(new Error("onstop should never have been called"))),
    9090            new Promise(r => t.step_timeout(r, 0))]);
    91     }, "MediaRecorder will fire an exception when stopped after creation");
     91    }, "MediaRecorder will not fire an exception when stopped after creation");
    9292
    9393    promise_test(async t => {
     
    9696        recorder.stop();
    9797        let event = await new Promise(r => recorder.onstop = r);
    98         assert_throws_dom("InvalidStateError", () => { recorder.stop(); });
     98        recorder.stop();
    9999        await Promise.race([
    100100            new Promise((_, reject) => recorder.onstop =
    101101                _ => reject(new Error("onstop should never have been called"))),
    102102            new Promise(r => t.step_timeout(r, 0))]);
    103     }, "MediaRecorder will fire an exception when stopped after having just been stopped");
     103    }, "MediaRecorder will not fire an exception when stopped after having just been stopped");
    104104
    105105    promise_test(async t => {
     
    109109        stream.getVideoTracks()[0].stop();
    110110        let event = await new Promise(r => recorder.onstop = r);
    111         assert_throws_dom("InvalidStateError", () => { recorder.stop(); });
     111        recorder.stop();
    112112        await Promise.race([
    113113            new Promise((_, reject) => recorder.onstop =
    114114                _ => reject(new Error("onstop should never have been called"))),
    115115            new Promise(r => t.step_timeout(r, 0))]);
    116     }, "MediaRecorder will fire an exception when stopped after having just been spontaneously stopped");
     116    }, "MediaRecorder will not fire an exception when stopped after having just been spontaneously stopped");
    117117
    118118    promise_test(async t => {
  • trunk/Source/WebCore/ChangeLog

    r268476 r268477  
     12020-10-14  Youenn Fablet  <youenn@apple.com>
     2
     3        MediaRecorder .stop should not throw in Inactive state
     4        https://bugs.webkit.org/show_bug.cgi?id=217705
     5
     6        Reviewed by Eric Carlson.
     7
     8        Update according spec changes in https://github.com/w3c/mediacapture-record/pull/158.
     9        stop no longer throws if media recorder is inactive.
     10        Covered by updated test.
     11
     12        * Modules/mediarecorder/MediaRecorder.cpp:
     13        (WebCore::MediaRecorder::stopRecording):
     14        * Modules/mediarecorder/MediaRecorder.h:
     15        * Modules/mediarecorder/MediaRecorder.idl:
     16
    1172020-10-13  Simon Fraser  <simon.fraser@apple.com>
    218
  • trunk/Source/WebCore/Modules/mediarecorder/MediaRecorder.cpp

    r268363 r268477  
    203203}
    204204
    205 ExceptionOr<void> MediaRecorder::stopRecording()
     205void MediaRecorder::stopRecording()
    206206{
    207207    if (state() == RecordingState::Inactive)
    208         return Exception { InvalidStateError, "The MediaRecorder's state cannot be inactive"_s };
     208        return;
    209209
    210210    stopRecordingInternal();
     
    219219        dispatchEvent(Event::create(eventNames().stopEvent, Event::CanBubble::No, Event::IsCancelable::No));
    220220    }, TakePrivateRecorder::Yes);
    221     return { };
     221    return;
    222222}
    223223
  • trunk/Source/WebCore/Modules/mediarecorder/MediaRecorder.h

    r268363 r268477  
    7070   
    7171    ExceptionOr<void> startRecording(Optional<unsigned>);
    72     ExceptionOr<void> stopRecording();
     72    void stopRecording();
    7373    ExceptionOr<void> requestData();
    7474    ExceptionOr<void> pauseRecording();
  • trunk/Source/WebCore/Modules/mediarecorder/MediaRecorder.idl

    r268363 r268477  
    4747
    4848    [MayThrowException, ImplementedAs=startRecording] undefined start(optional unsigned long timeslice);
    49     [MayThrowException, ImplementedAs=stopRecording] undefined stop();
     49    [ImplementedAs=stopRecording] undefined stop();
    5050    [MayThrowException, ImplementedAs=pauseRecording] undefined pause();
    5151    [MayThrowException, ImplementedAs=resumeRecording] undefined resume();
Note: See TracChangeset for help on using the changeset viewer.