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();
     }