summaryrefslogtreecommitdiffstats
path: root/tests/DumpRenderTree2
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2010-09-17 12:49:45 +0100
committerSteve Block <steveblock@google.com>2010-09-17 13:21:51 +0100
commitf0c289e24cc2315f5570f5643456ad8191c1216b (patch)
tree22b05a0f85e82c8f11b57f72b1db571ef4b47363 /tests/DumpRenderTree2
parent8a6def02473ee4fbffcd1b34173daf751d316202 (diff)
downloadframeworks_base-f0c289e24cc2315f5570f5643456ad8191c1216b.zip
frameworks_base-f0c289e24cc2315f5570f5643456ad8191c1216b.tar.gz
frameworks_base-f0c289e24cc2315f5570f5643456ad8191c1216b.tar.bz2
Fix DumpRenderTree2 to correctly add JavaScript interfaces to new windows
When adding JavaScript interfaces to a WebView, they must be passed to the WebView constructor, rather than to WebView.addJavascriptInterface() if they are to be used immediately without the risk of race conditions. This fixes LayoutTest http/tests/appcache/crash-when-navigating-away-then-back.html This was fixed for DumpRenderTree in https://android-git.corp.google.com/g/23804 Change-Id: I1581d6d6cfc1b35be1ec2f2e5b5b944da2b4b935
Diffstat (limited to 'tests/DumpRenderTree2')
-rw-r--r--tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java23
1 files changed, 19 insertions, 4 deletions
diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java
index b9fc274..20687e5 100644
--- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java
+++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java
@@ -236,7 +236,7 @@ public class LayoutTestsExecutor extends Activity {
* We never display the new window, just create the view and allow it's content to
* execute and be recorded by the executor.
*/
- newWindowWebView = new WebView(LayoutTestsExecutor.this);
+ newWindowWebView = createWebViewWithJavascriptInterfaces();
setupWebView(newWindowWebView);
}
@@ -317,7 +317,7 @@ public class LayoutTestsExecutor extends Activity {
mCurrentResult = null;
mCurrentAdditionalTextOutput = null;
- mCurrentWebView = new WebView(this);
+ mCurrentWebView = createWebViewWithJavascriptInterfaces();
setupWebView(mCurrentWebView);
mEventSender.reset(mCurrentWebView);
@@ -329,11 +329,26 @@ public class LayoutTestsExecutor extends Activity {
}
}
+ private static class WebViewWithJavascriptInterfaces extends WebView {
+ public WebViewWithJavascriptInterfaces(
+ Context context, Map<String, Object> javascriptInterfaces) {
+ super(context,
+ null, // attribute set
+ 0, // default style resource ID
+ javascriptInterfaces,
+ false); // is private browsing
+ }
+ }
+ private WebView createWebViewWithJavascriptInterfaces() {
+ Map<String, Object> javascriptInterfaces = new HashMap<String, Object>();
+ javascriptInterfaces.put("layoutTestController", mLayoutTestController);
+ javascriptInterfaces.put("eventSender", mEventSender);
+ return new WebViewWithJavascriptInterfaces(this, javascriptInterfaces);
+ }
+
private void setupWebView(WebView webView) {
webView.setWebViewClient(mWebViewClient);
webView.setWebChromeClient(mWebChromeClient);
- webView.addJavascriptInterface(mLayoutTestController, "layoutTestController");
- webView.addJavascriptInterface(mEventSender, "eventSender");
/**
* Setting a touch interval of -1 effectively disables the optimisation in WebView