void copyStringConstraint(ConstrainDOMStringParameters blinkForm, StringConstraint& webForm) { WebVector<WebString> ideal; WebVector<WebString> exact; if (blinkForm.hasIdeal()) { ideal = WebVector<WebString>(blinkForm.ideal()); } if (blinkForm.hasExact()) { exact = WebVector<WebString>(blinkForm.exact()); } webForm = StringConstraint(ideal, exact); }
static Optional<StringConstraint> createStringConstraint(const Dictionary& mediaTrackConstraintSet, const String& name, MediaConstraintType type, ConstraintSetType constraintSetType) { auto constraint = StringConstraint(name, type); // Dictionary constraint value. Dictionary dictionaryValue; if (mediaTrackConstraintSet.get(name, dictionaryValue) && !dictionaryValue.isUndefinedOrNull()) { ArrayValue exactArrayValue; if (dictionaryValue.get("exact", exactArrayValue) && !exactArrayValue.isUndefinedOrNull()) initializeStringConstraintWithList(constraint, &StringConstraint::appendExact, exactArrayValue); else { String exactStringValue; if (dictionaryValue.get("exact", exactStringValue)) constraint.setExact(exactStringValue); } ArrayValue idealArrayValue; if (dictionaryValue.get("ideal", idealArrayValue) && !idealArrayValue.isUndefinedOrNull()) initializeStringConstraintWithList(constraint, &StringConstraint::appendIdeal, idealArrayValue); else { String idealStringValue; if (!dictionaryValue.get("ideal", idealStringValue)) constraint.setIdeal(idealStringValue); } if (constraint.isEmpty()) { LOG(Media, "createStringConstraint() - ignoring string constraint '%s' with dictionary value since it has no valid or supported key/value pairs.", name.utf8().data()); return Nullopt; } return WTFMove(constraint); } // Array constraint value. ArrayValue arrayValue; if (mediaTrackConstraintSet.get(name, arrayValue) && !arrayValue.isUndefinedOrNull()) { initializeStringConstraintWithList(constraint, &StringConstraint::appendIdeal, arrayValue); if (constraint.isEmpty()) { LOG(Media, "createStringConstraint() - ignoring string constraint '%s' with array value since it is empty.", name.utf8().data()); return Nullopt; } return WTFMove(constraint); } // Scalar constraint value. String value; if (mediaTrackConstraintSet.get(name, value)) { if (constraintSetType == ConstraintSetType::Mandatory) constraint.setIdeal(value); else constraint.setExact(value); return WTFMove(constraint); } // Invalid constraint value. LOG(Media, "createStringConstraint() - ignoring string constraint '%s' since it has neither a dictionary nor sequence nor scalar value.", name.utf8().data()); return Nullopt; }