Changeset 184984 in webkit
- Timestamp:
- May 29, 2015 1:10:00 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r184981 r184984 1 2015-05-29 Youenn Fablet <youenn.fablet@crf.canon.fr> 2 3 MediaDevices.getUserMedia should reject promise instead of throwing exceptions 4 https://bugs.webkit.org/show_bug.cgi?id=145282 5 6 Reviewed by Darin Adler. 7 8 Updating test to expect rejection and not error throwing. 9 10 * fast/mediastream/MediaDevices-getUserMedia-expected.txt: 11 * fast/mediastream/MediaDevices-getUserMedia.html: 12 1 13 2015-05-28 Gyuyoung Kim <gyuyoung.kim@webkit.org> 2 14 -
trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia-expected.txt
r182275 r184984 4 4 5 5 6 PASS navigator.mediaDevices.getUserMedia(); threw exception TypeError: First argument of getUserMedia must be a valid Dictionary. 7 PASS navigator.mediaDevices.getUserMedia({}); threw exception Error: NotSupportedError: DOM Exception 9. 8 PASS navigator.mediaDevices.webkitGetUserMedia({audio:true}); threw exception TypeError: navigator.mediaDevices.webkitGetUserMedia is not a function. (In 'navigator.mediaDevices.webkitGetUserMedia({audio:true})', 'navigator.mediaDevices.webkitGetUserMedia' is undefined). 6 PASS typeof navigator.mediaDevices.webkitGetUserMedia is 'undefined' 9 7 PASS navigator.mediaDevices.getUserMedia({audio:true}).then(gotStream1); did not throw exception. 8 PASS navigator.mediaDevices.getUserMedia() rejected with error: TypeError: First argument of getUserMedia must be a valid Dictionary 9 PASS navigator.mediaDevices.getUserMedia({}) rejected with error: Error: NotSupportedError: DOM Exception 9 10 10 PASS Stream generated. 11 11 PASS stream.getAudioTracks().length is 1 -
trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia.html
r182275 r184984 76 76 } 77 77 78 shouldThrow("navigator.mediaDevices.getUserMedia();"); 79 shouldThrow("navigator.mediaDevices.getUserMedia({});"); 80 shouldThrow("navigator.mediaDevices.webkitGetUserMedia({audio:true});"); 78 navigator.mediaDevices.getUserMedia().then(invalidGotStream, function(error) { 79 testPassed("navigator.mediaDevices.getUserMedia() rejected with error: " + error); 80 }); 81 navigator.mediaDevices.getUserMedia({}).then(invalidGotStream, function(error) { 82 testPassed(" navigator.mediaDevices.getUserMedia({}) rejected with error: " + error); 83 }); 84 shouldBe("typeof navigator.mediaDevices.webkitGetUserMedia", "'undefined'"); 81 85 setUserMediaPermission(true); 82 86 shouldNotThrow("navigator.mediaDevices.getUserMedia({audio:true}).then(gotStream1);"); -
trunk/Source/WebCore/ChangeLog
r184979 r184984 1 2015-05-29 Youenn Fablet <youenn.fablet@crf.canon.fr> 2 3 MediaDevices.getUserMedia should reject promise instead of throwing exceptions 4 https://bugs.webkit.org/show_bug.cgi?id=145282 5 6 Reviewed by Darin Adler. 7 8 Ensuring at the custom binding level that all potential errors are used to reject promise. 9 Cleaned up the wrappers by removing unneeded RefPtr. 10 11 Covered by modified test. 12 13 * Modules/mediastream/MediaDevices.cpp: 14 (WebCore::MediaDevices::getUserMedia): 15 * Modules/mediastream/MediaDevices.h: 16 * Modules/mediastream/UserMediaRequest.cpp: 17 (WebCore::UserMediaRequest::create): 18 * bindings/js/JSMediaDevicesCustom.cpp: 19 (WebCore::JSMediaDevices::getUserMedia): 20 1 21 2015-05-28 Hunseop Jeong <hs85.jeong@samsung.com> 2 22 -
trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp
r182275 r184984 65 65 UserMediaController* userMedia = UserMediaController::from(document() ? document()->page() : nullptr); 66 66 if (!userMedia) { 67 // FIXME: We probably want to return a MediaStreamError here using the rejectCallback, and get rid off the ExceptionCode parameter. 67 68 ec = NOT_SUPPORTED_ERR; 68 69 return; -
trunk/Source/WebCore/Modules/mediastream/MediaDevices.h
r182314 r184984 56 56 Document* document() const; 57 57 58 typedef std::function<void( RefPtr<MediaStream>)> ResolveCallback;59 typedef std::function<void( RefPtr<NavigatorUserMediaError>)> RejectCallback;58 typedef std::function<void(MediaStream&)> ResolveCallback; 59 typedef std::function<void(NavigatorUserMediaError&)> RejectCallback; 60 60 61 61 void getUserMedia(const Dictionary&, ResolveCallback, RejectCallback, ExceptionCode&) const; -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp
r184940 r184984 76 76 ASSERT(successCallback); 77 77 78 auto resolveCallback = [successCallback]( RefPtr<MediaStream>stream) mutable {79 successCallback->handleEvent( stream.get());78 auto resolveCallback = [successCallback](MediaStream& stream) mutable { 79 successCallback->handleEvent(&stream); 80 80 }; 81 auto rejectCallback = [errorCallback]( RefPtr<NavigatorUserMediaError>error) mutable {81 auto rejectCallback = [errorCallback](NavigatorUserMediaError& error) mutable { 82 82 if (errorCallback) 83 errorCallback->handleEvent( error.get());83 errorCallback->handleEvent(&error); 84 84 }; 85 85 … … 178 178 track->applyConstraints(protectedThis->m_videoConstraints); 179 179 180 protectedThis->m_resolveCallback( stream.get());180 protectedThis->m_resolveCallback(*stream); 181 181 }); 182 182 } … … 191 191 RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::constraintNotSatisfiedErrorName(), constraintName); 192 192 callOnMainThread([protectedThis, error] { 193 protectedThis->m_rejectCallback( error.get());193 protectedThis->m_rejectCallback(*error); 194 194 }); 195 195 } … … 204 204 RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::permissionDeniedErrorName(), emptyString()); 205 205 callOnMainThread([protectedThis, error] { 206 protectedThis->m_rejectCallback( error.get());206 protectedThis->m_rejectCallback(*error); 207 207 }); 208 208 } -
trunk/Source/WebCore/bindings/js/JSMediaDevicesCustom.cpp
r182275 r184984 47 47 JSValue JSMediaDevices::getUserMedia(ExecState* exec) 48 48 { 49 DeferredWrapper wrapper(exec, globalObject()); 50 49 51 Dictionary options(exec, exec->argument(0)); 50 if (exec->hadException()) 51 return jsUndefined(); 52 if (exec->hadException()) { 53 wrapper.reject(exec->exception()); 54 return wrapper.promise(); 55 } 52 56 53 57 if (!options.isObject()) { 54 throwVMError(exec, createTypeError(exec, "First argument of getUserMedia must be a valid Dictionary")); 55 return jsUndefined(); 58 JSValue error = createTypeError(exec, "First argument of getUserMedia must be a valid Dictionary"); 59 wrapper.reject(error); 60 return wrapper.promise(); 56 61 } 57 62 58 DeferredWrapper wrapper(exec, globalObject()); 59 auto resolveCallback = [wrapper](RefPtr<MediaStream> stream) mutable { 60 wrapper.resolve(stream.get()); 63 auto resolveCallback = [wrapper](MediaStream& stream) mutable { 64 wrapper.resolve(&stream); 61 65 }; 62 auto rejectCallback = [wrapper]( RefPtr<NavigatorUserMediaError>error) mutable {63 wrapper.reject( error.get());66 auto rejectCallback = [wrapper](NavigatorUserMediaError& error) mutable { 67 wrapper.reject(&error); 64 68 }; 65 69 66 70 ExceptionCode ec = 0; 67 71 impl().getUserMedia(options, WTF::move(resolveCallback), WTF::move(rejectCallback), ec); 68 if (ec) { 69 setDOMException(exec, ec); 70 return jsUndefined(); 71 } 72 if (ec) 73 wrapper.reject(ec); 72 74 73 75 return wrapper.promise();
Note: See TracChangeset
for help on using the changeset viewer.