tizen beta release
[profile/ivi/webkit-efl.git] / Source / WebCore / bindings / js / OptionsObject.cpp
1 /*
2  * Copyright (C) 2010 Google Inc.
3  * Copyright (C) 2011 Samsung Electronics
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1.  Redistributions of source code must retain the above copyright
10  *     notice, this list of conditions and the following disclaimer.
11  * 2.  Redistributions in binary form must reproduce the above copyright
12  *     notice, this list of conditions and the following disclaimer in the
13  *     documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
19  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #include "config.h"
28 #include "OptionsObject.h"
29
30 #if ENABLE(TIZEN_INDEXED_DATABASE)
31
32 #include "JSDOMBinding.h"
33 #include "JSDOMWindow.h"
34 #include "JSMessagePortCustom.h"
35 #include "JSStorage.h"
36 #include "JSTrackCustom.h"
37
38 #if ENABLE(VIDEO_TRACK)
39 #include "JSTextTrack.h"
40 #include "TrackBase.h"
41 #endif
42
43 using namespace JSC;
44
45 namespace WebCore {
46
47 OptionsObject::OptionsObject()
48     : m_exec(0)
49 {
50 }
51
52 OptionsObject::OptionsObject(JSC::ExecState* exec, const JSValue& options)
53     : m_exec(exec)
54     , m_options(options)
55 {
56 }
57
58 OptionsObject::~OptionsObject()
59 {
60 }
61
62 OptionsObject& OptionsObject::operator=(const OptionsObject& optionsObject)
63 {
64     m_exec = optionsObject.m_exec;
65     m_options = optionsObject.m_options;
66     return *this;
67 }
68
69 bool OptionsObject::get(const String& key, bool& value) const
70 {
71     JSValue jsValue;
72     if (!getKey(key, jsValue))
73         return false;
74
75     value = jsValue.toBoolean(m_exec);
76     return true;
77 }
78
79 bool OptionsObject::get(const String& key, int32_t& value) const
80 {
81     JSValue jsValue;
82     if (!getKey(key, jsValue))
83         return false;
84
85     value = jsValue.toInt32(m_exec);
86     return true;
87 }
88
89 bool OptionsObject::get(const String& key, double& value) const
90 {
91     JSValue jsValue;
92     if (!getKey(key, jsValue))
93         return false;
94
95     value = jsValue.toNumber(m_exec);
96     return true;
97 }
98
99 bool OptionsObject::get(const String& key, String& value) const
100 {
101     JSValue jsValue;
102     if (!getKey(key, jsValue))
103         return false;
104
105     const String& string(ustringToString(jsValue.toString(m_exec)));
106     value = string;
107     return true;
108 }
109
110 bool OptionsObject::get(const String& key, ScriptValue& value) const
111 {
112     JSValue jsValue;
113     if (!getKey(key, jsValue))
114         return false;
115
116     value = ScriptValue(m_exec->globalData(), jsValue);
117     return true;
118 }
119
120 bool OptionsObject::get(const String& key, unsigned short& value) const
121 {
122     JSValue jsValue;
123     if (!getKey(key, jsValue))
124         return false;
125
126     value = jsValue.toInt32(m_exec);
127     return true;
128 }
129
130 bool OptionsObject::get(const String& key, unsigned& value) const
131 {
132     JSValue jsValue;
133     if (!getKey(key, jsValue))
134         return false;
135
136     value = jsValue.toInt32(m_exec);
137     return true;
138 }
139
140 bool OptionsObject::get(const String& key, unsigned long long& value) const
141 {
142     JSValue jsValue;
143     if (!getKey(key, jsValue))
144         return false;
145
146     value = jsValue.toNumber(m_exec);
147     return true;
148 }
149
150 bool OptionsObject::get(const String& key, RefPtr<DOMWindow>& value) const
151 {
152     JSValue jsValue;
153     if (!getKey(key, jsValue))
154         return false;
155
156     value = toDOMWindow(jsValue);
157     return true;
158 }
159
160 bool OptionsObject::get(const String& key, RefPtr<Storage>& value) const
161 {
162     JSValue jsValue;
163     if (!getKey(key, jsValue))
164         return false;
165
166     value = toStorage(jsValue);
167     return true;
168 }
169
170 bool OptionsObject::get(const String& key, MessagePortArray& value) const
171 {
172     JSValue jsValue;
173     if (!getKey(key, jsValue))
174         return false;
175
176     fillMessagePortArray(m_exec, jsValue, value);
177     return true;
178 }
179
180 #if ENABLE(VIDEO_TRACK)
181 bool OptionsObject::get(const String& key, RefPtr<TrackBase>& value) const
182 {
183     JSValue jsValue;
184     if (!getKey(key, jsValue))
185         return false;
186
187     value = toTrack(jsValue);
188     return true;
189 }
190 #endif
191
192 bool OptionsObject::getWithUndefinedOrNullCheck(const String& key, String& value) const
193 {
194     JSValue jsValue;
195     if (!getKey(key, jsValue) || jsValue.isUndefinedOrNull())
196         return false;
197
198     if (jsValue.isUndefinedOrNull())
199         value = String();
200     else {
201         const String& string(ustringToString(jsValue.toString(m_exec)));
202         value = string;
203     }
204
205     return true;
206 }
207
208 bool OptionsObject::getKey(const String& key, JSValue& value) const
209 {
210     if (!m_exec)
211         return false;
212
213     if (m_options.isUndefinedOrNull())
214         return false;
215
216     JSObject* options = m_options.toObject(m_exec);
217     if (!options)
218         return false;
219
220     JSValue jsValue = options->get(m_exec, Identifier(m_exec, key.impl()));
221     if (m_exec->hadException())
222         return false;
223
224     if (jsValue.isUndefinedOrNull())
225         return false;
226
227     value = jsValue;
228
229     return true;
230 }
231
232 } // namespace WebCore
233
234 #endif // TIZEN_INDEXED_DATABASE