From: <mgu...@us...> - 2013-10-08 15:16:42
|
Revision: 8616 http://sourceforge.net/p/htmlunit/code/8616 Author: mguillem Date: 2013-10-08 15:16:37 +0000 (Tue, 08 Oct 2013) Log Message: ----------- Fixed wrong scripting scope assignment when handling attachments. Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/attachment/AttachmentTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-10-08 15:16:15 UTC (rev 8615) +++ trunk/htmlunit/src/changes/changes.xml 2013-10-08 15:16:37 UTC (rev 8616) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="fix" dev="mguillem"> + Fixed wrong scripting scope assignment when handling attachments. + </action> <action type="add" dev="asashour" issue="1499"> JavaScript: TextRange: add getBookmark() and moveToBookmark(). </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2013-10-08 15:16:15 UTC (rev 8615) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2013-10-08 15:16:37 UTC (rev 8616) @@ -796,11 +796,6 @@ } else { initializeEmptyWindow(window); - if (openerPage != null) { - final Window jsWindow = (Window) window.getScriptObject(); - jsWindow.setDomNode(openerPage); - jsWindow.getDocument().setDomNode(openerPage); - } } return window; } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/attachment/AttachmentTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/attachment/AttachmentTest.java 2013-10-08 15:16:15 UTC (rev 8615) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/attachment/AttachmentTest.java 2013-10-08 15:16:37 UTC (rev 8616) @@ -31,6 +31,7 @@ import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.WebResponse; import com.gargoylesoftware.htmlunit.html.HtmlAnchor; +import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.util.NameValuePair; @@ -133,4 +134,37 @@ attachments.clear(); } + /** + * This was causing a ClassCastException in Location.setHref as of 2013-10-08 because the TextPage + * used for the attachment was wrongly associated to the HTMLDocument of the first page. + * @throws Exception if an error occurs + */ + @Test + public void jsChangeLocationAfterReceptionOfAttachment() throws Exception { + final String html = "<html><body>\n" + + "<form action='action'>\n" + + "<input type='submit' onclick='window.location=\"foo\"; return false'>\n" + + "</form>\n" + + "<a href='" + URL_SECOND + "'>download</a>\n" + + "</body></html>"; + + final WebClient client = getWebClient(); + final List<Attachment> attachments = new ArrayList<Attachment>(); + client.setAttachmentHandler(new CollectingAttachmentHandler(attachments)); + + final List<NameValuePair> headers = new ArrayList<NameValuePair>(); + headers.add(new NameValuePair("Content-Disposition", "attachment")); + + final MockWebConnection conn = getMockWebConnection(); + conn.setDefaultResponse(""); + conn.setResponse(URL_SECOND, "some text", 200, "OK", "text/plain", headers); + + final HtmlPage page = loadPage(html); + // download text attachment + page.getAnchors().get(0).click(); + assertEquals(1, attachments.size()); + + final HtmlElement htmlElement = (HtmlElement) page.getFirstByXPath("//input"); + htmlElement.click(); // exception was occurring here + } } |