From 9d78fe90384fafa4e67553fec808d12cc98fcf09 Mon Sep 17 00:00:00 2001
From: Joerg Werner <4639399+jowerner@users.noreply.github.com>
Date: Tue, 1 Sep 2020 15:45:53 +0200
Subject: [PATCH 01/16] #49: Result browser not able to show the response for
requests with long names
---
.../java/com/xceptance/xlt/engine/resultbrowser/DumpMgr.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/xceptance/xlt/engine/resultbrowser/DumpMgr.java b/src/main/java/com/xceptance/xlt/engine/resultbrowser/DumpMgr.java
index f2d17a821..c42adc988 100644
--- a/src/main/java/com/xceptance/xlt/engine/resultbrowser/DumpMgr.java
+++ b/src/main/java/com/xceptance/xlt/engine/resultbrowser/DumpMgr.java
@@ -86,9 +86,9 @@ class DumpMgr
"
%s - XLT Result Browser";
/**
- * maximum length if file name
+ * Maximum length of a file name.
*/
- private static final int FILENAME_LENGTH_LIMIT = 240;
+ private static final int FILENAME_LENGTH_LIMIT = 80;
/**
* Cache directory.
From 658b337bbf699e78694545e9f88cee7aaee707b6 Mon Sep 17 00:00:00 2001
From: Joerg Werner <4639399+jowerner@users.noreply.github.com>
Date: Tue, 1 Sep 2020 16:14:18 +0200
Subject: [PATCH 02/16] #52: Overwriting User-Agent for single requests not
possible if request id is appended
---
.../com/xceptance/xlt/engine/XltHttpWebConnection.java | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/main/java/com/xceptance/xlt/engine/XltHttpWebConnection.java b/src/main/java/com/xceptance/xlt/engine/XltHttpWebConnection.java
index 29bb456dc..1ca6d04f1 100644
--- a/src/main/java/com/xceptance/xlt/engine/XltHttpWebConnection.java
+++ b/src/main/java/com/xceptance/xlt/engine/XltHttpWebConnection.java
@@ -264,7 +264,14 @@ protected WebResponse getResponse(final WebRequest webRequest, final String last
if (requestIdAppendToUserAgent)
{
- final String newUserAgent = webClient.getBrowserVersion().getUserAgent() + " " + requestId;
+ // first check if we have a custom user agent for this request before falling back to the default
+ String currentUserAgent = webRequest.getAdditionalHeader(HttpHeaders.USER_AGENT);
+ if (currentUserAgent == null)
+ {
+ currentUserAgent = webClient.getBrowserVersion().getUserAgent();
+ }
+
+ final String newUserAgent = currentUserAgent + " " + requestId;
webRequest.setAdditionalHeader(HttpHeaders.USER_AGENT, newUserAgent);
}
}
From d1b2bd470b45ce5e55c0f2760032549a4160e793 Mon Sep 17 00:00:00 2001
From: Joerg Werner <4639399+jowerner@users.noreply.github.com>
Date: Wed, 2 Sep 2020 12:08:29 +0200
Subject: [PATCH 03/16] #50: Invalid characters break XML transformation
---
.../xlt/report/XmlReportGenerator.java | 45 +++++++++++++++++--
1 file changed, 42 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/xceptance/xlt/report/XmlReportGenerator.java b/src/main/java/com/xceptance/xlt/report/XmlReportGenerator.java
index 9b2285219..5f66e71b5 100644
--- a/src/main/java/com/xceptance/xlt/report/XmlReportGenerator.java
+++ b/src/main/java/com/xceptance/xlt/report/XmlReportGenerator.java
@@ -19,29 +19,35 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
+import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import java.util.TimeZone;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.commons.text.StringEscapeUtils;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.basic.DateConverter;
+import com.thoughtworks.xstream.core.util.QuickWriter;
+import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
+import com.thoughtworks.xstream.io.naming.NameCoder;
import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.xceptance.xlt.api.report.ReportCreator;
import com.xceptance.xlt.common.XltConstants;
/**
* Load test report generator.
- *
+ *
* @author Jörg Werner (Xceptance Software Technologies GmbH)
*/
public class XmlReportGenerator
{
private static final Log LOG = LogFactory.getLog(XmlReportGenerator.class);
- private final List processors = new ArrayList();
+ private final List processors = new ArrayList<>();
public void createReport(final File xmlFile) throws IOException
{
@@ -92,7 +98,7 @@ private void saveTestReport(final TestReport testReport, final File xmlFile) thr
{
osw.write(XltConstants.XML_HEADER);
- final XStream xstream = new XStream(new DomDriver());
+ final XStream xstream = new XStream(new SanitizingDomDriver());
xstream.autodetectAnnotations(true);
xstream.registerConverter(new DateConverter(TimeZone.getDefault()));
xstream.aliasSystemAttribute(null, "class");
@@ -101,4 +107,37 @@ private void saveTestReport(final TestReport testReport, final File xmlFile) thr
xstream.toXML(testReport, osw);
}
}
+
+ /**
+ * A custom {@link DomDriver} that uses a {@link SanitizingWriter} to write an XML file.
+ */
+ private static class SanitizingDomDriver extends DomDriver
+ {
+ @Override
+ public HierarchicalStreamWriter createWriter(final Writer out)
+ {
+ return new SanitizingWriter(out, getNameCoder());
+ }
+ }
+
+ /**
+ * A custom {@link PrettyPrintWriter} that silently removes invalid XML 1.0 characters when writing text nodes.
+ */
+ private static class SanitizingWriter extends PrettyPrintWriter
+ {
+ public SanitizingWriter(final Writer writer, final NameCoder nameCoder)
+ {
+ super(writer, nameCoder);
+ }
+
+ @Override
+ protected void writeText(final QuickWriter writer, final String text)
+ {
+ // escape special chars and remove invalid chars
+ final String sanitizedText = StringEscapeUtils.escapeXml10(text);
+
+ // don't call super.writeText() as this would escape the already escaped chars once more
+ writer.write(sanitizedText);
+ }
+ }
}
From e48c6f4fc678e7e0b0e229e659dbe5a500975c18 Mon Sep 17 00:00:00 2001
From: Joerg Werner <4639399+jowerner@users.noreply.github.com>
Date: Wed, 2 Sep 2020 17:09:43 +0200
Subject: [PATCH 04/16] #53: Incorrect Protocol in Result Browser Listed
---
xlt-timerrecorder-chrome/src/background.js | 4 ++--
xlt-timerrecorder/background.js | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/xlt-timerrecorder-chrome/src/background.js b/xlt-timerrecorder-chrome/src/background.js
index 13eb71cb0..33bcdbae8 100644
--- a/xlt-timerrecorder-chrome/src/background.js
+++ b/xlt-timerrecorder-chrome/src/background.js
@@ -6,7 +6,7 @@ const CRLF = "\r\n";
const TimingData = {};
const TabRequestsMap = {};
-const reResponseStatus = /HTTP\/\d\.\d\s\d+\s(.*)/;
+const reResponseStatus = /HTTP\/\d(?:\.\d)?\s\d+\s(.*)/;
var webSocket = null;
const configuration = {
@@ -535,7 +535,7 @@ function getStatusText(statusLine) {
if (m !== null && m.length === 2) {
return m[1];
}
- return statusLine;
+ return null;
}
function getHeaderSize(headerArray) {
diff --git a/xlt-timerrecorder/background.js b/xlt-timerrecorder/background.js
index d48077f32..073235122 100644
--- a/xlt-timerrecorder/background.js
+++ b/xlt-timerrecorder/background.js
@@ -6,7 +6,7 @@ const CRLF = "\r\n";
const TimingData = {};
const TabRequestsMap = {};
-const reResponseStatus = /HTTP\/\d\.\d\s\d+\s(.*)/;
+const reResponseStatus = /HTTP\/\d(?:\.\d)?\s\d+\s(.*)/;
var webSocket = null;
const configuration = {
@@ -539,7 +539,7 @@ function getStatusText(statusLine) {
if (m !== null && m.length === 2) {
return m[1];
}
- return statusLine;
+ return null;
}
function getHeaderSize(headerArray) {
From d54c39e4e841a3dda6f3c3c7f2cedabf8d21c1bb Mon Sep 17 00:00:00 2001
From: Hartmut Arlt
Date: Wed, 2 Sep 2020 17:54:00 +0200
Subject: [PATCH 05/16] Issue #52: Overwriting User-Agent for single requests
not possible if request id is appended - added some tests for our request ID
feature
---
.../xlt/engine/XltHttpWebConnectionTest.java | 166 ++++++++++++++++++
1 file changed, 166 insertions(+)
create mode 100644 src/test/java/com/xceptance/xlt/engine/XltHttpWebConnectionTest.java
diff --git a/src/test/java/com/xceptance/xlt/engine/XltHttpWebConnectionTest.java b/src/test/java/com/xceptance/xlt/engine/XltHttpWebConnectionTest.java
new file mode 100644
index 000000000..10d54a042
--- /dev/null
+++ b/src/test/java/com/xceptance/xlt/engine/XltHttpWebConnectionTest.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2005-2020 Xceptance Software Technologies GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.xceptance.xlt.engine;
+
+import java.net.URL;
+
+import org.apache.commons.lang3.StringUtils;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+import com.gargoylesoftware.htmlunit.HttpHeader;
+import com.gargoylesoftware.htmlunit.MockWebConnection;
+import com.gargoylesoftware.htmlunit.WebConnection;
+import com.gargoylesoftware.htmlunit.WebRequest;
+import com.gargoylesoftware.htmlunit.WebResponse;
+import com.xceptance.xlt.api.util.XltProperties;
+import com.xceptance.xlt.util.XltPropertiesImpl;
+
+import util.lang.ClassFromByteArrayLoader;
+
+/**
+ * Tests the implementation of {@link XltHttpWebConnection}
+ */
+@RunWith(Parameterized.class)
+public class XltHttpWebConnectionTest
+{
+ @AfterClass
+ public static void afterClass()
+ {
+ // clean-up
+ XltPropertiesImpl.reset();
+ SessionImpl.removeCurrent();
+ }
+
+ /**
+ * Test setup. Primarily used for setting required properties and re-loading the web-connection class.
+ *
+ * @throws Throwable
+ */
+ @SuppressWarnings("unchecked")
+ @Before
+ public void setUp()
+ {
+ final XltProperties props = XltProperties.getInstance();
+ final String propPrefix = "com.xceptance.xlt.http.requestId.";
+
+ props.setProperty(propPrefix + "enabled", Boolean.toString(requestIdEnabled));
+
+ props.setProperty(propPrefix + "appendToUserAgent", Boolean.toString(requestIdAtUA));
+ props.setProperty(propPrefix + "headerName", requestIdHeaderName);
+
+ props.setProperty(propPrefix + "length", Integer.toString(requestIdLength));
+
+ webConnectionClazz = (Class) ClassFromByteArrayLoader.getFreshlyLoadedClass(XltHttpWebConnection.class);
+ }
+
+ private Class webConnectionClazz;
+
+ @Parameter(0)
+ public boolean requestIdEnabled;
+
+ @Parameter(1)
+ public boolean requestIdAtUA;
+
+ @Parameter(2)
+ public int requestIdLength;
+
+ @Parameter(3)
+ public String requestIdHeaderName;
+
+ @Parameters
+ public static Object[][] getData()
+ {
+ return new Object[][]
+ {
+ new Object[]
+ {
+ true, true, 15, "Foo"
+ }, new Object[]
+ {
+ false, true, 12, "X-Rid"
+ }, new Object[]
+ {
+ true, false, 4, "X-Rid"
+ }, new Object[]
+ {
+ false, false, 0, "X-Rid"
+ }
+ };
+ }
+
+ /**
+ * Tests request ID feature.
+ *
+ * @throws Throwable
+ * thrown on test failure
+ */
+ @Test
+ public void testRequestId() throws Throwable
+ {
+ final XltWebClient wc = new XltWebClient();
+ wc.setTimerName(getClass().getSimpleName());
+
+ final MockWebConnection mockWebConn = new MockWebConnection();
+ wc.setWebConnection(webConnectionClazz.getConstructor(XltWebClient.class, WebConnection.class).newInstance(wc, mockWebConn));
+
+ // return this response whenever no explicitly mapped URL is requested
+ mockWebConn.setDefaultResponse("No TitleNo Content", 200, "OK", "text/html");
+
+ final URL u = new URL("http://example.org");
+ final WebRequest req = new WebRequest(u);
+ final String userAgent = "My UserAgent";
+ req.setAdditionalHeader(HttpHeader.USER_AGENT, userAgent);
+ final WebResponse r = wc.loadWebResponse(req);
+ Assert.assertEquals(200, r.getStatusCode());
+
+ final String actualUA = r.getWebRequest().getAdditionalHeader(HttpHeader.USER_AGENT);
+ final String requestId = r.getWebRequest().getAdditionalHeader(requestIdHeaderName);
+
+ System.out.println(r.getWebRequest().getAdditionalHeaders());
+ System.out.println(XltProperties.getInstance().getProperties());
+
+ // this should always be true
+ Assert.assertTrue("Where has my UA gone?", actualUA.startsWith(userAgent));
+
+ if (Boolean.TRUE.equals(requestIdEnabled))
+ {
+ Assert.assertEquals("Unexpected length of request ID", requestIdLength, StringUtils.defaultString(requestId).length());
+ if (Boolean.TRUE.equals(requestIdAtUA))
+ {
+ Assert.assertNotEquals("UA is still the same", userAgent, actualUA);
+
+ Assert.assertEquals("Request IDs in User-Agent and appropriate request header do not match", requestId,
+ StringUtils.substringAfter(actualUA, userAgent).trim());
+ }
+ else
+ {
+ Assert.assertEquals(userAgent, actualUA);
+ }
+ }
+ else
+ {
+ Assert.assertNull("Request-Header '" + requestIdHeaderName + "' should not be set", requestId);
+ }
+
+ }
+}
From 411bd1911073fdf1cc511b4820fd2f81560f6757 Mon Sep 17 00:00:00 2001
From: Joerg Werner <4639399+jowerner@users.noreply.github.com>
Date: Thu, 3 Sep 2020 13:16:47 +0200
Subject: [PATCH 06/16] #53: Incorrect Protocol in Result Browser Listed -
fine-tuned regex
---
xlt-timerrecorder-chrome/src/background.js | 2 +-
xlt-timerrecorder/background.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/xlt-timerrecorder-chrome/src/background.js b/xlt-timerrecorder-chrome/src/background.js
index 33bcdbae8..331b26074 100644
--- a/xlt-timerrecorder-chrome/src/background.js
+++ b/xlt-timerrecorder-chrome/src/background.js
@@ -6,7 +6,7 @@ const CRLF = "\r\n";
const TimingData = {};
const TabRequestsMap = {};
-const reResponseStatus = /HTTP\/\d(?:\.\d)?\s\d+\s(.*)/;
+const reResponseStatus = /HTTP\/\d(?:\.\d)?\s+\d{3}\s+(.*)/;
var webSocket = null;
const configuration = {
diff --git a/xlt-timerrecorder/background.js b/xlt-timerrecorder/background.js
index 073235122..5f9539894 100644
--- a/xlt-timerrecorder/background.js
+++ b/xlt-timerrecorder/background.js
@@ -6,7 +6,7 @@ const CRLF = "\r\n";
const TimingData = {};
const TabRequestsMap = {};
-const reResponseStatus = /HTTP\/\d(?:\.\d)?\s\d+\s(.*)/;
+const reResponseStatus = /HTTP\/\d(?:\.\d)?\s+\d{3}\s+(.*)/;
var webSocket = null;
const configuration = {
From 258388a6a602478abd56edd3681c5b9358d99bd7 Mon Sep 17 00:00:00 2001
From: Joerg Werner <4639399+jowerner@users.noreply.github.com>
Date: Mon, 7 Sep 2020 15:44:41 +0200
Subject: [PATCH 07/16] #35: Upgrade to latest HtmlUnit - v2.43.0
---
pom.xml | 19 +-
.../config/default.properties | 3 +-
.../config/default.properties | 3 +-
.../config/default.properties | 3 +-
.../config/default.properties | 3 +-
.../testsuite-xlt/config/default.properties | 3 +-
.../htmlunit/AbstractPage.java | 2 +-
.../htmlunit/BrowserVersion.java | 197 +-
.../htmlunit/BrowserVersionFeatures.java | 439 +-
.../com/gargoylesoftware/htmlunit/Cache.java | 7 +-
.../htmlunit/CookieManager.java | 2 +-
.../htmlunit/DefaultPageCreator.java | 14 +-
.../htmlunit/DialogWindow.java | 2 +-
.../gargoylesoftware/htmlunit/HttpHeader.java | 6 +
.../htmlunit/HttpWebConnection.java | 32 +-
.../htmlunit/ProxyAutoConfig.java | 2 +-
.../gargoylesoftware/htmlunit/WebClient.java | 115 +-
.../htmlunit/WebClientInternals.java | 2 +-
.../htmlunit/WebClientOptions.java | 25 +-
.../gargoylesoftware/htmlunit/WebRequest.java | 6 +-
.../htmlunit/WebResponse.java | 23 +-
.../htmlunit/WebResponseData.java | 30 +-
.../htmlunit/WebWindowEvent.java | 18 +-
.../htmlunit/WebWindowImpl.java | 23 +-
.../msxml/MSXMLJavaScriptEnvironment.java | 40 +-
.../javascript/msxml/XMLDOMAttribute.java | 8 +-
.../javascript/msxml/XMLDOMDocument.java | 2 +-
.../javascript/msxml/XMLDOMElement.java | 2 +-
.../javascript/msxml/XMLSerializer.java | 2 +-
.../javascript/msxml/XSLProcessor.java | 2 +-
.../attachment/AttachmentHandler.java | 16 +
.../htmlunit/html/AbstractDomNodeList.java | 2 +-
.../htmlunit/html/BaseFrameElement.java | 8 +-
.../htmlunit/html/DefaultElementFactory.java | 2 +-
.../htmlunit/html/DoTypeProcessor.java | 2 +-
.../htmlunit/html/DomElement.java | 57 +-
.../htmlunit/html/DomNode.java | 26 +-
.../htmlunit/html/DomNodeIterator.java | 7 +-
.../htmlunit/html/FrameWindow.java | 20 +
.../htmlunit/html/HtmlApplet.java | 4 +-
.../htmlunit/html/HtmlArea.java | 2 +-
.../htmlunit/html/HtmlBody.java | 12 +
.../htmlunit/html/HtmlButton.java | 28 +-
.../htmlunit/html/HtmlElement.java | 36 +-
.../htmlunit/html/HtmlFileInput.java | 4 +-
.../htmlunit/html/HtmlForm.java | 30 +-
.../htmlunit/html/HtmlFrameSet.java | 5 +-
.../htmlunit/html/HtmlImage.java | 28 +-
.../htmlunit/html/HtmlImageInput.java | 6 -
.../htmlunit/html/HtmlLabel.java | 27 +-
.../htmlunit/html/HtmlLink.java | 25 +-
.../htmlunit/html/HtmlMap.java | 2 +-
.../htmlunit/html/HtmlObject.java | 4 +-
.../htmlunit/html/HtmlPage.java | 68 +-
.../htmlunit/html/HtmlTemplate.java | 22 +-
.../htmlunit/html/HtmlTextArea.java | 2 +-
.../html/applets/AppletContextImpl.java | 2 +-
.../htmlunit/html/parser/HTMLParser.java | 21 +-
.../parser/neko/HtmlUnitNekoDOMBuilder.java | 4 +-
.../parser/neko/HtmlUnitNekoHtmlParser.java | 38 +-
.../htmlunit/html/xpath/XPathAdapter.java | 30 +-
.../htmlunit/html/xpath/XPathHelper.java | 16 +-
.../HtmlUnitSSLConnectionSocketFactory.java | 2 +-
.../javascript/HtmlUnitContextFactory.java | 2 +-
.../javascript/HtmlUnitScriptable.java | 2 +-
.../htmlunit/javascript/JavaScriptEngine.java | 98 +-
.../htmlunit/javascript/NamedNodeMap.java | 3 +-
.../javascript/RecursiveFunctionObject.java | 16 +-
.../background/DefaultJavaScriptExecutor.java | 4 +-
.../background/DownloadBehaviorJob.java | 2 +-
.../background/JavaScriptJobManagerImpl.java | 53 +-
.../AbstractJavaScriptConfiguration.java | 92 +-
.../configuration/BrowserFeature.java | 4 +-
.../configuration/ClassConfiguration.java | 67 +-
.../JavaScriptConfiguration.java | 25 +-
.../javascript/configuration/JsxClass.java | 4 +-
.../javascript/configuration/JsxConstant.java | 4 +-
.../configuration/JsxConstructor.java | 4 +-
.../javascript/configuration/JsxFunction.java | 4 +-
.../javascript/configuration/JsxGetter.java | 4 +-
.../javascript/configuration/JsxSetter.java | 4 +-
.../configuration/JsxStaticFunction.java | 4 +-
.../configuration/JsxStaticGetter.java | 4 +-
.../javascript/configuration/JsxSymbol.java | 54 +
.../configuration/SupportedBrowser.java | 6 +-
.../javascript/host/ApplicationCache.java | 5 +-
.../host/AudioScheduledSourceNode.java | 3 +-
.../htmlunit/javascript/host/BarProp.java | 3 +-
.../javascript/host/BatteryManager.java | 3 +-
.../javascript/host/BroadcastChannel.java | 3 +-
.../htmlunit/javascript/host/Cache.java | 3 +-
.../javascript/host/CacheStorage.java | 3 +-
.../htmlunit/javascript/host/ClientRect.java | 5 +-
.../javascript/host/ClientRectList.java | 18 +-
.../htmlunit/javascript/host/Console.java | 11 +-
.../htmlunit/javascript/host/Element.java | 86 +-
.../htmlunit/javascript/host/FontFace.java | 3 +-
.../htmlunit/javascript/host/FontFaceSet.java | 3 +-
.../htmlunit/javascript/host/Gamepad.java | 3 +-
.../javascript/host/GamepadButton.java | 3 +-
.../htmlunit/javascript/host/History.java | 7 +-
.../htmlunit/javascript/host/ImageBitmap.java | 3 +-
.../javascript/host/InstallTrigger.java | 3 +-
.../htmlunit/javascript/host/Iterator.java | 99 -
.../htmlunit/javascript/host/Location.java | 3 +-
.../htmlunit/javascript/host/MessagePort.java | 3 +-
.../htmlunit/javascript/host/MimeType.java | 3 +-
.../javascript/host/MimeTypeArray.java | 3 +-
.../htmlunit/javascript/host/Navigator.java | 15 +-
.../javascript/host/Notification.java | 3 +-
.../javascript/host/PerformanceObserver.java | 3 +-
.../host/PerformanceObserverEntryList.java | 3 +-
.../javascript/host/PermissionStatus.java | 3 +-
.../htmlunit/javascript/host/Permissions.java | 3 +-
.../htmlunit/javascript/host/Plugin.java | 5 +-
.../htmlunit/javascript/host/PluginArray.java | 3 +-
.../htmlunit/javascript/host/Promise.java | 13 +-
.../htmlunit/javascript/host/Reflect.java | 3 +-
.../htmlunit/javascript/host/Screen.java | 23 +-
.../javascript/host/ScreenOrientation.java | 3 +-
.../javascript/host/SharedWorker.java | 3 +-
.../htmlunit/javascript/host/Storage.java | 3 +-
.../javascript/host/StorageManager.java | 3 +-
.../javascript/host/StringCustom.java | 27 -
.../htmlunit/javascript/host/TextDecoder.java | 6 +-
.../htmlunit/javascript/host/TextEncoder.java | 3 +-
.../htmlunit/javascript/host/URL.java | 3 +-
.../javascript/host/URLSearchParams.java | 128 +-
.../htmlunit/javascript/host/WebSocket.java | 23 +-
.../htmlunit/javascript/host/Window.java | 178 +-
.../host/WindowOrWorkerGlobalScopeMixin.java | 115 +
.../javascript/host/XPathExpression.java | 3 +-
.../javascript/host/animations/Animation.java | 3 +-
.../host/animations/AnimationEvent.java | 3 +-
.../javascript/host/arrays/Atomics.java | 3 +-
.../host/canvas/CanvasCaptureMediaStream.java | 3 +-
.../host/canvas/CanvasGradient.java | 3 +-
.../javascript/host/canvas/CanvasPattern.java | 3 +-
.../host/canvas/CanvasRenderingContext2D.java | 5 +-
.../canvas/ImageBitmapRenderingContext.java | 3 +-
.../javascript/host/canvas/ImageData.java | 3 +-
.../host/canvas/IntersectionObserver.java | 3 +-
.../canvas/IntersectionObserverEntry.java | 3 +-
.../javascript/host/canvas/Path2D.java | 3 +-
.../javascript/host/canvas/TextMetrics.java | 3 +-
.../host/canvas/WebGL2RenderingContext.java | 3 +-
.../host/canvas/WebGLActiveInfo.java | 3 +-
.../javascript/host/canvas/WebGLBuffer.java | 3 +-
.../host/canvas/WebGLFramebuffer.java | 3 +-
.../javascript/host/canvas/WebGLProgram.java | 3 +-
.../javascript/host/canvas/WebGLQuery.java | 3 +-
.../host/canvas/WebGLRenderbuffer.java | 3 +-
.../host/canvas/WebGLRenderingContext.java | 3 +-
.../javascript/host/canvas/WebGLSampler.java | 3 +-
.../javascript/host/canvas/WebGLShader.java | 3 +-
.../canvas/WebGLShaderPrecisionFormat.java | 3 +-
.../javascript/host/canvas/WebGLSync.java | 3 +-
.../javascript/host/canvas/WebGLTexture.java | 3 +-
.../host/canvas/WebGLTransformFeedback.java | 3 +-
.../host/canvas/WebGLUniformLocation.java | 3 +-
.../host/canvas/WebGLVertexArrayObject.java | 3 +-
.../canvas/rendering/AwtRenderingBackend.java | 35 +-
.../javascript/host/crypto/Crypto.java | 18 +-
.../javascript/host/crypto/CryptoKey.java | 3 +-
.../javascript/host/crypto/SubtleCrypto.java | 3 +-
.../host/css/BrowserConfiguration.java | 72 +-
.../htmlunit/javascript/host/css/CSS.java | 5 +-
.../javascript/host/css/CSS2Properties.java | 3 +-
.../javascript/host/css/CSSConditionRule.java | 5 +-
.../host/css/CSSCounterStyleRule.java | 5 +-
.../javascript/host/css/CSSFontFaceRule.java | 11 +-
.../javascript/host/css/CSSGroupingRule.java | 5 +-
.../javascript/host/css/CSSImportRule.java | 3 +-
.../javascript/host/css/CSSKeyframeRule.java | 3 +-
.../javascript/host/css/CSSKeyframesRule.java | 5 +-
.../javascript/host/css/CSSMediaRule.java | 3 +-
.../javascript/host/css/CSSNamespaceRule.java | 5 +-
.../javascript/host/css/CSSPageRule.java | 3 +-
.../host/css/CSSPrimitiveValue.java | 247 -
.../htmlunit/javascript/host/css/CSSRule.java | 11 +-
.../javascript/host/css/CSSRuleList.java | 3 +-
.../host/css/CSSStyleDeclaration.java | 112 +-
.../javascript/host/css/CSSStyleRule.java | 3 +-
.../javascript/host/css/CSSStyleSheet.java | 114 +-
.../javascript/host/css/CSSSupportsRule.java | 5 +-
.../javascript/host/css/CSSValue.java | 97 -
.../javascript/host/css/CSSValueList.java | 38 -
.../javascript/host/css/CaretPosition.java | 3 +-
.../host/css/ComputedCSSStyleDeclaration.java | 17 +-
.../javascript/host/css/MediaQueryList.java | 3 +-
.../javascript/host/css/StyleAttributes.java | 1389 +-
.../javascript/host/css/StyleSheet.java | 3 +-
.../javascript/host/css/StyleSheetList.java | 3 +-
.../javascript/host/css/WebKitCSSMatrix.java | 3 +-
.../javascript/host/dom/AbstractList.java | 184 +-
.../htmlunit/javascript/host/dom/Attr.java | 3 +-
.../javascript/host/dom/CDATASection.java | 3 +-
.../javascript/host/dom/CharacterData.java | 15 +-
.../htmlunit/javascript/host/dom/Comment.java | 3 +-
.../javascript/host/dom/DOMCursor.java | 38 -
.../javascript/host/dom/DOMError.java | 5 +-
.../javascript/host/dom/DOMException.java | 7 +-
.../host/dom/DOMImplementation.java | 65 +-
.../javascript/host/dom/DOMMatrix.java | 3 +-
.../host/dom/DOMMatrixReadOnly.java | 3 +-
.../javascript/host/dom/DOMParser.java | 59 +-
.../javascript/host/dom/DOMPoint.java | 3 +-
.../javascript/host/dom/DOMPointReadOnly.java | 3 +-
.../javascript/host/dom/DOMRectReadOnly.java | 3 +-
.../javascript/host/dom/DOMRequest.java | 3 +-
.../javascript/host/dom/DOMStringList.java | 3 +-
.../javascript/host/dom/DOMStringMap.java | 3 +-
.../javascript/host/dom/DOMTokenList.java | 5 +-
.../javascript/host/dom/Document.java | 132 +-
.../javascript/host/dom/DocumentFragment.java | 19 +-
.../javascript/host/dom/DocumentType.java | 11 +-
.../javascript/host/dom/IdleDeadline.java | 3 +-
.../javascript/host/dom/MediaList.java | 3 +-
.../javascript/host/dom/MutationRecord.java | 3 +-
.../htmlunit/javascript/host/dom/Node.java | 31 +-
.../javascript/host/dom/NodeFilter.java | 3 +-
.../javascript/host/dom/NodeIterator.java | 3 +-
.../javascript/host/dom/NodeList.java | 76 +-
.../host/dom/ProcessingInstruction.java | 3 +-
.../javascript/host/dom/RadioNodeList.java | 3 +-
.../htmlunit/javascript/host/dom/Range.java | 7 +-
.../javascript/host/dom/Selection.java | 9 +-
.../htmlunit/javascript/host/dom/Text.java | 3 +-
.../javascript/host/dom/TreeWalker.java | 3 +-
.../javascript/host/dom/XPathEvaluator.java | 3 +-
.../javascript/host/dom/XPathNSResolver.java | 3 +-
.../javascript/host/dom/XPathResult.java | 3 +-
.../host/event/AudioProcessingEvent.java | 3 +-
.../host/event/BeforeUnloadEvent.java | 3 +-
.../javascript/host/event/BlobEvent.java | 3 +-
.../javascript/host/event/ClipboardEvent.java | 3 +-
.../javascript/host/event/CloseEvent.java | 5 +-
.../host/event/CompositionEvent.java | 3 +-
.../javascript/host/event/CustomEvent.java | 3 +-
.../host/event/DeviceLightEvent.java | 37 -
.../host/event/DeviceMotionEvent.java | 3 +-
.../host/event/DeviceOrientationEvent.java | 3 +-
.../host/event/DeviceProximityEvent.java | 37 -
.../javascript/host/event/DragEvent.java | 3 +-
.../javascript/host/event/ErrorEvent.java | 3 +-
.../htmlunit/javascript/host/event/Event.java | 17 +-
.../javascript/host/event/EventSource.java | 3 +-
.../javascript/host/event/EventTarget.java | 28 +-
.../javascript/host/event/FocusEvent.java | 3 +-
.../javascript/host/event/GamepadEvent.java | 3 +-
.../host/event/HashChangeEvent.java | 11 +-
.../host/event/IDBVersionChangeEvent.java | 3 +-
.../javascript/host/event/InputEvent.java | 3 +-
.../javascript/host/event/KeyboardEvent.java | 377 +-
.../host/event/MediaEncryptedEvent.java | 3 +-
.../host/event/MediaKeyMessageEvent.java | 3 +-
.../host/event/MediaQueryListEvent.java | 3 +-
.../host/event/MediaStreamEvent.java | 3 +-
.../host/event/MediaStreamTrackEvent.java | 3 +-
.../javascript/host/event/MessageEvent.java | 5 +-
.../javascript/host/event/MouseEvent.java | 17 +-
.../host/event/MouseScrollEvent.java | 3 +-
.../javascript/host/event/MutationEvent.java | 3 +-
.../event/OfflineAudioCompletionEvent.java | 3 +-
.../host/event/PageTransitionEvent.java | 3 +-
.../javascript/host/event/PointerEvent.java | 3 +-
.../javascript/host/event/PopStateEvent.java | 3 +-
.../javascript/host/event/ProgressEvent.java | 3 +-
.../host/event/RTCDataChannelEvent.java | 3 +-
.../host/event/RTCPeerConnectionIceEvent.java | 3 +-
.../host/event/SpeechSynthesisEvent.java | 3 +-
.../javascript/host/event/StorageEvent.java | 3 +-
.../javascript/host/event/TimeEvent.java | 3 +-
.../javascript/host/event/TrackEvent.java | 3 +-
.../host/event/TransitionEvent.java | 3 +-
.../javascript/host/event/UIEvent.java | 9 +-
.../host/event/UserProximityEvent.java | 37 -
.../host/event/WebGLContextEvent.java | 3 +-
.../javascript/host/event/WheelEvent.java | 3 +-
.../javascript/host/fetch/Headers.java | 3 +-
.../javascript/host/fetch/Request.java | 3 +-
.../javascript/host/fetch/Response.java | 3 +-
.../host/file/DataTransferItem.java | 3 +-
.../host/file/DataTransferItemList.java | 3 +-
.../htmlunit/javascript/host/file/File.java | 232 +-
.../javascript/host/file/FileList.java | 3 +-
.../javascript/host/file/FileReader.java | 3 +-
.../javascript/host/file/FileSystem.java | 3 +-
.../host/file/FileSystemDirectoryEntry.java | 3 +-
.../host/file/FileSystemDirectoryReader.java | 3 +-
.../javascript/host/file/FileSystemEntry.java | 3 +-
.../host/file/FileSystemFileEntry.java | 3 +-
.../javascript/host/geo/Geolocation.java | 5 +-
.../javascript/host/html/DataTransfer.java | 3 +-
.../javascript/host/html/Enumerator.java | 6 +-
.../host/html/HTMLAllCollection.java | 14 +-
.../host/html/HTMLAnchorElement.java | 31 +-
.../javascript/host/html/HTMLAreaElement.java | 12 +-
.../host/html/HTMLAudioElement.java | 3 +-
.../host/html/HTMLBGSoundElement.java | 3 +-
.../javascript/host/html/HTMLBRElement.java | 3 +-
.../javascript/host/html/HTMLBaseElement.java | 3 +-
.../javascript/host/html/HTMLBodyElement.java | 9 +-
.../host/html/HTMLButtonElement.java | 29 +-
.../host/html/HTMLCanvasElement.java | 3 +-
.../javascript/host/html/HTMLCollection.java | 6 +-
.../host/html/HTMLDListElement.java | 3 +-
.../javascript/host/html/HTMLDataElement.java | 4 +-
.../host/html/HTMLDataListElement.java | 3 +-
.../host/html/HTMLDetailsElement.java | 3 +-
.../host/html/HTMLDirectoryElement.java | 3 +-
.../javascript/host/html/HTMLDivElement.java | 5 +-
.../javascript/host/html/HTMLDocument.java | 80 +-
.../javascript/host/html/HTMLElement.java | 125 +-
.../host/html/HTMLEmbedElement.java | 9 +-
.../host/html/HTMLFieldSetElement.java | 10 +-
.../javascript/host/html/HTMLFontElement.java | 3 +-
.../host/html/HTMLFormControlsCollection.java | 3 +-
.../javascript/host/html/HTMLFormElement.java | 51 +-
.../host/html/HTMLFrameElement.java | 19 +-
.../host/html/HTMLFrameSetElement.java | 13 +-
.../javascript/host/html/HTMLHRElement.java | 3 +-
.../javascript/host/html/HTMLHeadElement.java | 3 +-
.../host/html/HTMLHeadingElement.java | 3 +-
.../javascript/host/html/HTMLHtmlElement.java | 3 +-
.../host/html/HTMLIFrameElement.java | 19 +-
.../host/html/HTMLImageElement.java | 5 +-
.../host/html/HTMLInputElement.java | 18 +-
.../javascript/host/html/HTMLLIElement.java | 3 +-
.../host/html/HTMLLabelElement.java | 65 +-
.../host/html/HTMLLegendElement.java | 4 +-
.../javascript/host/html/HTMLLinkElement.java | 5 +-
.../javascript/host/html/HTMLMapElement.java | 5 +-
.../host/html/HTMLMediaElement.java | 3 +-
.../javascript/host/html/HTMLMenuElement.java | 11 +-
.../host/html/HTMLMenuItemElement.java | 3 +-
.../javascript/host/html/HTMLMetaElement.java | 5 +-
.../host/html/HTMLMeterElement.java | 8 +-
.../javascript/host/html/HTMLModElement.java | 3 +-
.../host/html/HTMLOListElement.java | 3 +-
.../host/html/HTMLObjectElement.java | 6 +-
.../host/html/HTMLOptGroupElement.java | 3 +-
.../host/html/HTMLOptionElement.java | 5 +-
.../host/html/HTMLOptionsCollection.java | 17 +-
.../host/html/HTMLOutputElement.java | 7 +-
.../host/html/HTMLParagraphElement.java | 3 +-
.../host/html/HTMLParamElement.java | 5 +-
.../host/html/HTMLPictureElement.java | 3 +-
.../javascript/host/html/HTMLPreElement.java | 7 +-
.../host/html/HTMLProgressElement.java | 6 +-
.../host/html/HTMLQuoteElement.java | 7 +-
.../host/html/HTMLScriptElement.java | 3 +-
.../host/html/HTMLSelectElement.java | 12 +-
.../host/html/HTMLSourceElement.java | 3 +-
.../javascript/host/html/HTMLSpanElement.java | 3 +-
.../host/html/HTMLStyleElement.java | 5 +-
.../host/html/HTMLTableCaptionElement.java | 3 +-
.../host/html/HTMLTableCellElement.java | 3 +-
.../host/html/HTMLTableColElement.java | 3 +-
.../host/html/HTMLTableElement.java | 3 +-
.../host/html/HTMLTableRowElement.java | 3 +-
.../host/html/HTMLTableSectionElement.java | 3 +-
.../host/html/HTMLTemplateElement.java | 10 +-
.../host/html/HTMLTextAreaElement.java | 18 +-
.../javascript/host/html/HTMLTimeElement.java | 3 +-
.../host/html/HTMLTitleElement.java | 3 +-
.../host/html/HTMLTrackElement.java | 3 +-
.../host/html/HTMLUListElement.java | 3 +-
.../host/html/HTMLUnknownElement.java | 3 +-
.../host/html/HTMLVideoElement.java | 3 +-
.../javascript/host/html/ValidityState.java | 3 +-
.../javascript/host/idb/IDBCursor.java | 3 +-
.../host/idb/IDBCursorWithValue.java | 3 +-
.../javascript/host/idb/IDBDatabase.java | 3 +-
.../javascript/host/idb/IDBFactory.java | 3 +-
.../javascript/host/idb/IDBIndex.java | 3 +-
.../javascript/host/idb/IDBKeyRange.java | 3 +-
.../javascript/host/idb/IDBMutableFile.java | 3 +-
.../javascript/host/idb/IDBObjectStore.java | 3 +-
.../javascript/host/idb/IDBOpenDBRequest.java | 3 +-
.../javascript/host/idb/IDBRequest.java | 3 +-
.../javascript/host/idb/IDBTransaction.java | 3 +-
.../javascript/host/intl/DateTimeFormat.java | 18 +-
.../javascript/host/media/AnalyserNode.java | 3 +-
.../javascript/host/media/AudioBuffer.java | 3 +-
.../host/media/AudioBufferSourceNode.java | 3 +-
.../javascript/host/media/AudioContext.java | 3 +-
.../host/media/AudioDestinationNode.java | 3 +-
.../javascript/host/media/AudioListener.java | 3 +-
.../javascript/host/media/AudioNode.java | 3 +-
.../javascript/host/media/AudioParam.java | 3 +-
.../host/media/BaseAudioContext.java | 3 +-
.../host/media/BiquadFilterNode.java | 3 +-
.../host/media/ChannelMergerNode.java | 3 +-
.../host/media/ChannelSplitterNode.java | 3 +-
.../host/media/ConstantSourceNode.java | 3 +-
.../javascript/host/media/ConvolverNode.java | 3 +-
.../javascript/host/media/DelayNode.java | 3 +-
.../host/media/DynamicsCompressorNode.java | 3 +-
.../javascript/host/media/GainNode.java | 3 +-
.../javascript/host/media/IIRFilterNode.java | 3 +-
.../host/media/LocalMediaStream.java | 37 -
.../host/media/MediaDeviceInfo.java | 3 +-
.../javascript/host/media/MediaDevices.java | 3 +-
.../media/MediaElementAudioSourceNode.java | 3 +-
.../javascript/host/media/MediaError.java | 3 +-
.../javascript/host/media/MediaKeyError.java | 3 +-
.../host/media/MediaKeySession.java | 3 +-
.../host/media/MediaKeyStatusMap.java | 3 +-
.../host/media/MediaKeySystemAccess.java | 3 +-
.../javascript/host/media/MediaKeys.java | 3 +-
.../javascript/host/media/MediaRecorder.java | 3 +-
.../javascript/host/media/MediaSource.java | 3 +-
.../javascript/host/media/MediaStream.java | 3 +-
.../MediaStreamAudioDestinationNode.java | 3 +-
.../media/MediaStreamAudioSourceNode.java | 3 +-
.../host/media/MediaStreamTrack.java | 3 +-
.../host/media/OfflineAudioContext.java | 3 +-
.../javascript/host/media/OscillatorNode.java | 3 +-
.../javascript/host/media/PannerNode.java | 3 +-
.../javascript/host/media/PeriodicWave.java | 3 +-
.../host/media/ScriptProcessorNode.java | 3 +-
.../javascript/host/media/SourceBuffer.java | 3 +-
.../host/media/SourceBufferList.java | 3 +-
.../host/media/StereoPannerNode.java | 3 +-
.../javascript/host/media/TextTrack.java | 3 +-
.../host/media/TextTrackCueList.java | 3 +-
.../javascript/host/media/TextTrackList.java | 3 +-
.../javascript/host/media/TimeRanges.java | 3 +-
.../javascript/host/media/VTTCue.java | 3 +-
.../host/media/VideoPlaybackQuality.java | 6 +-
.../javascript/host/media/WaveShaperNode.java | 3 +-
.../host/media/rtc/MozRTCIceCandidate.java | 3 +-
.../host/media/rtc/MozRTCPeerConnection.java | 3 +-
.../media/rtc/MozRTCSessionDescription.java | 3 +-
.../host/media/rtc/RTCCertificate.java | 3 +-
.../host/media/rtc/RTCIceCandidate.java | 3 +-
.../host/media/rtc/RTCPeerConnection.java | 3 +-
.../host/media/rtc/RTCSessionDescription.java | 3 +-
.../host/media/rtc/RTCStatsReport.java | 3 +-
.../host/performance/Performance.java | 5 +-
.../host/performance/PerformanceEntry.java | 3 +-
.../host/performance/PerformanceMark.java | 3 +-
.../host/performance/PerformanceMeasure.java | 3 +-
.../performance/PerformanceNavigation.java | 3 +-
.../PerformanceNavigationTiming.java | 3 +-
.../PerformanceResourceTiming.java | 3 +-
.../host/performance/PerformanceTiming.java | 5 +-
.../javascript/host/security/Credential.java | 3 +-
.../host/security/CredentialsContainer.java | 3 +-
.../host/speech/SpeechSynthesis.java | 3 +-
.../speech/SpeechSynthesisErrorEvent.java | 3 +-
.../host/speech/SpeechSynthesisUtterance.java | 3 +-
.../host/speech/SpeechSynthesisVoice.java | 3 +-
.../host/svg/MatrixTransformer.java | 2 +-
.../javascript/host/svg/SVGAElement.java | 3 +-
.../javascript/host/svg/SVGAngle.java | 3 +-
.../host/svg/SVGAnimateElement.java | 3 +-
.../host/svg/SVGAnimateMotionElement.java | 3 +-
.../host/svg/SVGAnimateTransformElement.java | 3 +-
.../javascript/host/svg/SVGAnimatedAngle.java | 3 +-
.../host/svg/SVGAnimatedBoolean.java | 3 +-
.../host/svg/SVGAnimatedEnumeration.java | 3 +-
.../host/svg/SVGAnimatedInteger.java | 3 +-
.../host/svg/SVGAnimatedLength.java | 3 +-
.../host/svg/SVGAnimatedLengthList.java | 3 +-
.../host/svg/SVGAnimatedNumber.java | 3 +-
.../host/svg/SVGAnimatedNumberList.java | 3 +-
.../svg/SVGAnimatedPreserveAspectRatio.java | 3 +-
.../javascript/host/svg/SVGAnimatedRect.java | 3 +-
.../host/svg/SVGAnimatedString.java | 3 +-
.../host/svg/SVGAnimatedTransformList.java | 3 +-
.../host/svg/SVGAnimationElement.java | 3 +-
.../javascript/host/svg/SVGCircleElement.java | 3 +-
.../host/svg/SVGClipPathElement.java | 3 +-
.../SVGComponentTransferFunctionElement.java | 3 +-
.../javascript/host/svg/SVGDefsElement.java | 3 +-
.../javascript/host/svg/SVGDescElement.java | 3 +-
.../host/svg/SVGDiscardElement.java | 36 -
.../javascript/host/svg/SVGElement.java | 245 +-
.../host/svg/SVGEllipseElement.java | 3 +-
.../host/svg/SVGFEBlendElement.java | 25 +-
.../host/svg/SVGFEColorMatrixElement.java | 3 +-
.../svg/SVGFEComponentTransferElement.java | 3 +-
.../host/svg/SVGFECompositeElement.java | 3 +-
.../host/svg/SVGFEConvolveMatrixElement.java | 3 +-
.../host/svg/SVGFEDiffuseLightingElement.java | 3 +-
.../host/svg/SVGFEDisplacementMapElement.java | 3 +-
.../host/svg/SVGFEDistantLightElement.java | 3 +-
.../host/svg/SVGFEDropShadowElement.java | 3 +-
.../host/svg/SVGFEFloodElement.java | 3 +-
.../host/svg/SVGFEFuncAElement.java | 3 +-
.../host/svg/SVGFEFuncBElement.java | 3 +-
.../host/svg/SVGFEFuncGElement.java | 3 +-
.../host/svg/SVGFEFuncRElement.java | 3 +-
.../host/svg/SVGFEGaussianBlurElement.java | 3 +-
.../host/svg/SVGFEImageElement.java | 3 +-
.../host/svg/SVGFEMergeElement.java | 3 +-
.../host/svg/SVGFEMergeNodeElement.java | 3 +-
.../host/svg/SVGFEMorphologyElement.java | 3 +-
.../host/svg/SVGFEOffsetElement.java | 3 +-
.../host/svg/SVGFEPointLightElement.java | 3 +-
.../svg/SVGFESpecularLightingElement.java | 3 +-
.../host/svg/SVGFESpotLightElement.java | 3 +-
.../javascript/host/svg/SVGFETileElement.java | 3 +-
.../host/svg/SVGFETurbulenceElement.java | 3 +-
.../javascript/host/svg/SVGFilterElement.java | 3 +-
.../host/svg/SVGForeignObjectElement.java | 3 +-
.../javascript/host/svg/SVGGElement.java | 3 +-
.../host/svg/SVGGeometryElement.java | 3 +-
.../host/svg/SVGGradientElement.java | 3 +-
.../host/svg/SVGGraphicsElement.java | 3 +-
.../javascript/host/svg/SVGImageElement.java | 3 +-
.../javascript/host/svg/SVGLength.java | 3 +-
.../javascript/host/svg/SVGLengthList.java | 3 +-
.../javascript/host/svg/SVGLineElement.java | 3 +-
.../host/svg/SVGLinearGradientElement.java | 3 +-
.../javascript/host/svg/SVGMPathElement.java | 3 +-
.../javascript/host/svg/SVGMarkerElement.java | 3 +-
.../javascript/host/svg/SVGMaskElement.java | 7 +-
.../javascript/host/svg/SVGMatrix.java | 3 +-
.../host/svg/SVGMetadataElement.java | 3 +-
.../javascript/host/svg/SVGNumber.java | 3 +-
.../javascript/host/svg/SVGNumberList.java | 3 +-
.../javascript/host/svg/SVGPathElement.java | 3 +-
.../SVGPathSegCurvetoQuadraticSmoothAbs.java | 3 +-
.../javascript/host/svg/SVGPathSegList.java | 5 +-
.../host/svg/SVGPatternElement.java | 3 +-
.../javascript/host/svg/SVGPoint.java | 3 +-
.../javascript/host/svg/SVGPointList.java | 3 +-
.../host/svg/SVGPolygonElement.java | 3 +-
.../host/svg/SVGPolylineElement.java | 3 +-
.../host/svg/SVGPreserveAspectRatio.java | 3 +-
.../host/svg/SVGRadialGradientElement.java | 3 +-
.../htmlunit/javascript/host/svg/SVGRect.java | 3 +-
.../javascript/host/svg/SVGRectElement.java | 3 +-
.../javascript/host/svg/SVGSVGElement.java | 3 +-
.../javascript/host/svg/SVGScriptElement.java | 3 +-
.../javascript/host/svg/SVGSetElement.java | 3 +-
.../javascript/host/svg/SVGStopElement.java | 3 +-
.../javascript/host/svg/SVGStringList.java | 3 +-
.../javascript/host/svg/SVGStyleElement.java | 3 +-
.../javascript/host/svg/SVGSwitchElement.java | 3 +-
.../javascript/host/svg/SVGSymbolElement.java | 3 +-
.../javascript/host/svg/SVGTSpanElement.java | 3 +-
.../host/svg/SVGTextContentElement.java | 3 +-
.../javascript/host/svg/SVGTextElement.java | 3 +-
.../host/svg/SVGTextPathElement.java | 3 +-
.../host/svg/SVGTextPositioningElement.java | 3 +-
.../javascript/host/svg/SVGTitleElement.java | 3 +-
.../javascript/host/svg/SVGTransform.java | 3 +-
.../javascript/host/svg/SVGTransformList.java | 3 +-
.../javascript/host/svg/SVGUnitTypes.java | 3 +-
.../javascript/host/svg/SVGUseElement.java | 3 +-
.../javascript/host/svg/SVGViewElement.java | 3 +-
.../worker/DedicatedWorkerGlobalScope.java | 50 +-
.../javascript/host/xml/FormData.java | 13 +-
.../javascript/host/xml/XMLDocument.java | 9 +-
.../javascript/host/xml/XMLHttpRequest.java | 3 +-
.../host/xml/XMLHttpRequestEventTarget.java | 3 +-
.../host/xml/XMLHttpRequestUpload.java | 3 +-
.../javascript/host/xml/XMLSerializer.java | 11 +
.../javascript/host/xml/XSLTProcessor.java | 7 +-
.../regexp/HtmlUnitRegExpProxy.java | 9 +-
.../regexp/RegExpJsToJavaConverter.java | 4 +-
.../htmlunit/svg/SvgElementFactory.java | 2 +-
.../htmlunit/util/Cookie.java | 2 +-
.../htmlunit/util/EncodingSniffer.java | 6 +-
.../htmlunit/util/UrlUtils.java | 10 +
.../websocket/JettyWebSocketAdapter.java | 26 +-
.../xceptance/xlt/engine/XltWebClient.java | 6 +-
.../xlt/engine/xltdriver/HtmlUnitAlert.java | 2 +-
.../xlt/engine/xltdriver/HtmlUnitDriver.java | 5 +-
.../htmlunit/BrowserParameterizedRunner.java | 16 +-
.../htmlunit/BrowserRunner.java | 58 +-
.../htmlunit/BrowserVersion2Test.java | 22 +-
.../htmlunit/BrowserVersionFeaturesTest.java | 12 +-
.../htmlunit/BrowserVersionTest.java | 6 +-
.../htmlunit/CodeStyleTest.java | 19 +-
.../htmlunit/CookieManagerTest.java | 3 -
.../htmlunit/ErrorOutputChecker.java | 68 +-
.../htmlunit/ExternalTest.java | 40 +-
.../htmlunit/HttpWebConnection2Test.java | 20 +-
.../htmlunit/HttpWebConnection3Test.java | 13 +-
...nInsecureSSLWithClientCertificateTest.java | 2 +-
.../htmlunit/HttpWebConnectionTest.java | 2 +-
.../htmlunit/NotYetImplementedTest.java | 19 +-
.../htmlunit/PageReloadTest.java | 64 +-
.../htmlunit/TestCaseTest.java | 6 +-
.../htmlunit/WebClient7Test.java | 12 +-
.../htmlunit/WebClient8Test.java | 59 +
.../htmlunit/WebClientTest.java | 6 +-
.../htmlunit/WebDriverTestCase.java | 59 +-
.../htmlunit/WebResponseDataTest.java | 23 +-
.../htmlunit/WebTestCase.java | 3 -
.../javascript/msxml/XMLHTTPRequestTest.java | 6 +-
.../htmlunit/attachment/AttachmentTest.java | 56 +
.../general/ElementChildNodesTest.java | 16 +-
.../general/ElementClosesItselfTest.java | 13 +-
.../htmlunit/general/ElementCreationTest.java | 40 +-
.../ElementDefaultStyleDisplayTest.java | 686 +-
.../general/ElementOwnPropertiesTest.java | 3512 ++---
.../general/ElementPropertiesTest.java | 895 +-
.../htmlunit/general/HostClassNameTest.java | 1065 +-
.../htmlunit/general/HostConstantsTest.java | 7 +-
.../htmlunit/general/HostTypeOfTest.java | 366 +-
.../huge/ElementClosesElementTest.java | 1158 +-
.../general/huge/HostParentOfATest.java | 55 +-
.../general/huge/HostParentOfBTest.java | 24 +-
.../general/huge/HostParentOfCTest.java | 65 +-
.../general/huge/HostParentOfDTest.java | 298 +-
.../general/huge/HostParentOfFTest.java | 33 +-
.../general/huge/HostParentOfHTest.java | 61 +-
.../general/huge/HostParentOfITest.java | 39 +-
.../general/huge/HostParentOfNTest.java | 56 +-
.../general/huge/HostParentOfPTest.java | 93 +-
.../general/huge/HostParentOfSTest.java | 416 +-
.../general/huge/HostParentOfTTest.java | 41 +-
.../general/huge/HostParentOfWTest.java | 36 +-
.../htmlunit/html/FocusableElement2Test.java | 1489 +-
.../htmlunit/html/HtmlAnchorTest.java | 12 +-
.../htmlunit/html/HtmlApplet2Test.java | 1 -
.../htmlunit/html/HtmlAppletTest.java | 40 +-
.../htmlunit/html/HtmlAreaTest.java | 8 +-
.../htmlunit/html/HtmlButton2Test.java | 3 +-
.../htmlunit/html/HtmlDateInputTest.java | 5 +-
.../htmlunit/html/HtmlElement2Test.java | 75 +-
.../htmlunit/html/HtmlElementTest.java | 6 +-
.../htmlunit/html/HtmlFileInputTest.java | 40 +-
.../htmlunit/html/HtmlForm2Test.java | 99 +-
.../htmlunit/html/HtmlHiddenInputTest.java | 3 +-
.../htmlunit/html/HtmlImage2Test.java | 6 +-
.../htmlunit/html/HtmlImageDownloadTest.java | 8 +-
.../htmlunit/html/HtmlImageInputTest.java | 5 +-
.../htmlunit/html/HtmlInlineFrame2Test.java | 3 +-
.../htmlunit/html/HtmlInlineFrameTest.java | 8 +-
.../htmlunit/html/HtmlInput2Test.java | 1 -
.../htmlunit/html/HtmlIsIndex2Test.java | 3 +-
.../htmlunit/html/HtmlLabel2Test.java | 23 +-
.../htmlunit/html/HtmlLabelTest.java | 607 +-
.../htmlunit/html/HtmlLink2Test.java | 61 +
.../htmlunit/html/HtmlMonthInputTest.java | 6 +-
.../htmlunit/html/HtmlNumberInputTest.java | 3 +-
.../htmlunit/html/HtmlObjectTest.java | 35 +
.../htmlunit/html/HtmlOption2Test.java | 6 +-
.../htmlunit/html/HtmlPage3Test.java | 27 +-
.../htmlunit/html/HtmlParagraphTest.java | 26 +
.../htmlunit/html/HtmlPasswordInputTest.java | 3 +-
.../htmlunit/html/HtmlRangeInputTest.java | 6 +-
.../htmlunit/html/HtmlRpTest.java | 1 -
.../htmlunit/html/HtmlRtTest.java | 6 +-
.../html/HtmlSerializerVisibleText2Test.java | 16 +-
.../htmlunit/html/HtmlSlotTest.java | 1 -
.../htmlunit/html/HtmlTableRowTest.java | 5 +-
.../htmlunit/html/HtmlTemplateTest.java | 69 +
.../htmlunit/html/HtmlTextArea2Test.java | 7 +-
.../htmlunit/html/HtmlTextInputTest.java | 3 +-
.../htmlunit/html/HtmlWeekInputTest.java | 3 +-
.../htmlunit/html/MalformedHtmlTest.java | 3 +-
.../htmlunit/html/parser/HTMLParser2Test.java | 91 +-
.../htmlunit/html/parser/HTMLParser4Test.java | 21 +-
.../htmlunit/html/parser/HTMLParserTest.java | 12 +-
.../javascript/DebugFrameImplTest.java | 2 +-
.../javascript/GlobalFunctionsTest.java | 3 +-
.../javascript/JavaScriptEngine2Test.java | 50 +-
.../htmlunit/javascript/NativeArrayTest.java | 64 +-
.../htmlunit/javascript/NativeDateTest.java | 3 +-
.../htmlunit/javascript/NativeErrorTest.java | 12 +-
.../javascript/NativeFunctionTest.java | 33 +-
.../htmlunit/javascript/NativeNumberTest.java | 3 +-
.../htmlunit/javascript/NativeObjectTest.java | 30 +-
.../htmlunit/javascript/NativeStringTest.java | 3 +-
.../htmlunit/javascript/RhinoTest.java | 7 +-
.../javascript/SimpleScriptable2Test.java | 10 +-
.../JavaScriptConfigurationTest.java | 12 +-
.../javascript/host/ApplicationCacheTest.java | 3 +-
.../javascript/host/ClientRectListTest.java | 6 +-
.../htmlunit/javascript/host/ElementTest.java | 16 +-
.../javascript/host/ExternalTest.java | 3 +-
.../javascript/host/FontFaceSetTest.java | 3 +-
.../javascript/host/FontFaceTest.java | 1 +
.../javascript/host/History2Test.java | 12 -
.../javascript/host/Location2Test.java | 14 +-
.../htmlunit/javascript/host/MapTest.java | 8 -
.../javascript/host/NavigatorTest.java | 21 +-
.../javascript/host/NetscapeTest.java | 3 +-
.../htmlunit/javascript/host/PromiseTest.java | 6 +-
.../htmlunit/javascript/host/ScreenTest.java | 14 +-
.../htmlunit/javascript/host/SetTest.java | 4 -
.../htmlunit/javascript/host/StorageTest.java | 12 +-
.../javascript/host/TextDecoderTest.java | 11 +-
.../javascript/host/URLSearchParamsTest.java | 71 +-
.../htmlunit/javascript/host/URLTest.java | 1 -
.../javascript/host/WebSocketTest.java | 40 +-
.../htmlunit/javascript/host/Window2Test.java | 75 +-
.../htmlunit/javascript/host/Window3Test.java | 43 +-
.../host/WindowConcurrencyTest.java | 2 +-
.../htmlunit/javascript/host/WindowTest.java | 9 +-
.../canvas/CanvasRenderingContext2D2Test.java | 19 +-
.../canvas/CanvasRenderingContext2DTest.java | 21 -
.../javascript/host/canvas/ImageDataTest.java | 128 +
.../javascript/host/crypto/CryptoTest.java | 24 +-
.../host/crypto/SubtleCryptoTest.java | 23 +-
.../host/css/CSSFontFaceRuleTest.java | 23 +-
.../host/css/CSSPrimitiveValueTest.java | 8 +-
.../host/css/CSSStyleDeclaration2Test.java | 11 +-
.../host/css/CSSStyleDeclaration3Test.java | 97 +-
.../host/css/CSSStyleDeclarationTest.java | 94 +-
.../javascript/host/css/CSSStyleRuleTest.java | 6 +-
.../host/css/CSSStyleSheet3Test.java | 1171 ++
.../host/css/CSSStyleSheetTest.java | 57 +-
.../javascript/host/css/CSSValueTest.java | 4 +-
.../css/ComputedCSSStyleDeclarationTest.java | 97 +-
.../javascript/host/css/ComputedFontTest.java | 39 +-
.../javascript/host/css/StyleMediaTest.java | 6 +-
.../host/css/StyleSheetListTest.java | 3 +-
.../css/property/ElementClientWidthTest.java | 70 +-
.../css/property/ElementOffsetWidthTest.java | 73 +-
.../javascript/host/dom/DOMExceptionTest.java | 3 +-
.../host/dom/DOMImplementationTest.java | 11 +-
.../javascript/host/dom/DOMParserTest.java | 31 +-
.../javascript/host/dom/Document2Test.java | 6 +-
.../host/dom/DocumentFragmentTest.java | 3 +-
.../javascript/host/dom/DocumentTest.java | 59 +-
.../host/dom/MutationObserverTest.java | 5 -
.../javascript/host/dom/NodeListTest.java | 485 +-
.../javascript/host/dom/Selection2Test.java | 3 +-
.../javascript/host/dom/SelectionTest.java | 174 +-
.../host/dom/XPathEvaluatorTest.java | 4 +-
.../host/event/BeforeUnloadEventTest.java | 6 +-
.../javascript/host/event/CloseEventTest.java | 8 +-
.../javascript/host/event/Event2Test.java | 14 +-
.../javascript/host/event/EventTest.java | 249 +-
.../host/event/HashChangeEventTest.java | 8 +-
.../host/event/KeyboardEvent2Test.java | 9 +-
.../host/event/KeyboardEventTest.java | 47 +-
.../host/event/PointerEventTest.java | 20 +-
.../host/event/PopStateEventTest.java | 13 +-
.../javascript/host/file/FileListTest.java | 2 +-
.../javascript/host/file/FileReaderTest.java | 1 -
.../javascript/host/file/FileTest.java | 278 +-
.../host/html/HTMLAllCollectionTest.java | 28 +-
.../host/html/HTMLAnchorElement2Test.java | 20 +-
.../host/html/HTMLAppletElement2Test.java | 13 +
.../host/html/HTMLAreaElementTest.java | 17 +-
.../host/html/HTMLAudioElementTest.java | 38 +-
.../host/html/HTMLBaseElementTest.java | 5 +-
.../host/html/HTMLBodyElementTest.java | 14 +-
.../host/html/HTMLButtonElementTest.java | 3 +-
.../host/html/HTMLCanvasElementTest.java | 8 -
.../host/html/HTMLCollectionTest.java | 3 +-
.../host/html/HTMLDocumentTest.java | 62 +-
.../host/html/HTMLElement2Test.java | 9 +-
.../javascript/host/html/HTMLElementTest.java | 197 +-
.../host/html/HTMLEmbedElementTest.java | 11 +-
.../host/html/HTMLFormElementTest.java | 232 +-
.../host/html/HTMLFrameElement2Test.java | 44 +
.../host/html/HTMLHtmlElementTest.java | 1 +
.../host/html/HTMLIFrameElement3Test.java | 283 +-
.../host/html/HTMLImageElement2Test.java | 112 -
.../host/html/HTMLImageElementTest.java | 432 +-
.../host/html/HTMLInputElementTest.java | 101 +-
.../host/html/HTMLLabelElementTest.java | 1076 +-
.../host/html/HTMLMenuElementTest.java | 8 +-
.../host/html/HTMLOptionElement2Test.java | 26 +-
.../host/html/HTMLOptionsCollectionTest.java | 26 +-
.../host/html/HTMLOutputElementTest.java | 7 +-
.../host/html/HTMLProgressElementTest.java | 7 +-
.../host/html/HTMLSelectElementTest.java | 10 +-
.../host/html/HTMLTableCellElementTest.java | 4 +-
.../host/html/HTMLTemplateElementTest.java | 146 +
.../host/html/HTMLTextAreaElementTest.java | 3 +-
.../host/intl/DateTimeFormatTest.java | 36 +-
.../javascript/host/intl/IntlTest.java | 6 +-
.../host/intl/V8BreakIteratorTest.java | 23 +-
.../host/media/AudioContextTest.java | 51 +-
.../host/media/MediaSourceTest.java | 4 +-
.../host/media/OfflineAudioContextTest.java | 1 +
.../host/media/PeriodicSyncManagerTest.java | 3 +-
.../host/network/NetworkInformationTest.java | 18 +-
.../javascript/host/svg/SVGAngleTest.java | 6 +-
.../host/svg/SVGPathElementTest.java | 5 +-
.../host/svg/SVGTSpanElementTest.java | 5 +-
.../host/svg/SVGTextContentElementTest.java | 5 +-
.../host/svg/SVGTextElementTest.java | 6 +-
.../host/svg/SVGTextPathElementTest.java | 1 -
.../DedicatedWorkerGlobalScopeTest.java | 50 +
.../javascript/host/worker/WorkerTest.java | 1 -
.../javascript/host/xml/FormDataTest.java | 4 +-
.../javascript/host/xml/XMLDocumentTest.java | 9 +-
.../host/xml/XMLHttpRequest2Test.java | 33 +-
.../host/xml/XMLHttpRequestTest.java | 39 +-
.../host/xml/XMLSerializerTest.java | 96 +-
.../host/xml/XSLTProcessorTest.java | 9 +-
.../regexp/HtmlUnitRegExpProxy3Test.java | 2 +-
.../regexp/HtmlUnitRegExpProxyTest.java | 72 +
.../regexp/mozilla/MozillaTestGenerator.java | 2 +-
.../mozilla/js1_2/AlphanumericTest.java | 1 -
.../regexp/mozilla/js1_2/SimpleFormTest.java | 9 -
.../htmlunit/libraries/DojoTestBase.java | 2 +-
.../htmlunit/libraries/JQuery1x11x3Test.java | 6 -
.../htmlunit/libraries/JQuery1x8x2Test.java | 6 -
.../htmlunit/libraries/JQuery3x3x1Test.java | 24 +-
.../htmlunit/libraries/JQueryTestBase.java | 2 +-
.../libraries/Prototype150rc1Test.java | 2 +-
.../htmlunit/libraries/Prototype160Test.java | 2 +-
.../htmlunit/libraries/PrototypeTestBase.java | 12 +-
.../htmlunit/libraries/TinyMceTest.java | 2 +-
.../htmlunit/libraries/VueTest.java | 101 +
.../htmlunit/libraries/YuiTest.java | 1 -
.../htmlunit/runners/BrowserStatement.java | 82 +-
.../runners/BrowserVersionClassRunner.java | 26 +-
.../htmlunit/runners/TestCaseCorrector.java | 16 +-
.../htmlunit/source/JQueryExtractor.java | 4 +-
.../htmlunit/svg/SvgMatrixTest.java | 4 +
.../htmlunit/xml/XmlPageTest.java | 2 +-
...tyleDeclaration2Test.properties.Chrome.txt | 11 +-
...StyleDeclaration2Test.properties.Edge.txt} | 343 +-
...CSSStyleDeclaration2Test.properties.FF.txt | 2 +
...SStyleDeclaration2Test.properties.FF68.txt | 2 +
...CSSStyleDeclaration2Test.properties.IE.txt | 1 +
...yleDeclaration2Test.properties2.Chrome.txt | 11 +-
...tyleDeclaration2Test.properties2.Edge.txt} | 344 +-
...SSStyleDeclaration2Test.properties2.FF.txt | 2 +
...StyleDeclaration2Test.properties2.FF68.txt | 2 +
...SSStyleDeclaration2Test.properties2.IE.txt | 1 +
...StyleDeclarationTest.properties.Chrome.txt | 25 +-
...SSStyleDeclarationTest.properties.Edge.txt | 519 +
...dCSSStyleDeclarationTest.properties.FF.txt | 40 +-
...SSStyleDeclarationTest.properties.FF60.txt | 932 --
...SSStyleDeclarationTest.properties.FF68.txt | 36 +-
...dCSSStyleDeclarationTest.properties.IE.txt | 3 +-
...tionTest.properties.notAttached.Chrome.txt | 11 +-
...rationTest.properties.notAttached.Edge.txt | 519 +
...larationTest.properties.notAttached.FF.txt | 4 +
...rationTest.properties.notAttached.FF60.txt | 932 --
...rationTest.properties.notAttached.FF68.txt | 4 +
...larationTest.properties.notAttached.IE.txt | 3 +-
...lementOffsetHeightTest.properties.Edge.txt | 1 +
.../prototype/1.6.0/expected.dom.Edge.txt | 92 +
.../prototype/1.6.0/expected.dom.FF.txt | 4 +-
.../1.6.0/expected.position.Edge.txt | 4 +
.../1.6.0/expected.selector.Edge.txt | 40 +
.../prototype/1.6.1/expected.dom.Edge.txt | 104 +
.../prototype/1.6.1/expected.dom.FF.txt | 4 +-
.../libraries/vue/hello_world/hello.html | 13 +
.../libraries/vue/hello_world/hello.js | 6 +
.../libraries/vue/hello_world/hello.min.html | 13 +
.../vue/hello_world/hello_button.html | 13 +
.../libraries/vue/hello_world/hello_button.js | 11 +
.../vue/hello_world/hello_button.min.html | 13 +
.../libraries/vue/hello_world/vue.js | 11965 ++++++++++++++++
.../libraries/vue/hello_world/vue.min.js | 6 +
.../xlt/engine/XltWebClientTest.java | 3 +-
854 files changed, 29985 insertions(+), 15040 deletions(-)
create mode 100644 src/main/java/com/gargoylesoftware/htmlunit/javascript/configuration/JsxSymbol.java
delete mode 100644 src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Iterator.java
delete mode 100644 src/main/java/com/gargoylesoftware/htmlunit/javascript/host/StringCustom.java
delete mode 100644 src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSPrimitiveValue.java
delete mode 100644 src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSValue.java
delete mode 100644 src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSValueList.java
delete mode 100644 src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMCursor.java
delete mode 100644 src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/DeviceLightEvent.java
delete mode 100644 src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/DeviceProximityEvent.java
delete mode 100644 src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/UserProximityEvent.java
delete mode 100644 src/main/java/com/gargoylesoftware/htmlunit/javascript/host/media/LocalMediaStream.java
delete mode 100644 src/main/java/com/gargoylesoftware/htmlunit/javascript/host/svg/SVGDiscardElement.java
create mode 100644 src/test-hu/java/com/gargoylesoftware/htmlunit/html/HtmlTemplateTest.java
create mode 100644 src/test-hu/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleSheet3Test.java
create mode 100644 src/test-hu/java/com/gargoylesoftware/htmlunit/libraries/VueTest.java
rename src/test-hu/resources/com/gargoylesoftware/htmlunit/javascript/host/css/{CSSStyleDeclaration2Test.properties2.FF60.txt => CSSStyleDeclaration2Test.properties.Edge.txt} (62%)
rename src/test-hu/resources/com/gargoylesoftware/htmlunit/javascript/host/css/{CSSStyleDeclaration2Test.properties.FF60.txt => CSSStyleDeclaration2Test.properties2.Edge.txt} (62%)
create mode 100644 src/test-hu/resources/com/gargoylesoftware/htmlunit/javascript/host/css/ComputedCSSStyleDeclarationTest.properties.Edge.txt
delete mode 100644 src/test-hu/resources/com/gargoylesoftware/htmlunit/javascript/host/css/ComputedCSSStyleDeclarationTest.properties.FF60.txt
create mode 100644 src/test-hu/resources/com/gargoylesoftware/htmlunit/javascript/host/css/ComputedCSSStyleDeclarationTest.properties.notAttached.Edge.txt
delete mode 100644 src/test-hu/resources/com/gargoylesoftware/htmlunit/javascript/host/css/ComputedCSSStyleDeclarationTest.properties.notAttached.FF60.txt
create mode 100644 src/test-hu/resources/com/gargoylesoftware/htmlunit/javascript/host/css/property/ElementOffsetHeightTest.properties.Edge.txt
create mode 100644 src/test-hu/resources/libraries/prototype/1.6.0/expected.dom.Edge.txt
create mode 100644 src/test-hu/resources/libraries/prototype/1.6.0/expected.position.Edge.txt
create mode 100644 src/test-hu/resources/libraries/prototype/1.6.0/expected.selector.Edge.txt
create mode 100644 src/test-hu/resources/libraries/prototype/1.6.1/expected.dom.Edge.txt
create mode 100644 src/test-hu/resources/libraries/vue/hello_world/hello.html
create mode 100644 src/test-hu/resources/libraries/vue/hello_world/hello.js
create mode 100644 src/test-hu/resources/libraries/vue/hello_world/hello.min.html
create mode 100644 src/test-hu/resources/libraries/vue/hello_world/hello_button.html
create mode 100644 src/test-hu/resources/libraries/vue/hello_world/hello_button.js
create mode 100644 src/test-hu/resources/libraries/vue/hello_world/hello_button.min.html
create mode 100644 src/test-hu/resources/libraries/vue/hello_world/vue.js
create mode 100644 src/test-hu/resources/libraries/vue/hello_world/vue.min.js
diff --git a/pom.xml b/pom.xml
index 5af629f5a..433d2c7cf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -67,7 +67,7 @@
1.87.14.5.12
- 9.4.27.v20200227
+ 9.4.31.v202007232.13.1Copyright (c) ${project.inceptionYear}-2020 ${project.organization.name}
@@ -120,12 +120,12 @@
commons-iocommons-io
- 2.6
+ 2.7org.apache.commonscommons-lang3
- 3.10
+ 3.11commons-logging
@@ -135,12 +135,12 @@
commons-netcommons-net
- 3.6
+ 3.7org.apache.commonscommons-text
- 1.8
+ 1.9org.apache.commons
@@ -156,7 +156,7 @@
net.sourceforge.htmlunithtmlunit-core-js
- 2.39.0
+ 2.43.0net.sourceforge.htmlunit
@@ -176,7 +176,7 @@
net.sourceforge.htmlunitneko-htmlunit
- 2.39.0
+ 2.43.0xerces
@@ -184,6 +184,11 @@
+
+ com.shapesecurity
+ salvation
+ 2.7.2
+ org.eclipse.jetty.websocketwebsocket-client
diff --git a/samples/testsuite-performance/config/default.properties b/samples/testsuite-performance/config/default.properties
index 068a260eb..228147c22 100644
--- a/samples/testsuite-performance/config/default.properties
+++ b/samples/testsuite-performance/config/default.properties
@@ -139,9 +139,8 @@ com.xceptance.xlt.http.responseId.headerName = X-XLT-ResponseId
## Indicates the browser to simulate. Possible values are:
## - "FF" ...... Firefox 68 (default)
-## - "FF74" .... Firefox 74
+## - "FF79" .... Firefox 79
## - "FF68" .... Firefox 68
-## - "FF60" .... Firefox 60
## - "IE" ...... Internet Explorer
## - "CH" ...... Chrome
## This setting is important for the user agent string and for the JavaScript
diff --git a/samples/testsuite-posters/config/default.properties b/samples/testsuite-posters/config/default.properties
index 068a260eb..228147c22 100644
--- a/samples/testsuite-posters/config/default.properties
+++ b/samples/testsuite-posters/config/default.properties
@@ -139,9 +139,8 @@ com.xceptance.xlt.http.responseId.headerName = X-XLT-ResponseId
## Indicates the browser to simulate. Possible values are:
## - "FF" ...... Firefox 68 (default)
-## - "FF74" .... Firefox 74
+## - "FF79" .... Firefox 79
## - "FF68" .... Firefox 68
-## - "FF60" .... Firefox 60
## - "IE" ...... Internet Explorer
## - "CH" ...... Chrome
## This setting is important for the user agent string and for the JavaScript
diff --git a/samples/testsuite-showcases/config/default.properties b/samples/testsuite-showcases/config/default.properties
index 068a260eb..228147c22 100644
--- a/samples/testsuite-showcases/config/default.properties
+++ b/samples/testsuite-showcases/config/default.properties
@@ -139,9 +139,8 @@ com.xceptance.xlt.http.responseId.headerName = X-XLT-ResponseId
## Indicates the browser to simulate. Possible values are:
## - "FF" ...... Firefox 68 (default)
-## - "FF74" .... Firefox 74
+## - "FF79" .... Firefox 79
## - "FF68" .... Firefox 68
-## - "FF60" .... Firefox 60
## - "IE" ...... Internet Explorer
## - "CH" ...... Chrome
## This setting is important for the user agent string and for the JavaScript
diff --git a/samples/testsuite-template/config/default.properties b/samples/testsuite-template/config/default.properties
index 068a260eb..228147c22 100644
--- a/samples/testsuite-template/config/default.properties
+++ b/samples/testsuite-template/config/default.properties
@@ -139,9 +139,8 @@ com.xceptance.xlt.http.responseId.headerName = X-XLT-ResponseId
## Indicates the browser to simulate. Possible values are:
## - "FF" ...... Firefox 68 (default)
-## - "FF74" .... Firefox 74
+## - "FF79" .... Firefox 79
## - "FF68" .... Firefox 68
-## - "FF60" .... Firefox 60
## - "IE" ...... Internet Explorer
## - "CH" ...... Chrome
## This setting is important for the user agent string and for the JavaScript
diff --git a/samples/testsuite-xlt/config/default.properties b/samples/testsuite-xlt/config/default.properties
index 068a260eb..228147c22 100644
--- a/samples/testsuite-xlt/config/default.properties
+++ b/samples/testsuite-xlt/config/default.properties
@@ -139,9 +139,8 @@ com.xceptance.xlt.http.responseId.headerName = X-XLT-ResponseId
## Indicates the browser to simulate. Possible values are:
## - "FF" ...... Firefox 68 (default)
-## - "FF74" .... Firefox 74
+## - "FF79" .... Firefox 79
## - "FF68" .... Firefox 68
-## - "FF60" .... Firefox 60
## - "IE" ...... Internet Explorer
## - "CH" ...... Chrome
## This setting is important for the user agent string and for the JavaScript
diff --git a/src/main/java/com/gargoylesoftware/htmlunit/AbstractPage.java b/src/main/java/com/gargoylesoftware/htmlunit/AbstractPage.java
index 7d585bb4d..980ae42a6 100644
--- a/src/main/java/com/gargoylesoftware/htmlunit/AbstractPage.java
+++ b/src/main/java/com/gargoylesoftware/htmlunit/AbstractPage.java
@@ -24,7 +24,7 @@
public class AbstractPage implements Page {
private final WebResponse webResponse_;
- private WebWindow enclosingWindow_;
+ private final WebWindow enclosingWindow_;
/**
* Creates an instance.
diff --git a/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java b/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java
index 7d46677b0..a3b64a06a 100644
--- a/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java
+++ b/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java
@@ -97,7 +97,7 @@ public final class BrowserVersion implements Serializable {
* Firefox.
* @since 2.38
*/
- public static final BrowserVersion FIREFOX = new BrowserVersion(74, "FF");
+ public static final BrowserVersion FIREFOX = new BrowserVersion(79, "FF");
/**
* Firefox 68 ESR.
@@ -105,19 +105,14 @@ public final class BrowserVersion implements Serializable {
*/
public static final BrowserVersion FIREFOX_68 = new BrowserVersion(68, "FF68");
- /**
- * Firefox 60 ESR.
- * @since 2.32
- * @deprecated as of version 2.39
- */
- @Deprecated
- public static final BrowserVersion FIREFOX_60 = new BrowserVersion(60, "FF60");
-
/** Internet Explorer 11. */
public static final BrowserVersion INTERNET_EXPLORER = new BrowserVersion(11, "IE");
+ /** Edge */
+ public static final BrowserVersion EDGE = new BrowserVersion(84, "Edge");
+
/** Latest Chrome. */
- public static final BrowserVersion CHROME = new BrowserVersion(80, "Chrome");
+ public static final BrowserVersion CHROME = new BrowserVersion(84, "Chrome");
/**
* The best supported browser version at the moment.
@@ -129,37 +124,9 @@ public final class BrowserVersion implements Serializable {
/** Register plugins for the browser versions. */
static {
- // FF60
- FIREFOX_60.applicationVersion_ = "5.0 (Windows)";
- FIREFOX_60.userAgent_ = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:"
- + FIREFOX_60.getBrowserVersionNumeric() + ".0) Gecko/20100101 Firefox/"
- + FIREFOX_60.getBrowserVersionNumeric() + ".0";
- FIREFOX_60.buildId_ = "20190901094603";
- FIREFOX_60.productSub_ = "20100101";
- FIREFOX_60.headerNamesOrdered_ = new String[] {
- HttpHeader.HOST,
- HttpHeader.USER_AGENT,
- HttpHeader.ACCEPT,
- HttpHeader.ACCEPT_LANGUAGE,
- HttpHeader.ACCEPT_ENCODING,
- HttpHeader.REFERER,
- HttpHeader.COOKIE,
- HttpHeader.CONNECTION};
- FIREFOX_60.htmlAcceptHeader_ = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
- FIREFOX_60.xmlHttpRequestAcceptHeader_ = "*/*";
- FIREFOX_60.imgAcceptHeader_ = "*/*";
- FIREFOX_60.cssAcceptHeader_ = "text/css,*/*;q=0.1";
- FIREFOX_60.fontHeights_ = new int[] {
- 0, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 53, 55, 57, 58,
- 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 84, 85, 86, 87, 88,
- 89, 90, 91, 93, 94, 95, 96, 96, 98, 99, 100, 101, 103, 104, 105, 106, 106, 108, 109, 111, 112, 113, 115,
- 116, 117, 118, 119, 120, 121, 122, 123, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 136, 138, 139,
- 139, 141, 142, 143, 144, 146, 147, 148, 149};
-
// FF68
FIREFOX_68.applicationVersion_ = "5.0 (Windows)";
- FIREFOX_68.userAgent_ = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:"
+ FIREFOX_68.userAgent_ = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:"
+ FIREFOX_68.getBrowserVersionNumeric() + ".0) Gecko/20100101 Firefox/"
+ FIREFOX_68.getBrowserVersionNumeric() + ".0";
FIREFOX_68.buildId_ = "20181001000000";
@@ -188,7 +155,7 @@ public final class BrowserVersion implements Serializable {
// FF
FIREFOX.applicationVersion_ = "5.0 (Windows)";
- FIREFOX.userAgent_ = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:"
+ FIREFOX.userAgent_ = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:"
+ FIREFOX.getBrowserVersionNumeric() + ".0) Gecko/20100101 Firefox/"
+ FIREFOX.getBrowserVersionNumeric() + ".0";
FIREFOX.buildId_ = "20181001000000";
@@ -216,10 +183,9 @@ public final class BrowserVersion implements Serializable {
140, 141, 143, 143, 144, 145, 146, 148};
// IE
- INTERNET_EXPLORER.applicationVersion_ = "5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:"
+ INTERNET_EXPLORER.applicationVersion_ = "5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:"
+ INTERNET_EXPLORER.getBrowserVersionNumeric() + ".0) like Gecko";
- INTERNET_EXPLORER.userAgent_ = "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko";
- INTERNET_EXPLORER.platform_ = PLATFORM_WIN32;
+ INTERNET_EXPLORER.userAgent_ = "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko";
INTERNET_EXPLORER.headerNamesOrdered_ = new String[] {
HttpHeader.ACCEPT,
HttpHeader.REFERER,
@@ -242,15 +208,14 @@ public final class BrowserVersion implements Serializable {
115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 126, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138,
139, 140, 141, 143, 144, 145, 146, 147};
- // CHROME
- CHROME.applicationVersion_ = "5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/"
- + CHROME.getBrowserVersionNumeric() + ".0.3987.132 Safari/537.36";
- CHROME.userAgent_ = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/"
- + CHROME.getBrowserVersionNumeric() + ".0.3987.132 Safari/537.36";
+ // CHROME (Win10 64bit)
+ CHROME.applicationVersion_ = "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/"
+ + CHROME.getBrowserVersionNumeric() + ".0.4147.105 Safari/537.36";
+ CHROME.userAgent_ = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/"
+ + CHROME.getBrowserVersionNumeric() + ".0.4147.105 Safari/537.36";
CHROME.applicationCodeName_ = "Mozilla";
CHROME.vendor_ = "Google Inc.";
- CHROME.platform_ = PLATFORM_WIN32;
CHROME.cpuClass_ = null;
CHROME.productSub_ = "20030107";
CHROME.headerNamesOrdered_ = new String[] {
@@ -258,11 +223,11 @@ public final class BrowserVersion implements Serializable {
HttpHeader.CONNECTION,
"Upgrade-Insecure-Requests",
HttpHeader.USER_AGENT,
- HttpHeader.SEC_FETCH_DEST,
HttpHeader.ACCEPT,
HttpHeader.SEC_FETCH_SITE,
HttpHeader.SEC_FETCH_MODE,
HttpHeader.SEC_FETCH_USER,
+ HttpHeader.SEC_FETCH_DEST,
HttpHeader.REFERER,
HttpHeader.ACCEPT_ENCODING,
HttpHeader.ACCEPT_LANGUAGE,
@@ -282,6 +247,47 @@ public final class BrowserVersion implements Serializable {
113, 115, 116, 117, 118, 119, 121, 122, 123, 124, 126, 127, 128, 129, 130, 132, 132, 133, 134, 136, 137,
138, 139, 140, 142, 142, 143, 144, 145, 147};
+ // EDGE (Win10 64bit)
+ EDGE.applicationVersion_ = "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/"
+ + EDGE.getBrowserVersionNumeric() + ".0.4147.105 Safari/537.36 Edg/"
+ + EDGE.getBrowserVersionNumeric() + ".0.522.52";
+ EDGE.userAgent_ = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/"
+ + EDGE.getBrowserVersionNumeric() + ".0.4147.105 Safari/537.36 Edg/"
+ + EDGE.getBrowserVersionNumeric() + ".0.522.52";
+
+ EDGE.applicationCodeName_ = "Mozilla";
+ EDGE.vendor_ = "Google Inc.";
+ EDGE.cpuClass_ = null;
+ EDGE.productSub_ = "20030107";
+ EDGE.headerNamesOrdered_ = new String[] {
+ HttpHeader.HOST,
+ HttpHeader.CONNECTION,
+ "Upgrade-Insecure-Requests",
+ HttpHeader.USER_AGENT,
+ HttpHeader.ACCEPT,
+ HttpHeader.SEC_FETCH_SITE,
+ HttpHeader.SEC_FETCH_MODE,
+ HttpHeader.SEC_FETCH_USER,
+ HttpHeader.SEC_FETCH_DEST,
+ HttpHeader.REFERER,
+ HttpHeader.ACCEPT_ENCODING,
+ HttpHeader.ACCEPT_LANGUAGE,
+ HttpHeader.COOKIE};
+ EDGE.acceptEncodingHeader_ = "gzip, deflate, br";
+ EDGE.htmlAcceptHeader_ = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;"
+ + "q=0.8,application/signed-exchange;v=b3;q=0.9";
+ EDGE.imgAcceptHeader_ = "image/webp,image/apng,image/*,*/*;q=0.8";
+ EDGE.cssAcceptHeader_ = "text/css,*/*;q=0.1";
+ EDGE.scriptAcceptHeader_ = "*/*";
+ // there are other issues with Chrome; a different productSub, etc.
+ EDGE.fontHeights_ = new int[] {
+ 0, 1, 2, 4, 5, 5, 6, 8, 9, 10, 11, 12, 15, 16, 16, 17, 18, 20, 21, 22, 23, 25, 26, 26,
+ 27, 28, 30, 31, 32, 33, 34, 36, 37, 37, 38, 40, 42, 43, 44, 45, 47, 48, 48, 49, 51, 52, 53, 54, 55, 57,
+ 58, 58, 59, 60, 62, 63, 64, 65, 67, 69, 69, 70, 71, 73, 74, 75, 76, 77, 79, 79, 80, 81, 83, 84, 85, 86,
+ 87, 89, 90, 90, 91, 93, 94, 96, 97, 98, 100, 101, 101, 102, 103, 105, 106, 107, 108, 110, 111, 111, 112,
+ 113, 115, 116, 117, 118, 119, 121, 122, 123, 124, 126, 127, 128, 129, 130, 132, 132, 133, 134, 136, 137,
+ 138, 139, 140, 142, 142, 143, 144, 145, 147};
+
// default file upload mime types
CHROME.registerUploadMimeType("html", MimeType.TEXT_HTML);
CHROME.registerUploadMimeType("htm", MimeType.TEXT_HTML);
@@ -295,7 +301,7 @@ public final class BrowserVersion implements Serializable {
CHROME.registerUploadMimeType("mp4", "video/mp4");
CHROME.registerUploadMimeType("m4v", "video/mp4");
CHROME.registerUploadMimeType("m4a", "audio/x-m4a");
- CHROME.registerUploadMimeType("mp3", "audio/mp3");
+ CHROME.registerUploadMimeType("mp3", "audio/mpeg");
CHROME.registerUploadMimeType("ogv", "video/ogg");
CHROME.registerUploadMimeType("ogm", "video/ogg");
CHROME.registerUploadMimeType("ogg", "audio/ogg");
@@ -310,29 +316,32 @@ public final class BrowserVersion implements Serializable {
CHROME.registerUploadMimeType("txt", MimeType.TEXT_PLAIN);
CHROME.registerUploadMimeType("text", MimeType.TEXT_PLAIN);
- FIREFOX_60.registerUploadMimeType("html", MimeType.TEXT_HTML);
- FIREFOX_60.registerUploadMimeType("htm", MimeType.TEXT_HTML);
- FIREFOX_60.registerUploadMimeType("css", MimeType.TEXT_CSS);
- FIREFOX_60.registerUploadMimeType("xml", MimeType.TEXT_XML);
- FIREFOX_60.registerUploadMimeType("gif", "image/gif");
- FIREFOX_60.registerUploadMimeType("jpeg", "image/jpeg");
- FIREFOX_60.registerUploadMimeType("jpg", "image/jpeg");
- FIREFOX_60.registerUploadMimeType("png", "image/png");
- FIREFOX_60.registerUploadMimeType("mp4", "video/mp4");
- FIREFOX_60.registerUploadMimeType("m4v", "video/mp4");
- FIREFOX_60.registerUploadMimeType("m4a", "audio/mp4");
- FIREFOX_60.registerUploadMimeType("mp3", "audio/mpeg");
- FIREFOX_60.registerUploadMimeType("ogv", "video/ogg");
- FIREFOX_60.registerUploadMimeType("ogm", "video/x-ogm");
- FIREFOX_60.registerUploadMimeType("ogg", "video/ogg");
- FIREFOX_60.registerUploadMimeType("oga", "audio/ogg");
- FIREFOX_60.registerUploadMimeType("opus", "audio/ogg");
- FIREFOX_60.registerUploadMimeType("webm", "video/webm");
- FIREFOX_60.registerUploadMimeType("wav", "audio/wav");
- FIREFOX_60.registerUploadMimeType("xhtml", "application/xhtml+xml");
- FIREFOX_60.registerUploadMimeType("xht", "application/xhtml+xml");
- FIREFOX_60.registerUploadMimeType("txt", MimeType.TEXT_PLAIN);
- FIREFOX_60.registerUploadMimeType("text", MimeType.TEXT_PLAIN);
+ EDGE.registerUploadMimeType("html", MimeType.TEXT_HTML);
+ EDGE.registerUploadMimeType("htm", MimeType.TEXT_HTML);
+ EDGE.registerUploadMimeType("css", MimeType.TEXT_CSS);
+ EDGE.registerUploadMimeType("xml", MimeType.TEXT_XML);
+ EDGE.registerUploadMimeType("gif", "image/gif");
+ EDGE.registerUploadMimeType("jpeg", "image/jpeg");
+ EDGE.registerUploadMimeType("jpg", "image/jpeg");
+ EDGE.registerUploadMimeType("png", "image/png");
+ EDGE.registerUploadMimeType("webp", "image/webp");
+ EDGE.registerUploadMimeType("mp4", "video/mp4");
+ EDGE.registerUploadMimeType("m4v", "video/mp4");
+ EDGE.registerUploadMimeType("m4a", "audio/x-m4a");
+ EDGE.registerUploadMimeType("mp3", "audio/mpeg");
+ EDGE.registerUploadMimeType("ogv", "video/ogg");
+ EDGE.registerUploadMimeType("ogm", "video/ogg");
+ EDGE.registerUploadMimeType("ogg", "audio/ogg");
+ EDGE.registerUploadMimeType("oga", "audio/ogg");
+ EDGE.registerUploadMimeType("opus", "audio/ogg");
+ EDGE.registerUploadMimeType("webm", "video/webm");
+ EDGE.registerUploadMimeType("wav", "audio/wav");
+ EDGE.registerUploadMimeType("flac", "audio/flac");
+ EDGE.registerUploadMimeType("xhtml", "application/xhtml+xml");
+ EDGE.registerUploadMimeType("xht", "application/xhtml+xml");
+ EDGE.registerUploadMimeType("xhtm", "application/xhtml+xml");
+ EDGE.registerUploadMimeType("txt", MimeType.TEXT_PLAIN);
+ EDGE.registerUploadMimeType("text", MimeType.TEXT_PLAIN);
FIREFOX_68.registerUploadMimeType("html", MimeType.TEXT_HTML);
FIREFOX_68.registerUploadMimeType("htm", MimeType.TEXT_HTML);
@@ -347,13 +356,14 @@ public final class BrowserVersion implements Serializable {
FIREFOX_68.registerUploadMimeType("png", "image/png");
FIREFOX_68.registerUploadMimeType("mp3", "audio/mpeg");
FIREFOX_68.registerUploadMimeType("ogv", "video/ogg");
- FIREFOX_68.registerUploadMimeType("ogm", "video/x-ogm");
+ FIREFOX_68.registerUploadMimeType("ogm", "video/ogg");
FIREFOX_68.registerUploadMimeType("ogg", "video/ogg");
FIREFOX_68.registerUploadMimeType("oga", "audio/ogg");
FIREFOX_68.registerUploadMimeType("opus", "audio/ogg");
FIREFOX_68.registerUploadMimeType("webm", "video/webm");
FIREFOX_68.registerUploadMimeType("webp", "image/webp");
FIREFOX_68.registerUploadMimeType("wav", "audio/wav");
+ FIREFOX_68.registerUploadMimeType("flac", "audio/x-flac");
FIREFOX_68.registerUploadMimeType("xhtml", "application/xhtml+xml");
FIREFOX_68.registerUploadMimeType("xht", "application/xhtml+xml");
FIREFOX_68.registerUploadMimeType("txt", MimeType.TEXT_PLAIN);
@@ -372,13 +382,14 @@ public final class BrowserVersion implements Serializable {
FIREFOX.registerUploadMimeType("png", "image/png");
FIREFOX.registerUploadMimeType("mp3", "audio/mpeg");
FIREFOX.registerUploadMimeType("ogv", "video/ogg");
- FIREFOX.registerUploadMimeType("ogm", "video/x-ogm");
+ FIREFOX.registerUploadMimeType("ogm", "video/ogg");
FIREFOX.registerUploadMimeType("ogg", "video/ogg");
FIREFOX.registerUploadMimeType("oga", "audio/ogg");
FIREFOX.registerUploadMimeType("opus", "audio/ogg");
FIREFOX.registerUploadMimeType("webm", "video/webm");
FIREFOX.registerUploadMimeType("webp", "image/webp");
FIREFOX.registerUploadMimeType("wav", "audio/wav");
+ FIREFOX.registerUploadMimeType("flac", "audio/x-flac");
FIREFOX.registerUploadMimeType("xhtml", "application/xhtml+xml");
FIREFOX.registerUploadMimeType("xht", "application/xhtml+xml");
FIREFOX.registerUploadMimeType("txt", MimeType.TEXT_PLAIN);
@@ -396,16 +407,21 @@ public final class BrowserVersion implements Serializable {
INTERNET_EXPLORER.registerUploadMimeType("m4v", "video/mp4");
INTERNET_EXPLORER.registerUploadMimeType("m4a", "audio/mp4");
INTERNET_EXPLORER.registerUploadMimeType("mp3", "audio/mpeg");
- INTERNET_EXPLORER.registerUploadMimeType("ogm", "video/x-ogm");
- INTERNET_EXPLORER.registerUploadMimeType("ogg", "application/ogg");
+ INTERNET_EXPLORER.registerUploadMimeType("ogv", "video/ogg");
+ INTERNET_EXPLORER.registerUploadMimeType("ogm", "video/ogg");
+ INTERNET_EXPLORER.registerUploadMimeType("ogg", "audio/ogg");
+ INTERNET_EXPLORER.registerUploadMimeType("oga", "audio/ogg");
+ INTERNET_EXPLORER.registerUploadMimeType("opus", "audio/ogg");
+ INTERNET_EXPLORER.registerUploadMimeType("webm", "video/webm");
INTERNET_EXPLORER.registerUploadMimeType("wav", "audio/wav");
+ INTERNET_EXPLORER.registerUploadMimeType("flac", "audio/x-flac");
INTERNET_EXPLORER.registerUploadMimeType("xhtml", "application/xhtml+xml");
INTERNET_EXPLORER.registerUploadMimeType("xht", "application/xhtml+xml");
INTERNET_EXPLORER.registerUploadMimeType("txt", MimeType.TEXT_PLAIN);
// flush plugin (windows version)
final PluginConfiguration flash = new PluginConfiguration("Shockwave Flash",
- "Shockwave Flash 32.0 r0", "32.0.0.330", "Flash32_32_0_0_330.ocx"); //NOPMD
+ "Shockwave Flash 32.0 r0", "32.0.0.387", "Flash.ocx"); //NOPMD
flash.getMimeTypes().add(new PluginConfiguration.MimeType("application/x-shockwave-flash",
"Shockwave Flash", "swf"));
INTERNET_EXPLORER.plugins_.add(flash);
@@ -424,7 +440,7 @@ public final class BrowserVersion implements Serializable {
private String browserLanguage_ = LANGUAGE_ENGLISH_US;
private String cpuClass_ = CPU_CLASS_X86;
private boolean onLine_ = true;
- private String platform_ = PLATFORM_WIN64;
+ private String platform_ = PLATFORM_WIN32;
private String systemLanguage_ = LANGUAGE_ENGLISH_US;
private TimeZone systemTimezone_ = TimeZone.getTimeZone(TIMEZONE_NEW_YORK);
private String userAgent_;
@@ -471,8 +487,8 @@ private void initFeatures() {
if (isChrome()) {
expectedBrowser = SupportedBrowser.CHROME;
}
- else if (isFirefox60()) {
- expectedBrowser = SupportedBrowser.FF60;
+ else if (isEdge()) {
+ expectedBrowser = SupportedBrowser.EDGE;
}
else if (isFirefox68()) {
expectedBrowser = SupportedBrowser.FF68;
@@ -542,19 +558,20 @@ public boolean isChrome() {
/**
* Returns {@code true} if this BrowserVersion instance represents some
- * version of Firefox.
- * @return whether or not this version is a version of a Firefox browser
+ * version of Microsoft Edge.
+ * @return whether or not this version is a version of a Chrome browser
*/
- public boolean isFirefox() {
- return getNickname().startsWith("FF");
+ public boolean isEdge() {
+ return getNickname().startsWith("Edge");
}
/**
- * INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
- * @return whether or not this version version 60 of a Firefox browser
+ * Returns {@code true} if this BrowserVersion instance represents some
+ * version of Firefox.
+ * @return whether or not this version is a version of a Firefox browser
*/
- public boolean isFirefox60() {
- return isFirefox() && getBrowserVersionNumeric() == 60;
+ public boolean isFirefox() {
+ return getNickname().startsWith("FF");
}
/**
diff --git a/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java b/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java
index 6a8cdb719..111f0fc79 100644
--- a/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java
+++ b/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java
@@ -16,7 +16,6 @@
import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.CHROME;
import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF;
-import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF60;
import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF68;
import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.IE;
@@ -49,12 +48,16 @@ public enum BrowserVersionFeatures {
@BrowserFeature(CHROME)
ANCHOR_SEND_PING_REQUEST,
+ /** Browser does not check the CSP. */
+ @BrowserFeature(IE)
+ CONTENT_SECURITY_POLICY_IGNORED,
+
/** Background image is 'initial'. */
@BrowserFeature(CHROME)
CSS_BACKGROUND_INITIAL,
/** Background image is 'rgba(0, 0, 0, 0)'. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
CSS_BACKGROUND_RGBA,
/** Computed {@code zIndex} is not considered. */
@@ -62,25 +65,21 @@ public enum BrowserVersionFeatures {
CSS_COMPUTED_NO_Z_INDEX,
/** Is display style of HtmlDialog is 'none'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
CSS_DIALOG_NONE,
/** Is display style 'block'. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
CSS_DISPLAY_BLOCK,
/** Is display style 'block'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
CSS_DISPLAY_BLOCK2,
/** {@code CSSFontFaceRule.cssText} has no {@code \n}. */
@BrowserFeature(CHROME)
CSS_FONTFACERULE_CSSTEXT_CHROME_STYLE,
- /** {@code CSSFontFaceRule.cssText} has no {@code \n}. */
- @BrowserFeature(FF60)
- CSS_FONTFACERULE_CSSTEXT_FF60_STYLE,
-
/** {@code CSSFontFaceRule.cssText} uses {@code \n\t} to break lines. */
@BrowserFeature(IE)
CSS_FONTFACERULE_CSSTEXT_IE_STYLE,
@@ -91,11 +90,11 @@ public enum BrowserVersionFeatures {
/** The default value of the display property for the 'input' tags of type
* radio or checkbox is 'inline-block'. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
CSS_INPUT_DISPLAY_RADIO_CHECKBOX_INLINE_BLOCK,
/** 'initial' is a valid length value. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
CSS_LENGTH_INITIAL,
/** Is display style of HtmlNoEmbed is 'inline'. */
@@ -115,11 +114,11 @@ public enum BrowserVersionFeatures {
CSS_PROGRESS_DISPLAY_INLINE,
/** The default value of the display property for the 'rp' tag is 'none'. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
CSS_RP_DISPLAY_NONE,
/** The default value of the display property for the 'rt' tag is always 'ruby-text'. */
- @BrowserFeature({IE, FF68, FF60})
+ @BrowserFeature({IE, FF68})
CSS_RT_DISPLAY_RUBY_TEXT_ALWAYS,
/** The default value of the display property for the 'ruby' tag is 'inline'. */
@@ -154,7 +153,7 @@ public enum BrowserVersionFeatures {
CSS_ZINDEX_TYPE_INTEGER,
/** Add the 'Referer' header to a request triggered by window.showModalDialog. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
DIALOGWINDOW_REFERER,
/** IE removes all child text nodes, but FF preserves the first. */
@@ -162,27 +161,31 @@ public enum BrowserVersionFeatures {
DOM_NORMALIZE_REMOVE_CHILDREN,
/** Indicates whether returnValue behaves HTML5-like with an empty string default. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
EVENT_BEFORE_UNLOAD_RETURN_VALUE_IS_HTML5_LIKE,
/** Triggers the onfocus onfocusin blur onfocusout events in this order. */
- @BrowserFeature(CHROME)
+ @BrowserFeature({CHROME, FF, FF68})
EVENT_FOCUS_FOCUS_IN_BLUR_OUT,
/** Triggers the onfocusin onfocus onfocusout blur events in this order. */
@BrowserFeature(IE)
EVENT_FOCUS_IN_FOCUS_OUT_BLUR,
+ /** Triggers the onfocus event when focusing the body on load. */
+ @BrowserFeature({IE, FF, FF68})
+ EVENT_FOCUS_ON_LOAD,
+
/** Indicates whether returning 'null' from a property handler is meaningful. */
@BrowserFeature(IE)
EVENT_HANDLER_NULL_RETURN_IS_MEANINGFUL,
/** Mouse events are triggered on disabled elements also. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
EVENT_MOUSE_ON_DISABLED,
/** Triggers "onchange" event handler after "onclick" event handler. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
EVENT_ONCHANGE_AFTER_ONCLICK,
/** Triggers "onclick" event handler for the select only, not for the clicked option. */
@@ -194,15 +197,15 @@ public enum BrowserVersionFeatures {
EVENT_ONCLICK_USES_POINTEREVENT,
/** CloseEvent can not be created by calling document.createEvent('CloseEvent'). */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
EVENT_ONCLOSE_DOCUMENT_CREATE_NOT_SUPPORTED,
/** CloseEvent initCloseEvent is available but throws an exception when called. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
EVENT_ONCLOSE_INIT_CLOSE_EVENT_THROWS,
/** Event.bubbles and Event.cancelable are false in 'onhashchange' event handler. */
- @BrowserFeature({CHROME, IE})
+ @BrowserFeature({CHROME, FF, IE})
EVENT_ONHASHCHANGE_BUBBLES_FALSE,
/** Triggers "onload" event if internal javascript loaded. */
@@ -210,7 +213,7 @@ public enum BrowserVersionFeatures {
EVENT_ONLOAD_INTERNAL_JAVASCRIPT,
/** MessageEvent default data value is null. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
EVENT_ONMESSAGE_DEFAULT_DATA_NULL,
/** Does not trigger "onmousedown" event handler for the select options. */
@@ -222,7 +225,7 @@ public enum BrowserVersionFeatures {
EVENT_ONMOUSEDOWN_NOT_FOR_SELECT_OPTION,
/** FF triggers a mouseover event even if the option is disabled. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
EVENT_ONMOUSEOVER_FOR_DISABLED_OPTION,
/** IE never triggers a mouseover event for select options. */
@@ -238,19 +241,19 @@ public enum BrowserVersionFeatures {
EVENT_ONMOUSEUP_NOT_FOR_SELECT_OPTION,
/** PopStateEvent can not be created by calling document.createEvent('PopStateEvent'). */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
EVENT_ONPOPSTATE_DOCUMENT_CREATE_NOT_SUPPORTED,
/** Supports event type 'BeforeUnloadEvent'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
EVENT_TYPE_BEFOREUNLOADEVENT,
/** Supports event type 'HashChangeEvent'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
EVENT_TYPE_HASHCHANGEEVENT,
/** Supports vendor specific event type 'KeyEvents'. */
- @BrowserFeature({FF68, FF60})
+ @BrowserFeature(FF68)
EVENT_TYPE_KEY_EVENTS,
/** Supports vendor specific event type 'MouseWheelEvent'. */
@@ -274,15 +277,15 @@ public enum BrowserVersionFeatures {
FOCUS_BODY_ELEMENT_AT_START,
/** Indicates if a form field is directly reachable by its new name once this has been changed. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
FORMFIELD_REACHABLE_BY_NEW_NAMES,
/** Indicates if a form field is directly reachable by its original name once this has been changed. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
FORMFIELD_REACHABLE_BY_ORIGINAL_NAME,
/** Form elements are able to refer to the for by using the from attribute. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
FORM_FORM_ATTRIBUTE_SUPPORTED,
/** Form formxxx parameters not supported for input type image. */
@@ -290,12 +293,12 @@ public enum BrowserVersionFeatures {
FORM_PARAMETRS_NOT_SUPPORTED_FOR_IMAGE,
/** Form submit forces a real request also if only the hash was changed. */
- @BrowserFeature(CHROME)
+ @BrowserFeature({CHROME, FF})
FORM_SUBMISSION_DOWNLOWDS_ALSO_IF_ONLY_HASH_CHANGED,
/** Form submit takes care of fields outside the form linked to the form
* using the form attribute. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
FORM_SUBMISSION_FORM_ATTRIBUTE,
/** Form submit includes the Cache-Control: max-age=0 header. */
@@ -319,13 +322,9 @@ public enum BrowserVersionFeatures {
HTMLABBREVIATED,
/** HtmlAllCollection.item returns null instead of undefined if an element was not found. */
- @BrowserFeature({IE, FF60})
+ @BrowserFeature(IE)
HTMLALLCOLLECTION_DO_NOT_CONVERT_STRINGS_TO_NUMBER,
- /** HtmlAllCollection.item(int) is not supported. */
- @BrowserFeature(FF60)
- HTMLALLCOLLECTION_DO_NOT_SUPPORT_PARANTHESES,
-
/** HtmlAllCollection.item(int) requires int parameter. */
@BrowserFeature({CHROME, FF, FF68})
HTMLALLCOLLECTION_INTEGER_INDEX,
@@ -335,11 +334,11 @@ public enum BrowserVersionFeatures {
HTMLALLCOLLECTION_NO_COLLECTION_FOR_MANY_HITS,
/** HtmlAllCollection.namedItem returns null instead of undefined if an element was not found. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTMLALLCOLLECTION_NULL_IF_NAMED_ITEM_NOT_FOUND,
/** Should {@link com.gargoylesoftware.htmlunit.javascript.host.html.HTMLBaseFontElement#isEndTagForbidden}. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
HTMLBASEFONT_END_TAG_FORBIDDEN,
/** Base tag href attribute is empty if not defined. */
@@ -347,7 +346,7 @@ public enum BrowserVersionFeatures {
HTMLBASE_HREF_DEFAULT_EMPTY,
/** HtmlCollection.item() supports also doubles as index. */
- @BrowserFeature({IE, FF60})
+ @BrowserFeature(IE)
HTMLCOLLECTION_ITEM_FUNCT_SUPPORTS_DOUBLE_INDEX_ALSO,
/** HtmlCollection.item[] supports also doubles as index. */
@@ -363,7 +362,7 @@ public enum BrowserVersionFeatures {
HTMLCOLLECTION_NAMED_ITEM_ID_FIRST,
/** HtmlCollection returns null instead of undefined if an element was not found. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTMLCOLLECTION_NULL_IF_NOT_FOUND,
/** HtmlAllCollection(int) is not supported. */
@@ -371,13 +370,9 @@ public enum BrowserVersionFeatures {
HTMLCOLLECTION_SUPPORTS_PARANTHESES,
/** Is the default display style {@code inline} for quirks mode. */
- @BrowserFeature({FF68, FF60})
+ @BrowserFeature(FF68)
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,
@@ -389,7 +384,7 @@ public enum BrowserVersionFeatures {
/**
/** {@code document.getElementsByName} returns an empty list if called with the empty string.
*/
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
HTMLDOCUMENT_ELEMENTS_BY_NAME_EMPTY,
/** We can used function in detached documents. */
@@ -412,7 +407,7 @@ public enum BrowserVersionFeatures {
HTMLDOCUMENT_GET_PREFERS_STANDARD_FUNCTIONS,
/** Allows invalid 'align' values. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTMLELEMENT_ALIGN_INVALID,
/** Detaching the active element from the dom tree triggers no keyup event. */
@@ -423,16 +418,20 @@ public enum BrowserVersionFeatures {
@BrowserFeature(CHROME)
HTMLELEMENT_REMOVE_ACTIVE_TRIGGERS_BLUR_EVENT,
+ /** An empty (but given) tabindex attribute is treated as -1. */
+ @BrowserFeature(FF68)
+ HTMLELEMENT_TABINDEX_EMPTY_IS_MINUS_ONE,
+
/** Handle blank source like empty. */
@BrowserFeature({IE, CHROME})
HTMLIMAGE_BLANK_SRC_AS_EMPTY,
/** Empty src attribute sets display to false. */
- @BrowserFeature({IE, FF, FF68, FF60})
+ @BrowserFeature({IE, FF, FF68})
HTMLIMAGE_EMPTY_SRC_DISPLAY_FALSE,
/** Is document.cretaeElement('image') an HTMLElement. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
HTMLIMAGE_HTMLELEMENT,
/** Is document.cretaeElement('image') an HTMLUnknownElement. */
@@ -440,7 +439,7 @@ public enum BrowserVersionFeatures {
HTMLIMAGE_HTMLUNKNOWNELEMENT,
/** Mark the image as invisible if no src attribute defined. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTMLIMAGE_INVISIBLE_NO_SRC,
/** Clicking an image input submits the value as param if defined. */
@@ -460,7 +459,7 @@ public enum BrowserVersionFeatures {
HTMLINPUT_FILES_UNDEFINED,
/** HTMLInputElement: type {@code file} selectionSart/End are null. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTMLINPUT_FILE_SELECTION_START_END_NULL,
/** HTMLInputElement color type is not supported. */
@@ -468,11 +467,11 @@ public enum BrowserVersionFeatures {
HTMLINPUT_TYPE_COLOR_NOT_SUPPORTED,
/** HTMLInputElement date and time types are supported. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTMLINPUT_TYPE_DATETIME_SUPPORTED,
/** HTMLInputElement date and time types are not supported. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
HTMLINPUT_TYPE_MONTH_NOT_SUPPORTED,
/** Should the HTMLElement of {@code keygen} have no end tag. */
@@ -488,15 +487,15 @@ public enum BrowserVersionFeatures {
HTMLOPTION_PREVENT_DISABLED,
/** Removing the selected attribute, de selects the option. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTMLOPTION_REMOVE_SELECTED_ATTRIB_DESELECTS,
/** Trims the value of the type attribute before to verify it. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTMLSCRIPT_TRIM_TYPE,
/** Setting defaultValue updates the value also. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTMLTEXTAREA_SET_DEFAULT_VALUE_UPDATES_VALUE,
/** When calculation the value of a text area ie uses a recursive approach. */
@@ -504,11 +503,11 @@ public enum BrowserVersionFeatures {
HTMLTEXTAREA_USE_ALL_TEXT_CHILDREN,
/** Should {@link com.gargoylesoftware.htmlunit.javascript.host.html.HTMLTrackElement#isEndTagForbidden}. */
- @BrowserFeature({FF, FF68, FF60, IE})
+ @BrowserFeature({FF, FF68, IE})
HTMLTRACK_END_TAG_FORBIDDEN,
/** HTML attributes are always lower case. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTML_ATTRIBUTE_LOWER_CASE,
/** Expand #0 to #000000. */
@@ -528,7 +527,7 @@ public enum BrowserVersionFeatures {
HTML_COMMAND_TAG,
/** HTML parser supports the 'isindex' tag. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTML_ISINDEX_TAG,
/** HTML parser supports the 'main' tag. */
@@ -540,7 +539,7 @@ public enum BrowserVersionFeatures {
HTML_OBJECT_CLASSID,
/** Additionally support dates in format "d/M/yyyy". */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
HTTP_COOKIE_EXTENDED_DATE_PATTERNS_1,
/** Dates format pattern 2. */
@@ -554,14 +553,14 @@ public enum BrowserVersionFeatures {
HTTP_COOKIE_EXTRACT_PATH_FROM_LOCATION,
/** domain '.org' is handled as 'org'. */
- @BrowserFeature({FF, FF68, FF60, IE})
+ @BrowserFeature({FF, FF68, IE})
HTTP_COOKIE_REMOVE_DOT_FROM_ROOT_DOMAINS,
/** Indicates that the start date for two digits cookies is 1970
* instead of 2000 (Two digits years are interpreted as 20xx
* if before 1970 and as 19xx otherwise).
*/
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTTP_COOKIE_START_DATE_1970,
/** Browser sends Sec-Fetch headers. */
@@ -569,15 +568,15 @@ public enum BrowserVersionFeatures {
HTTP_HEADER_SEC_FETCH,
/** Browser sends Upgrade-Insecure-Requests header. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTTP_HEADER_UPGRADE_INSECURE_REQUEST,
/** Supports redirect via 308 code. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
HTTP_REDIRECT_308,
/** Setting the property align to arbitrary values is allowed. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_ALIGN_ACCEPTS_ARBITRARY_VALUES,
/** Setting the property align of an input element ignores the value
@@ -599,11 +598,11 @@ public enum BrowserVersionFeatures {
JS_ANCHOR_PATHNAME_DETECT_WIN_DRIVES_URL,
/** The anchor pathname property returns nothing for broken http(s) url's. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_ANCHOR_PATHNAME_NONE_FOR_BROKEN_URL,
/** The anchor pathname property returns nothing for none http(s) url's. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_ANCHOR_PATHNAME_NONE_FOR_NONE_HTTP_URL,
/** The anchor pathname prefixes file url's with '/'. */
@@ -619,27 +618,31 @@ public enum BrowserVersionFeatures {
JS_ANCHOR_PROTOCOL_COLON_UPPER_CASE_DRIVE_LETTERS,
/** The anchor protocol property returns 'http' for broken http(s) url's. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_ANCHOR_PROTOCOL_HTTP_FOR_BROKEN_URL,
+ /** An area element without a href attribute is focusable. */
+ @BrowserFeature({FF, FF68})
+ JS_AREA_WITHOUT_HREF_FOCUSABLE,
+
/** Indicates that "someFunction.arguments" is a read-only view of the function's argument. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_ARGUMENTS_READ_ONLY_ACCESSED_FROM_FUNCTION,
/** Indicates that the {@code Array} supports construction properties. */
- @BrowserFeature({FF68, FF60})
+ @BrowserFeature(FF68)
JS_ARRAY_CONSTRUCTION_PROPERTIES,
/** Indicates that Array.from() is supported. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_ARRAY_FROM,
/** firstChild and lastChild returns null for Attr (like IE does). */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_ATTR_FIRST_LAST_CHILD_RETURNS_NULL,
/** HTMLBGSoundElement reported as HTMLUnknownElement. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_BGSOUND_AS_UNKNOWN,
/** Body {@code margin} is 8px. */
@@ -666,14 +669,6 @@ public enum BrowserVersionFeatures {
@BrowserFeature(CHROME)
JS_CLIENTHIGHT_INPUT_17,
- /** ClientHeight for input is 21. */
- @BrowserFeature(FF60)
- JS_CLIENTHIGHT_INPUT_21,
-
- /** ClientRectList toString reports the first item. */
- @BrowserFeature(FF60)
- JS_CLIENTRECTLIST_DEFAUL_VALUE_FROM_FIRST,
-
/** ClientRectList.item throws instead of returning null if an element was not found. */
@BrowserFeature(IE)
JS_CLIENTRECTLIST_THROWS_IF_ITEM_NOT_FOUND,
@@ -682,20 +677,20 @@ public enum BrowserVersionFeatures {
@BrowserFeature(IE)
JS_CLIENTWIDTH_INPUT_TEXT_143,
- /** ClientWidth for text/password input is 169. */
+ /** ClientWidth for text/password input is 173. */
@BrowserFeature(CHROME)
- JS_CLIENTWIDTH_INPUT_TEXT_169,
+ JS_CLIENTWIDTH_INPUT_TEXT_173,
/** Is window can be used as Console. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_CONSOLE_HANDLE_WINDOW,
/** item is enumerated before length property of CSSRuleList. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_CSSRULELIST_ENUM_ITEM_LENGTH,
/** Date.toLocaleDateString() returns a short form (d.M.yyyy). */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DATE_LOCALE_DATE_SHORT,
/** {@link DateTimeFormat} uses the Unicode Character {@code 'LEFT-TO-RIGHT MARK'}. */
@@ -715,7 +710,7 @@ public enum BrowserVersionFeatures {
JS_DOCTYPE_NOTATIONS_NULL,
/** Indicates that document.createAttribute converts the local name to lowercase. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOCUMENT_CREATE_ATTRUBUTE_LOWER_CASE,
/** The browser supports the design mode 'Inherit'. */
@@ -727,7 +722,7 @@ public enum BrowserVersionFeatures {
JS_DOCUMENT_FORMS_FUNCTION_SUPPORTED,
/** The browser has selection {@code rangeCount}. */
- @BrowserFeature({FF, FF68, FF60, IE})
+ @BrowserFeature({FF, FF68, IE})
JS_DOCUMENT_SELECTION_RANGE_COUNT,
/** Javascript property document.domain doesn't allow to set domain of {@code about:blank}. */
@@ -739,99 +734,99 @@ public enum BrowserVersionFeatures {
JS_DOMIMPLEMENTATION_CREATE_HTMLDOCOMENT_REQUIRES_TITLE,
/** If document.implementation.hasFeature() supports 'Core 1.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_CORE_3,
/** If document.implementation.hasFeature() supports 'CSS2 1.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_CSS2_1,
/** If document.implementation.hasFeature() supports 'CSS2 3.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_CSS2_3,
/** If document.implementation.hasFeature() supports 'CSS3 1.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_CSS3_1,
/** If document.implementation.hasFeature() supports 'CSS3 2.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_CSS3_2,
/** If document.implementation.hasFeature() supports 'CSS3 3.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_CSS3_3,
/** If document.implementation.hasFeature() supports 'CSS 1.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_CSS_1,
/** If document.implementation.hasFeature() supports 'CSS 2.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_CSS_2,
/** If document.implementation.hasFeature() supports 'CSS 3.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_CSS_3,
/** If document.implementation.hasFeature() supports 'Events 1.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_EVENTS_1,
/** If document.implementation.hasFeature() supports 'KeyboardEvents'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_KEYBOARDEVENTS,
/** If document.implementation.hasFeature() supports 'LS'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_LS,
/** If document.implementation.hasFeature() supports 'MutationNameEvents'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_MUTATIONNAMEEVENTS,
/** If document.implementation.hasFeature() supports 'Range 1.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_RANGE_1,
/** If document.implementation.hasFeature() supports 'Range 3.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_RANGE_3,
/** If document.implementation.hasFeature() supports 'StyleSheets 2.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_STYLESHEETS,
/** If document.implementation.hasFeature() supports 'http://www.w3.org/TR/SVG11/feature#BasicStructure 1.2'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_SVG_BASICSTRUCTURE_1_2,
/** If document.implementation.hasFeature() supports 'MutationNameEvents'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_TEXTEVENTS,
/** If document.implementation.hasFeature() supports 'UIEvents 2.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_UIEVENTS_2,
/** If document.implementation.hasFeature() supports 'Validation'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_VALIDATION,
/** If document.implementation.hasFeature() supports 'Views 1.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_VIEWS_1,
/** If document.implementation.hasFeature() supports 'Views 3.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_VIEWS_3,
/** If document.implementation.hasFeature() supports 'XPath 3.0'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMIMPLEMENTATION_FEATURE_XPATH,
/** DOMParser.parseFromString(..) handles an empty String as error. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMPARSER_EMPTY_STRING_IS_ERROR,
/** DOMParser.parseFromString(..) throws an exception if an error occurs. */
@@ -839,11 +834,11 @@ public enum BrowserVersionFeatures {
JS_DOMPARSER_EXCEPTION_ON_ERROR,
/** {@code DOMParser.parseFromString(..)} creates a document containing a {@code parsererror} element. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMPARSER_PARSERERROR_ON_ERROR,
/** DOMTokenList returns false instead of throwing an exception when receiver is blank. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMTOKENLIST_CONTAINS_RETURNS_FALSE_FOR_BLANK,
/** DOMTokenList uses an enhanced set of whitespace chars. */
@@ -855,15 +850,15 @@ public enum BrowserVersionFeatures {
JS_DOMTOKENLIST_GET_NULL_IF_OUTSIDE,
/** DOMTokenList ignores duplicates when determining the length. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMTOKENLIST_LENGTH_IGNORES_DUPLICATES,
/** DOMTokenList removed all whitespace chars during add. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMTOKENLIST_REMOVE_WHITESPACE_CHARS_ON_ADD,
/** DOMTokenList removed all whitespace chars during remove. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_DOMTOKENLIST_REMOVE_WHITESPACE_CHARS_ON_REMOVE,
/** Javascript property function {@code delete} throws an exception if the given count is negative. */
@@ -883,7 +878,7 @@ public enum BrowserVersionFeatures {
JS_ERROR_CAPTURE_STACK_TRACE,
/** Javascript {@code Error.stack}. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_ERROR_STACK,
/** Javascript {@code Error.stackTraceLimit}. */
@@ -891,23 +886,24 @@ public enum BrowserVersionFeatures {
JS_ERROR_STACK_TRACE_LIMIT,
/** Javascript event.keyCode and event.charCode distinguish between printable and not printable keys. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_EVENT_DISTINGUISH_PRINTABLE_KEY,
+ /** do not trigger the onload event if the frame content
+ * was not shown because of the csp. */
+ @BrowserFeature({FF, FF68})
+ JS_EVENT_LOAD_SUPPRESSED_BY_CONTENT_SECURIRY_POLICY,
+
/** Whether {@code FileReader} includes content type or not. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_FILEREADER_CONTENT_TYPE,
/** Whether {@code FileReader} includes {@code base64} for empty content or not. */
@BrowserFeature(IE)
JS_FILEREADER_EMPTY_NULL,
- /** FF uses a different date format for file.lastModifiedDate. */
- @BrowserFeature({FF, FF68, FF60})
- JS_FILE_SHORT_DATE_FORMAT,
-
/** Indicates that the action property will not be expanded if defined as empty string. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_FORM_ACTION_EXPANDURL_NOT_DEFINED,
/** use content-type text/plain if the file type is unknown'. */
@@ -915,7 +911,7 @@ public enum BrowserVersionFeatures {
JS_FORM_DATA_CONTENT_TYPE_PLAIN_IF_FILE_TYPE_UNKNOWN,
/** form.dispatchEvent(e) submits the form if the event is of type 'submit'. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_FORM_DISPATCHEVENT_SUBMITS,
/** Setting form.encoding only allowed for valid encodings. */
@@ -930,20 +926,24 @@ public enum BrowserVersionFeatures {
@BrowserFeature(IE)
JS_FORM_USABLE_AS_FUNCTION,
+ /** contentDocument throws if the frame document access is denied. */
+ @BrowserFeature(IE)
+ JS_FRAME_CONTENT_DOCUMENT_ACCESS_DENIED_THROWS,
+
/** Indicates if the method toSource exists on the native objects. */
- @BrowserFeature({FF68, FF60})
+ @BrowserFeature(FF68)
JS_FUNCTION_TOSOURCE,
/** HTMLElement instead of HTMLUnknownElement for elements with hyphen ('-'). */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_HTML_HYPHEN_ELEMENT_CLASS_NAME,
/** HTMLElement instead of HTMLUnknownElement for ruby elements. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_HTML_RUBY_ELEMENT_CLASS_NAME,
/** Executes the {@code onload} handler, regardless of the whether the element was already attached to the page. */
- @BrowserFeature({FF, FF68, FF60, IE})
+ @BrowserFeature({FF, FF68, IE})
JS_IFRAME_ALWAYS_EXECUTE_ONLOAD,
/** Ignore the last line containing uncommented. */
@@ -958,20 +958,20 @@ public enum BrowserVersionFeatures {
* The complete property returns also true, if the image download was failing
* or if there was no src at all.
*/
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_IMAGE_COMPLETE_RETURNS_TRUE_FOR_NO_REQUEST,
/**
* Is the prototype of {@link com.gargoylesoftware.htmlunit.javascript.host.html.Image} the same as
* {@link com.gargoylesoftware.htmlunit.javascript.host.html.HTMLImageElement}.
*/
- @BrowserFeature({FF, FF68, FF60, IE})
+ @BrowserFeature({FF, FF68, IE})
JS_IMAGE_PROTOTYPE_SAME_AS_HTML_IMAGE,
/**
* Getting the width and height of an image tag with an empty source returns 0x0.
*/
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_IMAGE_WIDTH_HEIGHT_EMPTY_SOURCE_RETURNS_0x0,
/**
@@ -985,7 +985,7 @@ public enum BrowserVersionFeatures {
* Getting the width and height of an image tag without a source returns 24x24;
* for invalid values returns 0x0.
*/
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_IMAGE_WIDTH_HEIGHT_RETURNS_24x24_0x0,
/**
@@ -1004,15 +1004,15 @@ public enum BrowserVersionFeatures {
JS_INNER_TEXT_LF,
/** Indicates that innerText setter supports null values. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_INNER_TEXT_VALUE_NULL,
/** Ignore negative selection starts. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_INPUT_IGNORE_NEGATIVE_SELECTION_START,
/** Chrome/FF returns null for selectionStart/selectionEnd. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_INPUT_NUMBER_SELECTION_START_END_NULL,
/** Setting the type property of an input converts the type to lowercase. */
@@ -1020,11 +1020,11 @@ public enum BrowserVersionFeatures {
JS_INPUT_SET_TYPE_LOWERCASE,
/** Setting the value of an Input Date will check for correct format. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_INPUT_SET_VALUE_DATE_SUPPORTED,
/** Setting the value of an Input Email to blank will result in an empty value. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_INPUT_SET_VALUE_EMAIL_TRIMMED,
/** Setting the value of an Input Text/Password/TextArea resets the selection. */
@@ -1032,7 +1032,7 @@ public enum BrowserVersionFeatures {
JS_INPUT_SET_VALUE_MOVE_SELECTION_TO_START,
/** Setting the value of an Input URL to blank will result in an empty value. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_INPUT_SET_VALUE_URL_TRIMMED,
/** Indicates that Intl.v8BreakIterator is supported. */
@@ -1040,15 +1040,15 @@ public enum BrowserVersionFeatures {
JS_INTL_V8_BREAK_ITERATOR,
/** Indicates that isSearchProviderInstalled returns zero instead of undefined. */
- @BrowserFeature({CHROME, FF60, IE})
+ @BrowserFeature({CHROME, IE})
JS_IS_SEARCH_PROVIDER_INSTALLED_ZERO,
- /** Property form for label always returns null. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
- JS_LABEL_FORM_NULL,
+ /** The property form of a label returns the form the label is assigned to. */
+ @BrowserFeature(IE)
+ JS_LABEL_FORM_OF_SELF,
/** location.hash returns an encoded hash. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_LOCATION_HASH_HASH_IS_ENCODED,
/**
@@ -1057,7 +1057,7 @@ public enum BrowserVersionFeatures {
* for url 'http://localhost/something/#%C3%BC'.
* IE evaluates to #%C3%BC.
*/
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_LOCATION_HASH_IS_DECODED,
/**
@@ -1073,7 +1073,7 @@ public enum BrowserVersionFeatures {
* for url 'http://localhost/something/#ü'.
* IE evaluates to #ü.
*/
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_LOCATION_HREF_HASH_IS_ENCODED,
/** Reload sends a referrer header. */
@@ -1085,7 +1085,7 @@ public enum BrowserVersionFeatures {
JS_MEDIA_LIST_ALL,
/** Indicates that an empty media list is represented by the string 'all'. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_MEDIA_LIST_EMPTY_STRING,
/** Type property of menu has always '' as value. */
@@ -1093,7 +1093,7 @@ public enum BrowserVersionFeatures {
JS_MENU_TYPE_EMPTY,
/** Type property of menu returns the current (maybe invalid) value. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_MENU_TYPE_PASS,
/** Indicates if the String representation of a native function is without newline. */
@@ -1105,11 +1105,11 @@ public enum BrowserVersionFeatures {
JS_NATIVE_FUNCTION_TOSTRING_NEW_LINE,
/** Indicates if the String representation of a native function has a newline for empty parameter list. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_NATIVE_FUNCTION_TOSTRING_NL,
/** Navigator.doNotTrack returns unspecified if not set. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_NAVIGATOR_DO_NOT_TRACK_UNSPECIFIED,
/** Node.contains returns false instead of throwing an exception. */
@@ -1120,16 +1120,8 @@ public enum BrowserVersionFeatures {
@BrowserFeature(IE)
JS_NODE_INSERT_BEFORE_REF_OPTIONAL,
- /** Children are enumerated. */
- @BrowserFeature(IE)
- JS_NODE_LIST_ENUMERATE_CHILDREN,
-
- /** Functions are enumerated. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
- JS_NODE_LIST_ENUMERATE_FUNCTIONS,
-
/** Indicates that Object.getOwnPropertySymbols() is supported. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_OBJECT_GET_OWN_PROPERTY_SYMBOLS,
/** Indicates that someObj.offsetParent returns null, it someObj has fixed style. */
@@ -1150,11 +1142,11 @@ public enum BrowserVersionFeatures {
/** Indicates that HTMLPhraseElements returning 'HTMLElement'
* as class name. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_PHRASE_COMMON_CLASS_NAME,
/** Indicates that the {@link PopStateEvent}.{@code state} is cloned. */
- @BrowserFeature({CHROME, IE})
+ @BrowserFeature(IE)
JS_POP_STATE_EVENT_CLONE_STATE,
/** Indicates that the {@code pre.width} is string. */
@@ -1162,7 +1154,7 @@ public enum BrowserVersionFeatures {
JS_PRE_WIDTH_STRING,
/** Indicates that the {@code Object.getOwnPropertyDescriptor.get} contains name. */
- @BrowserFeature({FF, FF68, FF60, IE})
+ @BrowserFeature({FF, FF68, IE})
JS_PROPERTY_DESCRIPTOR_NAME,
/** Indicates that the {@code Object.getOwnPropertyDescriptor.get} starts with a new line. */
@@ -1170,7 +1162,7 @@ public enum BrowserVersionFeatures {
JS_PROPERTY_DESCRIPTOR_NEW_LINE,
/** Support {@code Reflect}. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_REFLECT,
/** RegExp.lastParen returns an empty string if the RegExp has too many groups. */
@@ -1197,14 +1189,9 @@ public enum BrowserVersionFeatures {
JS_SELECTOR_TEXT_LOWERCASE,
/** Indicates that setting the value to null has no effect. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_SELECT_FILE_THROWS,
- /** When expanding the options collection by setting the length don't add
- * an empty text node. */
- @BrowserFeature(FF60)
- JS_SELECT_OPTIONS_ADD_EMPTY_TEXT_CHILD_WHEN_EXPANDING,
-
/** Indicates that select.options has a wong class name. */
@BrowserFeature(IE)
JS_SELECT_OPTIONS_HAS_SELECT_CLASS_NAME,
@@ -1225,16 +1212,12 @@ public enum BrowserVersionFeatures {
@BrowserFeature({CHROME, FF, FF68})
JS_SELECT_OPTIONS_REMOVE_IGNORE_IF_INDEX_NEGATIVE,
- /** Indicates that select.options.remove ignores the call if index is too large. */
- @BrowserFeature({CHROME, FF, FF68, IE})
- JS_SELECT_OPTIONS_REMOVE_IGNORE_IF_INDEX_TOO_LARGE,
-
/** Indicates that select.options[i] throws an exception if the requested index is negative. */
@BrowserFeature(IE)
JS_SELECT_OPTIONS_REMOVE_THROWS_IF_NEGATIV,
/** Indicates that select.options.remove ignores the call if index is too large. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_SELECT_REMOVE_IGNORE_IF_INDEX_OUTSIDE,
/** Indicates that select.value = 'val' only checks the value attribute and
@@ -1247,17 +1230,13 @@ public enum BrowserVersionFeatures {
JS_STORAGE_GET_FROM_ITEMS,
/** Whether to add to the storage even preserved words. */
- @BrowserFeature({FF, FF68, FF60, IE})
+ @BrowserFeature({FF, FF68, IE})
JS_STORAGE_PRESERVED_INCLUDED,
/** Stylesheet list contains only active style sheets. */
@BrowserFeature(CHROME)
JS_STYLESHEETLIST_ACTIVE_ONLY,
- /** Indicates if style.setProperty ignores case when determining the priority. */
- @BrowserFeature({CHROME, FF, FF68, IE})
- JS_STYLE_SET_PROPERTY_IMPORTANT_IGNORES_CASE,
-
/** IE supports accessing unsupported style elements via getter
* like val = elem.style.htmlunit;.
*/
@@ -1265,16 +1244,16 @@ public enum BrowserVersionFeatures {
JS_STYLE_UNSUPPORTED_PROPERTY_GETTER,
/** Indicates wordSpacing support percent values. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_STYLE_WORD_SPACING_ACCEPTS_PERCENT,
/** Indicates that trying to access the style property with a wrong index returns undefined
* instead of "". */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_STYLE_WRONG_INDEX_RETURNS_UNDEFINED,
/** Supports Symbol. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_SYMBOL,
/** The width cell height does not return negative values. */
@@ -1294,11 +1273,11 @@ public enum BrowserVersionFeatures {
JS_TABLE_COLUMN_WIDTH_NO_NEGATIVE_VALUES,
/** The width column property has a value of 'null' for null. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_TABLE_COLUMN_WIDTH_NULL_STRING,
/** Calling deleteCell without an index throws an exception. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_TABLE_ROW_DELETE_CELL_REQUIRES_INDEX,
/** Set span zo zero if provided value is invalid. */
@@ -1332,7 +1311,7 @@ public enum BrowserVersionFeatures {
JS_TEXT_AREA_SET_COLS_THROWS_EXCEPTION,
/** Setting the property {@code maxLength} throws an exception, if the provided value is less than 0. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_TEXT_AREA_SET_MAXLENGTH_NEGATIVE_THROWS_EXCEPTION,
/** Setting the property {@code rows} throws an exception, if the provided value is less than 0. */
@@ -1346,11 +1325,11 @@ public enum BrowserVersionFeatures {
JS_TEXT_AREA_SET_ROWS_THROWS_EXCEPTION,
/** Setting the value processes null as null value. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_TEXT_AREA_SET_VALUE_NULL,
/** Indicates that TreeWalker.expandEntityReferences is always {@code false}. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_TREEWALKER_EXPAND_ENTITY_REFERENCES_FALSE,
/**
@@ -1361,20 +1340,24 @@ public enum BrowserVersionFeatures {
JS_TREEWALKER_FILTER_FUNCTION_ONLY,
/** Setting the property align to arbitrary values is allowed. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_TYPE_ACCEPTS_ARBITRARY_VALUES,
+ /** URLSearchParams iterator is named only Iterator in Chrome. */
+ @BrowserFeature(CHROME)
+ JS_URL_SEARCH_PARMS_ITERATOR_SIMPLE_NAME,
+
/** Setting the property valign converts to lowercase. */
@BrowserFeature(IE)
JS_VALIGN_CONVERTS_TO_LOWERCASE,
/** Allow inheriting parent constants
* in {@link com.gargoylesoftware.htmlunit.javascript.host.event.WebGLContextEvent}. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_WEBGL_CONTEXT_EVENT_CONSTANTS,
/** Setting the property width/height to arbitrary values is allowed. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_WIDTH_HEIGHT_ACCEPTS_ARBITRARY_VALUES,
/**
@@ -1396,7 +1379,7 @@ public enum BrowserVersionFeatures {
@BrowserFeature(IE)
JS_WINDOW_FORMFIELDS_ACCESSIBLE_BY_NAME,
- /** Support for accessing the frame of a window by id additionally to using the name ({FF, FF68, FF60}). */
+ /** Support for accessing the frame of a window by id additionally to using the name ({FF, FF68}). */
@BrowserFeature(IE)
JS_WINDOW_FRAMES_ACCESSIBLE_BY_ID,
@@ -1405,25 +1388,31 @@ public enum BrowserVersionFeatures {
JS_WINDOW_FRAME_BY_ID_RETURNS_WINDOW,
/**
- * Difference of window.outer/inner height is 63.
+ * Difference of window.outer/inner height is 132.
*/
- @BrowserFeature(IE)
- JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_63,
+ @BrowserFeature(CHROME)
+ JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_132,
/**
- * Difference of window.outer/inner height is 86.
+ * Difference of window.outer/inner height is 80.
*/
- @BrowserFeature({FF, FF68, FF60})
- JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_86,
+ @BrowserFeature(FF)
+ JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_80,
/**
- * Difference of window.outer/inner height is 92.
+ * Difference of window.outer/inner height is 81.
*/
- @BrowserFeature(CHROME)
- JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_92,
+ @BrowserFeature(FF68)
+ JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_81,
+
+ /**
+ * Difference of window.outer/inner height is 86.
+ */
+ @BrowserFeature(IE)
+ JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_86,
/** Window.getSelection returns null, if the window is not visible. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
JS_WINDOW_SELECTION_NULL_IF_INVISIBLE,
/** Window.top property is writable. */
@@ -1433,11 +1422,11 @@ public enum BrowserVersionFeatures {
/**
* Method importScripts does not check the content type for js.
*/
- @BrowserFeature({FF60, IE})
+ @BrowserFeature(IE)
JS_WORKER_IMPORT_SCRIPTS_ACCEPTS_ALL,
/** Supports XML. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_XML,
/** XMLDocument: .getElementsByTagName() to search the nodes by their local name. */
@@ -1445,7 +1434,7 @@ public enum BrowserVersionFeatures {
JS_XML_GET_ELEMENTS_BY_TAG_NAME_LOCAL,
/** XMLDocument: .getElementById() to return any element, not HTML specifically. */
- @BrowserFeature({CHROME, FF, FF68, FF60})
+ @BrowserFeature({CHROME, FF, FF68})
JS_XML_GET_ELEMENT_BY_ID__ANY_ELEMENT,
/** Indicates that new XMLSerializer().serializeToString(..) inserts a blank before self-closing a tag. */
@@ -1473,7 +1462,7 @@ public enum BrowserVersionFeatures {
JS_XSLT_TRANSFORM_INDENT,
/** With special keys [in .type(int)], should we trigger onkeypress event or not. */
- @BrowserFeature({FF, FF68, FF60})
+ @BrowserFeature({FF, FF68})
KEYBOARD_EVENT_SPECIAL_KEYPRESS,
/** Handle {@code } as {@code }. */
@@ -1481,7 +1470,7 @@ public enum BrowserVersionFeatures {
KEYGEN_AS_BLOCK,
/** Handle {@code } as {@code