1 // Copyright (c) 2013 Intel Corporation. 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.
6 var _next_promise_id = 0;
8 // Preserve 4 spaces to hold onattach, ondetach, onconnect and ondisconnect's
10 var _next_listener_id = 4;
12 var Promise = requireNative('sysapps_promise').Promise;
14 var postMessage = function(msg) {
15 var p = new Promise();
17 _promises[_next_promise_id] = p;
18 msg._promise_id = _next_promise_id.toString();
19 _next_promise_id += 1;
21 extension.postMessage(JSON.stringify(msg));
25 exports.getCPUInfo = function() {
29 return postMessage(msg);
32 exports.getAVCodecs = function() {
34 'cmd': 'getCodecsInfo'
36 return postMessage(msg);
39 exports.getDisplayInfo = function() {
41 'cmd': 'getDisplayInfo'
43 return postMessage(msg);
46 exports.getMemoryInfo = function() {
48 'cmd': 'getMemoryInfo'
50 return postMessage(msg);
53 exports.getStorageInfo = function() {
55 'cmd': 'getStorageInfo'
57 return postMessage(msg);
60 function _addConstProperty(obj, propertyKey, propertyValue) {
61 Object.defineProperty(obj, propertyKey, {
68 function _createConstClone(obj) {
70 for (var key in obj) {
71 if (Array.isArray(obj[key])) {
72 var obj_array = obj[key];
73 var const_obj_array = [];
74 for (var i = 0; i < obj_array.length; ++i) {
75 var const_sub_obj = {};
76 for (var sub_key in obj_array[i]) {
77 _addConstProperty(const_sub_obj, sub_key, obj_array[i][sub_key]);
79 const_obj_array.push(const_sub_obj);
81 _addConstProperty(const_obj, key, const_obj_array);
83 _addConstProperty(const_obj, key, obj[key]);
89 extension.setMessageListener(function(json) {
90 var msg = JSON.parse(json);
92 if (msg.reply == 'attachStorage' ||
93 msg.reply == 'detachStorage' ||
94 msg.reply == 'connectDisplay' ||
95 msg.reply == 'disconnectDisplay') {
96 for (var id in _listeners) {
97 if (_listeners[id]['eventName'] === msg.eventName) {
98 _listeners[id]['callback'](_createConstClone(msg.data));
104 if (msg.data.error) {
105 _promises[msg._promise_id].reject(msg.data.error);
107 _promises[msg._promise_id].fulfill(_createConstClone(msg.data));
110 delete _promises[msg._promise_id];
113 function _addEventListener(isOn, eventName, callback) {
114 if (typeof eventName !== 'string') {
115 console.log("Invalid parameters of eventName!");
119 if (!isOn && (typeof callback !== 'function')) {
120 console.log("Invalid parameters of callback!");
124 if (isOn && (typeof callback !== null) && (typeof callback !== 'function')) {
125 console.log("Invalid parameters of callback!");
130 'eventName': eventName,
137 switch(listener.eventName) {
138 case 'storageattach':
139 _listeners[0] = listener;
143 case 'storagedetach':
144 _listeners[1] = listener;
148 case 'displayconnect':
149 _listeners[2] = listener;
153 case 'displaydisconnect':
154 _listeners[3] = listener;
159 console.log("Invalid event name!");
163 listener_id = _next_listener_id;
164 _next_listener_id += 1;
165 _listeners[listener_id] = listener;
168 if (_listeners[listener_id] != null) {
170 'cmd': 'addEventListener',
171 'eventName': listener.eventName
173 extension.postMessage(JSON.stringify(msg));
179 Object.defineProperty(exports, 'onstorageattach', {
180 set: function(callback) {
181 _addEventListener(true, 'storageattach', callback);
185 Object.defineProperty(exports, 'onstoragedetach', {
186 set: function(callback) {
187 _addEventListener(true, 'storagedetach', callback);
191 Object.defineProperty(exports, 'ondisplayconnect', {
192 set: function(callback) {
193 _addEventListener(true, 'displayconnect', callback);
197 Object.defineProperty(exports, 'ondisplaydisconnect', {
198 set: function(callback) {
199 _addEventListener(true, 'displaydisconnect', callback);
203 exports.addEventListener = function(eventName, callback) {
204 return _addEventListener(false, eventName, callback);
207 var _sendSyncMessage = function(msg) {
208 return extension.internal.sendSyncMessage(JSON.stringify(msg));