Chromium Code Reviews| 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() |