diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/modules/mediastream/NavigatorMediaStream.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/modules/mediastream/NavigatorMediaStream.cpp | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/chromium/third_party/WebKit/Source/modules/mediastream/NavigatorMediaStream.cpp b/chromium/third_party/WebKit/Source/modules/mediastream/NavigatorMediaStream.cpp index a5e3d4b7c54..e8b5c39555d 100644 --- a/chromium/third_party/WebKit/Source/modules/mediastream/NavigatorMediaStream.cpp +++ b/chromium/third_party/WebKit/Source/modules/mediastream/NavigatorMediaStream.cpp @@ -27,9 +27,11 @@ #include "bindings/v8/ExceptionState.h" #include "core/dom/Document.h" #include "core/dom/ExceptionCode.h" -#include "core/frame/Frame.h" +#include "core/frame/LocalFrame.h" #include "core/frame/Navigator.h" #include "core/page/Page.h" +#include "modules/mediastream/MediaDeviceInfoCallback.h" +#include "modules/mediastream/MediaDevicesRequest.h" #include "modules/mediastream/NavigatorUserMediaErrorCallback.h" #include "modules/mediastream/NavigatorUserMediaSuccessCallback.h" #include "modules/mediastream/UserMediaController.h" @@ -45,20 +47,38 @@ NavigatorMediaStream::~NavigatorMediaStream() { } -void NavigatorMediaStream::webkitGetUserMedia(Navigator* navigator, const Dictionary& options, PassOwnPtr<NavigatorUserMediaSuccessCallback> successCallback, PassOwnPtr<NavigatorUserMediaErrorCallback> errorCallback, ExceptionState& exceptionState) +void NavigatorMediaStream::webkitGetUserMedia(Navigator& navigator, const Dictionary& options, PassOwnPtr<NavigatorUserMediaSuccessCallback> successCallback, PassOwnPtr<NavigatorUserMediaErrorCallback> errorCallback, ExceptionState& exceptionState) { if (!successCallback) return; - UserMediaController* userMedia = UserMediaController::from(navigator->frame() ? navigator->frame()->page() : 0); + UserMediaController* userMedia = UserMediaController::from(navigator.frame()); if (!userMedia) { - exceptionState.throwUninformativeAndGenericDOMException(NotSupportedError); + exceptionState.throwDOMException(NotSupportedError, "No user media controller available; is this a detached window?"); return; } - RefPtr<UserMediaRequest> request = UserMediaRequest::create(navigator->frame()->document(), userMedia, options, successCallback, errorCallback, exceptionState); + RefPtrWillBeRawPtr<UserMediaRequest> request = UserMediaRequest::create(navigator.frame()->document(), userMedia, options, successCallback, errorCallback, exceptionState); if (!request) { - exceptionState.throwUninformativeAndGenericDOMException(NotSupportedError); + ASSERT(exceptionState.hadException()); + return; + } + + request->start(); +} + +void NavigatorMediaStream::getMediaDevices(Navigator& navigator, PassOwnPtr<MediaDeviceInfoCallback> callback, ExceptionState& exceptionState) +{ + UserMediaController* userMedia = UserMediaController::from(navigator.frame()); + if (!userMedia) { + exceptionState.throwDOMException(NotSupportedError, "No media device controller available; is this a detached window?"); + return; + } + + RefPtrWillBeRawPtr<MediaDevicesRequest> request = MediaDevicesRequest::create(navigator.frame()->document(), userMedia, callback, exceptionState); + if (!request) { + if (!exceptionState.hadException()) + exceptionState.throwDOMException(NotSupportedError, "Failed to request media devices."); return; } |