Index: third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp |
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp b/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp |
index 66d3a5dbfc49e32ed0e39ee4766b01adefe4abfb..4ab367fc4d28857d1b3d352b4624f7f34bacf618 100644 |
--- a/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp |
+++ b/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp |
@@ -31,6 +31,7 @@ |
#include "config.h" |
#include "modules/mediastream/MediaConstraintsImpl.h" |
+#include "modules/mediastream/MediaTrackConstraintSet.h" |
#include "bindings/core/v8/ArrayValue.h" |
#include "bindings/core/v8/Dictionary.h" |
@@ -112,6 +113,48 @@ static bool parse(const Dictionary& constraintsDictionary, WebVector<WebMediaCon |
return true; |
} |
+static bool parse(const MediaTrackConstraintSet& constraintsIn, WebVector<WebMediaConstraint>& optional, WebVector<WebMediaConstraint>& mandatory) |
+{ |
+ Vector<WebMediaConstraint> mandatoryConstraintsVector; |
+ if (constraintsIn.hasMandatory()) { |
+ Dictionary mandatoryConstraintsDictionary = constraintsIn.mandatory(); |
Peter Beverloo
2015/10/05 13:49:09
Parsing of |mandatoryConstraintsDictionary| and |o
hta - Chromium
2015/10/05 21:28:06
There are subtle differences in the control flow,
|
+ |
+ HashMap<String, String> mandatoryConstraintsHashMap; |
+ bool ok = mandatoryConstraintsDictionary.getOwnPropertiesAsStringHashMap(mandatoryConstraintsHashMap); |
+ if (!ok) |
+ return false; |
+ |
+ HashMap<String, String>::const_iterator iter = mandatoryConstraintsHashMap.begin(); |
+ for (; iter != mandatoryConstraintsHashMap.end(); ++iter) |
Guido Urdaneta
2015/10/05 12:34:12
Can you use range for here?
hta - Chromium
2015/10/05 12:54:01
can you point to an examle of range for? I think t
Guido Urdaneta
2015/10/05 13:00:25
Since this is not an STL container I don't know if
|
+ mandatoryConstraintsVector.append(WebMediaConstraint(iter->key, iter->value)); |
+ } |
+ |
+ Vector<WebMediaConstraint> optionalConstraintsVector; |
+ if (constraintsIn.hasOptional()) { |
+ const Vector<Dictionary> optionalConstraints = constraintsIn.optional(); |
+ |
+ for (size_t i = 0; i < optionalConstraints.size(); ++i) { |
Guido Urdaneta
2015/10/05 12:34:12
Range for?
|
+ Dictionary constraint = optionalConstraints[i]; |
+ if (constraint.isUndefinedOrNull()) |
+ return false; |
+ Vector<String> localNames; |
+ constraint.getPropertyNames(localNames); |
+ if (localNames.size() != 1) |
+ return false; |
+ String key = localNames[0]; |
+ String value; |
+ bool ok = DictionaryHelper::get(constraint, key, value); |
+ if (!ok) |
+ return false; |
+ optionalConstraintsVector.append(WebMediaConstraint(key, value)); |
+ } |
+ } |
+ |
+ optional.assign(optionalConstraintsVector); |
+ mandatory.assign(mandatoryConstraintsVector); |
+ return true; |
+} |
+ |
WebMediaConstraints create(const Dictionary& constraintsDictionary, ExceptionState& exceptionState) |
{ |
@@ -127,6 +170,19 @@ WebMediaConstraints create(const Dictionary& constraintsDictionary, ExceptionSta |
return constraints; |
} |
+WebMediaConstraints create(const MediaTrackConstraintSet& constraintsIn, ExceptionState& exceptionState) |
+{ |
+ WebVector<WebMediaConstraint> optional; |
+ WebVector<WebMediaConstraint> mandatory; |
+ if (!parse(constraintsIn, optional, mandatory)) { |
+ exceptionState.throwTypeError("Malformed constraints object."); |
+ return WebMediaConstraints(); |
+ } |
+ WebMediaConstraints constraints; |
+ constraints.initialize(optional, mandatory); |
+ return constraints; |
+} |
+ |
WebMediaConstraints create() |
{ |
WebMediaConstraints constraints; |