diff -r ad014e2245f6 webview/native/Source/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp --- a/webview/native/Source/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp Tue May 21 17:30:13 2013 -0700 +++ b/webview/native/Source/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp Tue May 21 23:05:09 2013 -0700 @@ -261,8 +261,7 @@ JSValue exceptionDescription = (JavaInstance::create(ex, rootObject, accessControlContext()) ->createRuntimeObject(exec)); - throwError(exec, createError(exec, - exceptionDescription.toString(exec)->value(exec))); + throwError(exec, exceptionDescription); return jsUndefined(); } } diff -r ad014e2245f6 webview/native/Source/WebCore/platform/java/BridgeUtils.cpp --- a/webview/native/Source/WebCore/platform/java/BridgeUtils.cpp Tue May 21 17:30:13 2013 -0700 +++ b/webview/native/Source/WebCore/platform/java/BridgeUtils.cpp Tue May 21 23:05:09 2013 -0700 @@ -202,20 +202,20 @@ static void throwJavaException( JNIEnv* env, JSContextRef ctx, - JSValueRef exception) + JSValueRef exception, + JSC::Bindings::RootObject* rootObject) { jclass clJSException = getJSExceptionClass(env); - static jmethodID constructorID = - env->GetMethodID(clJSException, "", - "(Ljava/lang/String;)V"); - env->Throw(JLocalRef((jthrowable)env->NewObject( + jobject jex = JSValue_to_Java_Object(exception, env, ctx, rootObject); + static jmethodID makeID = + env->GetStaticMethodID(clJSException, "make", + "(Ljava/lang/Object;)Lnetscape/javascript/JSException;"); + + env->Throw(JLocalRef((jthrowable)env->CallStaticObjectMethod( clJSException, - constructorID, - (jstring)JLString(WebCore::JSValue_to_Java_String( - exception, - env, - ctx))))); + makeID, + jex))); } jobject executeScript( @@ -234,7 +234,7 @@ JSValueRef value = JSEvaluateScript(ctx, script, object, NULL, 1, &exception); JSStringRelease(script); if (exception) { - throwJavaException(env, ctx, exception); + throwJavaException(env, ctx, exception, rootObject); return NULL; } return WebCore::JSValue_to_Java_Object(value, env, ctx, rootObject); @@ -340,7 +340,7 @@ JSObjectSetProperty(ctx, object, name, jsvalue, attributes, &exception); JSStringRelease(name); if (exception) - WebCore::throwJavaException(env, ctx, exception); + WebCore::throwJavaException(env, ctx, exception, rootObject.get()); } JNIEXPORT void JNICALL Java_com_sun_webkit_dom_JSObject_removeMemberImpl @@ -427,7 +427,7 @@ &exception); delete[] arguments; if (exception) { - WebCore::throwJavaException(env, ctx, exception); + WebCore::throwJavaException(env, ctx, exception, rootObject.get()); return NULL; } return WebCore::JSValue_to_Java_Object(result, env, ctx, rootObject.get()); diff -r ad014e2245f6 webview/src/netscape/javascript/JSException.java --- a/webview/src/netscape/javascript/JSException.java Tue May 21 17:30:13 2013 -0700 +++ b/webview/src/netscape/javascript/JSException.java Tue May 21 23:05:09 2013 -0700 @@ -54,6 +54,18 @@ this(s, null, -1, null, -1); } + public JSException(String message, Throwable cause) { + super(message, cause); + } + + public static JSException make(Object value) { + String msg = value == null ? null : value.toString(); + if (value instanceof Throwable) + return new JSException(msg, (Throwable) value); + else + return new JSException(msg); + } + /** *

Construct a JSException object. This constructor is