Return-Path: X-Original-To: apmail-incubator-callback-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-callback-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id DA237DD4B for ; Thu, 4 Oct 2012 19:55:58 +0000 (UTC) Received: (qmail 78729 invoked by uid 500); 4 Oct 2012 19:55:58 -0000 Delivered-To: apmail-incubator-callback-commits-archive@incubator.apache.org Received: (qmail 78688 invoked by uid 500); 4 Oct 2012 19:55:58 -0000 Mailing-List: contact callback-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: callback-dev@incubator.apache.org Delivered-To: mailing list callback-commits@incubator.apache.org Received: (qmail 78639 invoked by uid 99); 4 Oct 2012 19:55:58 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Oct 2012 19:55:58 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 498703A322; Thu, 4 Oct 2012 19:55:58 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: agrieve@apache.org To: callback-commits@incubator.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [5/11] Update JS with new exec() bridge functions. Message-Id: <20121004195558.498703A322@tyr.zones.apache.org> Date: Thu, 4 Oct 2012 19:55:58 +0000 (UTC) http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/780be09f/bin/templates/project/www/cordova-2.1.0.js ---------------------------------------------------------------------- diff --git a/bin/templates/project/www/cordova-2.1.0.js b/bin/templates/project/www/cordova-2.1.0.js index 8d02a6c..6971d90 100644 --- a/bin/templates/project/www/cordova-2.1.0.js +++ b/bin/templates/project/www/cordova-2.1.0.js @@ -1,6 +1,6 @@ -// commit 27d9aedd5bf520f305e20fcf350da2eef244d53d +// commit 5df805075ca294e35b86b9a3dd30171a186e6ac8 -// File generated at :: Wed Oct 03 2012 13:16:23 GMT-0400 (EDT) +// File generated at :: Thu Oct 04 2012 13:52:03 GMT-0400 (EDT) /* Licensed to the Apache Software Foundation (ASF) under one @@ -234,14 +234,6 @@ var cordova = { } }, - // TODO: iOS only - // This queue holds the currently executing command and all pending - // commands executed with cordova.exec(). - commandQueue:[], - // Indicates if we're currently in the middle of flushing the command - // queue on the native side. - commandQueueFlushing:false, - // END TODO /** * Plugin callback mechanism. */ @@ -901,7 +893,6 @@ define("cordova/exec", function(require, exports, module) { */ var cordova = require('cordova'), channel = require('cordova/channel'), - nativecomm = require('cordova/plugin/ios/nativecomm'), utils = require('cordova/utils'), jsToNativeModes = { IFRAME_NAV: 0, @@ -915,7 +906,9 @@ var cordova = require('cordova'), bridgeMode = navigator.userAgent.indexOf(' 4_') == -1 ? jsToNativeModes.XHR_NO_PAYLOAD : jsToNativeModes.IFRAME_NAV, execIframe, execXhr, - requestCount = 0; + requestCount = 0, + commandQueue = [], // Contains pending JS->Native messages. + isInContextOfEvalJs = 0; function createExecIframe() { var iframe = document.createElement("iframe"); @@ -930,8 +923,8 @@ function shouldBundleCommandJson() { } if (bridgeMode == jsToNativeModes.XHR_OPTIONAL_PAYLOAD) { var payloadLength = 0; - for (var i = 0; i < cordova.commandQueue.length; ++i) { - payloadLength += cordova.commandQueue[i].length; + for (var i = 0; i < commandQueue.length; ++i) { + payloadLength += commandQueue[i].length; } // The value here was determined using the benchmark within CordovaLibApp on an iPad 3. return payloadLength < 4500; @@ -982,9 +975,9 @@ function iOSExec() { // Stringify and queue the command. We stringify to command now to // effectively clone the command arguments in case they are mutated before // the command is executed. - cordova.commandQueue.push(JSON.stringify(command)); + commandQueue.push(JSON.stringify(command)); - if (!cordova.commandQueueFlushing) { + if (!isInContextOfEvalJs) { if (bridgeMode != jsToNativeModes.IFRAME_NAV) { // Re-using the XHR improves exec() performance by about 10%. // It is possible for a native stringByEvaluatingJavascriptFromString call @@ -1001,7 +994,7 @@ function iOSExec() { execXhr.setRequestHeader('vc', cordova.iOSVCAddr); execXhr.setRequestHeader('rc', ++requestCount); if (shouldBundleCommandJson()) { - execXhr.setRequestHeader('cmds', nativecomm()); + execXhr.setRequestHeader('cmds', iOSExec.nativeFetchMessages()); } execXhr.send(null); } else { @@ -1024,6 +1017,28 @@ iOSExec.setJsToNativeBridgeMode = function(mode) { bridgeMode = mode; }; +iOSExec.nativeFetchMessages = function() { + // Each entry in commandQueue is a JSON string already. + if (!commandQueue.length) { + return ''; + } + var json = '[' + commandQueue.join(',') + ']'; + commandQueue.length = 0; + return json; +}; + +iOSExec.nativeCallback = function(callbackId, status, payload, keepCallback) { + // This shouldn't be nested, but better to be safe. + isInContextOfEvalJs++; + try { + var success = status == 0 || status == 1; + cordova.callbackFromNative(callbackId, success, status, payload, keepCallback); + return iOSExec.nativeFetchMessages(); + } finally { + isInContextOfEvalJs--; + } +}; + module.exports = iOSExec; }); @@ -5293,23 +5308,6 @@ module.exports = { }); -// file: lib/ios/plugin/ios/nativecomm.js -define("cordova/plugin/ios/nativecomm", function(require, exports, module) { - -var cordova = require('cordova'); - -/** - * Called by native code to retrieve all queued commands and clear the queue. - */ -module.exports = function() { - // Each entry in commandQueue is a JSON string already. - var json = '[' + cordova.commandQueue.join(',') + ']'; - cordova.commandQueue.length = 0; - return json; -}; - -}); - // file: lib/ios/plugin/ios/notification.js define("cordova/plugin/ios/notification", function(require, exports, module) {