| Index: content/renderer/media/media_stream_constraints_util.cc
|
| diff --git a/content/renderer/media/media_stream_constraints_util.cc b/content/renderer/media/media_stream_constraints_util.cc
|
| index 7846582457a5ea344fbca0521e17209c00052f52..1884f7547e8e7036576ddab676ae379d8f9d0ae6 100644
|
| --- a/content/renderer/media/media_stream_constraints_util.cc
|
| +++ b/content/renderer/media/media_stream_constraints_util.cc
|
| @@ -13,127 +13,127 @@ namespace content {
|
|
|
| namespace {
|
|
|
| -// Convert a string ("true", "false") to a boolean.
|
| -bool ConvertStringToBoolean(const std::string& string, bool* value) {
|
| - static const char kValueTrue[] = "true";
|
| - static const char kValueFalse[] = "false";
|
| -
|
| - *value = (string == kValueTrue);
|
| - return *value || (string == kValueFalse);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -bool GetConstraintValueAsBoolean(const blink::WebMediaConstraints& constraints,
|
| - const std::string& name,
|
| - bool* value) {
|
| - return GetMandatoryConstraintValueAsBoolean(constraints, name, value) ||
|
| - GetOptionalConstraintValueAsBoolean(constraints, name, value);
|
| -}
|
| -
|
| -bool GetConstraintValueAsInteger(const blink::WebMediaConstraints& constraints,
|
| - const std::string& name,
|
| - int* value) {
|
| - return GetMandatoryConstraintValueAsInteger(constraints, name, value) ||
|
| - GetOptionalConstraintValueAsInteger(constraints, name, value);
|
| +template <typename P, typename T>
|
| +bool ScanConstraintsForExactValue(const blink::WebMediaConstraints& constraints,
|
| + P picker,
|
| + T* value) {
|
| + const auto& the_field = constraints.basic().*picker;
|
| + if (the_field.hasExact()) {
|
| + *value = the_field.exact();
|
| + return true;
|
| + }
|
| + for (const auto& advanced_constraint : constraints.advanced()) {
|
| + const auto& the_field = advanced_constraint.*picker;
|
| + if (the_field.hasExact()) {
|
| + *value = the_field.exact();
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| }
|
|
|
| -bool GetConstraintValueAsDouble(const blink::WebMediaConstraints& constraints,
|
| - const std::string& name,
|
| - double* value) {
|
| - return GetMandatoryConstraintValueAsDouble(constraints, name, value) ||
|
| - GetOptionalConstraintValueAsDouble(constraints, name, value);
|
| +template <typename P, typename T>
|
| +bool ScanConstraintsForMaxValue(const blink::WebMediaConstraints& constraints,
|
| + P picker,
|
| + T* value) {
|
| + const auto& the_field = constraints.basic().*picker;
|
| + if (the_field.hasMax()) {
|
| + *value = the_field.max();
|
| + return true;
|
| + }
|
| + for (const auto& advanced_constraint : constraints.advanced()) {
|
| + const auto& the_field = advanced_constraint.*picker;
|
| + if (the_field.hasMax()) {
|
| + *value = the_field.max();
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| }
|
|
|
| -bool GetConstraintValueAsString(const blink::WebMediaConstraints& constraints,
|
| - const std::string& name,
|
| - std::string* value) {
|
| - blink::WebString value_str;
|
| - base::string16 name_16 = base::UTF8ToUTF16(name);
|
| - if (!constraints.getMandatoryConstraintValue(name_16, value_str) &&
|
| - !constraints.getOptionalConstraintValue(name_16, value_str)) {
|
| - return false;
|
| +template <typename P, typename T>
|
| +bool ScanConstraintsForMinValue(const blink::WebMediaConstraints& constraints,
|
| + P picker,
|
| + T* value) {
|
| + const auto& the_field = constraints.basic().*picker;
|
| + if (the_field.hasMin()) {
|
| + *value = the_field.min();
|
| + return true;
|
| }
|
| -
|
| - *value = value_str.utf8();
|
| - return true;
|
| + for (const auto& advanced_constraint : constraints.advanced()) {
|
| + const auto& the_field = advanced_constraint.*picker;
|
| + if (the_field.hasMin()) {
|
| + *value = the_field.min();
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| }
|
|
|
| -bool GetMandatoryConstraintValueAsBoolean(
|
| +} // namespace
|
| +
|
| +bool GetConstraintValueAsBoolean(
|
| const blink::WebMediaConstraints& constraints,
|
| - const std::string& name,
|
| + const blink::BooleanConstraint blink::WebMediaTrackConstraintSet::*picker,
|
| bool* value) {
|
| - blink::WebString value_str;
|
| - if (!constraints.getMandatoryConstraintValue(base::UTF8ToUTF16(name),
|
| - value_str)) {
|
| - return false;
|
| - }
|
| + return ScanConstraintsForExactValue(constraints, picker, value);
|
| +}
|
|
|
| - return ConvertStringToBoolean(value_str.utf8(), value);
|
| +bool GetConstraintValueAsInteger(
|
| + const blink::WebMediaConstraints& constraints,
|
| + const blink::LongConstraint blink::WebMediaTrackConstraintSet::*picker,
|
| + int* value) {
|
| + return ScanConstraintsForExactValue(constraints, picker, value);
|
| }
|
|
|
| -bool GetMandatoryConstraintValueAsInteger(
|
| +bool GetConstraintMinAsInteger(
|
| const blink::WebMediaConstraints& constraints,
|
| - const std::string& name,
|
| + const blink::LongConstraint blink::WebMediaTrackConstraintSet::*picker,
|
| int* value) {
|
| - blink::WebString value_str;
|
| - if (!constraints.getMandatoryConstraintValue(base::UTF8ToUTF16(name),
|
| - value_str)) {
|
| - return false;
|
| - }
|
| + return ScanConstraintsForMinValue(constraints, picker, value);
|
| +}
|
|
|
| - return base::StringToInt(value_str.utf8(), value);
|
| +bool GetConstraintMaxAsInteger(
|
| + const blink::WebMediaConstraints& constraints,
|
| + const blink::LongConstraint blink::WebMediaTrackConstraintSet::*picker,
|
| + int* value) {
|
| + return ScanConstraintsForMaxValue(constraints, picker, value);
|
| }
|
|
|
| -bool GetMandatoryConstraintValueAsDouble(
|
| +bool GetConstraintValueAsDouble(
|
| const blink::WebMediaConstraints& constraints,
|
| - const std::string& name,
|
| + const blink::DoubleConstraint blink::WebMediaTrackConstraintSet::*picker,
|
| double* value) {
|
| - blink::WebString value_str;
|
| - if (!constraints.getMandatoryConstraintValue(base::UTF8ToUTF16(name),
|
| - value_str)) {
|
| - return false;
|
| - }
|
| - return base::StringToDouble(value_str.utf8(), value);
|
| + return ScanConstraintsForExactValue(constraints, picker, value);
|
| }
|
|
|
| -bool GetOptionalConstraintValueAsBoolean(
|
| +bool GetConstraintMaxAsDouble(
|
| const blink::WebMediaConstraints& constraints,
|
| - const std::string& name,
|
| - bool* value) {
|
| - blink::WebString value_str;
|
| - if (!constraints.getOptionalConstraintValue(base::UTF8ToUTF16(name),
|
| - value_str)) {
|
| - return false;
|
| - }
|
| -
|
| - return ConvertStringToBoolean(value_str.utf8(), value);
|
| + const blink::DoubleConstraint blink::WebMediaTrackConstraintSet::*picker,
|
| + double* value) {
|
| + return ScanConstraintsForExactValue(constraints, picker, value);
|
| }
|
|
|
| -bool GetOptionalConstraintValueAsInteger(
|
| +bool GetConstraintValueAsString(
|
| const blink::WebMediaConstraints& constraints,
|
| - const std::string& name,
|
| - int* value) {
|
| - blink::WebString value_str;
|
| - if (!constraints.getOptionalConstraintValue(base::UTF8ToUTF16(name),
|
| - value_str)) {
|
| - return false;
|
| + const blink::StringConstraint blink::WebMediaTrackConstraintSet::*picker,
|
| + std::string* value) {
|
| + blink::WebVector<blink::WebString> return_value;
|
| + if (ScanConstraintsForExactValue(constraints, picker, &return_value)) {
|
| + *value = return_value[0].utf8();
|
| + return true;
|
| }
|
| -
|
| - return base::StringToInt(value_str.utf8(), value);
|
| + return false;
|
| }
|
|
|
| -bool GetOptionalConstraintValueAsDouble(
|
| +rtc::Optional<bool> ConstraintToOptional(
|
| const blink::WebMediaConstraints& constraints,
|
| - const std::string& name,
|
| - double* value) {
|
| - blink::WebString value_str;
|
| - if (!constraints.getOptionalConstraintValue(base::UTF8ToUTF16(name),
|
| - value_str)) {
|
| - return false;
|
| + const blink::BooleanConstraint blink::WebMediaTrackConstraintSet::*picker) {
|
| + bool value;
|
| + if (GetConstraintValueAsBoolean(constraints, picker, &value)) {
|
| + return rtc::Optional<bool>(value);
|
| }
|
| -
|
| - return base::StringToDouble(value_str.utf8(), value);
|
| + return rtc::Optional<bool>();
|
| }
|
|
|
| } // namespace content
|
|
|