You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by bo...@apache.org on 2014/05/01 00:02:52 UTC
[08/18] android commit: Catch uncaught exceptions in from plugins and
turn them into error responses.
Catch uncaught exceptions in from plugins and turn them into error responses.
When a plugin throws an unchecked exception, we're not catching it
anywhere and so the error callback is not being called.
This change adds a try/catch to catch such exceptions.
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/79e313a0
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/79e313a0
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/79e313a0
Branch: refs/heads/pluggable_webview
Commit: 79e313a0c07d6afbb0e8ecb46e10fd432291145c
Parents: 9f4c75d
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Mar 6 21:25:48 2014 -0500
Committer: Joe Bowser <bo...@apache.org>
Committed: Mon Mar 17 11:58:14 2014 -0700
----------------------------------------------------------------------
framework/src/org/apache/cordova/PluginManager.java | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/79e313a0/framework/src/org/apache/cordova/PluginManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/PluginManager.java b/framework/src/org/apache/cordova/PluginManager.java
index e9795e8..f095722 100755
--- a/framework/src/org/apache/cordova/PluginManager.java
+++ b/framework/src/org/apache/cordova/PluginManager.java
@@ -236,22 +236,25 @@ public class PluginManager {
app.sendPluginResult(cr, callbackId);
return;
}
+ CallbackContext callbackContext = new CallbackContext(callbackId, app);
try {
- CallbackContext callbackContext = new CallbackContext(callbackId, app);
long pluginStartTime = System.currentTimeMillis();
boolean wasValidAction = plugin.execute(action, rawArgs, callbackContext);
long duration = System.currentTimeMillis() - pluginStartTime;
-
+
if (duration > SLOW_EXEC_WARNING_THRESHOLD) {
Log.w(TAG, "THREAD WARNING: exec() call to " + service + "." + action + " blocked the main thread for " + duration + "ms. Plugin should use CordovaInterface.getThreadPool().");
}
if (!wasValidAction) {
PluginResult cr = new PluginResult(PluginResult.Status.INVALID_ACTION);
- app.sendPluginResult(cr, callbackId);
+ callbackContext.sendPluginResult(cr);
}
} catch (JSONException e) {
PluginResult cr = new PluginResult(PluginResult.Status.JSON_EXCEPTION);
- app.sendPluginResult(cr, callbackId);
+ callbackContext.sendPluginResult(cr);
+ } catch (Exception e) {
+ Log.e(TAG, "Uncaught exception from plugin", e);
+ callbackContext.error(e.getMessage());
}
}