8016675: Make Javadoc pages more robust
Reviewed-by: jlaskey, ksrini
This commit is contained in:
parent
c1ca4a663a
commit
dd0661e5ad
@ -290,7 +290,7 @@ public class HtmlWriter {
|
|||||||
script.addAttr(HtmlAttr.TYPE, "text/javascript");
|
script.addAttr(HtmlAttr.TYPE, "text/javascript");
|
||||||
String scriptCode = "<!--" + DocletConstants.NL +
|
String scriptCode = "<!--" + DocletConstants.NL +
|
||||||
" if (location.href.indexOf('is-external=true') == -1) {" + DocletConstants.NL +
|
" if (location.href.indexOf('is-external=true') == -1) {" + DocletConstants.NL +
|
||||||
" parent.document.title=\"" + winTitle + "\";" + DocletConstants.NL +
|
" parent.document.title=\"" + escapeJavaScriptChars(winTitle) + "\";" + DocletConstants.NL +
|
||||||
" }" + DocletConstants.NL +
|
" }" + DocletConstants.NL +
|
||||||
"//-->" + DocletConstants.NL;
|
"//-->" + DocletConstants.NL;
|
||||||
RawHtml scriptContent = new RawHtml(scriptCode);
|
RawHtml scriptContent = new RawHtml(scriptCode);
|
||||||
@ -299,6 +299,53 @@ public class HtmlWriter {
|
|||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a String with escaped special JavaScript characters.
|
||||||
|
*
|
||||||
|
* @param s String that needs to be escaped
|
||||||
|
* @return a valid escaped JavaScript string
|
||||||
|
*/
|
||||||
|
private static String escapeJavaScriptChars(String s) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (int i = 0; i < s.length(); i++) {
|
||||||
|
char ch = s.charAt(i);
|
||||||
|
switch (ch) {
|
||||||
|
case '\b':
|
||||||
|
sb.append("\\b");
|
||||||
|
break;
|
||||||
|
case '\t':
|
||||||
|
sb.append("\\t");
|
||||||
|
break;
|
||||||
|
case '\n':
|
||||||
|
sb.append("\\n");
|
||||||
|
break;
|
||||||
|
case '\f':
|
||||||
|
sb.append("\\f");
|
||||||
|
break;
|
||||||
|
case '\r':
|
||||||
|
sb.append("\\r");
|
||||||
|
break;
|
||||||
|
case '"':
|
||||||
|
sb.append("\\\"");
|
||||||
|
break;
|
||||||
|
case '\'':
|
||||||
|
sb.append("\\\'");
|
||||||
|
break;
|
||||||
|
case '\\':
|
||||||
|
sb.append("\\\\");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (ch < 32 || ch >= 127) {
|
||||||
|
sb.append(String.format("\\u%04X", (int)ch));
|
||||||
|
} else {
|
||||||
|
sb.append(ch);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a content tree for the SCRIPT tag for the main page(index.html).
|
* Returns a content tree for the SCRIPT tag for the main page(index.html).
|
||||||
*
|
*
|
||||||
|
@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 8016675
|
||||||
|
* @summary Test for window title.
|
||||||
|
* @author Bhavesh Patel
|
||||||
|
* @library ../lib/
|
||||||
|
* @build JavadocTester TestWindowTitle
|
||||||
|
* @run main TestWindowTitle
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class TestWindowTitle extends JavadocTester {
|
||||||
|
|
||||||
|
private static final String BUG_ID = "8016675";
|
||||||
|
private static final String WIN_TITLE =
|
||||||
|
"Testing \"Window 'Title'\" with a \\ backslash and a / " +
|
||||||
|
"forward slash and a \u00e8 unicode char also a tab and also a " +
|
||||||
|
"\t special character another \u0002 unicode)";
|
||||||
|
private static final String[][] TEST = {
|
||||||
|
{BUG_ID + FS + "overview-summary.html",
|
||||||
|
"parent.document.title=\"Overview (Testing \\\"Window \\\'Title\\\'\\\" " +
|
||||||
|
"with a \\\\ backslash and a / forward slash and a \\u00E8 unicode char " +
|
||||||
|
"also a tab and also a \\t special character another \\u0002 unicode))\";"
|
||||||
|
},
|
||||||
|
};
|
||||||
|
private static final String[][] NEG_TEST = {
|
||||||
|
{BUG_ID + FS + "overview-summary.html",
|
||||||
|
"parent.document.title=\"Overview (Testing \"Window \'Title\'\" " +
|
||||||
|
"with a \\ backslash and a / forward slash and a \u00E8 unicode char " +
|
||||||
|
"also a tab and also a \t special character another \u0002 unicode))\";"
|
||||||
|
},
|
||||||
|
};
|
||||||
|
private static final String[] ARGS = new String[]{
|
||||||
|
"-d", BUG_ID, "-windowtitle", WIN_TITLE, "-sourcepath", SRC_DIR, "p1", "p2"
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The entry point of the test.
|
||||||
|
* @param args the array of command line arguments.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
TestWindowTitle tester = new TestWindowTitle();
|
||||||
|
run(tester, ARGS, TEST, NEG_TEST);
|
||||||
|
tester.printSummary();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public String getBugId() {
|
||||||
|
return BUG_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public String getBugName() {
|
||||||
|
return getClass().getName();
|
||||||
|
}
|
||||||
|
}
|
27
langtools/test/com/sun/javadoc/testWindowTitle/p1/C1.java
Normal file
27
langtools/test/com/sun/javadoc/testWindowTitle/p1/C1.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package p1;
|
||||||
|
|
||||||
|
public class C1 {
|
||||||
|
}
|
27
langtools/test/com/sun/javadoc/testWindowTitle/p2/C2.java
Normal file
27
langtools/test/com/sun/javadoc/testWindowTitle/p2/C2.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package p2;
|
||||||
|
|
||||||
|
public class C2 {
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user