You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by bh...@apache.org on 2013/12/17 17:13:30 UTC

js commit: CB-5604 [BlackBerry10] Switch to async XHR for exec bridge

Updated Branches:
  refs/heads/master 686f16c28 -> a320b7932


CB-5604 [BlackBerry10] Switch to async XHR for exec bridge


Project: http://git-wip-us.apache.org/repos/asf/cordova-js/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-js/commit/a320b793
Tree: http://git-wip-us.apache.org/repos/asf/cordova-js/tree/a320b793
Diff: http://git-wip-us.apache.org/repos/asf/cordova-js/diff/a320b793

Branch: refs/heads/master
Commit: a320b79325e376c38b5555fbee0cf80aec2668d2
Parents: 686f16c
Author: Genevieve Mak <gm...@blackberry.com>
Authored: Mon Dec 9 10:01:09 2013 -0500
Committer: Bryan Higgins <bh...@blackberry.com>
Committed: Tue Dec 17 11:11:48 2013 -0500

----------------------------------------------------------------------
 src/blackberry10/exec.js | 58 +++++++++++++++++++++++++------------------
 1 file changed, 34 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-js/blob/a320b793/src/blackberry10/exec.js
----------------------------------------------------------------------
diff --git a/src/blackberry10/exec.js b/src/blackberry10/exec.js
index e373b4a..31f9b7c 100644
--- a/src/blackberry10/exec.js
+++ b/src/blackberry10/exec.js
@@ -40,15 +40,42 @@ function RemoteFunctionCall(functionUri) {
         params[name] = encodeURIComponent(JSON.stringify(value));
     };
 
-    this.makeSyncCall = function () {
+    this.makeAsyncCall = function () {
         var requestUri = composeUri(),
-        request = createXhrRequest(requestUri, false),
-        response;
+            request = new XMLHttpRequest(),
+            didSucceed,
+            response,
+            fail = function () {
+                var callbackId = JSON.parse(decodeURIComponent(params.callbackId));
+                response = JSON.parse(decodeURIComponent(request.responseText) || "null");
+                cordova.callbacks[callbackId].fail && cordova.callbacks[callbackId].fail(response.msg, response);
+                delete cordova.callbacks[callbackId];
+            };
+
+        request.open("POST", requestUri, true /* async */);
+        request.setRequestHeader("Content-Type", "application/json");
+        request.timeout = 1000; // Timeout in 1000ms
+        request.ontimeout = fail;
+        request.onerror = fail;
+
+        request.onload = function () {
+            response = JSON.parse(decodeURIComponent(request.responseText) || "null");
+            if (request.status === 200) {
+                didSucceed = response.code === cordova.callbackStatus.OK || response.code === cordova.callbackStatus.NO_RESULT;
+                cordova.callbackFromNative(
+                        JSON.parse(decodeURIComponent(params.callbackId)),
+                        didSucceed,
+                        response.code,
+                        [ didSucceed ? response.data : response.msg ],
+                        !!response.keepCallback
+                        );
+            } else {
+                fail();
+            }
+        };
+
         request.send(JSON.stringify(params));
-        response = JSON.parse(decodeURIComponent(request.responseText) || "null");
-        return response;
     };
-
 }
 
 module.exports = function (success, fail, service, action, args) {
@@ -56,7 +83,6 @@ module.exports = function (success, fail, service, action, args) {
     request = new RemoteFunctionCall(uri),
     callbackId = service + cordova.callbackId++,
     proxy,
-    response,
     name,
     didSucceed;
 
@@ -81,23 +107,7 @@ module.exports = function (success, fail, service, action, args) {
             }
         }
 
-        response = request.makeSyncCall();
-
-        if (response.code < 0) {
-            if (fail) {
-                fail(response.msg, response);
-            }
-            delete cordova.callbacks[callbackId];
-        } else {
-            didSucceed = response.code === cordova.callbackStatus.OK || response.code === cordova.callbackStatus.NO_RESULT;
-            cordova.callbackFromNative(
-                callbackId,
-                didSucceed,
-                response.code,
-                [ didSucceed ? response.data : response.msg ],
-                !!response.keepCallback
-            );
-        }
+        request.makeAsyncCall();
     }
 
 };