From: <rb...@us...> - 2013-12-01 21:01:05
|
Revision: 8814 http://sourceforge.net/p/htmlunit/code/8814 Author: rbri Date: 2013-12-01 21:00:59 +0000 (Sun, 01 Dec 2013) Log Message: ----------- use the same accept headers as browsers do Issue 1245 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserVersion2Test.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-12-01 18:03:15 UTC (rev 8813) +++ trunk/htmlunit/src/changes/changes.xml 2013-12-01 21:00:59 UTC (rev 8814) @@ -8,6 +8,9 @@ <body> <release version="2.14" date="???" description="Bugfixes"> + <action type="fix" dev="rbri" issue="1245"> + Use the same accept headers as browsers do. + </action> <action type="fix" dev="rbri" issue="1530"> Possible dead lock in CSSStyleDeclaration fixed. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java 2013-12-01 18:03:15 UTC (rev 8813) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java 2013-12-01 21:00:59 UTC (rev 8814) @@ -90,6 +90,7 @@ private String imgAcceptHeader_; private String cssAcceptHeader_; private String scriptAcceptHeader_; + private String xmlHttpRequestAcceptHeader_; /** * Application name for the Internet Explorer series of browsers. @@ -171,6 +172,7 @@ FIREFOX_17.setBrowserLanguage("en-US"); FIREFOX_17.buildId_ = "20130805152501"; FIREFOX_17.setHtmlAcceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + FIREFOX_17.setXmlHttpRequestAcceptHeader("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"); @@ -179,6 +181,7 @@ FIREFOX_24.setBrowserLanguage("en-US"); FIREFOX_24.buildId_ = "20131112155850"; FIREFOX_24.setHtmlAcceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + FIREFOX_24.setXmlHttpRequestAcceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); FIREFOX_24.setImgAcceptHeader("image/png,image/*;q=0.8,*/*;q=0.5"); FIREFOX_24.setCssAcceptHeader("text/css,*/*;q=0.1"); @@ -260,6 +263,7 @@ imgAcceptHeader_ = "*/*"; cssAcceptHeader_ = "*/*"; scriptAcceptHeader_ = "*/*"; + xmlHttpRequestAcceptHeader_ = "*/*"; if (features != null) { features_.addAll(Arrays.asList(features)); @@ -471,6 +475,15 @@ /** * Returns the value used by the browser for the accept header + * if performing an XMLHttpRequest. + * @return the accept header string + */ + public String getXmlHttpRequestAcceptHeader() { + return xmlHttpRequestAcceptHeader_; + } + + /** + * Returns the value used by the browser for the accept header * if requesting an image. * @return the accept header string */ @@ -600,6 +613,14 @@ } /** + * @param xmlHttpRequestAcceptHeader the accept header to be used when + * performing XMLHttpRequests + */ + public void setXmlHttpRequestAcceptHeader(final String xmlHttpRequestAcceptHeader) { + xmlHttpRequestAcceptHeader_ = xmlHttpRequestAcceptHeader; + } + + /** * @return the browserVersionNumeric */ public float getBrowserVersionNumeric() { @@ -685,6 +706,8 @@ clone.htmlAcceptHeader_ = getHtmlAcceptHeader(); clone.imgAcceptHeader_ = getImgAcceptHeader(); clone.cssAcceptHeader_ = getCssAcceptHeader(); + clone.scriptAcceptHeader_ = getScriptAcceptHeader(); + clone.xmlHttpRequestAcceptHeader_ = getXmlHttpRequestAcceptHeader(); for (final PluginConfiguration pluginConf : getPlugins()) { clone.getPlugins().add(pluginConf.clone()); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java 2013-12-01 18:03:15 UTC (rev 8813) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java 2013-12-01 21:00:59 UTC (rev 8814) @@ -492,7 +492,7 @@ throw Context.reportRuntimeError("Access to restricted URI denied"); } - final WebRequest request = new WebRequest(fullUrl); + final WebRequest request = new WebRequest(fullUrl, getBrowserVersion().getXmlHttpRequestAcceptHeader()); request.setCharset("UTF-8"); request.setAdditionalHeader("Referer", containingPage_.getUrl().toExternalForm()); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserVersion2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserVersion2Test.java 2013-12-01 18:03:15 UTC (rev 8813) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserVersion2Test.java 2013-12-01 21:00:59 UTC (rev 8814) @@ -259,6 +259,46 @@ assertEquals(getExpectedAlerts()[0], acceptHeaderString()); } + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + IE = "Accept: */*") + public void acceptHeaderXMLHttpRequest() throws Exception { + final String html = + "<html>\n" + + " <head>\n" + + " <title>XMLHttpRequest Test</title>\n" + + " <script>\n" + + " function test() {\n" + + " var request;\n" + + " if (window.XMLHttpRequest)\n" + + " request = new XMLHttpRequest();\n" + + " else if (window.ActiveXObject)\n" + + " request = new ActiveXObject('Microsoft.XMLHTTP');\n" + + " request.open('GET', '" + URL_SECOND + "', false);\n" + + " request.send('');\n" + + " }\n" + + " </script>\n" + + " </head>\n" + + " <body onload='test()'>\n" + + " </body>\n" + + "</html>"; + + final String xml = + "<xml>\n" + + "<content>blah</content>\n" + + "<content>blah2</content>\n" + + "</xml>"; + + getMockWebConnection().setDefaultResponse(xml); + loadPage2(html); + + assertEquals(2, getMockWebConnection().getRequestCount()); + assertEquals(getExpectedAlerts()[0], acceptHeaderString()); + } + private String acceptHeaderString() { final WebRequest lastRequest = getMockWebConnection().getLastWebRequest(); final Map<String, String> headers = lastRequest.getAdditionalHeaders(); |