Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(590)

Unified Diff: third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp

Issue 1318393002: Refactor "track options" to be a dictionary. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase to HEAD Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..5d2c8536adfe269f24a91d2c8477af15b5254edb 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"
@@ -44,6 +45,36 @@ namespace blink {
namespace MediaConstraintsImpl {
+static bool parseMandatoryConstraintsDictionary(const Dictionary& mandatoryConstraintsDictionary, WebVector<WebMediaConstraint>& mandatory)
+{
+ Vector<WebMediaConstraint> mandatoryConstraintsVector;
+ 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)
+ mandatoryConstraintsVector.append(WebMediaConstraint(iter->key, iter->value));
Peter Beverloo 2015/10/08 09:50:25 nit: Why don't use add them to |mandatory| immedia
hta - Chromium 2015/10/09 13:02:28 It seems that mandatory is a WebVector, and I can'
+ mandatory.assign(mandatoryConstraintsVector);
+ return true;
+}
+
+static bool parseOptionalConstraintsVectorElement(const Dictionary& constraint, Vector<WebMediaConstraint>& optionalConstraintsVector)
+{
+ Vector<String> localNames;
+ constraint.getPropertyNames(localNames);
Peter Beverloo 2015/10/08 09:50:25 Would it make sense to check for the return value
hta - Chromium 2015/10/09 13:02:28 Done.
+ 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));
+ return true;
+}
+
static bool parse(const Dictionary& constraintsDictionary, WebVector<WebMediaConstraint>& optional, WebVector<WebMediaConstraint>& mandatory)
{
if (constraintsDictionary.isUndefinedOrNull())
@@ -60,21 +91,14 @@ static bool parse(const Dictionary& constraintsDictionary, WebVector<WebMediaCon
return false;
}
- Vector<WebMediaConstraint> mandatoryConstraintsVector;
if (names.contains(mandatoryName)) {
Dictionary mandatoryConstraintsDictionary;
bool ok = constraintsDictionary.get(mandatoryName, mandatoryConstraintsDictionary);
if (!ok || mandatoryConstraintsDictionary.isUndefinedOrNull())
return false;
-
- HashMap<String, String> mandatoryConstraintsHashMap;
- ok = mandatoryConstraintsDictionary.getOwnPropertiesAsStringHashMap(mandatoryConstraintsHashMap);
+ ok = parseMandatoryConstraintsDictionary(mandatoryConstraintsDictionary, mandatory);
if (!ok)
return false;
-
- HashMap<String, String>::const_iterator iter = mandatoryConstraintsHashMap.begin();
- for (; iter != mandatoryConstraintsHashMap.end(); ++iter)
- mandatoryConstraintsVector.append(WebMediaConstraint(iter->key, iter->value));
}
Vector<WebMediaConstraint> optionalConstraintsVector;
@@ -94,21 +118,39 @@ static bool parse(const Dictionary& constraintsDictionary, WebVector<WebMediaCon
ok = optionalConstraints.get(i, constraint);
if (!ok || constraint.isUndefinedOrNull())
return false;
- Vector<String> localNames;
- constraint.getPropertyNames(localNames);
- if (localNames.size() != 1)
- return false;
- String key = localNames[0];
- String value;
- ok = DictionaryHelper::get(constraint, key, value);
+ ok = parseOptionalConstraintsVectorElement(constraint, optionalConstraintsVector);
if (!ok)
return false;
- optionalConstraintsVector.append(WebMediaConstraint(key, value));
}
+ optional.assign(optionalConstraintsVector);
}
- optional.assign(optionalConstraintsVector);
- mandatory.assign(mandatoryConstraintsVector);
+ return true;
+}
+
+static bool parse(const MediaTrackConstraintSet& constraintsIn, WebVector<WebMediaConstraint>& optional, WebVector<WebMediaConstraint>& mandatory)
Peter Beverloo 2015/10/08 09:50:25 I'm still not a huge fan of the overloading, but i
hta - Chromium 2015/10/09 13:02:28 I thought Blink only believed in JS-level tests...
+{
+ Vector<WebMediaConstraint> mandatoryConstraintsVector;
+ if (constraintsIn.hasMandatory()) {
+ bool ok = parseMandatoryConstraintsDictionary(constraintsIn.mandatory(), mandatory);
+ if (!ok)
+ return false;
+ }
+
+ Vector<WebMediaConstraint> optionalConstraintsVector;
+ if (constraintsIn.hasOptional()) {
+ const Vector<Dictionary> optionalConstraints = constraintsIn.optional();
Peter Beverloo 2015/10/08 09:50:25 const T&, otherwise you're making a copy.
hta - Chromium 2015/10/09 13:02:28 Done.
+
+ for (size_t i = 0; i < optionalConstraints.size(); ++i) {
+ Dictionary constraint = optionalConstraints[i];
+ if (constraint.isUndefinedOrNull())
+ return false;
+ bool ok = parseOptionalConstraintsVectorElement(constraint, optionalConstraintsVector);
+ if (!ok)
+ return false;
+ }
+ optional.assign(optionalConstraintsVector);
+ }
return true;
}
@@ -127,6 +169,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;

Powered by Google App Engine
This is Rietveld 408576698