[Utils] Allow global JSON object redefinition 24/123624/1 accepted/tizen/3.0/common/20170411.083130 accepted/tizen/3.0/ivi/20170411.005102 accepted/tizen/3.0/mobile/20170411.005001 accepted/tizen/3.0/tv/20170411.005034 accepted/tizen/3.0/wearable/20170411.005051 submit/tizen_3.0/20170410.090908
authorJakub Skowron <j.skowron@samsung.com>
Thu, 6 Apr 2017 08:14:56 +0000 (10:14 +0200)
committerJakub Skowron <j.skowron@samsung.com>
Thu, 6 Apr 2017 08:47:29 +0000 (01:47 -0700)
Allow application programmer to redefine global JSON object.
In our code use xwalk.JSON instead

Change-Id: I62d57130584aea42a176633aa758b1f675d65b00
Signed-off-by: Jakub Skowron <j.skowron@samsung.com>
src/convergence/convergence_api.js
src/datacontrol/datacontrol_api.js
src/download/download_api.js
src/feedback/feedback_api.js
src/messageport/messageport_api.js
src/package/package_api.js
src/power/power_api.js
src/tizen/tizen_api.js
src/utils/utils_api.js

index 6b02506..120f4ab 100644 (file)
@@ -15,6 +15,7 @@
  */
 
 
+var JSON_ = xwalk.JSON;
 var validator_ = xwalk.utils.validator;
 var types_ = validator_.Types;
 var utils_ = xwalk.utils;
