summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/modules/mediastream/NavigatorMediaStream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/modules/mediastream/NavigatorMediaStream.cpp')
-rw-r--r--chromium/third_party/WebKit/Source/modules/mediastream/NavigatorMediaStream.cpp32
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;
}