mirror of
https://github.com/apache/cordova-android.git
synced 2025-03-31 03:22:58 +08:00
Add a flag to disable exec() chaining for benchmarking.
- Also moved ENABLE_LOCATION_CHANGE_EXEC_MODE to NativeToJsMessageQueue so that all exec() related flags are in one place.
This commit is contained in:
parent
9e3e7e1820
commit
d3cbfd5467
@ -54,9 +54,6 @@ import android.webkit.WebViewClient;
|
|||||||
public class CordovaWebViewClient extends WebViewClient {
|
public class CordovaWebViewClient extends WebViewClient {
|
||||||
|
|
||||||
private static final String TAG = "Cordova";
|
private static final String TAG = "Cordova";
|
||||||
// Disable URL-based exec() bridge by default since it's a bit of a
|
|
||||||
// security concern.
|
|
||||||
private static boolean ENABLE_LOCATION_CHANGE_EXEC_MODE = false;
|
|
||||||
private static final String CORDOVA_EXEC_URL_PREFIX = "http://cdv_exec/";
|
private static final String CORDOVA_EXEC_URL_PREFIX = "http://cdv_exec/";
|
||||||
CordovaInterface cordova;
|
CordovaInterface cordova;
|
||||||
CordovaWebView appView;
|
CordovaWebView appView;
|
||||||
@ -124,7 +121,7 @@ public class CordovaWebViewClient extends WebViewClient {
|
|||||||
@Override
|
@Override
|
||||||
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
||||||
// Check if it's an exec() bridge command message.
|
// Check if it's an exec() bridge command message.
|
||||||
if (ENABLE_LOCATION_CHANGE_EXEC_MODE && url.startsWith(CORDOVA_EXEC_URL_PREFIX)) {
|
if (NativeToJsMessageQueue.ENABLE_LOCATION_CHANGE_EXEC_MODE && url.startsWith(CORDOVA_EXEC_URL_PREFIX)) {
|
||||||
handleExecUrl(url);
|
handleExecUrl(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,8 +40,12 @@ import org.json.JSONException;
|
|||||||
public String exec(String service, String action, String callbackId, String arguments) throws JSONException {
|
public String exec(String service, String action, String callbackId, String arguments) throws JSONException {
|
||||||
jsMessageQueue.setPaused(true);
|
jsMessageQueue.setPaused(true);
|
||||||
try {
|
try {
|
||||||
pluginManager.exec(service, action, callbackId, arguments, true /* async */);
|
boolean wasSync = pluginManager.exec(service, action, callbackId, arguments, true /* async */);
|
||||||
return jsMessageQueue.popAndEncode();
|
String ret = "";
|
||||||
|
if (!NativeToJsMessageQueue.DISABLE_EXEC_CHAINING || wasSync) {
|
||||||
|
ret = jsMessageQueue.popAndEncode();
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
} finally {
|
} finally {
|
||||||
jsMessageQueue.setPaused(false);
|
jsMessageQueue.setPaused(false);
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,14 @@ public class NativeToJsMessageQueue {
|
|||||||
// Set this to true to force plugin results to be encoding as
|
// Set this to true to force plugin results to be encoding as
|
||||||
// JS instead of the custom format (useful for benchmarking).
|
// JS instead of the custom format (useful for benchmarking).
|
||||||
private static final boolean FORCE_ENCODE_USING_EVAL = false;
|
private static final boolean FORCE_ENCODE_USING_EVAL = false;
|
||||||
|
|
||||||
|
// Disable URL-based exec() bridge by default since it's a bit of a
|
||||||
|
// security concern.
|
||||||
|
static final boolean ENABLE_LOCATION_CHANGE_EXEC_MODE = false;
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
|
||||||
// Arbitrarily chosen upper limit for how much data to send to JS in one shot.
|
// Arbitrarily chosen upper limit for how much data to send to JS in one shot.
|
||||||
private static final int MAX_PAYLOAD_SIZE = 50 * 1024;
|
private static final int MAX_PAYLOAD_SIZE = 50 * 1024;
|
||||||
@ -68,7 +76,7 @@ public class NativeToJsMessageQueue {
|
|||||||
|
|
||||||
private final CordovaInterface cordova;
|
private final CordovaInterface cordova;
|
||||||
private final CordovaWebView webView;
|
private final CordovaWebView webView;
|
||||||
|
|
||||||
public NativeToJsMessageQueue(CordovaWebView webView, CordovaInterface cordova) {
|
public NativeToJsMessageQueue(CordovaWebView webView, CordovaInterface cordova) {
|
||||||
this.cordova = cordova;
|
this.cordova = cordova;
|
||||||
this.webView = webView;
|
this.webView = webView;
|
||||||
|
@ -213,8 +213,9 @@ public class PluginManager {
|
|||||||
* @param async Boolean indicating whether the calling JavaScript code is expecting an
|
* @param async Boolean indicating whether the calling JavaScript code is expecting an
|
||||||
* immediate return value. If true, either Cordova.callbackSuccess(...) or
|
* immediate return value. If true, either Cordova.callbackSuccess(...) or
|
||||||
* Cordova.callbackError(...) is called once the plugin code has executed.
|
* Cordova.callbackError(...) is called once the plugin code has executed.
|
||||||
|
* @return Whether the task completed synchronously.
|
||||||
*/
|
*/
|
||||||
public void exec(final String service, final String action, final String callbackId, final String jsonArgs, final boolean async) {
|
public boolean exec(final String service, final String action, final String callbackId, final String jsonArgs, final boolean async) {
|
||||||
PluginResult cr = null;
|
PluginResult cr = null;
|
||||||
boolean runAsync = async;
|
boolean runAsync = async;
|
||||||
try {
|
try {
|
||||||
@ -237,14 +238,14 @@ public class PluginManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
// Call execute on the plugin so that it can do it's thing
|
// Call execute on the plugin so that it can do it's thing
|
||||||
cr = plugin.execute(action, args, callbackId);
|
cr = plugin.execute(action, args, callbackId);
|
||||||
|
|
||||||
// If no result to be sent and keeping callback, then no need to sent back to JavaScript
|
// If no result to be sent and keeping callback, then no need to sent back to JavaScript
|
||||||
if ((cr.getStatus() == PluginResult.Status.NO_RESULT.ordinal()) && cr.getKeepCallback()) {
|
if ((cr.getStatus() == PluginResult.Status.NO_RESULT.ordinal()) && cr.getKeepCallback()) {
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -263,6 +264,7 @@ public class PluginManager {
|
|||||||
cr = new PluginResult(PluginResult.Status.NO_RESULT);
|
cr = new PluginResult(PluginResult.Status.NO_RESULT);
|
||||||
}
|
}
|
||||||
app.sendPluginResult(cr, callbackId);
|
app.sendPluginResult(cr, callbackId);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user