Test WebView.addJavascriptInterface() with an oddly named property
Change-Id: I7d04eb452ba771726f87737553b30e8bdcab0c9a
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
index 84fe827..6bae428 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
@@ -541,7 +541,7 @@
method = "addJavascriptInterface",
args = {Object.class, String.class}
)
- public void testAddJavascriptInterfaceNull() throws Exception {
+ public void testAddJavascriptInterfaceNullObject() throws Exception {
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
String setTitleToPropertyTypeHtml = "<html><head></head>" +
@@ -572,6 +572,47 @@
assertEquals("object", mWebView.getTitle());
}
+ @TestTargets({
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ method = "addJavascriptInterface",
+ args = {Object.class, String.class}
+ ),
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ method = "removeJavascriptInterface",
+ args = {String.class}
+ )
+ })
+ public void testAddJavascriptInterfaceOddName() throws Exception {
+ WebSettings settings = mWebView.getSettings();
+ settings.setJavaScriptEnabled(true);
+ final DummyJavaScriptInterface obj = new DummyJavaScriptInterface();
+
+ // We should be able to use any character other than a single quote.
+ // TODO: We currently fail when the name contains '#', '\', '\n' or '\r'.
+ // See b/3279426
+ //String oddNames[] = {" x y ", "`!\"$%^&*()-=_+[]{};#:@~\\|,./<>?\n\r ", " ", "\n", ""};
+ String oddNames[] = {" x y ", "`!\"$%^&*()-=_+[]{};:@~|,./<>? ", " ", ""};
+ for (String name : oddNames) {
+ String setTitleToPropertyTypeHtml = "<html><head>" +
+ "<script>function updateTitle() { document.title = typeof window['" +
+ name +
+ "']; }</script>" +
+ "</head><body onload=\"updateTitle();\"></body></html>";
+
+ mWebView.addJavascriptInterface(obj, name);
+ mWebView.loadData(setTitleToPropertyTypeHtml, "text/html", "UTF-8");
+ waitForLoadComplete(mWebView, TEST_TIMEOUT);
+ assertEquals("object", mWebView.getTitle());
+
+ mWebView.removeJavascriptInterface(name);
+ mWebView.loadData(setTitleToPropertyTypeHtml, "text/html", "UTF-8");
+ waitForLoadComplete(mWebView, TEST_TIMEOUT);
+ assertEquals("undefined", mWebView.getTitle());
+ }
+ }
+
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "removeJavascriptInterface",