From: <rb...@us...> - 2013-08-29 19:59:33
|
Revision: 8459 http://sourceforge.net/p/htmlunit/code/8459 Author: rbri Date: 2013-08-29 19:59:29 +0000 (Thu, 29 Aug 2013) Log Message: ----------- correct processing of the target when for anchors with hash-only href Issue 1537 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/html/HtmlAnchor2Test.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchorTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-08-28 09:19:01 UTC (rev 8458) +++ trunk/htmlunit/src/changes/changes.xml 2013-08-29 19:59:29 UTC (rev 8459) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="add" dev="rbri" issue="1537"> + Correct processing of the target when for anchors with hash-only href. + </action> <action type="add" dev="rbri"> JavaScript: support for the 'type' and 'media' property of style elements added. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2013-08-28 09:19:01 UTC (rev 8458) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2013-08-29 19:59:29 UTC (rev 8459) @@ -1962,7 +1962,7 @@ final LoadJob loadJob; if (justHashJump) { - loadJob = new LoadJob(request, win, target, url); + loadJob = new LoadJob(request, requestingWindow, target, url); } else { try { @@ -2006,25 +2006,24 @@ LOG.info("No usage of download: " + downloadedResponse); continue; } - if (downloadedResponse.urlWithOnlyHashChange_ != null) { - final WebWindow window = downloadedResponse.requestingWindow_; - final HtmlPage page = (HtmlPage) window.getEnclosedPage(); - page.getWebResponse().getWebRequest().setUrl(downloadedResponse.urlWithOnlyHashChange_); - window.getHistory().addPage(page); + final WebWindow window = resolveWindow(downloadedResponse.requestingWindow_, + downloadedResponse.target_); + if (!updatedWindows.contains(window)) { + final WebWindow win = openTargetWindow(downloadedResponse.requestingWindow_, + downloadedResponse.target_, "_self"); + if (downloadedResponse.urlWithOnlyHashChange_ != null) { + final HtmlPage page = (HtmlPage) downloadedResponse.requestingWindow_.getEnclosedPage(); + page.getWebResponse().getWebRequest().setUrl(downloadedResponse.urlWithOnlyHashChange_); + win.getHistory().addPage(page); - // update location.hash - final Window jsWindow = (Window) window.getScriptObject(); - if (null != jsWindow) { - final Location location = jsWindow.getLocation(); - location.setHash(downloadedResponse.urlWithOnlyHashChange_.getRef()); + // update location.hash + final Window jsWindow = (Window) win.getScriptObject(); + if (null != jsWindow) { + final Location location = jsWindow.getLocation(); + location.setHash(downloadedResponse.urlWithOnlyHashChange_.getRef()); + } } - } - else { - final WebWindow window = resolveWindow(downloadedResponse.requestingWindow_, - downloadedResponse.target_); - if (!updatedWindows.contains(window)) { - final WebWindow win = openTargetWindow(downloadedResponse.requestingWindow_, - downloadedResponse.target_, "_self"); + else { final Page pageBeforeLoad = win.getEnclosedPage(); loadWebResponseInto(downloadedResponse.response_, win); @@ -2040,10 +2039,10 @@ // check and report problems if needed throwFailingHttpStatusCodeExceptionIfNecessary(downloadedResponse.response_); } - else { - LOG.info("No usage of download: " + downloadedResponse); - } } + else { + LOG.info("No usage of download: " + downloadedResponse); + } } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchor2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchor2Test.java 2013-08-28 09:19:01 UTC (rev 8458) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchor2Test.java 2013-08-29 19:59:29 UTC (rev 8459) @@ -262,4 +262,23 @@ assertEquals(new URL(getDefaultUrl(), "page2.html").toString(), driver.getCurrentUrl()); } + /** + * @throws Exception if an error occurs + */ + @Test + public void clickBlankTargetHashOnly() throws Exception { + final String html = + "<html>\n" + + "<head><title>foo</title></head>\n" + + "<body>\n" + + "<a id='a' target='_blank' href='#'>Foo</a>\n" + + "</body></html>\n"; + + final WebDriver driver = loadPage2(html); + assertEquals(1, driver.getWindowHandles().size()); + + final WebElement tester = driver.findElement(By.id("a")); + tester.click(); + assertEquals(2, driver.getWindowHandles().size()); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchorTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchorTest.java 2013-08-28 09:19:01 UTC (rev 8458) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchorTest.java 2013-08-29 19:59:29 UTC (rev 8459) @@ -592,10 +592,19 @@ */ @Test public void testHashAnchor() throws Exception { - final String html = "<html><body><a id='a' href='#a'>a</a></body></html>"; + final String html = "<html><body>" + + "<a id='a' href='#a'>a</a>" + + "<a id='a_target' href='#target' target='_blank'>target</a>" + + "</body></html>"; HtmlPage page = loadPage(html); - page = page.getHtmlElementById("a").click(); + HtmlPage targetPage = page.getHtmlElementById("a").click(); assertEquals(new URL(getDefaultUrl(), "#a"), page.getUrl()); + assertEquals(page.getEnclosingWindow(), targetPage.getEnclosingWindow()); + + page = loadPage(html); + targetPage = page.getHtmlElementById("a_target").click(); + assertEquals(new URL(getDefaultUrl(), "#target"), targetPage.getUrl()); + assertFalse(page.getEnclosingWindow().equals(targetPage.getEnclosingWindow())); } /** |