Updated Branches: refs/heads/master 968764b2f -> 01a2683ad
[android] Delete callback server. Also folds polling into exec.js Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/commit/01a2683a Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/tree/01a2683a Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/diff/01a2683a Branch: refs/heads/master Commit: 01a2683adffd6198f6d28344b1d2c87ba98023b7 Parents: 968764b Author: Andrew Grieve <agri...@chromium.org> Authored: Fri Sep 28 14:35:00 2012 -0400 Committer: Andrew Grieve <agri...@chromium.org> Committed: Fri Sep 28 14:35:00 2012 -0400 ---------------------------------------------------------------------- lib/android/exec.js | 35 ++++++----- lib/android/platform.js | 10 --- lib/android/plugin/android/callback.js | 89 --------------------------- lib/android/plugin/android/polling.js | 51 --------------- 4 files changed, 20 insertions(+), 165 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/01a2683a/lib/android/exec.js ---------------------------------------------------------------------- diff --git a/lib/android/exec.js b/lib/android/exec.js index fd6cd3f..e3fbf4f 100644 --- a/lib/android/exec.js +++ b/lib/android/exec.js @@ -34,8 +34,6 @@ * @param {String[]} [args] Zero or more arguments to pass to the method */ var cordova = require('cordova'), - callback = require('cordova/plugin/android/callback'), - polling = require('cordova/plugin/android/polling'), nativeApiProvider = require('cordova/plugin/android/nativeapiprovider'), jsToNativeModes = { PROMPT: 0, @@ -48,9 +46,6 @@ var cordova = require('cordova'), nativeToJsModes = { // Polls for messages using the JS->Native bridge. POLLING: 0, - // Does an XHR to a local server, which will send back messages. This is - // broken on ICS when a proxy server is configured. - HANGING_GET: 1, // For LOAD_URL to be viable, it would need to have a work-around for // the bug where the soft-keyboard gets dismissed when a message is sent. LOAD_URL: 2, @@ -64,7 +59,8 @@ var cordova = require('cordova'), PRIVATE_API: 4 }, jsToNativeBridgeMode, // Set lazily. - nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT; + nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT + pollEnabled = false; function androidExec(success, fail, service, action, args) { // Set default bridge modes if they have not already been set. @@ -91,6 +87,18 @@ function androidExec(success, fail, service, action, args) { } } +function pollOnce() { + var msg = nativeApiProvider.get().retrieveJsMessages(); + androidExec.processMessages(msg); +} + +function pollingTimerFunc() { + if (pollEnabled) { + pollOnce(); + setTimeout(pollingTimerFunc, 50); + } +} + function hookOnlineApis() { function proxyEvent(e) { cordova.fireWindowEvent(e.type); @@ -99,8 +107,8 @@ function hookOnlineApis() { // It currently fires them only on document though, so we bridge them // to window here (while first listening for exec()-releated online/offline // events). - window.addEventListener('online', polling.pollOnce, false); - window.addEventListener('offline', polling.pollOnce, false); + window.addEventListener('online', pollOnce, false); + window.addEventListener('offline', pollOnce, false); cordova.addWindowEventHandler('online'); cordova.addWindowEventHandler('offline'); document.addEventListener('online', proxyEvent, false); @@ -126,9 +134,7 @@ androidExec.setNativeToJsBridgeMode = function(mode) { return; } if (nativeToJsBridgeMode == nativeToJsModes.POLLING) { - polling.stop(); - } else if (nativeToJsBridgeMode == nativeToJsModes.HANGING_GET) { - callback.stop(); + pollEnabled = false; } nativeToJsBridgeMode = mode; @@ -136,9 +142,8 @@ androidExec.setNativeToJsBridgeMode = function(mode) { nativeApiProvider.get().setNativeToJsBridgeMode(mode); if (mode == nativeToJsModes.POLLING) { - polling.start(); - } else if (mode == nativeToJsModes.HANGING_GET) { - callback.start(); + pollEnabled = true; + setTimeout(pollingTimerFunc, 1); } }; @@ -183,7 +188,7 @@ function processMessage(message) { androidExec.processMessages = function(messages) { while (messages) { if (messages == '*') { - window.setTimeout(polling.pollOnce, 0); + window.setTimeout(pollOnce, 0); break; } var spaceIdx = messages.indexOf(' '); http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/01a2683a/lib/android/platform.js ---------------------------------------------------------------------- diff --git a/lib/android/platform.js b/lib/android/platform.js index b2cde22..22e5064 100644 --- a/lib/android/platform.js +++ b/lib/android/platform.js @@ -86,16 +86,6 @@ module.exports = { }, [channel.onCordovaReady]); }, objects: { - cordova: { - children: { - JSCallback:{ - path:"cordova/plugin/android/callback" - }, - JSCallbackPolling:{ - path:"cordova/plugin/android/polling" - } - } - }, navigator: { children: { app:{ http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/01a2683a/lib/android/plugin/android/callback.js ---------------------------------------------------------------------- diff --git a/lib/android/plugin/android/callback.js b/lib/android/plugin/android/callback.js deleted file mode 100644 index a87a645..0000000 --- a/lib/android/plugin/android/callback.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -var port = null, - token = null, - xmlhttp; - -function startXhr() { - // cordova/exec depends on this module, so we can't require cordova/exec on the module level. - var exec = require('cordova/exec'), - xmlhttp = new XMLHttpRequest(); - - // Callback function when XMLHttpRequest is ready - xmlhttp.onreadystatechange=function(){ - if (!xmlhttp) { - return; - } - if (xmlhttp.readyState === 4){ - // If callback has JavaScript statement to execute - if (xmlhttp.status === 200) { - - // Need to url decode the response - var msg = decodeURIComponent(xmlhttp.responseText); - setTimeout(startXhr, 1); - exec.processMessages(msg); - } - - // If callback ping (used to keep XHR request from timing out) - else if (xmlhttp.status === 404) { - setTimeout(startXhr, 10); - } - - // 0 == Page is unloading. - // 400 == Bad request. - // 403 == invalid token. - // 503 == server stopped. - else { - console.log("JSCallback Error: Request failed with status " + xmlhttp.status); - exec.setNativeToJsBridgeMode(exec.nativeToJsModes.POLLING); - } - } - }; - - if (port === null) { - port = prompt("getPort", "gap_callbackServer:"); - } - if (token === null) { - token = prompt("getToken", "gap_callbackServer:"); - } - xmlhttp.open("GET", "http://127.0.0.1:"+port+"/"+token , true); - xmlhttp.send(); -} - -module.exports = { - start: function() { - startXhr(); - }, - - stop: function() { - if (xmlhttp) { - var tmp = xmlhttp; - xmlhttp = null; - tmp.abort(); - } - }, - - isAvailable: function() { - return ("true" != prompt("usePolling", "gap_callbackServer:")); - } -}; - http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/01a2683a/lib/android/plugin/android/polling.js ---------------------------------------------------------------------- diff --git a/lib/android/plugin/android/polling.js b/lib/android/plugin/android/polling.js deleted file mode 100644 index 4942b8c..0000000 --- a/lib/android/plugin/android/polling.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -var cordova = require('cordova'), - nativeApiProvider = require('cordova/plugin/android/nativeapiprovider'), - POLL_INTERVAL = 50, - enabled = false; - -function pollOnce() { - var exec = require('cordova/exec'), - msg = nativeApiProvider.get().retrieveJsMessages(); - exec.processMessages(msg); -} - -function doPoll() { - if (!enabled) { - return; - } - pollOnce(); - setTimeout(doPoll, POLL_INTERVAL); -} - -module.exports = { - start: function() { - enabled = true; - setTimeout(doPoll, 1); - }, - stop: function() { - enabled = false; - }, - pollOnce: pollOnce -}; -