You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by na...@apache.org on 2014/05/05 23:01:18 UTC
js commit: Upleveled changes from android.
Repository: cordova-js
Updated Branches:
refs/heads/master 322d7a64c -> d0195406f
Upleveled changes from android.
Project: http://git-wip-us.apache.org/repos/asf/cordova-js/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-js/commit/d0195406
Tree: http://git-wip-us.apache.org/repos/asf/cordova-js/tree/d0195406
Diff: http://git-wip-us.apache.org/repos/asf/cordova-js/diff/d0195406
Branch: refs/heads/master
Commit: d0195406f093c918a755916261c2ae07da3b1ec3
Parents: 322d7a6
Author: Archana Naik <na...@lab126.com>
Authored: Mon May 5 14:00:52 2014 -0700
Committer: Archana Naik <na...@lab126.com>
Committed: Mon May 5 14:00:52 2014 -0700
----------------------------------------------------------------------
src/amazon-fireos/exec.js | 59 ++++++++++++++++++++++++++----------------
1 file changed, 37 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-js/blob/d0195406/src/amazon-fireos/exec.js
----------------------------------------------------------------------
diff --git a/src/amazon-fireos/exec.js b/src/amazon-fireos/exec.js
index 0d35ff1..4a81630 100644
--- a/src/amazon-fireos/exec.js
+++ b/src/amazon-fireos/exec.js
@@ -142,7 +142,6 @@ androidExec.nativeToJsModes = nativeToJsModes;
androidExec.setJsToNativeBridgeMode = function(mode) {
if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) {
- console.log('Falling back on PROMPT mode since _cordovaNative is missing. Expected for Android 3.2 and lower only.');
mode = jsToNativeModes.PROMPT;
}
nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT);
@@ -216,37 +215,53 @@ function processMessage(message) {
}
}
+var isProcessing = false;
+
// This is called from the NativeToJsMessageQueue.java.
-androidExec.processMessages = function(messages) {
+androidExec.processMessages = function(messages, opt_useTimeout) {
if (messages) {
messagesFromNative.push(messages);
- // Check for the reentrant case, and enqueue the message if that's the case.
- if (messagesFromNative.length > 1) {
- return;
- }
+ }
+ // Check for the reentrant case.
+ if (isProcessing) {
+ return;
+ }
+ if (opt_useTimeout) {
+ window.setTimeout(androidExec.processMessages, 0);
+ return;
+ }
+ isProcessing = true;
+ try {
+ // TODO: add setImmediate polyfill and process only one message at a time.
while (messagesFromNative.length) {
- // Don't unshift until the end so that reentrancy can be detected.
- messages = messagesFromNative[0];
+ var msg = popMessageFromQueue();
// The Java side can send a * message to indicate that it
// still has messages waiting to be retrieved.
- if (messages == '*') {
- messagesFromNative.shift();
- window.setTimeout(pollOnce, 0);
+ if (msg == '*' && messagesFromNative.length === 0) {
+ setTimeout(pollOnce, 0);
return;
}
-
- var spaceIdx = messages.indexOf(' ');
- var msgLen = +messages.slice(0, spaceIdx);
- var message = messages.substr(spaceIdx + 1, msgLen);
- messages = messages.slice(spaceIdx + msgLen + 1);
- processMessage(message);
- if (messages) {
- messagesFromNative[0] = messages;
- } else {
- messagesFromNative.shift();
- }
+ processMessage(msg);
}
+ } finally {
+ isProcessing = false;
}
};
+function popMessageFromQueue() {
+ var messageBatch = messagesFromNative.shift();
+ if (messageBatch == '*') {
+ return '*';
+ }
+
+ var spaceIdx = messageBatch.indexOf(' ');
+ var msgLen = +messageBatch.slice(0, spaceIdx);
+ var message = messageBatch.substr(spaceIdx + 1, msgLen);
+ messageBatch = messageBatch.slice(spaceIdx + msgLen + 1);
+ if (messageBatch) {
+ messagesFromNative.unshift(messageBatch);
+ }
+ return message;
+}
+
module.exports = androidExec;