Changeset 182275 in webkit
- Timestamp:
- Apr 2, 2015 10:37:20 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 9 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r182273 r182275 1 2015-04-02 Adam Bergkvist <adam.bergkvist@ericsson.com> 2 3 WebRTC: Add support for Promise-based MediaDevices.getUserMedia() 4 https://bugs.webkit.org/show_bug.cgi?id=143255 5 6 Reviewed by Eric Carlson. 7 8 Added test for new Promise-based getUserMedia() (on MediaDevices). 9 10 * fast/dom/navigator-detached-no-crash.html: 11 * fast/mediastream/MediaDevices-getUserMedia-expected.txt: Added. 12 * fast/mediastream/MediaDevices-getUserMedia.html: Added. 13 1 14 2015-04-02 Alexey Proskuryakov <ap@apple.com> 2 15 -
trunk/LayoutTests/fast/dom/navigator-detached-no-crash.html
r120792 r182275 53 53 var strings = [ ]; 54 54 for (p in old_nav) { 55 if (p == 'geolocation' || p == 'webkitGetUserMedia' ) // Don't include Geolocation or the Media Stream API functions until most platforms have support.55 if (p == 'geolocation' || p == 'webkitGetUserMedia' || p == 'mediaDevices') // Don't include Geolocation or the Media Stream API functions until most platforms have support. 56 56 continue; 57 57 -
trunk/Source/WebCore/CMakeLists.txt
r182193 r182275 226 226 Modules/mediastream/DOMURLMediaStream.idl 227 227 Modules/mediastream/HTMLMediaElementMediaStream.idl 228 Modules/mediastream/MediaDevices.idl 228 229 Modules/mediastream/MediaSourceStates.idl 229 230 Modules/mediastream/MediaStream.idl … … 236 237 Modules/mediastream/MediaTrackConstraintSet.idl 237 238 Modules/mediastream/MediaTrackConstraints.idl 239 Modules/mediastream/NavigatorMediaDevices.idl 238 240 Modules/mediastream/NavigatorUserMedia.idl 239 241 Modules/mediastream/NavigatorUserMediaError.idl … … 875 877 Modules/mediastream/HTMLMediaElementMediaStream.cpp 876 878 Modules/mediastream/MediaConstraintsImpl.cpp 879 Modules/mediastream/MediaDevices.cpp 877 880 Modules/mediastream/MediaSourceStates.cpp 878 881 Modules/mediastream/MediaStream.cpp … … 886 889 Modules/mediastream/MediaTrackConstraintSet.cpp 887 890 Modules/mediastream/MediaTrackConstraints.cpp 891 Modules/mediastream/NavigatorMediaDevices.cpp 888 892 Modules/mediastream/NavigatorUserMedia.cpp 889 893 Modules/mediastream/NavigatorUserMediaError.cpp … … 1131 1135 bindings/js/JSLocationCustom.cpp 1132 1136 bindings/js/JSMainThreadExecState.cpp 1137 bindings/js/JSMediaDevicesCustom.cpp 1133 1138 bindings/js/JSMediaSourceStatesCustom.cpp 1134 1139 bindings/js/JSMediaStreamCapabilitiesCustom.cpp -
trunk/Source/WebCore/ChangeLog
r182274 r182275 1 2015-04-02 Adam Bergkvist <adam.bergkvist@ericsson.com> 2 3 WebRTC: Add support for Promise-based MediaDevices.getUserMedia() 4 https://bugs.webkit.org/show_bug.cgi?id=143255 5 6 Reviewed by Eric Carlson. 7 8 The MediaDevices object collects functionality related to local media 9 devices. This patch adds the Promise-based version of getUserMedia() 10 (unprefixed). Other functionality, like enumerateDevices(), will be 11 added in later patches. 12 13 The old callback-based webkitGetUserMedia() (on Navigator) is kept for 14 legacy purposes (according to the Media Capture and Streams API spec [1]). 15 Both versions of getUserMedia are backed up by UserMediaRequest where 16 the callbacks from the callback-based version are wrapped inside c++ 17 lambda functions. The new Promise-based getUserMedia() uses the lambda 18 functions directly as created by the Promise bindings. 19 20 [1] http://w3c.github.io/mediacapture-main/archives/20150324/getusermedia.html#navigatorusermedia-interface-extensions 21 22 Test: fast/mediastream/MediaDevices-getUserMedia.html 23 24 * CMakeLists.txt: 25 * DerivedSources.make: 26 * Modules/mediastream/MediaDevices.cpp: Added. 27 (WebCore::MediaDevices::create): 28 (WebCore::MediaDevices::MediaDevices): 29 (WebCore::MediaDevices::~MediaDevices): 30 (WebCore::MediaDevices::document): 31 (WebCore::MediaDevices::getUserMedia): 32 * Modules/mediastream/MediaDevices.h: Added. 33 * Modules/mediastream/MediaDevices.idl: Added. 34 * Modules/mediastream/NavigatorMediaDevices.cpp: Added. 35 (WebCore::NavigatorMediaDevices::NavigatorMediaDevices): 36 (WebCore::NavigatorMediaDevices::~NavigatorMediaDevices): 37 (WebCore::NavigatorMediaDevices::from): 38 (WebCore::NavigatorMediaDevices::mediaDevices): 39 (WebCore::NavigatorMediaDevices::supplementName): 40 * Modules/mediastream/NavigatorMediaDevices.h: Added. 41 * Modules/mediastream/NavigatorMediaDevices.idl: Added. 42 * Modules/mediastream/UserMediaRequest.cpp: 43 (WebCore::UserMediaRequest::create): 44 (WebCore::UserMediaRequest::UserMediaRequest): 45 (WebCore::UserMediaRequest::didCreateStream): 46 (WebCore::UserMediaRequest::failedToCreateStreamWithConstraintsError): 47 (WebCore::UserMediaRequest::failedToCreateStreamWithPermissionError): 48 * Modules/mediastream/UserMediaRequest.h: 49 * PlatformGTK.cmake: 50 * WebCore.xcodeproj/project.pbxproj: 51 * bindings/js/JSMediaDevicesCustom.cpp: Added. 52 (WebCore::JSMediaDevices::getUserMedia): 53 1 54 2015-04-02 Eric Carlson <eric.carlson@apple.com> 2 55 -
trunk/Source/WebCore/DerivedSources.make
r182180 r182275 120 120 $(WebCore)/Modules/mediastream/HTMLMediaElementMediaStream.idl \ 121 121 $(WebCore)/Modules/mediastream/MediaSourceStates.idl \ 122 $(WebCore)/Modules/mediastream/MediaDevices.idl \ 122 123 $(WebCore)/Modules/mediastream/MediaStream.idl \ 123 124 $(WebCore)/Modules/mediastream/MediaStreamCapabilities.idl \ … … 129 130 $(WebCore)/Modules/mediastream/MediaTrackConstraints.idl \ 130 131 $(WebCore)/Modules/mediastream/MediaTrackConstraintSet.idl \ 132 $(WebCore)/Modules/mediastream/NavigatorMediaDevices.idl \ 131 133 $(WebCore)/Modules/mediastream/NavigatorUserMedia.idl \ 132 134 $(WebCore)/Modules/mediastream/NavigatorUserMediaError.idl \ -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp
r181371 r182275 45 45 #include "MediaStream.h" 46 46 #include "MediaStreamPrivate.h" 47 #include "NavigatorUserMediaErrorCallback.h" 48 #include "NavigatorUserMediaSuccessCallback.h" 47 49 #include "RealtimeMediaSourceCenter.h" 48 50 #include "SecurityOrigin.h" … … 75 77 ASSERT(successCallback); 76 78 79 auto resolveCallback = [successCallback](RefPtr<MediaStream> stream) mutable { 80 successCallback->handleEvent(stream.get()); 81 }; 82 auto rejectCallback = [errorCallback](RefPtr<NavigatorUserMediaError> error) mutable { 83 if (errorCallback) 84 errorCallback->handleEvent(error.get()); 85 }; 86 87 return UserMediaRequest::create(context, controller, options, WTF::move(resolveCallback), WTF::move(rejectCallback), ec); 88 } 89 90 PassRefPtr<UserMediaRequest> UserMediaRequest::create(ScriptExecutionContext* context, UserMediaController* controller, const Dictionary& options, MediaDevices::ResolveCallback resolveCallback, MediaDevices::RejectCallback rejectCallback, ExceptionCode& ec) 91 { 92 ASSERT(resolveCallback && rejectCallback); 93 77 94 RefPtr<MediaConstraints> audioConstraints = parseOptions(options, AtomicString("audio", AtomicString::ConstructFromLiteral), ec); 78 95 if (ec) … … 86 103 return nullptr; 87 104 88 return adoptRef(new UserMediaRequest(context, controller, audioConstraints.release(), videoConstraints.release(), successCallback, errorCallback));89 } 90 91 UserMediaRequest::UserMediaRequest(ScriptExecutionContext* context, UserMediaController* controller, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback, PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback)105 return adoptRef(new UserMediaRequest(context, controller, audioConstraints.release(), videoConstraints.release(), WTF::move(resolveCallback), WTF::move(rejectCallback))); 106 } 107 108 UserMediaRequest::UserMediaRequest(ScriptExecutionContext* context, UserMediaController* controller, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, MediaDevices::ResolveCallback resolveCallback, MediaDevices::RejectCallback rejectCallback) 92 109 : ContextDestructionObserver(context) 93 110 , m_audioConstraints(audioConstraints) 94 111 , m_videoConstraints(videoConstraints) 95 112 , m_controller(controller) 96 , m_ successCallback(successCallback)97 , m_ errorCallback(errorCallback)113 , m_resolveCallback(resolveCallback) 114 , m_rejectCallback(rejectCallback) 98 115 { 99 116 } … … 150 167 void UserMediaRequest::didCreateStream(PassRefPtr<MediaStreamPrivate> privateStream) 151 168 { 152 if (!m_scriptExecutionContext || !m_successCallback)169 if (!m_scriptExecutionContext) 153 170 return; 154 171 … … 162 179 track->applyConstraints(protectedThis->m_videoConstraints); 163 180 164 ASSERT(protectedThis->m_successCallback); 165 protectedThis->m_successCallback->handleEvent(stream.get()); 181 protectedThis->m_resolveCallback(stream.get()); 166 182 }); 167 183 } … … 173 189 return; 174 190 175 if (!m_errorCallback)176 return;177 178 191 RefPtr<UserMediaRequest> protectedThis(this); 179 192 RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::constraintNotSatisfiedErrorName(), constraintName); 180 193 callOnMainThread([protectedThis, error] { 181 protectedThis->m_ errorCallback->handleEvent(error.get());194 protectedThis->m_rejectCallback(error.get()); 182 195 }); 183 196 } … … 188 201 return; 189 202 190 if (!m_errorCallback) 191 return; 192 193 RefPtr<UserMediaRequest> protectedThis(this); 203 RefPtr<UserMediaRequest> protectedThis(this); 204 // FIXME: Replace NavigatorUserMediaError with MediaStreamError (see bug 143335) 194 205 RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::permissionDeniedErrorName(), emptyString()); 195 206 callOnMainThread([protectedThis, error] { 196 protectedThis->m_ errorCallback->handleEvent(error.get());207 protectedThis->m_rejectCallback(error.get()); 197 208 }); 198 209 } -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h
r181152 r182275 37 37 38 38 #include "ActiveDOMObject.h" 39 #include "MediaDevices.h" 39 40 #include "MediaStreamCreationClient.h" 40 #include "NavigatorUserMediaErrorCallback.h"41 #include "NavigatorUserMediaSuccessCallback.h"42 #include "RealtimeMediaSource.h"43 41 #include <wtf/PassRefPtr.h> 44 42 #include <wtf/RefCounted.h> … … 52 50 class MediaConstraints; 53 51 class MediaStreamPrivate; 52 class NavigatorUserMediaErrorCallback; 53 class NavigatorUserMediaSuccessCallback; 54 54 class UserMediaController; 55 55 class SecurityOrigin; … … 60 60 public: 61 61 static PassRefPtr<UserMediaRequest> create(ScriptExecutionContext*, UserMediaController*, const Dictionary& options, PassRefPtr<NavigatorUserMediaSuccessCallback>, PassRefPtr<NavigatorUserMediaErrorCallback>, ExceptionCode&); 62 static PassRefPtr<UserMediaRequest> create(ScriptExecutionContext*, UserMediaController*, const Dictionary& options, MediaDevices::ResolveCallback, MediaDevices::RejectCallback, ExceptionCode&); 62 63 ~UserMediaRequest(); 63 64 … … 72 73 73 74 private: 74 UserMediaRequest(ScriptExecutionContext*, UserMediaController*, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, PassRefPtr<NavigatorUserMediaSuccessCallback>, PassRefPtr<NavigatorUserMediaErrorCallback>);75 UserMediaRequest(ScriptExecutionContext*, UserMediaController*, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, MediaDevices::ResolveCallback, MediaDevices::RejectCallback); 75 76 76 77 // MediaStreamCreationClient … … 89 90 UserMediaController* m_controller; 90 91 91 RefPtr<NavigatorUserMediaSuccessCallback> m_successCallback;92 RefPtr<NavigatorUserMediaErrorCallback> m_errorCallback;92 MediaDevices::ResolveCallback m_resolveCallback; 93 MediaDevices::RejectCallback m_rejectCallback; 93 94 }; 94 95 -
trunk/Source/WebCore/PlatformGTK.cmake
r182232 r182275 648 648 Modules/mediasource/VideoPlaybackQuality.idl 649 649 650 Modules/mediastream/MediaDevices.idl 651 Modules/mediastream/NavigatorMediaDevices.idl 652 650 653 Modules/quota/StorageInfo.idl 651 654 Modules/quota/StorageQuota.idl -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r182266 r182275 2192 2192 5DFE8F570D16477C0076E937 /* ScheduledAction.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA378BB0D15F64200B793D6 /* ScheduledAction.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2193 2193 5DFEBAB718592B6D00C75BEB /* WebKitAvailability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DFEBAB618592B6D00C75BEB /* WebKitAvailability.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2194 5EA725D11ACABD3800EAD17B /* JSMediaDevicesCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EA725D01ACABD2700EAD17B /* JSMediaDevicesCustom.cpp */; }; 2195 5EA725D21ACABD4700EAD17B /* MediaDevices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EA725CD1ACABCD900EAD17B /* MediaDevices.cpp */; }; 2196 5EA725D31ACABD4700EAD17B /* MediaDevices.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA725CE1ACABCD900EAD17B /* MediaDevices.h */; }; 2197 5EA725D51ACABD5700EAD17B /* NavigatorMediaDevices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EA725CA1ACABCB500EAD17B /* NavigatorMediaDevices.cpp */; }; 2198 5EA725D61ACABD5700EAD17B /* NavigatorMediaDevices.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA725CB1ACABCB500EAD17B /* NavigatorMediaDevices.h */; }; 2194 2199 5F2DBBE9178E3C8100141486 /* CertificateInfoMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5F2DBBE7178E332D00141486 /* CertificateInfoMac.mm */; }; 2195 2200 5FA904CA178E61F5004C8A2D /* CertificateInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2DBBE8178E336900141486 /* CertificateInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 9400 9405 5DB1BC6910715A6400EFAA49 /* TransformSourceLibxslt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransformSourceLibxslt.cpp; sourceTree = "<group>"; }; 9401 9406 5DFEBAB618592B6D00C75BEB /* WebKitAvailability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitAvailability.h; sourceTree = "<group>"; }; 9407 5EA725CA1ACABCB500EAD17B /* NavigatorMediaDevices.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NavigatorMediaDevices.cpp; sourceTree = "<group>"; }; 9408 5EA725CB1ACABCB500EAD17B /* NavigatorMediaDevices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavigatorMediaDevices.h; sourceTree = "<group>"; }; 9409 5EA725CC1ACABCB500EAD17B /* NavigatorMediaDevices.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NavigatorMediaDevices.idl; sourceTree = "<group>"; }; 9410 5EA725CD1ACABCD900EAD17B /* MediaDevices.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaDevices.cpp; sourceTree = "<group>"; }; 9411 5EA725CE1ACABCD900EAD17B /* MediaDevices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaDevices.h; sourceTree = "<group>"; }; 9412 5EA725CF1ACABCD900EAD17B /* MediaDevices.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaDevices.idl; sourceTree = "<group>"; }; 9413 5EA725D01ACABD2700EAD17B /* JSMediaDevicesCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JSMediaDevicesCustom.cpp; path = bindings/js/JSMediaDevicesCustom.cpp; sourceTree = SOURCE_ROOT; }; 9402 9414 5F2DBBE7178E332D00141486 /* CertificateInfoMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CertificateInfoMac.mm; sourceTree = "<group>"; }; 9403 9415 5F2DBBE8178E336900141486 /* CertificateInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CertificateInfo.h; sourceTree = "<group>"; }; … … 14550 14562 07221B4B17CEC32700848E51 /* MediaConstraintsImpl.h */, 14551 14563 07C59B6517F784BA000FBCBB /* MediaSourceStates.cpp */, 14564 5EA725D01ACABD2700EAD17B /* JSMediaDevicesCustom.cpp */, 14565 5EA725CD1ACABCD900EAD17B /* MediaDevices.cpp */, 14566 5EA725CE1ACABCD900EAD17B /* MediaDevices.h */, 14567 5EA725CF1ACABCD900EAD17B /* MediaDevices.idl */, 14568 5EA725CA1ACABCB500EAD17B /* NavigatorMediaDevices.cpp */, 14569 5EA725CB1ACABCB500EAD17B /* NavigatorMediaDevices.h */, 14570 5EA725CC1ACABCB500EAD17B /* NavigatorMediaDevices.idl */, 14552 14571 07C59B6617F784BA000FBCBB /* MediaSourceStates.h */, 14553 14572 07C59B6717F784BA000FBCBB /* MediaSourceStates.idl */, … … 25478 25497 B2FA3DC50AB75A6F000E5AC4 /* JSSVGPathSegCurvetoCubicSmoothRel.h in Headers */, 25479 25498 B2FA3DC70AB75A6F000E5AC4 /* JSSVGPathSegCurvetoQuadraticAbs.h in Headers */, 25499 5EA725D31ACABD4700EAD17B /* MediaDevices.h in Headers */, 25480 25500 B2FA3DC90AB75A6F000E5AC4 /* JSSVGPathSegCurvetoQuadraticRel.h in Headers */, 25481 25501 B2FA3DCB0AB75A6F000E5AC4 /* JSSVGPathSegCurvetoQuadraticSmoothAbs.h in Headers */, … … 26865 26885 C375D7FE16639519006184AB /* TypeAhead.h in Headers */, 26866 26886 E46A2B1C17CA65B9000DBCD8 /* TypedElementDescendantIterator.h in Headers */, 26887 5EA725D61ACABD5700EAD17B /* NavigatorMediaDevices.h in Headers */, 26867 26888 37C28A6810F659CC008C7813 /* TypesettingFeatures.h in Headers */, 26868 26889 93309E1A099E64920056E581 /* TypingCommand.h in Headers */, … … 29520 29541 9392F1440AD185FE00691BD4 /* RenderCounter.cpp in Sources */, 29521 29542 BCEA486D097D93020094C9E4 /* RenderDeprecatedFlexibleBox.cpp in Sources */, 29543 5EA725D51ACABD5700EAD17B /* NavigatorMediaDevices.cpp in Sources */, 29522 29544 D302754912A5FE84004BD828 /* RenderDetailsMarker.cpp in Sources */, 29523 29545 9B32CDAA13DF7FA900F34D13 /* RenderedPosition.cpp in Sources */, … … 29583 29605 A871DFE20A15376B00B12A68 /* RenderReplaced.cpp in Sources */, 29584 29606 BCA846D60DC67A350026C309 /* RenderReplica.cpp in Sources */, 29607 5EA725D21ACABD4700EAD17B /* MediaDevices.cpp in Sources */, 29585 29608 1479FAED109AE37500DED655 /* RenderRuby.cpp in Sources */, 29586 29609 1479FAEF109AE37500DED655 /* RenderRubyBase.cpp in Sources */, … … 29727 29750 0FA88EBD16A8D1BD00F99984 /* ScrollingStateFrameScrollingNodeMac.mm in Sources */, 29728 29751 931CBD0C161A44E900E4C874 /* ScrollingStateNode.cpp in Sources */, 29752 5EA725D11ACABD3800EAD17B /* JSMediaDevicesCustom.cpp in Sources */, 29729 29753 93EF7D551954F13900DFB71D /* ScrollingStateNode.mm in Sources */, 29730 29754 0FEA3E83191B31BF000F1B55 /* ScrollingStateOverflowScrollingNode.cpp in Sources */,
Note: See TracChangeset
for help on using the changeset viewer.