Inline javascript:'' within NamedFrame's internal SafeHtmlTemplate
This prevents the URI from being sanitized by the SafeHtmlTemplates
generator. This is a regression from GWT 2.4, introduced at r10801.
Fixes issue 7909
Change-Id: Ic96c36b3f98705fff8a7638c8975901c50856951
Review-Link: https://gwt-review.googlesource.com/#/c/1800/
Review by: goktug@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@11473 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/NamedFrame.java b/user/src/com/google/gwt/user/client/ui/NamedFrame.java
index 9fe635b..fb65033 100644
--- a/user/src/com/google/gwt/user/client/ui/NamedFrame.java
+++ b/user/src/com/google/gwt/user/client/ui/NamedFrame.java
@@ -38,8 +38,10 @@
interface IFrameTemplate extends SafeHtmlTemplates {
static final IFrameTemplate INSTANCE = GWT.create(IFrameTemplate.class);
- @Template("<iframe src='{0}' name='{1}'>")
- SafeHtml get(String src, String name);
+ // Setting a src prevents mixed-content warnings.
+ // http://weblogs.asp.net/bleroy/archive/2005/08/09/how-to-put-a-div-over-a-select-in-ie.aspx
+ @Template("<iframe src=\"javascript:''\" name='{0}'>")
+ SafeHtml get(String name);
}
// Used inside JSNI, so please don't delete this field just because
@@ -53,9 +55,8 @@
}
/**
- * Creates an HTML IFRAME element with a src and name.
+ * Creates an HTML IFRAME element with a name.
*
- * @param src the src of the frame
* @param name the name of the frame, which must contain at least one
* non-whitespace character and must not contain reserved HTML markup
* characters such as '<code><</code>', '<code>></code>',
@@ -63,7 +64,7 @@
* @return the newly-created element
* @throws IllegalArgumentException if the supplied name is not allowed
*/
- private static IFrameElement createIFrame(String src, String name) {
+ private static IFrameElement createIFrame(String name) {
if (name == null || !isValidName(name.trim())) {
throw new IllegalArgumentException(
"expecting one or more non-whitespace chars with no '<', '>', or '&'");
@@ -72,7 +73,7 @@
// Use innerHTML to implicitly create the <iframe>. This is necessary
// because most browsers will not respect a dynamically-set iframe name.
Element div = DOM.createDiv();
- div.setInnerSafeHtml(IFrameTemplate.INSTANCE.get(src, name));
+ div.setInnerSafeHtml(IFrameTemplate.INSTANCE.get(name));
return div.getFirstChild().cast();
}
@@ -101,9 +102,7 @@
*/
@UiConstructor
public NamedFrame(String name) {
- // Setting a src prevents mixed-content warnings.
- // http://weblogs.asp.net/bleroy/archive/2005/08/09/how-to-put-a-div-over-a-select-in-ie.aspx
- super(createIFrame("javascript:''", name));
+ super(createIFrame(name));
setStyleName(DEFAULT_STYLENAME);
}
diff --git a/user/test/com/google/gwt/user/client/ui/NamedFrameTest.java b/user/test/com/google/gwt/user/client/ui/NamedFrameTest.java
index d25665c..ff54a362 100644
--- a/user/test/com/google/gwt/user/client/ui/NamedFrameTest.java
+++ b/user/test/com/google/gwt/user/client/ui/NamedFrameTest.java
@@ -76,4 +76,8 @@
// Success
}
}
+
+ public void testDefaultSrc() {
+ assertEquals("javascript:''", new NamedFrame("defaultSrc").getUrl());
+ }
}