You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ia...@apache.org on 2014/04/30 21:53:01 UTC
[03/12] android commit: Got the bridge to work with Crosswalk
Got the bridge to work with Crosswalk
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/2f7e833a
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/2f7e833a
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/2f7e833a
Branch: refs/heads/pluggable_webview
Commit: 2f7e833a794f557cc2041b7b697a5b7cfb0f959e
Parents: c17503a
Author: Joe Bowser <bo...@apache.org>
Authored: Mon Mar 10 14:39:43 2014 -0700
Committer: Ian Clelland <ic...@chromium.org>
Committed: Tue Apr 29 22:50:11 2014 -0400
----------------------------------------------------------------------
.../org/apache/cordova/AndroidExposedJsApi.java | 76 ++++++++++++++++++++
.../src/org/apache/cordova/AndroidWebView.java | 2 +-
.../org/apache/cordova/CordovaResourceApi.java | 2 +-
.../src/org/apache/cordova/ExposedJsApi.java | 75 +++----------------
.../apache/cordova/NativeToJsMessageQueue.java | 2 +-
.../engine/crosswalk/XWalkCordovaWebView.java | 4 +-
6 files changed, 89 insertions(+), 72 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/2f7e833a/framework/src/org/apache/cordova/AndroidExposedJsApi.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/AndroidExposedJsApi.java b/framework/src/org/apache/cordova/AndroidExposedJsApi.java
new file mode 100755
index 0000000..74945cc
--- /dev/null
+++ b/framework/src/org/apache/cordova/AndroidExposedJsApi.java
@@ -0,0 +1,76 @@
+/*
+ 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.
+*/
+package org.apache.cordova;
+
+import android.webkit.JavascriptInterface;
+import org.apache.cordova.PluginManager;
+import org.json.JSONException;
+
+/**
+ * Contains APIs that the JS can call. All functions in here should also have
+ * an equivalent entry in CordovaChromeClient.java, and be added to
+ * cordova-js/lib/android/plugin/android/promptbasednativeapi.js
+ */
+public /* package */ class AndroidExposedJsApi implements ExposedJsApi {
+
+ private PluginManager pluginManager;
+ private NativeToJsMessageQueue jsMessageQueue;
+
+ public AndroidExposedJsApi(PluginManager pluginManager, NativeToJsMessageQueue jsMessageQueue) {
+ this.pluginManager = pluginManager;
+ this.jsMessageQueue = jsMessageQueue;
+ }
+
+ @JavascriptInterface
+ public String exec(String service, String action, String callbackId, String arguments) throws JSONException {
+ // If the arguments weren't received, send a message back to JS. It will switch bridge modes and try again. See CB-2666.
+ // We send a message meant specifically for this case. It starts with "@" so no other message can be encoded into the same string.
+ if (arguments == null) {
+ return "@Null arguments.";
+ }
+
+ jsMessageQueue.setPaused(true);
+ try {
+ // Tell the resourceApi what thread the JS is running on.
+ CordovaResourceApi.jsThread = Thread.currentThread();
+
+ pluginManager.exec(service, action, callbackId, arguments);
+ String ret = "";
+ if (!NativeToJsMessageQueue.DISABLE_EXEC_CHAINING) {
+ ret = jsMessageQueue.popAndEncode(false);
+ }
+ return ret;
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "";
+ } finally {
+ jsMessageQueue.setPaused(false);
+ }
+ }
+
+ @JavascriptInterface
+ public void setNativeToJsBridgeMode(int value) {
+ jsMessageQueue.setBridgeMode(value);
+ }
+
+ @JavascriptInterface
+ public String retrieveJsMessages(boolean fromOnlineEvent) {
+ return jsMessageQueue.popAndEncode(fromOnlineEvent);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/2f7e833a/framework/src/org/apache/cordova/AndroidWebView.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/AndroidWebView.java b/framework/src/org/apache/cordova/AndroidWebView.java
index ed4c02c..00c4bb1 100755
--- a/framework/src/org/apache/cordova/AndroidWebView.java
+++ b/framework/src/org/apache/cordova/AndroidWebView.java
@@ -343,7 +343,7 @@ public class AndroidWebView extends WebView implements CordovaWebView {
pluginManager = new PluginManager(this, this.cordova);
jsMessageQueue = new NativeToJsMessageQueue(this, cordova);
- exposedJsApi = new ExposedJsApi(pluginManager, jsMessageQueue);
+ exposedJsApi = new AndroidExposedJsApi(pluginManager, jsMessageQueue);
resourceApi = new CordovaResourceApi(this.getContext(), pluginManager);
exposeJsInterface();
}
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/2f7e833a/framework/src/org/apache/cordova/CordovaResourceApi.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaResourceApi.java b/framework/src/org/apache/cordova/CordovaResourceApi.java
index f1770fd..ff2c5c5 100644
--- a/framework/src/org/apache/cordova/CordovaResourceApi.java
+++ b/framework/src/org/apache/cordova/CordovaResourceApi.java
@@ -84,7 +84,7 @@ public class CordovaResourceApi {
// Creating this is light-weight.
private static OkHttpClient httpClient = new OkHttpClient();
- static Thread jsThread;
+ public static Thread jsThread;
private final AssetManager assetManager;
private final ContentResolver contentResolver;
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/2f7e833a/framework/src/org/apache/cordova/ExposedJsApi.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/ExposedJsApi.java b/framework/src/org/apache/cordova/ExposedJsApi.java
old mode 100755
new mode 100644
index 103e546..d0f8abf
--- a/framework/src/org/apache/cordova/ExposedJsApi.java
+++ b/framework/src/org/apache/cordova/ExposedJsApi.java
@@ -1,76 +1,17 @@
-/*
- 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.
-*/
package org.apache.cordova;
-import android.webkit.JavascriptInterface;
-import org.apache.cordova.PluginManager;
import org.json.JSONException;
-/**
- * Contains APIs that the JS can call. All functions in here should also have
- * an equivalent entry in CordovaChromeClient.java, and be added to
- * cordova-js/lib/android/plugin/android/promptbasednativeapi.js
+import android.webkit.JavascriptInterface;
+
+/*
+ * Any exposed Javascript API MUST implement these three things!
*/
-public /* package */ class ExposedJsApi {
-
- private PluginManager pluginManager;
- private NativeToJsMessageQueue jsMessageQueue;
-
- public ExposedJsApi(PluginManager pluginManager, NativeToJsMessageQueue jsMessageQueue) {
- this.pluginManager = pluginManager;
- this.jsMessageQueue = jsMessageQueue;
- }
- @JavascriptInterface
- public String exec(String service, String action, String callbackId, String arguments) throws JSONException {
- // If the arguments weren't received, send a message back to JS. It will switch bridge modes and try again. See CB-2666.
- // We send a message meant specifically for this case. It starts with "@" so no other message can be encoded into the same string.
- if (arguments == null) {
- return "@Null arguments.";
- }
+public interface ExposedJsApi {
- jsMessageQueue.setPaused(true);
- try {
- // Tell the resourceApi what thread the JS is running on.
- CordovaResourceApi.jsThread = Thread.currentThread();
-
- pluginManager.exec(service, action, callbackId, arguments);
- String ret = "";
- if (!NativeToJsMessageQueue.DISABLE_EXEC_CHAINING) {
- ret = jsMessageQueue.popAndEncode(false);
- }
- return ret;
- } catch (Throwable e) {
- e.printStackTrace();
- return "";
- } finally {
- jsMessageQueue.setPaused(false);
- }
- }
-
- @JavascriptInterface
- public void setNativeToJsBridgeMode(int value) {
- jsMessageQueue.setBridgeMode(value);
- }
-
@JavascriptInterface
- public String retrieveJsMessages(boolean fromOnlineEvent) {
- return jsMessageQueue.popAndEncode(fromOnlineEvent);
- }
+ public String exec(String service, String action, String callbackId, String arguments) throws JSONException;
+ public void setNativeToJsBridgeMode(int value);
+ public String retrieveJsMessages(boolean fromOnlineEvent);
}
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/2f7e833a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java b/framework/src/org/apache/cordova/NativeToJsMessageQueue.java
index c8a3b06..7fb6c06 100755
--- a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java
+++ b/framework/src/org/apache/cordova/NativeToJsMessageQueue.java
@@ -48,7 +48,7 @@ public class NativeToJsMessageQueue {
// Disable sending back native->JS messages during an exec() when the active
// exec() is asynchronous. Set this to true when running bridge benchmarks.
- static final boolean DISABLE_EXEC_CHAINING = false;
+ public static final boolean DISABLE_EXEC_CHAINING = false;
// Arbitrarily chosen upper limit for how much data to send to JS in one shot.
// This currently only chops up on message boundaries. It may be useful
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/2f7e833a/framework/src/org/apache/cordova/engine/crosswalk/XWalkCordovaWebView.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/engine/crosswalk/XWalkCordovaWebView.java b/framework/src/org/apache/cordova/engine/crosswalk/XWalkCordovaWebView.java
index 73195fe..682e28b 100755
--- a/framework/src/org/apache/cordova/engine/crosswalk/XWalkCordovaWebView.java
+++ b/framework/src/org/apache/cordova/engine/crosswalk/XWalkCordovaWebView.java
@@ -117,7 +117,7 @@ public class XWalkCordovaWebView extends XWalkView implements CordovaWebView {
private long lastMenuEventTime = 0;
NativeToJsMessageQueue jsMessageQueue;
- ExposedJsApi exposedJsApi;
+ XwalkExposedJsApi exposedJsApi;
/** custom view created by the browser (a video player for example) */
private View mCustomView;
@@ -319,7 +319,7 @@ public class XWalkCordovaWebView extends XWalkView implements CordovaWebView {
extensionManager = new XWalkExtensionManager(this.cordova.getActivity(), this.cordova.getActivity());
extensionManager.loadExtensions();
jsMessageQueue = new NativeToJsMessageQueue(this, cordova);
- exposedJsApi = new ExposedJsApi(pluginManager, jsMessageQueue);
+ exposedJsApi = new XwalkExposedJsApi(pluginManager, jsMessageQueue);
resourceApi = new CordovaResourceApi(this.getContext(), pluginManager);
exposeJsInterface();
}