@@ -711,7 +712,7 @@ native_.addListener('APP_COMMUNICATION_SERVICE_LISTENER', function(result) {
 
       for(var i = 0; i < result.payload.length; i++) {
         if (result.payload[i].key === 'client_list') {
-          var value = JSON.parse(result.payload[i].value);
+          var value = JSON_.parse(result.payload[i].value);
           var client = new ClientInfo(value);
           clients_array.push(client);
         }
index 108f57c..cb7158e 100755 (executable)
 
 tizen.debug = extension;
 
+var JSON_ = xwalk.JSON;
 var validator_ = xwalk.utils.validator;
 var types_ = validator_.Types;
 
-
 var callbackId = 0;
 var callbacks = {};
 
 extension.setMessageListener(function(json) {
-  var result = JSON.parse(json);
+  var result = JSON_.parse(json);
   var callback = callbacks[result['callbackId']];
   setTimeout(function() {
     callback(result);
@@ -38,9 +38,9 @@ function nextCallbackId() {
 
 function callNative(cmd, args) {
   var json = {'cmd': cmd, 'args': args};
-  var argjson = JSON.stringify(json);
+  var argjson = JSON_.stringify(json);
   var resultString = extension.internal.sendSyncMessage(argjson);
-  var result = JSON.parse(resultString);
+  var result = JSON_.parse(resultString);
 
   if (typeof result !== 'object') {
     throw new WebAPIException(WebAPIException.UNKNOWN_ERR);
index b47ddd0..8e5d9c1 100755 (executable)
@@ -14,6 +14,7 @@
  *    limitations under the License.
  */
 
+var JSON_ = xwalk.JSON;
 var privUtils_ = xwalk.utils;
 var validator_ = xwalk.utils.validator;
 var types_ = validator_.Types;
@@ -27,7 +28,7 @@ var requests = {};
 
 extension.setMessageListener(function(json) {
 
-  var result = JSON.parse(json);
+  var result = JSON_.parse(json);
   var callback = callbacks[result.callbackId];
   //privUtils_.log("PostMessage received: " + result.status);
 
@@ -70,9 +71,9 @@ function nextCallbackId() {
 
 function callNative(cmd, args) {
   var json = {'cmd': cmd, 'args': args};
-  var argjson = JSON.stringify(json);
+  var argjson = JSON_.stringify(json);
   var resultString = extension.internal.sendSyncMessage(argjson);
-  var result = JSON.parse(resultString);
+  var result = JSON_.parse(resultString);
 
   if (typeof result !== 'object') {
     throw new WebAPIException(WebAPIException.UNKNOWN_ERR);
index 6a7f693..43ffb99 100755 (executable)
@@ -14,6 +14,7 @@
  *    limitations under the License.
  */
 
+var JSON_ = xwalk.JSON;
 var validator_ = xwalk.utils.validator;
 var types_ = validator_.Types;
 var type_ = xwalk.utils.type;
@@ -36,9 +37,9 @@ var ExceptionMap = {
 
 function callNative(cmd, args) {
   var json = {'cmd': cmd, 'args': args};
-  var argjson = JSON.stringify(json);
+  var argjson = JSON_.stringify(json);
   var resultString = extension.internal.sendSyncMessage(argjson);
-  var result = JSON.parse(resultString);
+  var result = JSON_.parse(resultString);
 
   if (typeof result !== 'object') {
     throw new WebAPIException(WebAPIException.UNKNOWN_ERR);
index cada46b..ab612f1 100755 (executable)
@@ -14,6 +14,7 @@
  *    limitations under the License.
  */
  
+var JSON_ = xwalk.JSON;
 var validator_ = xwalk.utils.validator;
 var types_ = validator_.Types;
 var type_ = xwalk.utils.type;
@@ -25,7 +26,7 @@ var callbacks = {};
 var ports = [];
 
 extension.setMessageListener(function(json) {
-  var msg = JSON.parse(json);
+  var msg = JSON_.parse(json);
   var listeners = callbacks[msg['local_port_id']];
   var rmp;
 
@@ -65,9 +66,9 @@ var ExceptionMap = {
 
 function callNative(cmd, args) {
   var json = {'cmd': cmd, 'args': args};
-  var argjson = JSON.stringify(json);
+  var argjson = JSON_.stringify(json);
   var resultString = extension.internal.sendSyncMessage(argjson);
-  var result = JSON.parse(resultString);
+  var result = JSON_.parse(resultString);
 
   if (typeof result !== 'object') {
     throw new WebAPIException(WebAPIException.UNKNOWN_ERR);
index 87c45d1..fcc9fc4 100644 (file)
@@ -14,6 +14,7 @@
  *    limitations under the License.
  */
 
+var JSON_ = xwalk.JSON;
 var validator_ = xwalk.utils.validator;
 var types_ = validator_.Types;
 
@@ -30,7 +31,7 @@ function invokeListener(result) {
 }
 
 extension.setMessageListener(function(json) {
-  var result = JSON.parse(json);
+  var result = JSON_.parse(json);
 
   if (result.hasOwnProperty('listener')) {
     setTimeout(function() {
@@ -50,9 +51,9 @@ function nextCallbackId() {
 
 function callNative(cmd, args) {
   var json = {'cmd': cmd, 'args': args};
-  var argjson = JSON.stringify(json);
+  var argjson = JSON_.stringify(json);
   var resultString = extension.internal.sendSyncMessage(argjson);
-  var result = JSON.parse(resultString);
+  var result = JSON_.parse(resultString);
 
   if (typeof result !== 'object') {
     throw new WebAPIException(WebAPIException.UNKNOWN_ERR);
index 5be1026..f7a711d 100755 (executable)
@@ -14,6 +14,7 @@
  *    limitations under the License.
  */
 
+var JSON_ = xwalk.JSON;
 var validator_ = xwalk.utils.validator;
 var types_ = validator_.Types;
 var native_ = new xwalk.utils.NativeManager(extension);
@@ -44,9 +45,9 @@ var screenStateChangeListener = new ListenerManager(native_, "SCREEN_STATE_LISTE
 
 function callNative(cmd, args) {
     var json = {'cmd':cmd, 'args':args};
-    var argjson = JSON.stringify(json);
+    var argjson = JSON_.stringify(json);
     var resultString = extension.internal.sendSyncMessage(argjson);
-    var result = JSON.parse(resultString);
+    var result = JSON_.parse(resultString);
 
     if (typeof result !== 'object') {
         throw new WebAPIException(WebAPIException.UNKNOWN_ERR);
index f5f8085..eaa502b 100644 (file)
 // WebAPIException and WebAPIError definition moved to src/utils/utils_api.js
 // for compliance reasons. You can find more info there.
 
-var _global = {};
-if (typeof window != 'undefined') {
-  _global = window;
-}
-else if (typeof global != 'undefiend') {
-  _global = global;
-}
-
 
 /**
  * Filter match flags.
@@ -481,7 +473,3 @@ exports.SimpleCoordinates = function(lat, lng) {
   });
 };
 exports.SimpleCoordinates.prototype.constructor = exports.SimpleCoordinates;
-
-// Protect JSON.stringify from being overriden by application
-Object.defineProperty( _global, 'JSON', {value:JSON, writable:false, configurable:false} );
-Object.defineProperty( JSON, 'stringify', {value:JSON.stringify, writable:false, configurable:false} );
index 85fdc33..ca61725 100644 (file)
@@ -3,6 +3,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+//Object xwalk.JSON - guaranteed to not being modified by the application programmer
+var JSON_ = {stringify: JSON.stringify, parse: JSON.parse};
+Object.freeze(JSON_)
+exports.JSON = JSON_;
+
 var _enableJsLogs = false;
 
 var _global = {};
@@ -1015,7 +1020,7 @@ var NativeManager = function(extension) {
   });
 
   extension_.setMessageListener(function(json) {
-    var msg = JSON.parse(json);
+    var msg = JSON_.parse(json);
     var id;
 
     if (msg.hasOwnProperty(this.CALLBACK_ID_KEY)) {
@@ -1079,7 +1084,7 @@ NativeManager.prototype.call = function(cmd, args, callback) {
 };
 
 NativeManager.prototype.callSync = function(cmd, args) {
-  var request = JSON.stringify({
+  var request = JSON_.stringify({
     cmd: cmd,
     args: args || {}
   });
@@ -1089,7 +1094,7 @@ NativeManager.prototype.callSync = function(cmd, args) {
     /* C++ extension didn't set sync response using Instance::SendSyncReply */
     throw new WebAPIException(WebAPIException.ABORT_ERR, "Internal error");
   }
-  return JSON.parse(response);
+  return JSON_.parse(response);
 };
 
 NativeManager.prototype.sendRuntimeMessage = function(msg, body) {
@@ -1343,13 +1348,13 @@ var NativeBridge = (function (extension, debug) {
     var Bridge = function () {};
     Bridge.prototype = {
         sync: function (data) {
-            var json = JSON.stringify({
+            var json = JSON_.stringify({
               cmd: data.cmd,
               args: data
             });
             if (debug) console.log('bridge.sync, json: ' + json);
             var result = extension.internal.sendSyncMessage(json);
-            var obj = JSON.parse(result);
+            var obj = JSON_.parse(result);
             if (obj.error)
                 throw new WebAPIException(obj.code, obj.name, obj.message);
             return obj.result;
@@ -1357,7 +1362,7 @@ var NativeBridge = (function (extension, debug) {
         async: function (data) {
             var l = new Listener();
             data.cid = Listeners.getInstance().add(l);
-            var json = JSON.stringify({
+            var json = JSON_.stringify({
                 cmd: data.cmd,
                 args: data
             });
@@ -1395,7 +1400,7 @@ var NativeBridge = (function (extension, debug) {
          */
 
         if (debug) console.log('bridge.setMessageListener, json: ' + json);
-        var data = JSON.parse(json);
+        var data = JSON_.parse(json);
         if (data.cid && data.action) {
             setTimeout(function() {
                 Listeners.getInstance().resolve(data.cid, data.action, data.args, data.keep);