blob: 7846582457a5ea344fbca0521e17209c00052f52 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/renderer/media/media_stream_constraints_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
#include "third_party/WebKit/public/platform/WebString.h"
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);
}
bool GetConstraintValueAsDouble(const blink::WebMediaConstraints& constraints,
const std::string& name,
double* value) {
return GetMandatoryConstraintValueAsDouble(constraints, name, value) ||
GetOptionalConstraintValueAsDouble(constraints, name, value);
}
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;
}
*value = value_str.utf8();
return true;
}
bool GetMandatoryConstraintValueAsBoolean(
const blink::WebMediaConstraints& constraints,
const std::string& name,
bool* value) {
blink::WebString value_str;
if (!constraints.getMandatoryConstraintValue(base::UTF8ToUTF16(name),
value_str)) {
return false;
}
return ConvertStringToBoolean(value_str.utf8(), value);
}
bool GetMandatoryConstraintValueAsInteger(
const blink::WebMediaConstraints& constraints,
const std::string& name,
int* value) {
blink::WebString value_str;
if (!constraints.getMandatoryConstraintValue(base::UTF8ToUTF16(name),
value_str)) {
return false;
}
return base::StringToInt(value_str.utf8(), value);
}
bool GetMandatoryConstraintValueAsDouble(
const blink::WebMediaConstraints& constraints,
const std::string& name,
double* value) {
blink::WebString value_str;
if (!constraints.getMandatoryConstraintValue(base::UTF8ToUTF16(name),
value_str)) {
return false;
}
return base::StringToDouble(value_str.utf8(), value);
}
bool GetOptionalConstraintValueAsBoolean(
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);
}
bool GetOptionalConstraintValueAsInteger(
const blink::WebMediaConstraints& constraints,
const std::string& name,
int* value) {
blink::WebString value_str;
if (!constraints.getOptionalConstraintValue(base::UTF8ToUTF16(name),
value_str)) {
return false;
}
return base::StringToInt(value_str.utf8(), value);
}
bool GetOptionalConstraintValueAsDouble(
const blink::WebMediaConstraints& constraints,
const std::string& name,
double* value) {
blink::WebString value_str;
if (!constraints.getOptionalConstraintValue(base::UTF8ToUTF16(name),
value_str)) {
return false;
}
return base::StringToDouble(value_str.utf8(), value);
}
} // namespace content