From: <rb...@us...> - 2013-09-29 17:57:32
|
Revision: 8529 http://sourceforge.net/p/htmlunit/code/8529 Author: rbri Date: 2013-09-29 17:57:26 +0000 (Sun, 29 Sep 2013) Log Message: ----------- use the correct accept header (work in progress) Issue 1245 Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlImage.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleSheet.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserVersion2Test.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java 2013-09-29 11:48:27 UTC (rev 8528) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java 2013-09-29 17:57:26 UTC (rev 8529) @@ -84,6 +84,9 @@ private final Set<PluginConfiguration> plugins_ = new HashSet<PluginConfiguration>(); private final Set<BrowserVersionFeatures> features_ = EnumSet.noneOf(BrowserVersionFeatures.class); private final String nickname_; + private String htmlAcceptHeader_; + private String imgAcceptHeader_; + private String cssAcceptHeader_; /** * Application name for the Internet Explorer series of browsers. @@ -201,6 +204,18 @@ FIREFOX_10.initDefaultFeatures(); FIREFOX_17.initDefaultFeatures(); + FIREFOX_3_6.setHtmlAcceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + FIREFOX_3_6.setImgAcceptHeader("image/png,image/*;q=0.8,*/*;q=0.5"); + FIREFOX_3_6.setCssAcceptHeader("text/css,*/*;q=0.1"); + FIREFOX_10.setHtmlAcceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + FIREFOX_10.setImgAcceptHeader("image/png,image/*;q=0.8,*/*;q=0.5"); + FIREFOX_10.setCssAcceptHeader("text/css,*/*;q=0.1"); + FIREFOX_17.setHtmlAcceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + FIREFOX_17.setImgAcceptHeader("image/png,image/*;q=0.8,*/*;q=0.5"); + FIREFOX_17.setCssAcceptHeader("text/css,*/*;q=0.1"); + + INTERNET_EXPLORER_8.setHtmlAcceptHeader("image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, */*"); + final PluginConfiguration flash = new PluginConfiguration("Shockwave Flash", "Shockwave Flash 9.0 r31", "libflashplayer.so"); flash.getMimeTypes().add(new PluginConfiguration.MimeType("application/x-shockwave-flash", @@ -274,6 +289,10 @@ userAgent_ = userAgent; browserVersionNumeric_ = browserVersionNumeric; nickname_ = nickname; + htmlAcceptHeader_ = "*/*"; + imgAcceptHeader_ = "*/*"; + cssAcceptHeader_ = "*/*"; + if (features != null) { features_.addAll(Arrays.asList(features)); } @@ -465,6 +484,33 @@ } /** + * Returns the value used by the browser for the accept header + * if requesting a page. + * @return the accept header string + */ + public String getHtmlAcceptHeader() { + return htmlAcceptHeader_; + } + + /** + * Returns the value used by the browser for the accept header + * if requesting an image. + * @return the accept header string + */ + public String getImgAcceptHeader() { + return imgAcceptHeader_; + } + + /** + * Returns the value used by the browser for the accept header + * if requesting a css declaration. + * @return the accept header string + */ + public String getCssAcceptHeader() { + return cssAcceptHeader_; + } + + /** * @param applicationCodeName the applicationCodeName to set */ public void setApplicationCodeName(final String applicationCodeName) { @@ -549,6 +595,27 @@ } /** + * @param htmlAcceptHeader the accept header to be used when retrieving pages + */ + public void setHtmlAcceptHeader(final String htmlAcceptHeader) { + htmlAcceptHeader_ = htmlAcceptHeader; + } + + /** + * @param imgAcceptHeader the accept header to be used when retrieving images + */ + public void setImgAcceptHeader(final String imgAcceptHeader) { + imgAcceptHeader_ = imgAcceptHeader; + } + + /** + * @param cssAcceptHeader the accept header to be used when retrieving pages + */ + public void setCssAcceptHeader(final String cssAcceptHeader) { + cssAcceptHeader_ = cssAcceptHeader; + } + + /** * @return the browserVersionNumeric */ public float getBrowserVersionNumeric() { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2013-09-29 11:48:27 UTC (rev 8528) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2013-09-29 17:57:26 UTC (rev 8529) @@ -373,7 +373,8 @@ */ @SuppressWarnings("unchecked") public <P extends Page> P getPage(final URL url) throws IOException, FailingHttpStatusCodeException { - return (P) getPage(getCurrentWindow().getTopWindow(), new WebRequest(url)); + return (P) getPage(getCurrentWindow().getTopWindow(), + new WebRequest(url, getBrowserVersion().getHtmlAcceptHeader())); } /** @@ -781,7 +782,7 @@ final HtmlPage openerPage = (HtmlPage) opener.getEnclosedPage(); if (url != null) { try { - final WebRequest request = new WebRequest(url); + final WebRequest request = new WebRequest(url, getBrowserVersion().getHtmlAcceptHeader()); if (getBrowserVersion().hasFeature(DIALOGWINDOW_REFERER) && openerPage != null) { final String referer = openerPage.getUrl().toExternalForm(); @@ -910,7 +911,7 @@ fireWindowOpened(new WebWindowEvent(window, WebWindowEvent.OPEN, null, null)); final HtmlPage openerPage = (HtmlPage) opener.getEnclosedPage(); - final WebRequest request = new WebRequest(url); + final WebRequest request = new WebRequest(url, getBrowserVersion().getHtmlAcceptHeader()); if (getBrowserVersion().hasFeature(DIALOGWINDOW_REFERER) && openerPage != null) { final String referer = openerPage.getUrl().toExternalForm(); request.setAdditionalHeader("Referer", referer); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java 2013-09-29 11:48:27 UTC (rev 8528) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java 2013-09-29 17:57:26 UTC (rev 8529) @@ -66,14 +66,23 @@ /** * Instantiates a {@link WebRequest} for the specified URL. * @param url the target URL + * @param acceptHeader the accept header to use */ - public WebRequest(final URL url) { + public WebRequest(final URL url, final String acceptHeader) { setUrl(url); - setAdditionalHeader("Accept", "*/*"); + setAdditionalHeader("Accept", acceptHeader); setAdditionalHeader("Accept-Encoding", "gzip, deflate"); } /** + * Instantiates a {@link WebRequest} for the specified URL. + * @param url the target URL + */ + public WebRequest(final URL url) { + this(url, "*/*"); + } + + /** * Instantiates a {@link WebRequest} for the specified URL using the proxy configuration from the * specified original request. * @param originalRequest the original request Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlImage.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlImage.java 2013-09-29 11:48:27 UTC (rev 8528) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlImage.java 2013-09-29 17:57:26 UTC (rev 8529) @@ -391,7 +391,8 @@ final WebClient webclient = page.getWebClient(); final URL url = page.getFullyQualifiedUrl(getSrcAttribute()); - final WebRequest request = new WebRequest(url); + final String accept = getPage().getWebClient().getBrowserVersion().getImgAcceptHeader(); + final WebRequest request = new WebRequest(url, accept); request.setAdditionalHeader("Referer", page.getUrl().toExternalForm()); imageWebResponse_ = webclient.loadWebResponse(request); imageReader_ = null; Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleSheet.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleSheet.java 2013-09-29 11:48:27 UTC (rev 8528) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleSheet.java 2013-09-29 17:57:26 UTC (rev 8529) @@ -290,14 +290,16 @@ try { // Retrieve the associated content and respect client settings regarding failing HTTP status codes. final WebRequest request; + final String accept = page.getWebClient().getBrowserVersion().getCssAcceptHeader(); final WebClient client = page.getWebClient(); if (link != null) { // Use link. request = link.getWebRequest(); + request.setAdditionalHeader("Accept", accept); } else { // Use href. - request = new WebRequest(new URL(url)); + request = new WebRequest(new URL(url), accept); final String referer = page.getUrl().toExternalForm(); request.setAdditionalHeader("Referer", referer); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserVersion2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserVersion2Test.java 2013-09-29 11:48:27 UTC (rev 8528) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserVersion2Test.java 2013-09-29 17:57:26 UTC (rev 8529) @@ -20,10 +20,10 @@ import org.junit.Test; import org.junit.runner.RunWith; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; -import com.gargoylesoftware.htmlunit.BrowserRunner.Browser; -import com.gargoylesoftware.htmlunit.BrowserRunner.NotYetImplemented; /** * Unit tests for {@link BrowserVersion}. @@ -42,7 +42,6 @@ @Test @Alerts(DEFAULT = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", IE = "Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, */*") - @NotYetImplemented public void acceptHeaderGetUrl() throws Exception { final String html = "<html><body>Response</body></html>"; loadPage2(html, getDefaultUrl()); @@ -54,10 +53,30 @@ * @throws Exception if an error occurs */ @Test + @Alerts(DEFAULT = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + IE = "Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, */*") + public void acceptHeaderWindowOpen() throws Exception { + String html = "<html><body>Response</body></html>"; + getMockWebConnection().setDefaultResponse(html); + + html = "<html><head><title>First</title></head>\n" + + "<body>\n" + + " <a id='clickme' href='javascript: window.open(\"" + URL_SECOND + "\")'>Click me</a>\n" + + "</body></html>"; + final WebDriver driver = loadPage2(html, getDefaultUrl()); + driver.findElement(By.id("clickme")).click(); + + assertEquals(2, getMockWebConnection().getRequestCount()); + assertEquals(getExpectedAlerts()[0], acceptHeaderString()); + } + + /** + * @throws Exception if an error occurs + */ + @Test @Alerts(DEFAULT = "Accept: image/png,image/*;q=0.8,*/*;q=0.5", IE = "Accept: */*", CHROME = "Accept: image/webp,*/*;q=0.8") - @NotYetImplemented(Browser.FF) public void acceptHeaderImage() throws Exception { final String html = "<html><head>\n" @@ -82,7 +101,6 @@ @Test @Alerts(DEFAULT = "Accept: text/css,*/*;q=0.1", IE = "Accept: */*") - @NotYetImplemented(Browser.FF) public void acceptHeaderCss() throws Exception { final String html = "<html><head>\n" @@ -108,7 +126,6 @@ @Test @Alerts(DEFAULT = "Accept: text/css,*/*;q=0.1", IE = "Accept: */*") - @NotYetImplemented(Browser.FF) public void acceptHeaderCssWithoutType() throws Exception { final String html = "<html><head>\n" @@ -134,7 +151,6 @@ @Test @Alerts(DEFAULT = "Accept: text/css,*/*;q=0.1", IE = "Accept: */*") - @NotYetImplemented(Browser.FF) public void acceptHeaderCssDifferentType() throws Exception { final String html = "<html><head>\n" |