From: <rb...@us...> - 2018-06-27 18:36:04
|
Revision: 15392 http://sourceforge.net/p/htmlunit/code/15392 Author: rbri Date: 2018-06-27 18:35:57 +0000 (Wed, 27 Jun 2018) Log Message: ----------- ff60 support (wip) Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/Document.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocument.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocumentTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2018-06-27 18:04:10 UTC (rev 15391) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2018-06-27 18:35:57 UTC (rev 15392) @@ -345,6 +345,10 @@ @BrowserFeature(FF) HTMLDEFINITION_INLINE_IN_QUIRKS, + /** {@code document.applets} returns a NodeList. */ + @BrowserFeature(FF60) + HTMLDOCUMENT_APPLETS_NODELIST, + /** Is {@code document.charset} lower-case. */ @BrowserFeature(IE) HTMLDOCUMENT_CHARSET_LOWERCASE, @@ -366,6 +370,12 @@ HTMLDOCUMENT_GET_FOR_ID_AND_OR_NAME, /** + /** {@code document.getElementsByName} returns an empty list if called with the empty string. + */ + @BrowserFeature(FF60) + HTMLDOCUMENT_ELEMENTS_BY_NAME_EMPTY, + + /** * Calls to <code>document.XYZ</code> should first look at standard functions before looking at elements * named <code>XYZ</code>. */ Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/Document.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/Document.java 2018-06-27 18:04:10 UTC (rev 15391) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/Document.java 2018-06-27 18:35:57 UTC (rev 15392) @@ -20,6 +20,7 @@ import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.EVENT_TYPE_KEY_EVENTS; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.EVENT_TYPE_POINTEREVENT; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.EVENT_TYPE_PROGRESSEVENT; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLDOCUMENT_APPLETS_NODELIST; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLDOCUMENT_CHARSET_LOWERCASE; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_ANCHORS_REQUIRES_NAME_OR_ID; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOCUMENT_CREATE_ELEMENT_STRICT; @@ -34,8 +35,8 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.CHROME; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.EDGE; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF; +import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF52; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF60; -import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF52; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.IE; import static com.gargoylesoftware.htmlunit.util.StringUtils.parseHttpDate; @@ -880,6 +881,14 @@ */ @JsxGetter({CHROME, IE}) public Object getApplets() { + if (getBrowserVersion().hasFeature(HTMLDOCUMENT_APPLETS_NODELIST)) { + return new NodeList(getDomNodeOrDie(), false) { + @Override + protected boolean isMatching(final DomNode node) { + return node instanceof HtmlApplet; + } + }; + } return new HTMLCollection(getDomNodeOrDie(), false) { @Override protected boolean isMatching(final DomNode node) { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocument.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocument.java 2018-06-27 18:04:10 UTC (rev 15391) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocument.java 2018-06-27 18:35:57 UTC (rev 15392) @@ -15,6 +15,7 @@ package com.gargoylesoftware.htmlunit.javascript.host.html; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLDOCUMENT_COLOR; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLDOCUMENT_ELEMENTS_BY_NAME_EMPTY; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLDOCUMENT_FUNCTION_DETACHED; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLDOCUMENT_GET_ALSO_FRAMES; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLDOCUMENT_GET_FOR_ID_AND_OR_NAME; @@ -726,17 +727,17 @@ @JsxFunction(FF) public HTMLCollection getElementsByName(final String elementName) { implicitCloseIfNecessary(); - if ("null".equals(elementName)) { + if ("null".equals(elementName) + || (elementName.isEmpty() + && getBrowserVersion().hasFeature(HTMLDOCUMENT_ELEMENTS_BY_NAME_EMPTY))) { return HTMLCollection.emptyCollection(getWindow().getDomNodeOrDie()); } - // Null must me changed to '' for proper collection initialization. - final String expElementName = "null".equals(elementName) ? "" : elementName; final HtmlPage page = getPage(); return new HTMLCollection(page, true) { @Override protected List<DomNode> computeElements() { - return new ArrayList<>(page.getElementsByName(expElementName)); + return new ArrayList<>(page.getElementsByName(elementName)); } @Override Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement.java 2018-06-27 18:04:10 UTC (rev 15391) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement.java 2018-06-27 18:35:57 UTC (rev 15392) @@ -28,6 +28,7 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.EDGE; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF52; +import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF60; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.IE; import java.io.File; @@ -806,7 +807,7 @@ * Returns the labels associated with the element. * @return the labels associated with the element */ - @JsxGetter(CHROME) + @JsxGetter({CHROME, FF60}) public AbstractList getLabels() { if (labels_ == null) { labels_ = new LabelsHelper(getDomNodeOrDie()); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocumentTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocumentTest.java 2018-06-27 18:04:10 UTC (rev 15391) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocumentTest.java 2018-06-27 18:35:57 UTC (rev 15392) @@ -868,13 +868,14 @@ * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = {"2", "0"}, - FF60 = {"0", "0"}) + @Alerts(DEFAULT = {"2", "0", "0"}, + FF60 = {"0", "0", "0"}) public void getElementsByName_emptyName() throws Exception { final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html><head><title>foo</title><script>\n" + " function test() {\n" + " alert(document.getElementsByName('').length);\n" + + " alert(document.getElementsByName(' ').length);\n" + " alert(document.getElementsByName(null).length);\n" + " }\n" + "</script></head><body onload='test()'>\n" |