| Index: android_webview/native/aw_contents_client_bridge.cc
|
| diff --git a/android_webview/native/aw_contents_client_bridge.cc b/android_webview/native/aw_contents_client_bridge.cc
|
| index 1a6e11b9143b8216cfd1255cfec38b260ead99fb..c428f2421855da288ff88fe0b88b98e6f908308b 100644
|
| --- a/android_webview/native/aw_contents_client_bridge.cc
|
| +++ b/android_webview/native/aw_contents_client_bridge.cc
|
| @@ -31,6 +31,7 @@ using base::android::AttachCurrentThread;
|
| using base::android::ConvertJavaStringToUTF16;
|
| using base::android::ConvertUTF8ToJavaString;
|
| using base::android::ConvertUTF16ToJavaString;
|
| +using base::android::HasException;
|
| using base::android::JavaRef;
|
| using base::android::ScopedJavaLocalRef;
|
| using content::BrowserThread;
|
| @@ -346,8 +347,17 @@ bool AwContentsClientBridge::ShouldOverrideUrlLoading(const base::string16& url,
|
| ScopedJavaLocalRef<jstring> jurl = ConvertUTF16ToJavaString(env, url);
|
| devtools_instrumentation::ScopedEmbedderCallbackTask(
|
| "shouldOverrideUrlLoading");
|
| - return Java_AwContentsClientBridge_shouldOverrideUrlLoading(
|
| + bool did_override = Java_AwContentsClientBridge_shouldOverrideUrlLoading(
|
| env, obj, jurl, has_user_gesture, is_redirect, is_main_frame);
|
| + if (HasException(env)) {
|
| + // Tell the chromium message loop to not perform any tasks after the current
|
| + // one - we want to make sure we return to Java cleanly without first making
|
| + // any new JNI calls.
|
| + static_cast<base::MessageLoopForUI*>(base::MessageLoop::current())->Abort();
|
| + // If we crashed we don't want to continue the navigation.
|
| + return true;
|
| + }
|
| + return did_override;
|
| }
|
|
|
| void AwContentsClientBridge::ConfirmJsResult(JNIEnv* env,
|
|
|