Upstream version 11.39.264.0
[platform/framework/web/crosswalk.git] / src / xwalk / application / extension / application_widget_api.js
index 5548b2a..c9226ca 100644 (file)
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-var application = requireNative('application');
 var common = requireNative('widget_common');
 
 var empty = "";
@@ -45,9 +44,6 @@ for (var key in widgetStringInfo) {
 }
 
 var WidgetStorage = function() {
-  var _keyList = new Array();
-  var _itemStorage = new Object();
-
   var _SetItem = function(itemKey, itemValue) {
     var result = extension.internal.sendSyncMessage({
         cmd: 'SetPreferencesItem',
@@ -55,9 +51,6 @@ var WidgetStorage = function() {
         preferencesItemValue: String(itemValue) });
 
     if (result) {
-      if (_itemStorage[String(itemKey)] == undefined)
-        _keyList.push(String(itemKey));
-      _itemStorage[String(itemKey)] = String(itemValue);
       return itemValue;
     } else {
       throw new common.CustomDOMException(
@@ -76,33 +69,36 @@ var WidgetStorage = function() {
   var _GetGetter = function(itemKey) {
     var _itemKey = itemKey;
     return function() {
-      return _itemStorage[String(_itemKey)];
+      var result = extension.internal.sendSyncMessage(
+          { cmd: 'GetItemValueByKey',
+            preferencesItemKey: String(itemKey) });
+      return result == empty ? null : result;
     }
   }
 
   this.init = function() {
-    var result = extension.internal.sendSyncMessage(
-        { cmd: 'GetAllItems' });
+    var result = extension.internal.sendSyncMessage({cmd: 'GetAllItems'});
     for (var itemKey in result) {
-      var itemValue = result[String(itemKey)];
-      _itemStorage[String(itemKey)] = itemValue;
       this.__defineSetter__(String(itemKey), _GetSetter(itemKey));
       this.__defineGetter__(String(itemKey), _GetGetter(itemKey));
-      _keyList.push(String(itemKey));
     }
   }
 
   this.__defineGetter__('length', function() {
-    return _keyList.length;
+    var result = extension.internal.sendSyncMessage({cmd: 'GetAllItems'});
+    return Object.keys(result).length;
   });
 
   this.key = function(index) {
-    return _keyList[index];
+    var result = extension.internal.sendSyncMessage({ cmd: 'GetAllItems'});
+    return Object.keys(result)[index];
   }
 
   this.getItem = function(itemKey) {
-    var item = _itemStorage[String(itemKey)];
-    return item !== undefined ? item : null;
+    var result = extension.internal.sendSyncMessage({
+        cmd: 'GetItemValueByKey',
+        preferencesItemKey: String(itemKey)});
+    return result == empty ? null : result;
   }
 
   this.setItem = function(itemKey, itemValue) {
@@ -112,13 +108,9 @@ var WidgetStorage = function() {
   this.removeItem = function(itemKey) {
     var result = extension.internal.sendSyncMessage({
         cmd: 'RemovePreferencesItem',
-        preferencesItemKey: String(itemKey) });
+        preferencesItemKey: String(itemKey)});
 
-    if (result) {
-      delete this[itemKey];
-      delete _itemStorage[itemKey];
-      _keyList.splice(_keyList.indexOf(String(itemKey)), 1);
-    } else {
+    if (!result) {
       throw new common.CustomDOMException(
           common.CustomDOMException.NO_MODIFICATION_ALLOWED_ERR,
           'The object can not be modified.');
@@ -126,26 +118,7 @@ var WidgetStorage = function() {
   }
 
   this.clear = function() {
-    var itemKey;
-    var result = extension.internal.sendSyncMessage({
-        cmd: 'ClearAllItems' });
-
-    if (!result)
-      return;
-
-    for (var i = _keyList.length-1; i >= 0; --i) {
-      // if the itemKey is still in DB(e.g. readonly),
-      // we should keep it in JS side.
-      var exists = extension.internal.sendSyncMessage({
-          cmd: 'KeyExists',
-          preferencesItemKey: _keyList[i] });
-
-      if (!exists) {
-        delete this[_keyList[i]];
-        delete _itemStorage[_keyList[i]];
-        _keyList.splice(i, 1);
-      }
-    }
+    extension.internal.sendSyncMessage({cmd: 'ClearAllItems'});
   }
 
   this.init();