Update change log and spec for wrt-plugins-tizen_0.4.38
[framework/web/wrt-plugins-tizen.git] / src / Systeminfo / JSDeviceCapabilitiesInfo.cpp
1 //
2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 #include <fstream>
19 #include <pcrecpp.h>
20 #include <memory>
21 #include <JSWebAPIErrorFactory.h>
22 #include <SecurityExceptions.h>
23 #include <sensor.h>
24 #include <sensors.h>
25 #include <system_info.h>
26 #include "JSDeviceCapabilitiesInfo.h"
27 #include "plugin_config.h"
28 #include <Logger.h>
29
30 namespace DeviceAPI {
31 namespace Systeminfo {
32 using namespace WrtDeviceApis::CommonsJavaScript;
33 using namespace WrtDeviceApis::Commons;
34 using namespace DeviceAPI::Common;
35
36 namespace {
37 const char* DEVICE_CAPABILITIES_BLUETOOTH = "bluetooth";
38 const char* DEVICE_CAPABILITIES_NFC = "nfc";
39 const char* DEVICE_CAPABILITIES_NFC_RESERVED_PUSH = "nfcReservedPush";
40 const char* DEVICE_CAPABILITIES_MULTITOUCHCOUNT = "multiTouchCount";
41 const char* DEVICE_CAPABILITIES_INPUTKEYBOARD = "inputKeyboard";
42 const char* DEVICE_CAPABILITIES_INPUTKEYBOARD_LAYOUT = "inputKeyboardLayout";
43 const char* DEVICE_CAPABILITIES_WIFI = "wifi";
44 const char* DEVICE_CAPABILITIES_WIFIDIRECT = "wifiDirect";
45 const char* DEVICE_CAPABILITIES_OPENGLES = "opengles";
46 const char* DEVICE_CAPABILITIES_OPENGLES_TEXTURE_FORMAT = "openglestextureFormat";
47 const char* DEVICE_CAPABILITIES_OPENGLESVERSION1_1 = "openglesVersion1_1";
48 const char* DEVICE_CAPABILITIES_OPENGLESVERSION2_0 = "openglesVersion2_0";
49 const char* DEVICE_CAPABILITIES_FMRADIO = "fmRadio";
50 const char* DEVICE_CAPABILITIES_PLATFORMVERSION = "platformVersion";
51 const char* DEVICE_CAPABILITIES_PLATFORMNAME = "platformName";
52 const char* DEVICE_CAPABILITIES_WEBAPIVERSION = "webApiVersion";
53 const char* DEVICE_CAPABILITIES_NATIVEAPIVERSION = "nativeApiVersion";
54 const char* DEVICE_CAPABILITIES_CAMERA = "camera";
55 const char* DEVICE_CAPABILITIES_CAMERAFRONT = "cameraFront";
56 const char* DEVICE_CAPABILITIES_CAMERAFRONTFLASH = "cameraFrontFlash";
57 const char* DEVICE_CAPABILITIES_CAMERABACK = "cameraBack";
58 const char* DEVICE_CAPABILITIES_CAMERABACKFLASH = "cameraBackFlash";
59 const char* DEVICE_CAPABILITIES_LOCATION = "location";
60 const char* DEVICE_CAPABILITIES_LOCATIONGPS = "locationGps";
61 const char* DEVICE_CAPABILITIES_LOCATIONWPS = "locationWps";
62 const char* DEVICE_CAPABILITIES_MICROPHONE = "microphone";
63 const char* DEVICE_CAPABILITIES_USBHOST = "usbHost";
64 const char* DEVICE_CAPABILITIES_USBACCESSORY = "usbAccessory";
65 const char* DEVICE_CAPABILITIES_SCREENOUTPUTRCA = "screenOutputRca";
66 const char* DEVICE_CAPABILITIES_SCREENOUTPUTHDMI = "screenOutputHdmi";
67 const char* DEVICE_CAPABILITIES_PLATFORMCORECPUARCH = "platformCoreCpuArch";
68 const char* DEVICE_CAPABILITIES_PLATFORMCOREFPUARCH = "platformCoreFpuArch";
69 const char* DEVICE_CAPABILITIES_SIPVOIP = "sipVoip";
70 const char* DEVICE_CAPABILITIES_DUID = "duid";
71 const char* DEVICE_CAPABILITIES_SPEECH_ROCOGNITION = "speechRecognition";
72 const char* DEVICE_CAPABILITIES_SPEECH_SYNTHESIS = "speechSynthesis";
73 const char* DEVICE_CAPABILITIES_ACCELEROMETER = "accelerometer";
74 const char* DEVICE_CAPABILITIES_ACCELEROMETER_WAKEUP = "accelerometerWakeup";
75 const char* DEVICE_CAPABILITIES_BAROMETER = "barometer";
76 const char* DEVICE_CAPABILITIES_BAROMETER_WAKEUP = "barometerWakeup";
77 const char* DEVICE_CAPABILITIES_GYROSCOPE = "gyroscope";
78 const char* DEVICE_CAPABILITIES_GYROSCOPE_WAKEUP = "gyroscopeWakeup";
79 const char* DEVICE_CAPABILITIES_MAGNETOMETER = "magnetometer";
80 const char* DEVICE_CAPABILITIES_MAGNETOMETER_WAKEUP = "magnetometerWakeup";
81 const char* DEVICE_CAPABILITIES_PHOTOMETER = "photometer";
82 const char* DEVICE_CAPABILITIES_PHOTOMETER_WAKEUP = "photometerWakeup";
83 const char* DEVICE_CAPABILITIES_PROXIMITY = "proximity";
84 const char* DEVICE_CAPABILITIES_PROXIMITY_WAKEUP = "proximityWakeup";
85 const char* DEVICE_CAPABILITIES_TILTMETER = "tiltmeter";
86 const char* DEVICE_CAPABILITIES_TILTMETER_WAKEUP = "tiltmeterWakeup";
87 const char* DEVICE_CAPABILITIES_DATA_ENCRYPTION = "dataEncryption";
88 const char* DEVICE_CAPABILITIES_GRAPHICS_ACCELERATION = "graphicsAcceleration";
89 const char* DEVICE_CAPABILITIES_PUSH = "push";
90 const char* DEVICE_CAPABILITIES_TELEPHONY = "telephony";
91 const char* DEVICE_CAPABILITIES_TELEPHONY_MMS = "telephonyMms";
92 const char* DEVICE_CAPABILITIES_TELEPHONY_SMS = "telephonySms";
93 const char* DEVICE_CAPABILITIES_SCREENSIZE_NORMAL = "screenSizeNormal";
94 const char* DEVICE_CAPABILITIES_SCREENSIZE_480_800 = "screenSize480_800";
95 const char* DEVICE_CAPABILITIES_SCREENSIZE_720_1280 = "screenSize720_1280";
96 const char* DEVICE_CAPABILITIES_AUTO_ROTATION = "autoRotation";
97 const char* DEVICE_CAPABILITIES_SHELL_APP_WIDGET = "shellAppWidget";
98 const char* DEVICE_CAPABILITIES_VISION_IMAGE_RECOGNITION = "visionImageRecognition";
99 const char* DEVICE_CAPABILITIES_VISION_QRCODE_GENERATION = "visionQrcodeGeneration";
100 const char* DEVICE_CAPABILITIES_VISION_QRCODE_RECOGNITION = "visionQrcodeRecognition";
101 const char* DEVICE_CAPABILITIES_VISION_FACE_RECOGNITION = "visionFaceRecognition";
102 const char* DEVICE_CAPABILITIES_SECURE_ELEMENT = "secureElement";
103 const char* DEVICE_CAPABILITIES_NATIVE_OSP_COMPATIBLE = "nativeOspCompatible";
104
105
106 JSClassRef JSDeviceCapabilitiesInfo::m_classRef = NULL;
107
108 JSClassDefinition JSDeviceCapabilitiesInfo::m_classInfo = {
109     0,
110     kJSClassAttributeNone,
111     "devicecapabilitiesinfo",
112     0,
113     m_properties,
114     NULL,
115     Initialize,
116     Finalize,
117     hasProperty,
118     getProperty,
119     NULL,
120     NULL,
121     NULL,
122     NULL,
123     NULL,
124     NULL,
125     NULL
126 };
127
128 JSStaticValue JSDeviceCapabilitiesInfo::m_properties[] = {
129     { DEVICE_CAPABILITIES_BLUETOOTH, getProperty, NULL, kJSPropertyAttributeReadOnly },
130     { DEVICE_CAPABILITIES_NFC, getProperty, NULL, kJSPropertyAttributeReadOnly },
131     { DEVICE_CAPABILITIES_NFC_RESERVED_PUSH, getProperty, NULL, kJSPropertyAttributeReadOnly },
132     { DEVICE_CAPABILITIES_MULTITOUCHCOUNT, getProperty, NULL, kJSPropertyAttributeReadOnly },
133     { DEVICE_CAPABILITIES_INPUTKEYBOARD, getProperty, NULL, kJSPropertyAttributeReadOnly },
134     { DEVICE_CAPABILITIES_INPUTKEYBOARD_LAYOUT, getProperty, NULL, kJSPropertyAttributeReadOnly },
135     { DEVICE_CAPABILITIES_WIFI, getProperty, NULL, kJSPropertyAttributeReadOnly },
136     { DEVICE_CAPABILITIES_WIFIDIRECT, getProperty, NULL, kJSPropertyAttributeReadOnly },
137     { DEVICE_CAPABILITIES_OPENGLES, getProperty, NULL, kJSPropertyAttributeReadOnly },
138     { DEVICE_CAPABILITIES_OPENGLES_TEXTURE_FORMAT, getProperty, NULL, kJSPropertyAttributeReadOnly },
139     { DEVICE_CAPABILITIES_OPENGLESVERSION1_1, getProperty, NULL, kJSPropertyAttributeReadOnly },
140     { DEVICE_CAPABILITIES_OPENGLESVERSION2_0, getProperty, NULL, kJSPropertyAttributeReadOnly },
141     { DEVICE_CAPABILITIES_FMRADIO, getProperty, NULL, kJSPropertyAttributeReadOnly },
142     { DEVICE_CAPABILITIES_PLATFORMVERSION, getProperty, NULL, kJSPropertyAttributeReadOnly },
143     { DEVICE_CAPABILITIES_PLATFORMNAME, getProperty, NULL, kJSPropertyAttributeReadOnly },
144     { DEVICE_CAPABILITIES_WEBAPIVERSION, getProperty, NULL, kJSPropertyAttributeReadOnly },
145     { DEVICE_CAPABILITIES_NATIVEAPIVERSION, getProperty, NULL, kJSPropertyAttributeReadOnly },
146     { DEVICE_CAPABILITIES_CAMERA, getProperty, NULL, kJSPropertyAttributeReadOnly },
147     { DEVICE_CAPABILITIES_CAMERAFRONT, getProperty, NULL, kJSPropertyAttributeReadOnly },
148     { DEVICE_CAPABILITIES_CAMERAFRONTFLASH, getProperty, NULL, kJSPropertyAttributeReadOnly },
149     { DEVICE_CAPABILITIES_CAMERABACK, getProperty, NULL, kJSPropertyAttributeReadOnly },
150     { DEVICE_CAPABILITIES_CAMERABACKFLASH, getProperty, NULL, kJSPropertyAttributeReadOnly },
151     { DEVICE_CAPABILITIES_LOCATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
152     { DEVICE_CAPABILITIES_LOCATIONGPS, getProperty, NULL, kJSPropertyAttributeReadOnly },
153     { DEVICE_CAPABILITIES_LOCATIONWPS, getProperty, NULL, kJSPropertyAttributeReadOnly },
154     { DEVICE_CAPABILITIES_MICROPHONE, getProperty, NULL, kJSPropertyAttributeReadOnly },
155     { DEVICE_CAPABILITIES_USBHOST, getProperty, NULL, kJSPropertyAttributeReadOnly },
156     { DEVICE_CAPABILITIES_USBACCESSORY, getProperty, NULL, kJSPropertyAttributeReadOnly },
157     { DEVICE_CAPABILITIES_SCREENOUTPUTRCA, getProperty, NULL, kJSPropertyAttributeReadOnly },
158     { DEVICE_CAPABILITIES_SCREENOUTPUTHDMI, getProperty, NULL, kJSPropertyAttributeReadOnly },
159     { DEVICE_CAPABILITIES_PLATFORMCORECPUARCH, getProperty, NULL, kJSPropertyAttributeReadOnly },
160     { DEVICE_CAPABILITIES_PLATFORMCOREFPUARCH, getProperty, NULL, kJSPropertyAttributeReadOnly },
161     { DEVICE_CAPABILITIES_SIPVOIP, getProperty, NULL, kJSPropertyAttributeReadOnly },
162     { DEVICE_CAPABILITIES_DUID, getProperty, NULL, kJSPropertyAttributeReadOnly },
163     { DEVICE_CAPABILITIES_SPEECH_ROCOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
164     { DEVICE_CAPABILITIES_SPEECH_SYNTHESIS, getProperty, NULL, kJSPropertyAttributeReadOnly },
165     { DEVICE_CAPABILITIES_ACCELEROMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
166     { DEVICE_CAPABILITIES_ACCELEROMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
167     { DEVICE_CAPABILITIES_BAROMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
168     { DEVICE_CAPABILITIES_BAROMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
169     { DEVICE_CAPABILITIES_GYROSCOPE, getProperty, NULL, kJSPropertyAttributeReadOnly },
170     { DEVICE_CAPABILITIES_GYROSCOPE_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
171     { DEVICE_CAPABILITIES_MAGNETOMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
172     { DEVICE_CAPABILITIES_MAGNETOMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
173     { DEVICE_CAPABILITIES_PHOTOMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
174     { DEVICE_CAPABILITIES_PHOTOMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
175     { DEVICE_CAPABILITIES_PROXIMITY, getProperty, NULL, kJSPropertyAttributeReadOnly },
176     { DEVICE_CAPABILITIES_PROXIMITY_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
177     { DEVICE_CAPABILITIES_TILTMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
178     { DEVICE_CAPABILITIES_TILTMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
179     { DEVICE_CAPABILITIES_DATA_ENCRYPTION, getProperty, NULL, kJSPropertyAttributeReadOnly },
180     { DEVICE_CAPABILITIES_GRAPHICS_ACCELERATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
181     { DEVICE_CAPABILITIES_PUSH, getProperty, NULL, kJSPropertyAttributeReadOnly },
182     { DEVICE_CAPABILITIES_TELEPHONY, getProperty, NULL, kJSPropertyAttributeReadOnly },
183     { DEVICE_CAPABILITIES_TELEPHONY_MMS, getProperty, NULL, kJSPropertyAttributeReadOnly },
184     { DEVICE_CAPABILITIES_TELEPHONY_SMS, getProperty, NULL, kJSPropertyAttributeReadOnly },
185     { DEVICE_CAPABILITIES_SCREENSIZE_NORMAL, getProperty, NULL, kJSPropertyAttributeReadOnly },
186     { DEVICE_CAPABILITIES_SCREENSIZE_480_800, getProperty, NULL, kJSPropertyAttributeReadOnly },
187     { DEVICE_CAPABILITIES_SCREENSIZE_720_1280, getProperty, NULL, kJSPropertyAttributeReadOnly },
188     { DEVICE_CAPABILITIES_AUTO_ROTATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
189     { DEVICE_CAPABILITIES_SHELL_APP_WIDGET, getProperty, NULL, kJSPropertyAttributeReadOnly },
190     { DEVICE_CAPABILITIES_VISION_IMAGE_RECOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
191     { DEVICE_CAPABILITIES_VISION_QRCODE_GENERATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
192     { DEVICE_CAPABILITIES_VISION_QRCODE_RECOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
193     { DEVICE_CAPABILITIES_VISION_FACE_RECOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
194     { DEVICE_CAPABILITIES_SECURE_ELEMENT, getProperty, NULL, kJSPropertyAttributeReadOnly },
195     { DEVICE_CAPABILITIES_NATIVE_OSP_COMPATIBLE, getProperty, NULL, kJSPropertyAttributeReadOnly },
196     { 0, 0, 0, 0 }
197 };
198
199 const JSClassRef JSDeviceCapabilitiesInfo::getClassRef()
200 {
201     if (!m_classRef) {
202         m_classRef = JSClassCreate(&m_classInfo);
203     }
204     return m_classRef;
205 }
206
207 const JSClassDefinition* JSDeviceCapabilitiesInfo::getClassInfo()
208 {
209     return &m_classInfo;
210 }
211
212 void JSDeviceCapabilitiesInfo::Initialize(JSContextRef context, JSObjectRef object)
213 {
214 }
215
216 void JSDeviceCapabilitiesInfo::Finalize(JSObjectRef object)
217 {
218     LoggerD("Entered");
219     JSDeviceCapabilitiesPriv* priv = static_cast<JSDeviceCapabilitiesPriv*>(JSObjectGetPrivate(object));
220     JSObjectSetPrivate(object, NULL);
221     LoggerD("Deleting DeviceCapabilitiesInfo object");
222     delete priv;
223 }
224
225 bool JSDeviceCapabilitiesInfo::hasProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName)
226 {
227     return JSUtils::hasProperty(m_properties, propertyName);
228 }
229
230 JSObjectRef JSDeviceCapabilitiesInfo::createJSObject(JSContextRef context, const DeviceCapabilitiesPropertiesPtr deviceCapabilitiesInfo)
231 {
232     LoggerD("Enter");
233     JSDeviceCapabilitiesPriv *priv = new JSDeviceCapabilitiesPriv(context, deviceCapabilitiesInfo);
234     return JSObjectMake(context, getClassRef(), priv);
235 }
236
237 JSValueRef JSDeviceCapabilitiesInfo::getProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
238 {
239     LoggerD("Enter");
240     JSDeviceCapabilitiesPriv *priv = static_cast<JSDeviceCapabilitiesPriv*>(JSObjectGetPrivate(object));
241     if (NULL == priv) {
242         LoggerE("Private object not set.");
243         return JSValueMakeUndefined(context);
244     }
245
246     Try
247     {
248         DeviceCapabilitiesPropertiesPtr deviceCapabilitiesInfo = priv->getObject();
249         Converter convert(context);
250
251         if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_BLUETOOTH)) {
252             bool bluetooth = false;
253             if (system_info_get_value_bool(SYSTEM_INFO_KEY_BLUETOOTH_SUPPORTED, &bluetooth) == SYSTEM_INFO_ERROR_NONE) {
254                 LoggerD("bluetooth : " << bluetooth);
255                 deviceCapabilitiesInfo->bluetooth = bluetooth;
256             }
257             return convert.toJSValueRef(deviceCapabilitiesInfo->bluetooth);
258         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NFC)) {
259             bool nfc = false;
260             if (system_info_get_value_bool(SYSTEM_INFO_KEY_NFC_SUPPORTED, &nfc) == SYSTEM_INFO_ERROR_NONE) {
261                 LoggerD("nfc : " << nfc);
262                 deviceCapabilitiesInfo->nfc = nfc;
263             }
264             return convert.toJSValueRef(deviceCapabilitiesInfo->nfc);
265         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NFC_RESERVED_PUSH)) {
266             return convert.toJSValueRef(deviceCapabilitiesInfo->nfcReservedPush);
267         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MULTITOUCHCOUNT)) {
268             int multiTouchCount = 0;
269             if (system_info_get_value_int(SYSTEM_INFO_KEY_MULTI_POINT_TOUCH_COUNT, &multiTouchCount) == SYSTEM_INFO_ERROR_NONE) {
270                 LoggerD("multiTouchCount : " << multiTouchCount);
271                 deviceCapabilitiesInfo->multiTouchCount = multiTouchCount;
272             }
273             return convert.toJSValueRef(deviceCapabilitiesInfo->multiTouchCount);
274         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_INPUTKEYBOARD)) {
275             char* inputKeyboard = NULL;
276             if (system_info_get_value_string(SYSTEM_INFO_KEY_KEYBOARD_TYPE, &inputKeyboard) == SYSTEM_INFO_ERROR_NONE) {
277                 if (inputKeyboard != NULL) {
278                     LoggerD("inputKeyboard : " << inputKeyboard);
279                     if (strcmp(inputKeyboard, "NULL") == 0) {
280                         deviceCapabilitiesInfo->inputKeyboard = false;
281                     } else {
282                         deviceCapabilitiesInfo->inputKeyboard = true;                    
283                     }
284                     free(inputKeyboard);
285                 }
286             }
287             return convert.toJSValueRef(deviceCapabilitiesInfo->inputKeyboard);
288         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_INPUTKEYBOARD_LAYOUT)) {
289             return convert.toJSValueRef(deviceCapabilitiesInfo->inputKeyboardLayout);
290         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_WIFI)) {
291             bool wifi = false;
292             if (system_info_get_value_bool(SYSTEM_INFO_KEY_WIFI_SUPPORTED, &wifi) == SYSTEM_INFO_ERROR_NONE) {
293                 LoggerD("wifi : " << wifi);
294                 deviceCapabilitiesInfo->wifi = wifi;
295             }
296             return convert.toJSValueRef(deviceCapabilitiesInfo->wifi);
297         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_WIFIDIRECT)) {
298             bool wifiDirect = false;
299             if (system_info_get_value_bool(SYSTEM_INFO_KEY_WIFI_DIRECT_SUPPORTED, &wifiDirect) == SYSTEM_INFO_ERROR_NONE) {
300                 LoggerD("wifiDirect : " << wifiDirect);
301                 deviceCapabilitiesInfo->wifiDirect = wifiDirect;
302             }
303             return convert.toJSValueRef(deviceCapabilitiesInfo->wifiDirect);
304         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLES)) {
305             return convert.toJSValueRef(deviceCapabilitiesInfo->opengles);
306         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLES_TEXTURE_FORMAT)) {
307             return convert.toJSValueRef(deviceCapabilitiesInfo->openglestextureFormat);
308         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLESVERSION1_1)) {
309             char* openglesVersion = NULL;
310             if (system_info_get_value_string(SYSTEM_INFO_KEY_OPENGLES_VERSION, &openglesVersion) == SYSTEM_INFO_ERROR_NONE) {
311                 if (openglesVersion!= NULL) {
312                     LoggerD("openglesVersion : " << openglesVersion);
313                     if (strcmp(openglesVersion, "1.0") == 0) {
314                         deviceCapabilitiesInfo->openglesVersion1_1 = true;
315                     } else if (strcmp(openglesVersion, "1.0/2.0") == 0) {
316                         deviceCapabilitiesInfo->openglesVersion1_1 = true;
317                     }
318                     free(openglesVersion);
319                 }
320             }
321             return convert.toJSValueRef(deviceCapabilitiesInfo->openglesVersion1_1);
322         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLESVERSION2_0)) {
323             char* openglesVersion = NULL;
324             if (system_info_get_value_string(SYSTEM_INFO_KEY_OPENGLES_VERSION, &openglesVersion) == SYSTEM_INFO_ERROR_NONE) {
325                 if (openglesVersion!= NULL) {
326                     LoggerD("openglesVersion : " << openglesVersion);
327                     if (strcmp(openglesVersion, "2.0") == 0) {
328                         deviceCapabilitiesInfo->openglesVersion2_0 = true;
329                     } else if (strcmp(openglesVersion, "1.0/2.0") == 0) {
330                         deviceCapabilitiesInfo->openglesVersion2_0 = true;
331                     }
332                     free(openglesVersion);
333                 }
334             }        
335             return convert.toJSValueRef(deviceCapabilitiesInfo->openglesVersion2_0);
336         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_FMRADIO)) {
337             bool fmRadio = false;
338             if (system_info_get_value_bool(SYSTEM_INFO_KEY_FMRADIO_SUPPORTED, &fmRadio) == SYSTEM_INFO_ERROR_NONE) {
339                 LoggerD("fmRadio : " << fmRadio);
340                 deviceCapabilitiesInfo->fmRadio = fmRadio;
341             }
342             return convert.toJSValueRef(deviceCapabilitiesInfo->fmRadio);
343         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMVERSION)) {
344             AceSecurityStatus status = SYSTEMINFO_CHECK_ACCESS(SYSTEMINFO_FUNCTION_API_GET_CAPABILITIES);
345             TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
346             char* platformVersion = NULL;
347             if (system_info_get_value_string(SYSTEM_INFO_KEY_TIZEN_VERSION, &platformVersion) == SYSTEM_INFO_ERROR_NONE) {
348                 if (platformVersion) {
349                     LoggerD("platformVersion : " << platformVersion);
350                     deviceCapabilitiesInfo->platformVersion = platformVersion;
351                     free(platformVersion);
352                 }
353             }            
354             return convert.toJSValueRef(deviceCapabilitiesInfo->platformVersion);
355         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMNAME)) {
356             char* platformName = NULL;
357             if (system_info_get_value_string(SYSTEM_INFO_KEY_PLATFORM_NAME, &platformName) == SYSTEM_INFO_ERROR_NONE) {
358                 if (platformName) {
359                     LoggerD("platformName : " << platformName);
360                     deviceCapabilitiesInfo->platformName = platformName;
361                     free(platformName);
362                 }
363             }        
364             return convert.toJSValueRef(deviceCapabilitiesInfo->platformName);
365         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_WEBAPIVERSION)) {
366             AceSecurityStatus status = SYSTEMINFO_CHECK_ACCESS(SYSTEMINFO_FUNCTION_API_GET_CAPABILITIES);
367             TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
368
369             std::ifstream file("/usr/etc/system-info.ini");
370             std::string line;
371             std::string webApiVersionMajor = "";
372             std::string webApiVersionMinor = "";
373
374             if(!file) {
375                 LoggerD("api/native version info file not found");
376             } else {
377                 while ((std::getline(file, line).rdstate() & (std::ifstream::failbit | std::ifstream::eofbit)) == 0) {
378                     if (pcrecpp::RE("platform.web.api.version=(\\w+).(\\w+)").PartialMatch(line, &webApiVersionMajor, &webApiVersionMinor)) {
379                         deviceCapabilitiesInfo->webApiVersion = webApiVersionMajor;
380                         deviceCapabilitiesInfo->webApiVersion += ".";
381                         deviceCapabilitiesInfo->webApiVersion += webApiVersionMinor;
382                         LoggerD("web api version : " << deviceCapabilitiesInfo->webApiVersion);
383                         break;
384                     }
385                 }
386                 file.close();    
387             }  
388
389             return convert.toJSValueRef(deviceCapabilitiesInfo->webApiVersion);
390         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NATIVEAPIVERSION)) {
391             AceSecurityStatus status = SYSTEMINFO_CHECK_ACCESS(SYSTEMINFO_FUNCTION_API_GET_CAPABILITIES);
392             TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
393
394             std::ifstream file("/usr/etc/system-info.ini");
395             std::string line;
396             std::string nativeApiVersionMajor = "";
397             std::string nativeApiVersionMinor = "";
398
399             if(!file) {
400                 LoggerD("api/native version info file not found");
401             } else {
402                 while ((std::getline(file, line).rdstate() & (std::ifstream::failbit | std::ifstream::eofbit)) == 0) {
403                     if (pcrecpp::RE("platform.native.api.version=(\\w+).(\\w+)").PartialMatch(line, &nativeApiVersionMajor, &nativeApiVersionMinor )) {
404                         deviceCapabilitiesInfo->nativeApiVersion = nativeApiVersionMajor;
405                         deviceCapabilitiesInfo->nativeApiVersion += ".";
406                         deviceCapabilitiesInfo->nativeApiVersion += nativeApiVersionMinor;
407                         LoggerD("native api version : " << deviceCapabilitiesInfo->nativeApiVersion);
408                         break;
409                     }
410                 }
411                 file.close();    
412             }  
413
414             return convert.toJSValueRef(deviceCapabilitiesInfo->nativeApiVersion);
415         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERAFRONT)) {
416             bool cameraFront = false;
417             if (system_info_get_value_bool(SYSTEM_INFO_KEY_FRONT_CAMERA_SUPPORTED, &cameraFront) == SYSTEM_INFO_ERROR_NONE) {
418                 LoggerD("cameraFront : " << cameraFront);
419                 deviceCapabilitiesInfo->cameraFront = cameraFront;
420             }
421             return convert.toJSValueRef(deviceCapabilitiesInfo->cameraFront);
422         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERA)) {
423             return convert.toJSValueRef(deviceCapabilitiesInfo->camera);
424         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERAFRONTFLASH)) {
425             bool cameraFrontFlash = false;
426             if (system_info_get_value_bool(SYSTEM_INFO_KEY_FRONT_CAMERA_FLASH_SUPPORTED, &cameraFrontFlash) == SYSTEM_INFO_ERROR_NONE) {
427                 LoggerD("cameraFrontFlash : " << cameraFrontFlash);
428                 deviceCapabilitiesInfo->cameraFrontFlash = cameraFrontFlash;
429             }        
430             return convert.toJSValueRef(deviceCapabilitiesInfo->cameraFrontFlash);
431         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERABACK)) {
432             bool cameraBack = false;
433             if (system_info_get_value_bool(SYSTEM_INFO_KEY_BACK_CAMERA_SUPPORTED, &cameraBack) == SYSTEM_INFO_ERROR_NONE) {
434                 LoggerD("cameraBack : " << cameraBack);
435                 deviceCapabilitiesInfo->cameraBack = cameraBack;
436             }
437             return convert.toJSValueRef(deviceCapabilitiesInfo->cameraBack);
438         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERABACKFLASH)) {
439             bool cameraBackFlash = false;
440             if (system_info_get_value_bool(SYSTEM_INFO_KEY_BACK_CAMERA_FLASH_SUPPORTED, &cameraBackFlash) == SYSTEM_INFO_ERROR_NONE) {
441                 LoggerD("cameraBackFlash : " << cameraBackFlash);
442                 deviceCapabilitiesInfo->cameraBackFlash = cameraBackFlash;
443             }
444             return convert.toJSValueRef(deviceCapabilitiesInfo->cameraBackFlash);
445         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_LOCATION)) {
446             bool location = false;
447             bool locationGps = false;
448             bool locationWps = false;
449             if (system_info_get_value_bool(SYSTEM_INFO_KEY_GPS_SUPPORTED, &locationGps) == SYSTEM_INFO_ERROR_NONE) {
450                 LoggerD("locationGps : " << locationGps);
451             }
452             if (system_info_get_value_bool(SYSTEM_INFO_KEY_WPS_SUPPORTED, &locationWps) == SYSTEM_INFO_ERROR_NONE) {
453                 LoggerD("locationWps : " << locationWps);
454             }
455             if (locationGps || locationWps) {
456                 location = true;
457             }
458             deviceCapabilitiesInfo->location = location;
459             return convert.toJSValueRef(deviceCapabilitiesInfo->location);
460         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_LOCATIONGPS)) {
461             bool locationGps = false;
462             if (system_info_get_value_bool(SYSTEM_INFO_KEY_GPS_SUPPORTED, &locationGps) == SYSTEM_INFO_ERROR_NONE) {
463                 LoggerD("locationGps : " << locationGps);
464                 deviceCapabilitiesInfo->locationGps = locationGps;
465             }
466             return convert.toJSValueRef(deviceCapabilitiesInfo->locationGps);
467         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_LOCATIONWPS)) {
468             bool locationWps = false;
469             if (system_info_get_value_bool(SYSTEM_INFO_KEY_WPS_SUPPORTED, &locationWps) == SYSTEM_INFO_ERROR_NONE) {
470                 LoggerD("locationWps : " << locationWps);
471                 deviceCapabilitiesInfo->locationWps = locationWps;
472             }
473             return convert.toJSValueRef(deviceCapabilitiesInfo->locationWps);
474         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MICROPHONE)) {
475             bool microphone = false;
476             if (system_info_get_value_bool(SYSTEM_INFO_KEY_MICROPHONE_SUPPORTED, &microphone) == SYSTEM_INFO_ERROR_NONE) {
477                 LoggerD("microphone : " << microphone);
478                 deviceCapabilitiesInfo->microphone = microphone;
479             }
480             return convert.toJSValueRef(deviceCapabilitiesInfo->microphone);
481         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_USBHOST)) {
482             bool usbHost = false;
483             if (system_info_get_value_bool(SYSTEM_INFO_KEY_USB_HOST_SUPPORTED, &usbHost) == SYSTEM_INFO_ERROR_NONE) {
484                 LoggerD("usbHost : " << usbHost);
485                 deviceCapabilitiesInfo->usbHost = usbHost;
486             }
487             return convert.toJSValueRef(deviceCapabilitiesInfo->usbHost);
488         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_USBACCESSORY)) {
489             bool usbAccessory = false;
490             if (system_info_get_value_bool(SYSTEM_INFO_KEY_USB_ACCESSORY_SUPPORTED, &usbAccessory) == SYSTEM_INFO_ERROR_NONE) {
491                 LoggerD("usbAccessory : " << usbAccessory);
492                 deviceCapabilitiesInfo->usbAccessory = usbAccessory;
493             }
494             return convert.toJSValueRef(deviceCapabilitiesInfo->usbAccessory);
495         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENOUTPUTRCA)) {
496             bool screenOutputRca = false;
497             if (system_info_get_value_bool(SYSTEM_INFO_KEY_RCA_SUPPORTED, &screenOutputRca) == SYSTEM_INFO_ERROR_NONE) {
498                 LoggerD("screenOutputRca : " << screenOutputRca);
499                 deviceCapabilitiesInfo->screenOutputRca = screenOutputRca;
500             }
501             return convert.toJSValueRef(deviceCapabilitiesInfo->screenOutputRca);
502         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENOUTPUTHDMI)) {
503             bool screenOutputHdmi = false;
504             if (system_info_get_value_bool(SYSTEM_INFO_KEY_HDMI_SUPPORTED, &screenOutputHdmi) == SYSTEM_INFO_ERROR_NONE) {
505                 LoggerD("screenOutputHdmi : " << screenOutputHdmi);
506                 deviceCapabilitiesInfo->screenOutputHdmi = screenOutputHdmi;
507             }
508             return convert.toJSValueRef(deviceCapabilitiesInfo->screenOutputHdmi);
509         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMCORECPUARCH)) {
510             char* platformCoreCpuArch = NULL;
511             if (system_info_get_value_string(SYSTEM_INFO_KEY_CORE_CPU_ARCH, &platformCoreCpuArch) == SYSTEM_INFO_ERROR_NONE) {
512                 if (platformCoreCpuArch) {
513                     LoggerD("platformCoreCpuArch : " << platformCoreCpuArch);
514                     deviceCapabilitiesInfo->platformCoreCpuArch = platformCoreCpuArch;
515                     free(platformCoreCpuArch);
516                 }
517             }
518             return convert.toJSValueRef(deviceCapabilitiesInfo->platformCoreCpuArch);
519         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMCOREFPUARCH)) {
520             char* platformCoreFpuArch = NULL;
521             if (system_info_get_value_string(SYSTEM_INFO_KEY_CORE_FPU_ARCH, &platformCoreFpuArch) == SYSTEM_INFO_ERROR_NONE) {
522                 if (platformCoreFpuArch) {
523                     LoggerD("platformCoreFpuArch : " << platformCoreFpuArch);
524                     deviceCapabilitiesInfo->platformCoreFpuArch = platformCoreFpuArch;
525                     free(platformCoreFpuArch);
526                 }
527             }
528             return convert.toJSValueRef(deviceCapabilitiesInfo->platformCoreFpuArch);
529         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SIPVOIP)) {
530             bool sipVoip = false;
531             if (system_info_get_value_bool(SYSTEM_INFO_KEY_SIP_VOIP_SUPPORTED, &sipVoip) == SYSTEM_INFO_ERROR_NONE) {
532                 LoggerD("sipVoip : " << sipVoip);
533                 deviceCapabilitiesInfo->sipVoip = sipVoip;
534             }
535             return convert.toJSValueRef(deviceCapabilitiesInfo->sipVoip);
536         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_DUID)) {
537             char* duid = NULL;
538             if (system_info_get_value_string(SYSTEM_INFO_KEY_DEVICE_UUID, &duid) == SYSTEM_INFO_ERROR_NONE) {
539                 if (duid) {
540                     LoggerD("duid : " << duid);
541                     deviceCapabilitiesInfo->duid = duid;
542                     free(duid);
543                 }
544             }
545             return convert.toJSValueRef(deviceCapabilitiesInfo->duid);
546         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SPEECH_ROCOGNITION)) {
547             bool speechRecognition = false;
548             if (system_info_get_value_bool(SYSTEM_INFO_KEY_SPEECH_RECOGNITION_SUPPORTED, &speechRecognition) == SYSTEM_INFO_ERROR_NONE) {
549                 LoggerD("speechRecognition : " << speechRecognition);
550                 deviceCapabilitiesInfo->speechRecognition = speechRecognition;
551             }
552             return convert.toJSValueRef(deviceCapabilitiesInfo->speechRecognition);
553         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SPEECH_SYNTHESIS)) {
554             return convert.toJSValueRef(deviceCapabilitiesInfo->speechSynthesis);
555         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_ACCELEROMETER)) {
556             bool isAccelerometer = false;
557             if (sensor_is_supported(SENSOR_ACCELEROMETER, &isAccelerometer) == SENSOR_ERROR_NONE) {
558                 LoggerD("accelerometer : " << isAccelerometer);
559                 deviceCapabilitiesInfo->accelerometer = isAccelerometer;
560             }
561             return convert.toJSValueRef(deviceCapabilitiesInfo->accelerometer);
562         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_ACCELEROMETER_WAKEUP)) {
563             return convert.toJSValueRef(deviceCapabilitiesInfo->accelerometerWakeup);
564         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_BAROMETER)) {
565             bool isBarometer = false;
566             if (system_info_get_value_bool(SYSTEM_INFO_KEY_BAROMETER_SENSOR_SUPPORTED, &isBarometer) == SYSTEM_INFO_ERROR_NONE) {
567                 LoggerD("barometer : " << isBarometer);
568                 deviceCapabilitiesInfo->barometer = isBarometer;
569             }
570             return convert.toJSValueRef(deviceCapabilitiesInfo->barometer);
571         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_BAROMETER_WAKEUP)) {
572             return convert.toJSValueRef(deviceCapabilitiesInfo->barometerWakeup);
573         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_GYROSCOPE)) {
574             bool isGyroscope = false;
575             if (sensor_is_supported(SENSOR_GYROSCOPE, &isGyroscope) == SENSOR_ERROR_NONE) {
576                 LoggerD("gyroscope : " << isGyroscope);
577                 deviceCapabilitiesInfo->gyroscope = isGyroscope;
578             }
579             return convert.toJSValueRef(deviceCapabilitiesInfo->gyroscope);
580         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_GYROSCOPE_WAKEUP)) {
581             return convert.toJSValueRef(deviceCapabilitiesInfo->gyroscopeWakeup);
582         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MAGNETOMETER)) {
583             bool isMagnetometer = false;
584             if (sensor_is_supported(SENSOR_MAGNETIC, &isMagnetometer) == SENSOR_ERROR_NONE) {
585                 LoggerD("magnetometer : " << isMagnetometer);
586                 deviceCapabilitiesInfo->magnetometer = isMagnetometer;
587             }
588             return convert.toJSValueRef(deviceCapabilitiesInfo->magnetometer);
589         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MAGNETOMETER_WAKEUP)) {
590             return convert.toJSValueRef(deviceCapabilitiesInfo->magnetometerWakeup);
591         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PHOTOMETER)) {
592             return convert.toJSValueRef(deviceCapabilitiesInfo->photometer);
593         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PHOTOMETER_WAKEUP)) {
594             return convert.toJSValueRef(deviceCapabilitiesInfo->photometerWakeup);
595         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PROXIMITY)) {
596             bool isProximity = false;
597             if (sensor_is_supported(SENSOR_PROXIMITY, &isProximity) == SENSOR_ERROR_NONE) {
598                 LoggerD("proximity : " << isProximity);
599                 deviceCapabilitiesInfo->proximity = isProximity;
600             }
601             return convert.toJSValueRef(deviceCapabilitiesInfo->proximity);
602         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PROXIMITY_WAKEUP)) {
603             return convert.toJSValueRef(deviceCapabilitiesInfo->proximityWakeup);
604         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TILTMETER)) {
605             return convert.toJSValueRef(deviceCapabilitiesInfo->tiltmeter);
606         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TILTMETER_WAKEUP)) {
607             return convert.toJSValueRef(deviceCapabilitiesInfo->tiltmeterWakeup);
608         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_DATA_ENCRYPTION)) {
609             return convert.toJSValueRef(deviceCapabilitiesInfo->dataEncryption);
610         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_GRAPHICS_ACCELERATION)) {
611             return convert.toJSValueRef(deviceCapabilitiesInfo->graphicsAcceleration);
612         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PUSH)) {
613             return convert.toJSValueRef(deviceCapabilitiesInfo->push);
614         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TELEPHONY)) {
615             return convert.toJSValueRef(deviceCapabilitiesInfo->telephony);
616         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TELEPHONY_MMS)) {
617             return convert.toJSValueRef(deviceCapabilitiesInfo->telephonyMms);
618         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TELEPHONY_SMS)) {
619             return convert.toJSValueRef(deviceCapabilitiesInfo->telephonySms);
620         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENSIZE_NORMAL)) {
621             return convert.toJSValueRef(deviceCapabilitiesInfo->screenSizeNormal);
622         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENSIZE_480_800)) {
623             return convert.toJSValueRef(deviceCapabilitiesInfo->screenSize480_800);
624         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENSIZE_720_1280)) {
625             return convert.toJSValueRef(deviceCapabilitiesInfo->screenSize720_1280);
626         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_AUTO_ROTATION)) {
627             return convert.toJSValueRef(deviceCapabilitiesInfo->autoRotation);
628         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SHELL_APP_WIDGET)) {
629             return convert.toJSValueRef(deviceCapabilitiesInfo->shellAppWidget);
630         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_IMAGE_RECOGNITION)) {
631             return convert.toJSValueRef(deviceCapabilitiesInfo->visionImageRecognition);
632         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_QRCODE_GENERATION)) {
633             return convert.toJSValueRef(deviceCapabilitiesInfo->visionQrcodeGeneration);
634         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_QRCODE_RECOGNITION)) {
635             return convert.toJSValueRef(deviceCapabilitiesInfo->visionQrcodeRecognition);
636         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_FACE_RECOGNITION)) {
637             return convert.toJSValueRef(deviceCapabilitiesInfo->visionFaceRecognition);
638         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SECURE_ELEMENT)) {
639             return convert.toJSValueRef(deviceCapabilitiesInfo->secureElement);
640         } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NATIVE_OSP_COMPATIBLE)) {
641             return convert.toJSValueRef(deviceCapabilitiesInfo->nativeOspCompatible);
642         }
643     }
644     Catch(Exception)
645     {
646         LoggerE("Exception: " << _rethrown_exception.GetMessage());
647     }
648     return JSValueMakeUndefined(context);
649 }
650 }
651 }