Index: Source/modules/mediastream/UserMediaRequest.cpp |
diff --git a/Source/modules/mediastream/UserMediaRequest.cpp b/Source/modules/mediastream/UserMediaRequest.cpp |
index 750298b508f5e93ddc3867dcbf38f34b21b63c88..1104e7ff6f9a36b7e9b1730e666af1d9dd4bccf7 100644 |
--- a/Source/modules/mediastream/UserMediaRequest.cpp |
+++ b/Source/modules/mediastream/UserMediaRequest.cpp |
@@ -34,8 +34,10 @@ |
#include "modules/mediastream/UserMediaRequest.h" |
#include "bindings/v8/Dictionary.h" |
+#include "bindings/v8/ExceptionMessages.h" |
#include "bindings/v8/ExceptionState.h" |
#include "core/dom/Document.h" |
+#include "core/dom/ExceptionCode.h" |
#include "core/dom/SpaceSplitString.h" |
#include "modules/mediastream/MediaConstraintsImpl.h" |
#include "modules/mediastream/MediaStream.h" |
@@ -65,6 +67,16 @@ static blink::WebMediaConstraints parseOptions(const Dictionary& options, const |
PassRefPtr<UserMediaRequest> UserMediaRequest::create(ExecutionContext* context, UserMediaController* controller, const Dictionary& options, PassOwnPtr<NavigatorUserMediaSuccessCallback> successCallback, PassOwnPtr<NavigatorUserMediaErrorCallback> errorCallback, ExceptionState& exceptionState) |
{ |
+ if (!successCallback) { |
+ exceptionState.throwDOMException(TypeMismatchError, ExceptionMessages::argumentNullOrIncorrectType(2, "NavigatorUserMediaSuccessCallback")); |
sof
2014/02/21 15:15:59
This isn't correct, I think - shouldn't it be Type
|
+ return nullptr; |
+ } |
+ |
+ if (!errorCallback) { |
+ exceptionState.throwDOMException(TypeMismatchError, ExceptionMessages::argumentNullOrIncorrectType(3, "NavigatorUserMediaErrorCallback")); |
+ return nullptr; |
+ } |
+ |
blink::WebMediaConstraints audio = parseOptions(options, "audio", exceptionState); |
if (exceptionState.hadException()) |
return nullptr; |
@@ -73,8 +85,10 @@ PassRefPtr<UserMediaRequest> UserMediaRequest::create(ExecutionContext* context, |
if (exceptionState.hadException()) |
return nullptr; |
- if (audio.isNull() && video.isNull()) |
+ if (audio.isNull() && video.isNull()) { |
+ exceptionState.throwDOMException(SyntaxError, "At least one of audio and video must be requested"); |
return nullptr; |
+ } |
return adoptRef(new UserMediaRequest(context, controller, audio, video, successCallback, errorCallback)); |
} |
@@ -153,10 +167,8 @@ void UserMediaRequest::fail(const String& description) |
if (!executionContext()) |
return; |
- if (m_errorCallback) { |
- RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::NamePermissionDenied, description, String()); |
- m_errorCallback->handleEvent(error.get()); |
- } |
+ RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::NamePermissionDenied, description, String()); |
+ m_errorCallback->handleEvent(error.get()); |
} |
void UserMediaRequest::failConstraint(const String& constraintName, const String& description) |
@@ -165,10 +177,8 @@ void UserMediaRequest::failConstraint(const String& constraintName, const String |
if (!executionContext()) |
return; |
- if (m_errorCallback) { |
- RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::NameConstraintNotSatisfied, description, constraintName); |
- m_errorCallback->handleEvent(error.get()); |
- } |
+ RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::NameConstraintNotSatisfied, description, constraintName); |
+ m_errorCallback->handleEvent(error.get()); |
} |
void UserMediaRequest::contextDestroyed() |