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

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

Issue 1977513004: Adds multiple forms of MediaStreamTrack constraints (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed Tommi's comments Created 4 years, 7 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 c1af99f6f0464683735ff434ffe33b567ae514d9..360f7b4c6f8a308c0adcc55feab1a75d52e95c51 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp
@@ -453,8 +453,13 @@ WebMediaConstraints create(ExecutionContext* context, const Dictionary& constrai
return createFromNamedConstraints(context, mandatory, optional, errorState);
}
-void copyLongConstraint(const ConstrainLongRange& blinkForm, LongConstraint& webForm)
+void copyLongConstraint(const LongOrConstrainLongRange& blinkUnionForm, LongConstraint& webForm)
{
+ if (blinkUnionForm.isLong()) {
+ webForm.setIdeal(blinkUnionForm.getAsLong());
+ return;
+ }
+ const auto& blinkForm = blinkUnionForm.getAsConstrainLongRange();
if (blinkForm.hasMin()) {
webForm.setMin(blinkForm.min());
}
@@ -469,8 +474,13 @@ void copyLongConstraint(const ConstrainLongRange& blinkForm, LongConstraint& web
}
}
-void copyDoubleConstraint(const ConstrainDoubleRange& blinkForm, DoubleConstraint& webForm)
+void copyDoubleConstraint(const DoubleOrConstrainDoubleRange& blinkUnionForm, DoubleConstraint& webForm)
{
+ if (blinkUnionForm.isDouble()) {
+ webForm.setIdeal(blinkUnionForm.getAsDouble());
+ return;
+ }
+ const auto& blinkForm = blinkUnionForm.getAsConstrainDoubleRange();
if (blinkForm.hasMin()) {
webForm.setMin(blinkForm.min());
}
@@ -485,18 +495,40 @@ void copyDoubleConstraint(const ConstrainDoubleRange& blinkForm, DoubleConstrain
}
}
-void copyStringConstraint(const ConstrainDOMStringParameters& blinkForm, StringConstraint& webForm)
+void copyStringConstraint(const StringOrStringSequenceOrConstrainDOMStringParameters& blinkUnionForm, StringConstraint& webForm)
{
+ if (blinkUnionForm.isString()) {
+ webForm.setIdeal(Vector<String>(1, blinkUnionForm.getAsString()));
+ return;
+ }
+ if (blinkUnionForm.isStringSequence()) {
+ webForm.setIdeal(blinkUnionForm.getAsStringSequence());
+ return;
+ }
+ const auto& blinkForm = blinkUnionForm.getAsConstrainDOMStringParameters();
if (blinkForm.hasIdeal()) {
- webForm.setIdeal(WebVector<WebString>(blinkForm.ideal()));
+ if (blinkForm.ideal().isStringSequence()) {
+ webForm.setIdeal(blinkForm.ideal().getAsStringSequence());
+ } else if (blinkForm.ideal().isString()) {
+ webForm.setIdeal(Vector<String>(1, blinkForm.ideal().getAsString()));
+ }
}
if (blinkForm.hasExact()) {
- webForm.setExact(WebVector<WebString>(blinkForm.exact()));
+ if (blinkForm.exact().isStringSequence()) {
+ webForm.setExact(blinkForm.exact().getAsStringSequence());
+ } else if (blinkForm.exact().isString()) {
+ webForm.setExact(Vector<String>(1, blinkForm.exact().getAsString()));
+ }
}
}
-void copyBooleanConstraint(const ConstrainBooleanParameters& blinkForm, BooleanConstraint& webForm)
+void copyBooleanConstraint(const BooleanOrConstrainBooleanParameters& blinkUnionForm, BooleanConstraint& webForm)
{
+ if (blinkUnionForm.isBoolean()) {
+ webForm.setIdeal(blinkUnionForm.getAsBoolean());
+ return;
+ }
+ const auto& blinkForm = blinkUnionForm.getAsConstrainBooleanParameters();
if (blinkForm.hasIdeal()) {
webForm.setIdeal(blinkForm.ideal());
}
@@ -505,7 +537,7 @@ void copyBooleanConstraint(const ConstrainBooleanParameters& blinkForm, BooleanC
}
}
-void copyConstraints(const MediaTrackConstraintSet& constraintsIn, WebMediaTrackConstraintSet& constraintBuffer)
+void copyConstraintSet(const MediaTrackConstraintSet& constraintsIn, WebMediaTrackConstraintSet& constraintBuffer)
{
if (constraintsIn.hasWidth()) {
copyLongConstraint(constraintsIn.width(), constraintBuffer.width);
@@ -548,23 +580,28 @@ void copyConstraints(const MediaTrackConstraintSet& constraintsIn, WebMediaTrack
}
}
-WebMediaConstraints create(ExecutionContext* context, const MediaTrackConstraints& constraintsIn, MediaErrorState& errorState)
+WebMediaConstraints convertConstraintsToWeb(const MediaTrackConstraints& constraintsIn)
{
WebMediaConstraints constraints;
WebMediaTrackConstraintSet constraintBuffer;
Vector<WebMediaTrackConstraintSet> advancedBuffer;
- copyConstraints(constraintsIn, constraintBuffer);
+ copyConstraintSet(constraintsIn, constraintBuffer);
if (constraintsIn.hasAdvanced()) {
for (const auto& element : constraintsIn.advanced()) {
WebMediaTrackConstraintSet advancedElement;
- copyConstraints(element, advancedElement);
+ copyConstraintSet(element, advancedElement);
advancedBuffer.append(advancedElement);
}
}
- // TODO(hta): Add initialization of advanced constraints once present.
- // https://crbug.com/253412
+ constraints.initialize(constraintBuffer, advancedBuffer);
+ return constraints;
+}
+
+WebMediaConstraints create(ExecutionContext* context, const MediaTrackConstraints& constraintsIn, MediaErrorState& errorState)
+{
+ WebMediaConstraints standardForm = convertConstraintsToWeb(constraintsIn);
if (constraintsIn.hasOptional() || constraintsIn.hasMandatory()) {
- if (!constraintBuffer.isEmpty() || constraintsIn.hasAdvanced()) {
+ if (!standardForm.isEmpty()) {
errorState.throwTypeError("Malformed constraint: Cannot use both optional/mandatory and specific or advanced constraints.");
return WebMediaConstraints();
}
@@ -578,8 +615,7 @@ WebMediaConstraints create(ExecutionContext* context, const MediaTrackConstraint
return createFromNamedConstraints(context, mandatory, optional, errorState);
}
UseCounter::count(context, UseCounter::MediaStreamConstraintsConformant);
- constraints.initialize(constraintBuffer, advancedBuffer);
- return constraints;
+ return standardForm;
}
WebMediaConstraints create()
@@ -589,63 +625,101 @@ WebMediaConstraints create()
return constraints;
}
-ConstrainLongRange convertLong(const LongConstraint& input)
+LongOrConstrainLongRange 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;
+ LongOrConstrainLongRange outputUnion;
+ if (input.hasExact() || input.hasMin() || input.hasMax()) {
+ ConstrainLongRange output;
+ if (input.hasExact())
+ output.setExact(input.exact());
+ if (input.hasMin())
+ output.setMin(input.min());
+ if (input.hasMax())
+ output.setMax(input.max());
+ if (input.hasIdeal())
+ output.setIdeal(input.ideal());
+ outputUnion.setConstrainLongRange(output);
+ } else {
+ if (input.hasIdeal()) {
+ outputUnion.setLong(input.ideal());
+ }
+ }
+ return outputUnion;
}
-ConstrainDoubleRange convertDouble(const DoubleConstraint& input)
+DoubleOrConstrainDoubleRange 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;
+ DoubleOrConstrainDoubleRange outputUnion;
+ if (input.hasExact() || input.hasMin() || input.hasMax()) {
+ 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());
+ outputUnion.setConstrainDoubleRange(output);
+ } else {
+ if (input.hasIdeal()) {
+ outputUnion.setDouble(input.ideal());
+ }
+ }
+ return outputUnion;
}
-ConstrainDOMStringParameters convertString(const StringConstraint& input)
+StringOrStringSequence convertStringSequence(const WebVector<WebString>& input)
{
- ConstrainDOMStringParameters output;
- if (input.hasIdeal()) {
+ StringOrStringSequence theStrings;
+ if (input.size() > 1) {
Vector<String> buffer;
- for (const auto& scanner : input.ideal())
+ for (const auto& scanner : input)
buffer.append(scanner);
- output.setIdeal(buffer);
+ theStrings.setStringSequence(buffer);
+ } else if (input.size() > 0) {
+ theStrings.setString(input[0]);
}
+ return theStrings;
+}
+
+StringOrStringSequenceOrConstrainDOMStringParameters convertString(const StringConstraint& input)
+{
+ StringOrStringSequenceOrConstrainDOMStringParameters outputUnion;
if (input.hasExact()) {
- Vector<String> buffer;
- for (const auto& scanner : input.exact())
- buffer.append(scanner);
- output.setExact(buffer);
+ ConstrainDOMStringParameters output;
+ output.setExact(convertStringSequence(input.exact()));
+ if (input.hasIdeal()) {
+ output.setIdeal(convertStringSequence(input.ideal()));
+ }
+ outputUnion.setConstrainDOMStringParameters(output);
+ } else if (input.hasIdeal()) {
+ if (input.ideal().size() > 1) {
+ Vector<String> buffer;
+ for (const auto& scanner : input.ideal())
+ buffer.append(scanner);
+ outputUnion.setStringSequence(buffer);
+ } else if (input.ideal().size() == 1) {
+ outputUnion.setString(input.ideal()[0]);
+ }
}
- return output;
+ return outputUnion;
}
-ConstrainBooleanParameters convertBoolean(const BooleanConstraint& input)
+BooleanOrConstrainBooleanParameters convertBoolean(const BooleanConstraint& input)
{
-
- ConstrainBooleanParameters output;
- if (input.hasExact())
- output.setExact(input.exact());
- if (input.hasIdeal())
- output.setIdeal(input.ideal());
- return output;
+ BooleanOrConstrainBooleanParameters outputUnion;
+ if (input.hasExact()) {
+ ConstrainBooleanParameters output;
+ if (input.hasExact())
+ output.setExact(input.exact());
+ if (input.hasIdeal())
+ output.setIdeal(input.ideal());
+ outputUnion.setConstrainBooleanParameters(output);
+ } else if (input.hasIdeal()) {
+ outputUnion.setBoolean(input.ideal());
+ }
+ return outputUnion;
}
void convertConstraintSet(const WebMediaTrackConstraintSet& input, MediaTrackConstraintSet& output)

Powered by Google App Engine
This is Rietveld 408576698