From: <mgu...@us...> - 2008-06-23 14:30:08
|
Revision: 3122 http://htmlunit.svn.sourceforge.net/htmlunit/?rev=3122&view=rev Author: mguillem Date: 2008-06-23 07:29:20 -0700 (Mon, 23 Jun 2008) Log Message: ----------- fixed possible infinite loop with javascript url of a frame that returns undefined Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/HTMLIFrameElementTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2008-06-22 13:11:21 UTC (rev 3121) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2008-06-23 14:29:20 UTC (rev 3122) @@ -53,7 +53,6 @@ import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.mozilla.javascript.Undefined; import com.gargoylesoftware.htmlunit.html.FrameWindow; import com.gargoylesoftware.htmlunit.html.HTMLParser; @@ -1436,11 +1435,12 @@ } page = (HtmlPage) currentPage; } + final ScriptResult scriptResult = page.executeJavaScriptIfPossible( url.toExternalForm(), "JavaScript URL", 1); - if (scriptResult.getJavaScriptResult() instanceof Undefined) { + if (ScriptResult.isUndefined(scriptResult)) { // no new webresponse to produce - return page.getWebResponse(); + return webWindow.getEnclosedPage().getWebResponse(); } else { final String contentString = scriptResult.getJavaScriptResult().toString(); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/HTMLIFrameElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/HTMLIFrameElementTest.java 2008-06-22 13:11:21 UTC (rev 3121) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/HTMLIFrameElementTest.java 2008-06-23 14:29:20 UTC (rev 3122) @@ -334,4 +334,28 @@ assertEquals(URL_THIRD.toExternalForm(), iframe.getSrcAttribute()); assertEquals("Third", ((HtmlPage) iframe.getEnclosedPage()).getTitleText()); } + + /** + * @throws Exception if the test fails + */ + @Test + public void testSetSrc_javascriptUrl() throws Exception { + final String content + = "<html><head><title>First</title></head><script>\n" + + " function test() {\n" + + " document.getElementById('iframe1').src = 'javascript:void(0)';\n" + + " alert(window.frames[0].location);\n" + + " }\n" + + "</script>\n" + + "<body onload='test()'>\n" + + "<iframe id='iframe1'></iframe>\n" + + "</body></html>"; + + final String[] expectedAlerts = {"about:blank"}; + createTestPageForRealBrowserIfNeeded(content, expectedAlerts); + + final List<String> collectedAlerts = new ArrayList<String>(); + loadPage(content, collectedAlerts); + assertEquals(expectedAlerts, collectedAlerts); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |