Merge change 1299 into donut
* changes: Added Java callback for JavaScript execution timeout.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user