diff options
author | Steve Block <steveblock@google.com> | 2010-09-17 12:49:45 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-09-17 13:21:51 +0100 |
commit | f0c289e24cc2315f5570f5643456ad8191c1216b (patch) | |
tree | 22b05a0f85e82c8f11b57f72b1db571ef4b47363 /tests/DumpRenderTree2 | |
parent | 8a6def02473ee4fbffcd1b34173daf751d316202 (diff) | |
download | frameworks_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.java | 23 |
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 |