Chromium Code Reviews| 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..89dd784dc0ea82a049eb34484ac100fb50b078a3 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 ConstrainLongRange& blinkForm = blinkUnionForm.getAsConstrainLongRange(); |
|
Yuki
2016/05/24 10:01:03
nit: You can use |const auto&| for a short hand.
hta - Chromium
2016/05/24 10:44:31
Done.
|
| 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 ConstrainDoubleRange& 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(WebVector<WebString>(blinkUnionForm.getAsStringSequence())); |
| + return; |
| + } |
| + const ConstrainDOMStringParameters& blinkForm = blinkUnionForm.getAsConstrainDOMStringParameters(); |
| if (blinkForm.hasIdeal()) { |
| - webForm.setIdeal(WebVector<WebString>(blinkForm.ideal())); |
| + if (blinkForm.ideal().isStringSequence()) { |
| + webForm.setIdeal(WebVector<WebString>(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(WebVector<WebString>(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 ConstrainBooleanParameters& 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()) { |
|
Yuki
2016/05/24 10:01:03
To bashi@,
We may want to support a conversion fr
hta - Chromium
2016/05/24 10:44:31
would be convenient, but note that then you need t
bashi
2016/05/24 10:54:18
Yeah, it would also increase binary size. Switchin
|
| + 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) |