diff options
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/content/Intent.java | 2 | ||||
| -rw-r--r-- | core/java/android/webkit/CallbackProxy.java | 35 | ||||
| -rw-r--r-- | core/java/android/webkit/WebChromeClient.java | 15 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewCore.java | 10 |
4 files changed, 61 insertions, 1 deletions
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 3ebf816..81f72ac 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -1940,7 +1940,7 @@ public class Intent implements Parcelable { /** * If set, this marks a point in the task's activity stack that should * be cleared when the task is reset. That is, the next time the task - * is broad to the foreground with + * is brought to the foreground with * {@link #FLAG_ACTIVITY_RESET_TASK_IF_NEEDED} (typically as a result of * the user re-launching it from home), this activity and all on top of * it will be finished so that the user does not return to them, but diff --git a/core/java/android/webkit/CallbackProxy.java b/core/java/android/webkit/CallbackProxy.java index 5f8acc8..17d3f94 100644 --- a/core/java/android/webkit/CallbackProxy.java +++ b/core/java/android/webkit/CallbackProxy.java @@ -98,6 +98,7 @@ class CallbackProxy extends Handler { private static final int SCALE_CHANGED = 123; private static final int RECEIVED_CERTIFICATE = 124; private static final int SWITCH_OUT_HISTORY = 125; + private static final int JS_TIMEOUT = 126; // Message triggered by the client to resume execution private static final int NOTIFY = 200; @@ -530,6 +531,18 @@ class CallbackProxy extends Handler { } break; + case JS_TIMEOUT: + if(mWebChromeClient != null) { + final JsResult res = (JsResult) msg.obj; + if(mWebChromeClient.onJsTimeout()) { + res.confirm(); + } else { + res.cancel(); + } + res.setReady(); + } + break; + case RECEIVED_CERTIFICATE: mWebView.setCertificate((SslCertificate) msg.obj); break; @@ -1022,4 +1035,26 @@ class CallbackProxy extends Handler { } return result.getResult(); } + + /** + * @hide pending API council approval + */ + public boolean onJsTimeout() { + //always interrupt timedout JS by default + if (mWebChromeClient == null) { + return true; + } + JsResult result = new JsResult(this, true); + Message timeout = obtainMessage(JS_TIMEOUT, result); + synchronized (this) { + sendMessage(timeout); + try { + wait(); + } catch (InterruptedException e) { + Log.e(LOGTAG, "Caught exception while waiting for jsUnload"); + Log.e(LOGTAG, Log.getStackTraceString(e)); + } + } + return result.getResult(); + } } diff --git a/core/java/android/webkit/WebChromeClient.java b/core/java/android/webkit/WebChromeClient.java index f940006..9d9763c 100644 --- a/core/java/android/webkit/WebChromeClient.java +++ b/core/java/android/webkit/WebChromeClient.java @@ -157,4 +157,19 @@ public class WebChromeClient { JsResult result) { return false; } + + /** + * Tell the client that a JavaScript execution timeout has occured. And the + * client may decide whether or not to interrupt the execution. If the + * client returns true, the JavaScript will be interrupted. If the client + * returns false, the execution will continue. Note that in the case of + * continuing execution, the timeout counter will be reset, and the callback + * will continue to occur if the script does not finish at the next check + * point. + * @return boolean Whether the JavaScript execution should be interrupted. + * @hide pending API Council approval + */ + public boolean onJsTimeout() { + return true; + } } diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 58d8ae7..e9df453 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -263,6 +263,16 @@ final class WebViewCore { return mCallbackProxy.onJsBeforeUnload(url, message); } + /** + * + * Callback to notify that a JavaScript execution timeout has occured. + * @return True if the JavaScript execution should be interrupted. False + * will continue the execution. + */ + protected boolean jsInterrupt() { + return mCallbackProxy.onJsTimeout(); + } + //------------------------------------------------------------------------- // JNI methods //------------------------------------------------------------------------- |
