You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ag...@apache.org on 2013/01/29 20:07:52 UTC

[1/37] js commit: ArrayBuffers support using Base64.

ArrayBuffers support using Base64.


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

Branch: refs/heads/symbolmapping
Commit: 22d8817622ff1f651d932253e5e8691f045df4a3
Parents: d40d6a4
Author: Braden Shepherdson <br...@chromium.org>
Authored: Tue Jan 15 11:53:16 2013 -0500
Committer: Braden Shepherdson <br...@chromium.org>
Committed: Tue Jan 15 11:53:16 2013 -0500

----------------------------------------------------------------------
 lib/android/exec.js |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-js/blob/22d88176/lib/android/exec.js
----------------------------------------------------------------------
diff --git a/lib/android/exec.js b/lib/android/exec.js
index c6e426f..4810e07 100644
--- a/lib/android/exec.js
+++ b/lib/android/exec.js
@@ -70,6 +70,13 @@ function androidExec(success, fail, service, action, args) {
         androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT);
     }
 
+    // Process any ArrayBuffers in the args into a string.
+    for (var i = 0; i < args.length; i++) {
+        if (args[i].constructor == ArrayBuffer || (args[i].buffer && args[i].buffer.constructor == ArrayBuffer)) {
+            args[i] = window.btoa(String.fromCharCode.apply(null, new Uint8Array(args[i])));
+        }
+    }
+
     var callbackId = service + cordova.callbackId++,
         argsJson = JSON.stringify(args),
         returnValue;
@@ -184,6 +191,14 @@ function processMessage(message) {
                 payload = null;
             } else if (payloadKind == 'n') {
                 payload = +message.slice(nextSpaceIdx + 2);
+            } else if (payloadKind == 'A') {
+                var data = message.slice(nextSpaceIdx + 2);
+                var bytes = window.atob(data);
+                var arraybuffer = new Uint8Array(bytes.length);
+                for (var i = 0; i < bytes.length; i++) {
+                    arraybuffer[i] = bytes.charCodeAt(i);
+                }
+                payload = arraybuffer.buffer;
             } else {
                 payload = JSON.parse(message.slice(nextSpaceIdx + 1));
             }