Changeset 185191 in webkit
- Timestamp:
- Jun 3, 2015 11:06:50 PM (9 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r185187 r185191 1 2015-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 1 21 2015-06-03 Simon Fraser <simon.fraser@apple.com> 2 22 -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp
r184984 r185191 76 76 ASSERT(successCallback); 77 77 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 }); 80 85 }; 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 } 84 95 }; 85 96 … … 87 98 } 88 99 89 RefPtr<UserMediaRequest> UserMediaRequest::create(ScriptExecutionContext* context, UserMediaController* controller, const Dictionary& options, MediaDevices::ResolveCallback resolveCallback, MediaDevices::RejectCallbackrejectCallback, ExceptionCode& ec)100 RefPtr<UserMediaRequest> UserMediaRequest::create(ScriptExecutionContext* context, UserMediaController* controller, const Dictionary& options, MediaDevices::ResolveCallback&& resolveCallback, MediaDevices::RejectCallback&& rejectCallback, ExceptionCode& ec) 90 101 { 91 102 ASSERT(resolveCallback && rejectCallback); … … 105 116 } 106 117 107 UserMediaRequest::UserMediaRequest(ScriptExecutionContext* context, UserMediaController* controller, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, MediaDevices::ResolveCallback resolveCallback, MediaDevices::RejectCallbackrejectCallback)118 UserMediaRequest::UserMediaRequest(ScriptExecutionContext* context, UserMediaController* controller, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, MediaDevices::ResolveCallback&& resolveCallback, MediaDevices::RejectCallback&& rejectCallback) 108 119 : ContextDestructionObserver(context) 109 120 , m_audioConstraints(audioConstraints) 110 121 , m_videoConstraints(videoConstraints) 111 122 , m_controller(controller) 112 , m_resolveCallback( resolveCallback)113 , m_rejectCallback( rejectCallback)123 , m_resolveCallback(WTF::move(resolveCallback)) 124 , m_rejectCallback(WTF::move(rejectCallback)) 114 125 { 115 126 } … … 169 180 return; 170 181 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); 182 190 } 183 191 … … 188 196 return; 189 197 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()); 195 199 } 196 200 … … 200 204 return; 201 205 202 RefPtr<UserMediaRequest> protectedThis(this);203 206 // 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())); 208 208 } 209 209 -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h
r184940 r185191 60 60 public: 61 61 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&); 63 63 ~UserMediaRequest(); 64 64 … … 73 73 74 74 private: 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&&); 76 76 77 77 // MediaStreamCreationClient
Note: See TracChangeset
for help on using the changeset viewer.