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

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

Issue 1910463002: Implement MediaStreamTrack.getConstraints (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review comments on layout test Created 4 years, 8 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 24262199521b02c5a0611fcaaf55b9a42ba4f654..a9b708e719c64bd01e7d691c25c5f6ac24fd9b55 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp
@@ -40,6 +40,7 @@
#include "modules/mediastream/MediaTrackConstraints.h"
#include "platform/Logging.h"
#include "platform/RuntimeEnabledFeatures.h"
+#include "wtf/Assertions.h"
#include "wtf/HashMap.h"
#include "wtf/Vector.h"
#include "wtf/text/StringHash.h"
@@ -50,12 +51,12 @@ namespace blink {
namespace MediaConstraintsImpl {
// Old type/value form of constraint. Used in parsing old-style constraints.
-struct WebMediaConstraint {
- WebMediaConstraint()
+struct NameValueStringConstraint {
+ NameValueStringConstraint()
{
}
- WebMediaConstraint(WebString name, WebString value)
+ NameValueStringConstraint(WebString name, WebString value)
: m_name(name)
, m_value(value)
{
@@ -156,21 +157,19 @@ const char kPowerLineFrequency[] = "googPowerLineFrequency";
const char kTestConstraint1[] = "valid_and_supported_1";
const char kTestConstraint2[] = "valid_and_supported_2";
-static bool parseMandatoryConstraintsDictionary(const Dictionary& mandatoryConstraintsDictionary, WebVector<WebMediaConstraint>& mandatory)
+static bool parseMandatoryConstraintsDictionary(const Dictionary& mandatoryConstraintsDictionary, Vector<NameValueStringConstraint>& mandatory)
{
- Vector<WebMediaConstraint> mandatoryConstraintsVector;
HashMap<String, String> mandatoryConstraintsHashMap;
bool ok = mandatoryConstraintsDictionary.getOwnPropertiesAsStringHashMap(mandatoryConstraintsHashMap);
if (!ok)
return false;
for (const auto& iter : mandatoryConstraintsHashMap)
- mandatoryConstraintsVector.append(WebMediaConstraint(iter.key, iter.value));
- mandatory.assign(mandatoryConstraintsVector);
+ mandatory.append(NameValueStringConstraint(iter.key, iter.value));
return true;
}
-static bool parseOptionalConstraintsVectorElement(const Dictionary& constraint, Vector<WebMediaConstraint>& optionalConstraintsVector)
+static bool parseOptionalConstraintsVectorElement(const Dictionary& constraint, Vector<NameValueStringConstraint>& optionalConstraintsVector)
{
Vector<String> localNames;
bool ok = constraint.getPropertyNames(localNames);
@@ -183,12 +182,12 @@ static bool parseOptionalConstraintsVectorElement(const Dictionary& constraint,
ok = DictionaryHelper::get(constraint, key, value);
if (!ok)
return false;
- optionalConstraintsVector.append(WebMediaConstraint(key, value));
+ optionalConstraintsVector.append(NameValueStringConstraint(key, value));
return true;
}
// Old style parser. Deprecated.
-static bool parse(const Dictionary& constraintsDictionary, WebVector<WebMediaConstraint>& optional, WebVector<WebMediaConstraint>& mandatory)
+static bool parse(const Dictionary& constraintsDictionary, Vector<NameValueStringConstraint>& optional, Vector<NameValueStringConstraint>& mandatory)
{
if (constraintsDictionary.isUndefinedOrNull())
return true;
@@ -216,7 +215,6 @@ static bool parse(const Dictionary& constraintsDictionary, WebVector<WebMediaCon
return false;
}
- Vector<WebMediaConstraint> optionalConstraintsVector;
if (names.contains(optionalName)) {
ArrayValue optionalConstraints;
bool ok = DictionaryHelper::get(constraintsDictionary, optionalName, optionalConstraints);
@@ -233,37 +231,34 @@ static bool parse(const Dictionary& constraintsDictionary, WebVector<WebMediaCon
ok = optionalConstraints.get(i, constraint);
if (!ok || constraint.isUndefinedOrNull())
return false;
- ok = parseOptionalConstraintsVectorElement(constraint, optionalConstraintsVector);
+ ok = parseOptionalConstraintsVectorElement(constraint, optional);
if (!ok)
return false;
}
- optional.assign(optionalConstraintsVector);
}
return true;
}
-static bool parse(const MediaTrackConstraints& constraintsIn, WebVector<WebMediaConstraint>& optional, WebVector<WebMediaConstraint>& mandatory)
+static bool parse(const MediaTrackConstraints& constraintsIn, Vector<NameValueStringConstraint>& optional, Vector<NameValueStringConstraint>& mandatory)
{
- Vector<WebMediaConstraint> mandatoryConstraintsVector;
+ Vector<NameValueStringConstraint> 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();
for (const auto& constraint : optionalConstraints) {
if (constraint.isUndefinedOrNull())
return false;
- bool ok = parseOptionalConstraintsVectorElement(constraint, optionalConstraintsVector);
+ bool ok = parseOptionalConstraintsVectorElement(constraint, optional);
if (!ok)
return false;
}
- optional.assign(optionalConstraintsVector);
}
return true;
}
@@ -275,9 +270,9 @@ static bool toBoolean(const WebString& asWebString)
// https://crbug.com/576582
}
-static void parseOldStyleNames(ExecutionContext* context, const WebVector<WebMediaConstraint>& oldNames, bool reportUnknownNames, WebMediaTrackConstraintSet& result, MediaErrorState& errorState)
+static void parseOldStyleNames(ExecutionContext* context, const Vector<NameValueStringConstraint>& oldNames, bool reportUnknownNames, WebMediaTrackConstraintSet& result, MediaErrorState& errorState)
{
- for (const WebMediaConstraint& constraint : oldNames) {
+ for (const NameValueStringConstraint& constraint : oldNames) {
if (constraint.m_name.equals(kMinAspectRatio)) {
result.aspectRatio.setMin(atof(constraint.m_value.utf8().c_str()));
} else if (constraint.m_name.equals(kMaxAspectRatio)) {
@@ -424,7 +419,7 @@ static void parseOldStyleNames(ExecutionContext* context, const WebVector<WebMed
}
}
-static WebMediaConstraints createFromNamedConstraints(ExecutionContext* context, WebVector<WebMediaConstraint>& mandatory, const WebVector<WebMediaConstraint>& optional, MediaErrorState& errorState)
+static WebMediaConstraints createFromNamedConstraints(ExecutionContext* context, Vector<NameValueStringConstraint>& mandatory, const Vector<NameValueStringConstraint>& optional, MediaErrorState& errorState)
{
WebMediaTrackConstraintSet basic;
WebMediaTrackConstraintSet advanced;
@@ -437,7 +432,7 @@ static WebMediaConstraints createFromNamedConstraints(ExecutionContext* context,
Vector<WebMediaTrackConstraintSet> advancedVector;
for (const auto& optionalConstraint : optional) {
WebMediaTrackConstraintSet advancedElement;
- WebVector<WebMediaConstraint> elementAsList(&optionalConstraint, 1);
+ Vector<NameValueStringConstraint> elementAsList(1, optionalConstraint);
parseOldStyleNames(context, elementAsList, false, advancedElement, ignoredErrorState);
if (!advancedElement.isEmpty())
advancedVector.append(advancedElement);
@@ -449,8 +444,8 @@ static WebMediaConstraints createFromNamedConstraints(ExecutionContext* context,
// Deprecated.
WebMediaConstraints create(ExecutionContext* context, const Dictionary& constraintsDictionary, MediaErrorState& errorState)
{
- WebVector<WebMediaConstraint> optional;
- WebVector<WebMediaConstraint> mandatory;
+ Vector<NameValueStringConstraint> optional;
+ Vector<NameValueStringConstraint> mandatory;
if (!parse(constraintsDictionary, optional, mandatory)) {
errorState.throwTypeError("Malformed constraints object.");
return WebMediaConstraints();
@@ -574,8 +569,8 @@ WebMediaConstraints create(ExecutionContext* context, const MediaTrackConstraint
errorState.throwTypeError("Malformed constraint: Cannot use both optional/mandatory and specific or advanced constraints.");
return WebMediaConstraints();
}
- WebVector<WebMediaConstraint> optional;
- WebVector<WebMediaConstraint> mandatory;
+ Vector<NameValueStringConstraint> optional;
+ Vector<NameValueStringConstraint> mandatory;
if (!parse(constraintsIn, optional, mandatory)) {
errorState.throwTypeError("Malformed constraints object.");
return WebMediaConstraints();
@@ -595,5 +590,112 @@ WebMediaConstraints create()
return constraints;
}
+ConstrainLongRange convertLong(const LongConstraint& input)
+{
+
+ ConstrainLongRange output;
+ if (input.hasExact())
+ output.setExact(input.exact());
+ if (input.hasIdeal())
+ output.setIdeal(input.ideal());
+ if (input.hasMin())
+ output.setMin(input.min());
+ if (input.hasMax())
+ output.setMax(input.max());
+ return output;
+}
+
+ConstrainDoubleRange convertDouble(const DoubleConstraint& input)
+{
+
+ ConstrainDoubleRange output;
+ if (input.hasExact())
+ output.setExact(input.exact());
+ if (input.hasIdeal())
+ output.setIdeal(input.ideal());
+ if (input.hasMin())
+ output.setMin(input.min());
+ if (input.hasMax())
+ output.setMax(input.max());
+ return output;
+}
+
+ConstrainDOMStringParameters convertString(const StringConstraint& input)
+{
+ ConstrainDOMStringParameters output;
+ if (input.hasIdeal()) {
+ Vector<String> buffer;
+ for (const auto& scanner : input.ideal())
+ buffer.append(scanner);
+ output.setIdeal(buffer);
+ }
+ if (input.hasExact()) {
+ Vector<String> buffer;
+ for (const auto& scanner : input.exact())
+ buffer.append(scanner);
+ output.setExact(buffer);
+ }
+ return output;
+}
+
+ConstrainBooleanParameters convertBoolean(const BooleanConstraint& input)
+{
+
+ ConstrainBooleanParameters output;
+ if (input.hasExact())
+ output.setExact(input.exact());
+ if (input.hasIdeal())
+ output.setIdeal(input.ideal());
+ return output;
+}
+
+void convertConstraintSet(const WebMediaTrackConstraintSet& input, MediaTrackConstraintSet& output)
+{
+ if (!input.width.isEmpty())
+ output.setWidth(convertLong(input.width));
+ if (!input.height.isEmpty())
+ output.setHeight(convertLong(input.height));
+ if (!input.aspectRatio.isEmpty())
+ output.setAspectRatio(convertDouble(input.aspectRatio));
+ if (!input.frameRate.isEmpty())
+ output.setFrameRate(convertDouble(input.frameRate));
+ if (!input.facingMode.isEmpty())
+ output.setFacingMode(convertString(input.facingMode));
+ if (!input.volume.isEmpty())
+ output.setVolume(convertDouble(input.volume));
+ if (!input.sampleRate.isEmpty())
+ output.setSampleRate(convertLong(input.sampleRate));
+ if (!input.sampleSize.isEmpty())
+ output.setSampleSize(convertLong(input.sampleSize));
+ if (!input.echoCancellation.isEmpty())
+ output.setEchoCancellation(convertBoolean(input.echoCancellation));
+ if (!input.latency.isEmpty())
+ output.setLatency(convertDouble(input.latency));
+ if (!input.channelCount.isEmpty())
+ output.setChannelCount(convertLong(input.channelCount));
+ if (!input.deviceId.isEmpty())
+ output.setDeviceId(convertString(input.deviceId));
+ if (!input.groupId.isEmpty())
+ output.setGroupId(convertString(input.groupId));
+ // TODO(hta): Decide the future of the nonstandard constraints.
+ // If they go forward, they need to be added here.
+ // https://crbug.com/605673
+}
+
+void convertConstraints(const WebMediaConstraints& input, MediaTrackConstraints& output)
+{
+ if (input.isNull())
+ return;
+ convertConstraintSet(input.basic(), output);
+ HeapVector<MediaTrackConstraintSet> advancedVector;
+ for (const auto& it : input.advanced()) {
+ MediaTrackConstraintSet element;
+ convertConstraintSet(it, element);
+ advancedVector.append(element);
+ }
+ if (!advancedVector.isEmpty())
+ output.setAdvanced(advancedVector);
+}
+
} // namespace MediaConstraintsImpl
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698