Changeset 185191 in webkit


Ignore:
Timestamp:
Jun 3, 2015 11:06:50 PM (9 years ago)
Author:
youenn.fablet@crf.canon.fr
Message:

MediaDevices.getUserMedia should put promises in resolve/reject state synchronously
https://bugs.webkit.org/show_bug.cgi?id=145308

Reviewed by Darin Adler.

Removed the calls to callToMainThread in which were resolved and rejected promises.
Cleaned up the code to remove unneeded callback copies.

Covered by existing tests.

  • Modules/mediastream/UserMediaRequest.cpp:

(WebCore::UserMediaRequest::create):
(WebCore::UserMediaRequest::UserMediaRequest):
(WebCore::UserMediaRequest::didCreateStream):
(WebCore::UserMediaRequest::failedToCreateStreamWithConstraintsError):
(WebCore::UserMediaRequest::failedToCreateStreamWithPermissionError):

  • Modules/mediastream/UserMediaRequest.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r185187 r185191  
     12015-06-03  Youenn Fablet  <youenn.fablet@crf.canon.fr>
     2
     3        MediaDevices.getUserMedia should put promises in resolve/reject state synchronously
     4        https://bugs.webkit.org/show_bug.cgi?id=145308
     5
     6        Reviewed by Darin Adler.
     7
     8        Removed the calls to callToMainThread in which were resolved and rejected promises.
     9        Cleaned up the code to remove unneeded callback copies.
     10
     11        Covered by existing tests.
     12
     13        * Modules/mediastream/UserMediaRequest.cpp:
     14        (WebCore::UserMediaRequest::create):
     15        (WebCore::UserMediaRequest::UserMediaRequest):
     16        (WebCore::UserMediaRequest::didCreateStream):
     17        (WebCore::UserMediaRequest::failedToCreateStreamWithConstraintsError):
     18        (WebCore::UserMediaRequest::failedToCreateStreamWithPermissionError):
     19        * Modules/mediastream/UserMediaRequest.h:
     20
    1212015-06-03  Simon Fraser  <simon.fraser@apple.com>
    222
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp

    r184984 r185191  
    7676    ASSERT(successCallback);
    7777
    78     auto resolveCallback = [successCallback](MediaStream& stream) mutable {
    79         successCallback->handleEvent(&stream);
     78    auto resolveCallback = [successCallback, context](MediaStream& stream) mutable {
     79        ASSERT(context);
     80
     81        RefPtr<MediaStream> mediaStream = &stream;
     82        context->postTask([successCallback, mediaStream](ScriptExecutionContext&) {
     83            successCallback->handleEvent(mediaStream.get());
     84        });
    8085    };
    81     auto rejectCallback = [errorCallback](NavigatorUserMediaError& error) mutable {
    82         if (errorCallback)
    83             errorCallback->handleEvent(&error);
     86    auto rejectCallback = [errorCallback, context](NavigatorUserMediaError& error) mutable {
     87        ASSERT(context);
     88
     89        if (errorCallback) {
     90            RefPtr<NavigatorUserMediaError> eventError = &error;
     91            context->postTask([errorCallback, eventError](ScriptExecutionContext&) {
     92                errorCallback->handleEvent(eventError.get());
     93            });
     94        }
    8495    };
    8596
     
    8798}
    8899
    89 RefPtr<UserMediaRequest> UserMediaRequest::create(ScriptExecutionContext* context, UserMediaController* controller, const Dictionary& options, MediaDevices::ResolveCallback resolveCallback, MediaDevices::RejectCallback rejectCallback, ExceptionCode& ec)
     100RefPtr<UserMediaRequest> UserMediaRequest::create(ScriptExecutionContext* context, UserMediaController* controller, const Dictionary& options, MediaDevices::ResolveCallback&& resolveCallback, MediaDevices::RejectCallback&& rejectCallback, ExceptionCode& ec)
    90101{
    91102    ASSERT(resolveCallback && rejectCallback);
     
    105116}
    106117
    107 UserMediaRequest::UserMediaRequest(ScriptExecutionContext* context, UserMediaController* controller, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, MediaDevices::ResolveCallback resolveCallback, MediaDevices::RejectCallback rejectCallback)
     118UserMediaRequest::UserMediaRequest(ScriptExecutionContext* context, UserMediaController* controller, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, MediaDevices::ResolveCallback&& resolveCallback, MediaDevices::RejectCallback&& rejectCallback)
    108119    : ContextDestructionObserver(context)
    109120    , m_audioConstraints(audioConstraints)
    110121    , m_videoConstraints(videoConstraints)
    111122    , m_controller(controller)
    112     , m_resolveCallback(resolveCallback)
    113     , m_rejectCallback(rejectCallback)
     123    , m_resolveCallback(WTF::move(resolveCallback))
     124    , m_rejectCallback(WTF::move(rejectCallback))
    114125{
    115126}
     
    169180        return;
    170181
    171     RefPtr<UserMediaRequest> protectedThis(this);
    172     callOnMainThread([protectedThis, privateStream] {
    173         // 4 - Create the MediaStream and pass it to the success callback.
    174         RefPtr<MediaStream> stream = MediaStream::create(*protectedThis->m_scriptExecutionContext, privateStream);
    175         for (auto& track : stream->getAudioTracks())
    176             track->applyConstraints(protectedThis->m_audioConstraints);
    177         for (auto& track : stream->getVideoTracks())
    178             track->applyConstraints(protectedThis->m_videoConstraints);
    179 
    180         protectedThis->m_resolveCallback(*stream);
    181     });
     182    // 4 - Create the MediaStream and pass it to the success callback.
     183    RefPtr<MediaStream> stream = MediaStream::create(*m_scriptExecutionContext, privateStream);
     184    for (auto& track : stream->getAudioTracks())
     185        track->applyConstraints(m_audioConstraints);
     186    for (auto& track : stream->getVideoTracks())
     187        track->applyConstraints(m_videoConstraints);
     188
     189    m_resolveCallback(*stream);
    182190}
    183191
     
    188196        return;
    189197
    190     RefPtr<UserMediaRequest> protectedThis(this);
    191     RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::constraintNotSatisfiedErrorName(), constraintName);
    192     callOnMainThread([protectedThis, error] {
    193         protectedThis->m_rejectCallback(*error);
    194     });
     198    m_rejectCallback(NavigatorUserMediaError::create(NavigatorUserMediaError::constraintNotSatisfiedErrorName(), constraintName).get());
    195199}
    196200
     
    200204        return;
    201205
    202     RefPtr<UserMediaRequest> protectedThis(this);
    203206    // FIXME: Replace NavigatorUserMediaError with MediaStreamError (see bug 143335)
    204     RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::permissionDeniedErrorName(), emptyString());
    205     callOnMainThread([protectedThis, error] {
    206         protectedThis->m_rejectCallback(*error);
    207     });
     207    m_rejectCallback(NavigatorUserMediaError::create(NavigatorUserMediaError::permissionDeniedErrorName(), emptyString()));
    208208}
    209209
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h

    r184940 r185191  
    6060public:
    6161    static RefPtr<UserMediaRequest> create(ScriptExecutionContext*, UserMediaController*, const Dictionary& options, PassRefPtr<NavigatorUserMediaSuccessCallback>, PassRefPtr<NavigatorUserMediaErrorCallback>, ExceptionCode&);
    62     static RefPtr<UserMediaRequest> create(ScriptExecutionContext*, UserMediaController*, const Dictionary& options, MediaDevices::ResolveCallback, MediaDevices::RejectCallback, ExceptionCode&);
     62    static RefPtr<UserMediaRequest> create(ScriptExecutionContext*, UserMediaController*, const Dictionary& options, MediaDevices::ResolveCallback&&, MediaDevices::RejectCallback&&, ExceptionCode&);
    6363    ~UserMediaRequest();
    6464
     
    7373
    7474private:
    75     UserMediaRequest(ScriptExecutionContext*, UserMediaController*, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, MediaDevices::ResolveCallback, MediaDevices::RejectCallback);
     75    UserMediaRequest(ScriptExecutionContext*, UserMediaController*, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, MediaDevices::ResolveCallback&&, MediaDevices::RejectCallback&&);
    7676
    7777    // MediaStreamCreationClient
Note: See TracChangeset for help on using the changeset viewer.