• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "content/renderer/media/media_stream_constraints_util.h"
6 
7 #include "base/strings/string_number_conversions.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "third_party/WebKit/public/platform/WebMediaConstraints.h"
10 #include "third_party/WebKit/public/platform/WebString.h"
11 
12 namespace content {
13 
14 namespace {
15 
16 // Convert a string ("true", "false") to a boolean.
ConvertStringToBoolean(const std::string & string,bool * value)17 bool ConvertStringToBoolean(const std::string& string, bool* value) {
18   static const char kValueTrue[] = "true";
19   static const char kValueFalse[] = "false";
20 
21   *value = (string == kValueTrue);
22   return *value || (string == kValueFalse);
23 }
24 
25 }  // namespace
26 
GetConstraintValueAsBoolean(const blink::WebMediaConstraints & constraints,const std::string & name,bool * value)27 bool GetConstraintValueAsBoolean(const blink::WebMediaConstraints& constraints,
28                                  const std::string& name,
29                                  bool* value) {
30   return GetMandatoryConstraintValueAsBoolean(constraints, name, value) ||
31          GetOptionalConstraintValueAsBoolean(constraints, name, value);
32 }
33 
GetConstraintValueAsInteger(const blink::WebMediaConstraints & constraints,const std::string & name,int * value)34 bool GetConstraintValueAsInteger(const blink::WebMediaConstraints& constraints,
35                                  const std::string& name,
36                                  int* value) {
37   return GetMandatoryConstraintValueAsInteger(constraints, name, value) ||
38          GetOptionalConstraintValueAsInteger(constraints, name, value);
39 }
40 
GetConstraintValueAsString(const blink::WebMediaConstraints & constraints,const std::string & name,std::string * value)41 bool GetConstraintValueAsString(const blink::WebMediaConstraints& constraints,
42                                 const std::string& name,
43                                 std::string* value) {
44   blink::WebString value_str;
45   base::string16 name_16 = base::UTF8ToUTF16(name);
46   if (!constraints.getMandatoryConstraintValue(name_16, value_str) &&
47       !constraints.getOptionalConstraintValue(name_16, value_str)) {
48     return false;
49   }
50 
51   *value = value_str.utf8();
52   return true;
53 }
54 
GetMandatoryConstraintValueAsBoolean(const blink::WebMediaConstraints & constraints,const std::string & name,bool * value)55 bool GetMandatoryConstraintValueAsBoolean(
56     const blink::WebMediaConstraints& constraints,
57     const std::string& name,
58     bool* value) {
59   blink::WebString value_str;
60   if (!constraints.getMandatoryConstraintValue(base::UTF8ToUTF16(name),
61                                                value_str)) {
62     return false;
63   }
64 
65   return ConvertStringToBoolean(value_str.utf8(), value);
66 }
67 
GetMandatoryConstraintValueAsInteger(const blink::WebMediaConstraints & constraints,const std::string & name,int * value)68 bool GetMandatoryConstraintValueAsInteger(
69     const blink::WebMediaConstraints& constraints,
70     const std::string& name,
71     int* value) {
72   blink::WebString value_str;
73   if (!constraints.getMandatoryConstraintValue(base::UTF8ToUTF16(name),
74                                                value_str)) {
75     return false;
76   }
77 
78   return base::StringToInt(value_str.utf8(), value);
79 }
80 
GetMandatoryConstraintValueAsDouble(const blink::WebMediaConstraints & constraints,const std::string & name,double * value)81 bool GetMandatoryConstraintValueAsDouble(
82     const blink::WebMediaConstraints& constraints,
83     const std::string& name,
84     double* value) {
85   blink::WebString value_str;
86   if (!constraints.getMandatoryConstraintValue(base::UTF8ToUTF16(name),
87                                                value_str)) {
88     return false;
89   }
90   return base::StringToDouble(value_str.utf8(), value);
91 }
92 
GetOptionalConstraintValueAsBoolean(const blink::WebMediaConstraints & constraints,const std::string & name,bool * value)93 bool GetOptionalConstraintValueAsBoolean(
94     const blink::WebMediaConstraints& constraints,
95     const std::string& name,
96     bool* value) {
97   blink::WebString value_str;
98   if (!constraints.getOptionalConstraintValue(base::UTF8ToUTF16(name),
99                                               value_str)) {
100     return false;
101   }
102 
103   return ConvertStringToBoolean(value_str.utf8(), value);
104 }
105 
GetOptionalConstraintValueAsInteger(const blink::WebMediaConstraints & constraints,const std::string & name,int * value)106 bool GetOptionalConstraintValueAsInteger(
107     const blink::WebMediaConstraints& constraints,
108     const std::string& name,
109     int* value) {
110   blink::WebString value_str;
111   if (!constraints.getOptionalConstraintValue(base::UTF8ToUTF16(name),
112                                               value_str)) {
113     return false;
114   }
115 
116   return base::StringToInt(value_str.utf8(), value);
117 }
118 
GetOptionalConstraintValueAsDouble(const blink::WebMediaConstraints & constraints,const std::string & name,double * value)119 bool GetOptionalConstraintValueAsDouble(
120     const blink::WebMediaConstraints& constraints,
121     const std::string& name,
122     double* value) {
123   blink::WebString value_str;
124   if (!constraints.getOptionalConstraintValue(base::UTF8ToUTF16(name),
125                                               value_str)) {
126     return false;
127   }
128 
129   return base::StringToDouble(value_str.utf8(), value);
130 }
131 
132 }  // namespace content
133