org.htmlunit.BrowserVersionFeatures Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xlt Show documentation
Show all versions of xlt Show documentation
XLT (Xceptance LoadTest) is an extensive load and performance test tool developed and maintained by Xceptance.
The newest version!
/*
* Copyright (c) 2002-2024 Gargoyle Software Inc.
*
* 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
* https://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 org.htmlunit;
import static org.htmlunit.javascript.configuration.SupportedBrowser.CHROME;
import static org.htmlunit.javascript.configuration.SupportedBrowser.EDGE;
import static org.htmlunit.javascript.configuration.SupportedBrowser.FF;
import static org.htmlunit.javascript.configuration.SupportedBrowser.FF_ESR;
import static org.htmlunit.javascript.configuration.SupportedBrowser.IE;
import org.htmlunit.javascript.configuration.BrowserFeature;
import org.htmlunit.javascript.host.css.CSSGroupingRule;
import org.htmlunit.javascript.host.event.PopStateEvent;
import org.htmlunit.javascript.host.intl.DateTimeFormat;
/**
* Constants of various features of each {@link BrowserVersion}.
*
* @author Ahmed Ashour
* @author Marc Guillemot
* @author Sudhan Moghe
* @author Ronald Brill
* @author Frank Danek
* @author Carsten Steul
* @author Anton Demydenko
*/
public enum BrowserVersionFeatures {
/**
* If the "href" attribute of HtmlAnchor is defined but empty then IE interprets this as an empty filename.
* Example: The page https://www.htmlunit.org/test/myFile.html contains an anchor with an empty
* href attribute. Clicking the link in IE force the load of page https://www.htmlunit.org/test/.
* In Firefox the URL is unchanged.
*/
@BrowserFeature(IE)
ANCHOR_EMPTY_HREF_NO_FILENAME,
/** Ignore target when {@code href} is a javascript snippet. */
@BrowserFeature({CHROME, EDGE})
ANCHOR_SEND_PING_REQUEST,
/** Use Keep-Alive instead of keep-alive. */
@BrowserFeature(IE)
CONNECTION_KEEP_ALIVE_IE,
/** Browser does not check the CSP. */
@BrowserFeature(IE)
CONTENT_SECURITY_POLICY_IGNORED,
/** Background image is 'initial'. */
@BrowserFeature({CHROME, EDGE})
CSS_BACKGROUND_INITIAL,
/** Background image is 'rgba(0, 0, 0, 0)'. */
@BrowserFeature({FF, FF_ESR})
CSS_BACKGROUND_RGBA,
/** {@code CSSFontFaceRule.cssText} uses one more blank. */
@BrowserFeature(FF)
CSS_CSSTEXT_FF_STYLE,
/** {@code CSSFontFaceRule.cssText} uses {@code \n\t} to break lines. */
@BrowserFeature(IE)
CSS_CSSTEXT_IE_STYLE,
/** Is display style of HtmlDialog is 'none'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
CSS_DIALOG_NONE,
/** Is display style 'block'. */
@BrowserFeature({FF, FF_ESR})
CSS_DISPLAY_BLOCK,
/** Is display style 'block'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
CSS_DISPLAY_BLOCK2,
/** 'initial' is a valid length value. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
CSS_LENGTH_INITIAL,
/** The default value of the display property for the 'noscript' tag is 'inline' instead of the default one. */
@BrowserFeature({CHROME, EDGE})
CSS_NOSCRIPT_DISPLAY_INLINE,
/** Unit is not required when setting outline-width style. */
@BrowserFeature(IE)
CSS_OUTLINE_WIDTH_UNIT_NOT_REQUIRED,
/** The default value of the display property for the 'progress' tag is 'inline' instead of the default one. */
@BrowserFeature(IE)
CSS_PROGRESS_DISPLAY_INLINE,
/** Is the css pseudo selector -ms-input-placeholder supported. */
@BrowserFeature(IE)
CSS_PSEUDO_SELECTOR_MS_PLACEHHOLDER,
/** Is the css pseudo selector placeholder-shown supported. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
CSS_PSEUDO_SELECTOR_PLACEHOLDER_SHOWN,
/** The default value of the display property for the 'rp' tag is 'none'. */
@BrowserFeature({FF, FF_ESR})
CSS_RP_DISPLAY_NONE,
/** The default value of the display property for the 'rt' tag is always 'ruby-text'. */
@BrowserFeature({IE, FF_ESR})
CSS_RT_DISPLAY_RUBY_TEXT_ALWAYS,
/** Throws exception on setting a CSS style value to null. */
@BrowserFeature(IE)
CSS_SET_NULL_THROWS,
/** For disconnected items style properties are blank. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
CSS_STYLE_PROP_DISCONNECTED_IS_EMPTY,
/** For disconnected items style font property is blank. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
CSS_STYLE_PROP_FONT_DISCONNECTED_IS_EMPTY,
/** 'auto' is supported when setting vertical-align style. */
@BrowserFeature(IE)
CSS_VERTICAL_ALIGN_SUPPORTS_AUTO,
/** zIndex is of type Integer. Other values are ignored (''). */
@BrowserFeature(IE)
CSS_ZINDEX_TYPE_INTEGER,
/** Add the 'Referer' header to a request triggered by window.showModalDialog. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
DIALOGWINDOW_REFERER,
/** IE removes all child text nodes, but FF preserves the first. */
@BrowserFeature(IE)
DOM_NORMALIZE_REMOVE_CHILDREN,
/** Indicates whether returnValue behaves HTML5-like with an empty string default. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
EVENT_BEFORE_UNLOAD_RETURN_VALUE_IS_HTML5_LIKE,
/** The context menu MouseEvent has a detail of 1. */
@BrowserFeature(FF)
EVENT_CONTEXT_MENU_HAS_DETAIL_1,
/** Triggers the onfocus onfocusin blur onfocusout events in this order. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
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, FF_ESR})
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({CHROME, EDGE, FF, FF_ESR})
EVENT_MOUSE_ON_DISABLED,
/** AnimationEvent
can not be created by calling document.createEvent('AnimationEvent'). */
@BrowserFeature({FF, FF_ESR})
EVENT_ONANIMATION_DOCUMENT_CREATE_NOT_SUPPORTED,
/** Triggers "onchange" event handler after "onclick" event handler. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
EVENT_ONCHANGE_AFTER_ONCLICK,
/** Triggers "onclick" event handler for the select only, not for the clicked option. */
@BrowserFeature(IE)
EVENT_ONCLICK_FOR_SELECT_ONLY,
/** PointerEvent
has detail of 0. */
@BrowserFeature(IE)
EVENT_ONCLICK_POINTEREVENT_DETAIL_0,
/** Triggers 'onclick' event handler using PointerEvent
. */
@BrowserFeature({CHROME, EDGE, IE})
EVENT_ONCLICK_USES_POINTEREVENT,
/** CloseEvent
can not be created by calling document.createEvent('CloseEvent'). */
@BrowserFeature({FF, FF_ESR})
EVENT_ONCLOSE_DOCUMENT_CREATE_NOT_SUPPORTED,
/** Triggers 'ondblclick' event handler using PointerEvent
. */
@BrowserFeature(IE)
EVENT_ONDOUBLECLICK_USES_POINTEREVENT,
/** Triggers "onload" event if internal javascript loaded. */
@BrowserFeature(IE)
EVENT_ONLOAD_INTERNAL_JAVASCRIPT,
/** MessageEvent default data value is null. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
EVENT_ONMESSAGE_DEFAULT_DATA_NULL,
/** Does not trigger "onmousedown" event handler for the select options. */
@BrowserFeature(IE)
EVENT_ONMOUSEDOWN_FOR_SELECT_OPTION_TRIGGERS_ADDITIONAL_DOWN_FOR_SELECT,
/** Does not trigger "onmousedown" event handler for the select options. */
@BrowserFeature(IE)
EVENT_ONMOUSEDOWN_NOT_FOR_SELECT_OPTION,
/** FF triggers a mouseover event even if the option is disabled. */
@BrowserFeature({FF, FF_ESR})
EVENT_ONMOUSEOVER_FOR_DISABLED_OPTION,
/** IE never triggers a mouseover event for select options. */
@BrowserFeature(IE)
EVENT_ONMOUSEOVER_NEVER_FOR_SELECT_OPTION,
/** Does not trigger "onmousedown" event handler for the select options. */
@BrowserFeature(IE)
EVENT_ONMOUSEUP_FOR_SELECT_OPTION_TRIGGERS_ADDITIONAL_UP_FOR_SELECT,
/** Does not trigger "onmouseup" event handler for the select options. */
@BrowserFeature(IE)
EVENT_ONMOUSEUP_NOT_FOR_SELECT_OPTION,
/** PopStateEvent
can not be created by calling document.createEvent('PopStateEvent'). */
@BrowserFeature({FF, FF_ESR})
EVENT_ONPOPSTATE_DOCUMENT_CREATE_NOT_SUPPORTED,
/** Supports event type 'BeforeUnloadEvent'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
EVENT_TYPE_BEFOREUNLOADEVENT,
/** Supports event type 'HashChangeEvent'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
EVENT_TYPE_HASHCHANGEEVENT,
/** Supports vendor specific event type 'MouseWheelEvent'. */
@BrowserFeature(IE)
EVENT_TYPE_MOUSEWHEELEVENT,
/** Supports event type 'PointerEvent'. */
@BrowserFeature(IE)
EVENT_TYPE_POINTEREVENT,
/** Supports event type 'ProgressEvent'. */
@BrowserFeature(IE)
EVENT_TYPE_PROGRESSEVENT,
/** Supports event type 'TextEvent'. */
@BrowserFeature({CHROME, EDGE, IE})
EVENT_TYPE_TEXTEVENT,
/** Supports event type 'WheelEvent'. */
@BrowserFeature({CHROME, EDGE, IE})
EVENT_TYPE_WHEELEVENT,
/** For new pages the focus points to the body node. */
@BrowserFeature(IE)
FOCUS_BODY_ELEMENT_AT_START,
/** Indicates if a form field is directly reachable by its new name once this has been changed. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
FORMFIELD_REACHABLE_BY_NEW_NAMES,
/** Indicates if a form field is directly reachable by its original name once this has been changed. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
FORMFIELD_REACHABLE_BY_ORIGINAL_NAME,
/** Form elements are able to refer to the for by using the from attribute. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
FORM_FORM_ATTRIBUTE_SUPPORTED,
/** Form elements are able to refer to the for by using the from attribute. */
@BrowserFeature({CHROME, EDGE, IE})
FORM_IGNORE_REL_NOREFERRER,
/** Form formxxx parameters not supported for input type image. */
@BrowserFeature(IE)
FORM_PARAMETRS_NOT_SUPPORTED_FOR_IMAGE,
/** Form submit forces a real request also if only the hash was changed. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
FORM_SUBMISSION_DOWNLOWDS_ALSO_IF_ONLY_HASH_CHANGED,
/** Form submit includes the Cache-Control: max-age=0 header. */
@BrowserFeature({CHROME, EDGE})
FORM_SUBMISSION_HEADER_CACHE_CONTROL_MAX_AGE,
/** Form submit includes the Cache-Control: no-cache header. */
@BrowserFeature(IE)
FORM_SUBMISSION_HEADER_CACHE_CONTROL_NO_CACHE,
/** Forms are ignoring the rel='noreferrer' attribute. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
FORM_SUBMISSION_HEADER_ORIGIN,
/** Form submit is done without the hash part of the action url. */
@BrowserFeature(IE)
FORM_SUBMISSION_URL_WITHOUT_HASH,
/** If the frame src has 'about:' scheme always use 'about:blank' as source. */
@BrowserFeature({FF, FF_ESR, IE})
FRAME_LOCATION_ABOUT_BLANK_FOR_ABOUT_SCHEME,
/** */
@BrowserFeature(IE)
HTMLABBREVIATED,
/** HtmlAllCollection.item returns null instead of undefined if an element was not found. */
@BrowserFeature(IE)
HTMLALLCOLLECTION_DO_NOT_CONVERT_STRINGS_TO_NUMBER,
/** HtmlAllCollection.item(int) requires int parameter. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTMLALLCOLLECTION_INTEGER_INDEX,
/** HtmlCollection returns the first hit instead of a collection if many elements found. */
@BrowserFeature(IE)
HTMLALLCOLLECTION_NO_COLLECTION_FOR_MANY_HITS,
/** HtmlAllCollection.namedItem returns null instead of undefined if an element was not found. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTMLALLCOLLECTION_NULL_IF_NAMED_ITEM_NOT_FOUND,
/** Should org.htmlunit.javascript.host.html.HTMLBaseFontElement#isEndTagForbidden(). */
@BrowserFeature({FF, FF_ESR})
HTMLBASEFONT_END_TAG_FORBIDDEN,
/** Base tag href attribute is empty if not defined. */
@BrowserFeature(IE)
HTMLBASE_HREF_DEFAULT_EMPTY,
/** If type submit/reset the form update is triggered even if disabled. */
@BrowserFeature({FF_ESR, IE})
HTMLBUTTON_SUBMIT_IGNORES_DISABLED_STATE,
/** willValidate does not check the readonly property. */
@BrowserFeature({FF, FF_ESR, IE})
HTMLBUTTON_WILL_VALIDATE_IGNORES_READONLY,
/** HtmlCollection.item() supports also doubles as index. */
@BrowserFeature(IE)
HTMLCOLLECTION_ITEM_FUNCT_SUPPORTS_DOUBLE_INDEX_ALSO,
/** HtmlCollection.item[] supports also doubles as index. */
@BrowserFeature(IE)
HTMLCOLLECTION_ITEM_SUPPORTS_DOUBLE_INDEX_ALSO,
/** HtmlCollection.item searches by id also. */
@BrowserFeature(IE)
HTMLCOLLECTION_ITEM_SUPPORTS_ID_SEARCH_ALSO,
/** HtmlCollection.namedItem searches by id first. */
@BrowserFeature({CHROME, EDGE})
HTMLCOLLECTION_NAMED_ITEM_ID_FIRST,
/** HtmlCollection returns null instead of undefined if an element was not found. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTMLCOLLECTION_NULL_IF_NOT_FOUND,
/** HtmlAllCollection(int) is not supported. */
@BrowserFeature(IE)
HTMLCOLLECTION_SUPPORTS_PARANTHESES,
/** Is {@code document.charset} lower-case. */
@BrowserFeature(IE)
HTMLDOCUMENT_CHARSET_LOWERCASE,
/** Do document.bgColor/.alinkColor/.vlinkColor/.linkColor have value by default. */
@BrowserFeature(IE)
HTMLDOCUMENT_COLOR,
/** Calling cookies setter with blank string does not reset the cookies. */
@BrowserFeature({CHROME, EDGE})
HTMLDOCUMENT_COOKIES_IGNORE_BLANK,
/**
/** {@code document.getElementsByName} returns an empty list if called with the empty string.
*/
@BrowserFeature({FF, FF_ESR})
HTMLDOCUMENT_ELEMENTS_BY_NAME_EMPTY,
/** We can use functions in detached documents. */
@BrowserFeature(IE)
HTMLDOCUMENT_FUNCTION_DETACHED,
/** Calls to document.XYZ
also looks at frames. */
@BrowserFeature({CHROME, EDGE, IE})
HTMLDOCUMENT_GET_ALSO_FRAMES,
/** Calls to document.XYZ
looks at children with the specified ID and/or name. */
@BrowserFeature(IE)
HTMLDOCUMENT_GET_FOR_ID_AND_OR_NAME,
/**
* Calls to document.XYZ
should first look at standard functions before looking at elements
* named XYZ
.
*/
@BrowserFeature(IE)
HTMLDOCUMENT_GET_PREFERS_STANDARD_FUNCTIONS,
/** Allows invalid 'align' values. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTMLELEMENT_ALIGN_INVALID,
/** Detaching the active element from the dom tree triggers no keyup event. */
@BrowserFeature(IE)
HTMLELEMENT_DETACH_ACTIVE_TRIGGERS_NO_KEYUP_EVENT,
/** Removing the active element from the dom tree triggers the onblur event. */
@BrowserFeature({CHROME, EDGE})
HTMLELEMENT_REMOVE_ACTIVE_TRIGGERS_BLUR_EVENT,
/** Handle blank source like empty. */
@BrowserFeature({CHROME, EDGE, IE})
HTMLIMAGE_BLANK_SRC_AS_EMPTY,
/** Empty src attribute sets display to false. */
@BrowserFeature({IE, FF, FF_ESR})
HTMLIMAGE_EMPTY_SRC_DISPLAY_FALSE,
/** Is document.cretaeElement('image') an HTMLElement. */
@BrowserFeature({FF, FF_ESR})
HTMLIMAGE_HTMLELEMENT,
/** Is document.cretaeElement('image') an HTMLUnknownElement. */
@BrowserFeature({CHROME, EDGE})
HTMLIMAGE_HTMLUNKNOWNELEMENT,
/** Mark the image as invisible if no src attribute defined. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTMLIMAGE_INVISIBLE_NO_SRC,
/** Clicking an image input submits the value as param if defined. */
@BrowserFeature({CHROME, EDGE})
HTMLIMAGE_NAME_VALUE_PARAMS,
/** HTMLInputElement: minlength and maxlength attributes are supported. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTMLINPUT_ATTRIBUTE_MIN_MAX_LENGTH_SUPPORTED,
/** When clicking a {@code checkbox} or {@code radio} input the surrounding anchor is not clicked. */
@BrowserFeature({CHROME, EDGE})
HTMLINPUT_CHECKBOX_DOES_NOT_CLICK_SURROUNDING_ANCHOR,
/** When clicking an input the surrounding anchor is not clicked. */
@BrowserFeature(IE)
HTMLINPUT_DOES_NOT_CLICK_SURROUNDING_ANCHOR,
/** HTMLInputElement: {@code files} to be {@code undefined}. */
@BrowserFeature(IE)
HTMLINPUT_FILES_UNDEFINED,
/** HTMLInputElement: type {@code file} selectionSart/End are null. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTMLINPUT_FILE_SELECTION_START_END_NULL,
/** HTMLInputElement color type is not supported. */
@BrowserFeature(IE)
HTMLINPUT_TYPE_COLOR_NOT_SUPPORTED,
/** HTMLInputElement datetime-local type is supported. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTMLINPUT_TYPE_DATETIME_LOCAL_SUPPORTED,
/** HTMLInputElement date and time types are supported. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTMLINPUT_TYPE_DATETIME_SUPPORTED,
/** HTMLInputElement image type is not supported. */
@BrowserFeature({CHROME, EDGE})
HTMLINPUT_TYPE_IMAGE_IGNORES_CUSTOM_VALIDITY,
/** HTMLInputElement month type is supported. */
@BrowserFeature({CHROME, EDGE})
HTMLINPUT_TYPE_MONTH_SUPPORTED,
/** HTMLInputElement week type is supported. */
@BrowserFeature({CHROME, EDGE})
HTMLINPUT_TYPE_WEEK_SUPPORTED,
/** Should the HTMLElement of {@code keygen} have no end tag. */
@BrowserFeature(IE)
HTMLKEYGEN_END_TAG_FORBIDDEN,
/** If the type is present for a link only use if type is text/css. */
@BrowserFeature({CHROME, EDGE})
HTMLLINK_CHECK_TYPE_FOR_STYLESHEET,
/** */
@BrowserFeature(IE)
HTMLOPTION_PREVENT_DISABLED,
/** Removing the selected attribute, de selects the option. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTMLOPTION_REMOVE_SELECTED_ATTRIB_DESELECTS,
/** Trims the value of the type attribute before to verify it. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTMLSCRIPT_TRIM_TYPE,
/** willValidate returns always true. */
@BrowserFeature(IE)
HTMLSELECT_WILL_VALIDATE_ALWAYS_TRUE,
/** willValidate does not check the readonly property. */
@BrowserFeature({FF, FF_ESR})
HTMLSELECT_WILL_VALIDATE_IGNORES_READONLY,
/** Setting defaultValue updates the value also. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTMLTEXTAREA_SET_DEFAULT_VALUE_UPDATES_VALUE,
/** When calculation the value of a text area ie uses a recursive approach. */
@BrowserFeature(IE)
HTMLTEXTAREA_USE_ALL_TEXT_CHILDREN,
/** willValidate does not check the readonly property. */
@BrowserFeature(IE)
HTMLTEXTAREA_WILL_VALIDATE_IGNORES_READONLY,
/** Should org.htmlunit.javascript.host.html.HTMLTrackElement#isEndTagForbidden(). */
@BrowserFeature({FF, FF_ESR, IE})
HTMLTRACK_END_TAG_FORBIDDEN,
/** HTML attributes are always lower case. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTML_ATTRIBUTE_LOWER_CASE,
/** Expand #0 to #000000. */
@BrowserFeature(IE)
HTML_COLOR_EXPAND_ZERO,
/** Do not allow anything invalid in color, but restrict to valid values (names and hex digits) only. */
@BrowserFeature(IE)
HTML_COLOR_RESTRICT,
/** Convert the color (name and hex code) to lower case. */
@BrowserFeature(IE)
HTML_COLOR_TO_LOWER,
/** HTML parser supports the 'command' tag. */
@BrowserFeature({CHROME, EDGE, IE})
HTML_COMMAND_TAG,
/** HTML parser supports the 'isindex' tag. */
@BrowserFeature(IE)
HTML_ISINDEX_TAG,
/** HTML parser supports the 'main' tag. */
@BrowserFeature(IE)
HTML_MAIN_TAG,
/** Supports <object> {@code classid} attribute. */
@BrowserFeature(IE)
HTML_OBJECT_CLASSID,
/** Additionally support dates in format "d/M/yyyy". */
@BrowserFeature({FF, FF_ESR})
HTTP_COOKIE_EXTENDED_DATE_PATTERNS_1,
/** Dates format pattern 2. */
@BrowserFeature({CHROME, EDGE})
HTTP_COOKIE_EXTENDED_DATE_PATTERNS_2,
/** Indicates that the path is extracted from the location.
* Sample: from the location /foo/boo only /foo is used.
*/
@BrowserFeature(IE)
HTTP_COOKIE_EXTRACT_PATH_FROM_LOCATION,
/** domain '.org' is handled as 'org'. */
@BrowserFeature({FF, FF_ESR, 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, EDGE, FF, FF_ESR})
HTTP_COOKIE_START_DATE_1970,
/** Browser sends Sec-ch headers. */
@BrowserFeature({CHROME, EDGE})
HTTP_HEADER_CH_UA,
/** Browser sends Sec-Fetch headers. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTTP_HEADER_SEC_FETCH,
/** Browser sends Upgrade-Insecure-Requests header. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
HTTP_HEADER_UPGRADE_INSECURE_REQUEST,
/** Redirection is done without the hash. */
@BrowserFeature(IE)
HTTP_REDIRECT_WITHOUT_HASH,
/** Setting the property align to arbitrary values is allowed. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_ALIGN_ACCEPTS_ARBITRARY_VALUES,
/** Setting the property align of an input element ignores the value
* if the value is one of center, justify, left or right.
* For all other values an exception is still thrown.
*/
@BrowserFeature(IE)
JS_ALIGN_FOR_INPUT_IGNORES_VALUES,
/** The anchor hostname setter ignores blank url's. */
@BrowserFeature({FF, FF_ESR})
JS_ANCHOR_HOSTNAME_IGNORE_BLANK,
/** The anchor pathname detects url's starting with one letter as file url's. */
@BrowserFeature(FF_ESR)
JS_ANCHOR_PATHNAME_DETECT_WIN_DRIVES_URL,
/** The anchor pathname detects url's starting with one letter as file url's
* and replaces them with the file protocol. */
@BrowserFeature({CHROME, EDGE, IE})
JS_ANCHOR_PATHNAME_DETECT_WIN_DRIVES_URL_REPLACE,
/** The anchor pathname property returns nothing for broken http(s) url's. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_ANCHOR_PATHNAME_NONE_FOR_BROKEN_URL,
/** The anchor pathname prefixes file url's with '/'. */
@BrowserFeature({CHROME, EDGE, IE})
JS_ANCHOR_PATHNAME_PREFIX_WIN_DRIVES_URL,
/** The anchor protocol property returns ':' for broken http(s) url's. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_ANCHOR_PROTOCOL_COLON_FOR_BROKEN_URL,
/** The anchor protocol property converts drive letters to uppercase. */
@BrowserFeature({CHROME, EDGE})
JS_ANCHOR_PROTOCOL_COLON_UPPER_CASE_DRIVE_LETTERS,
/** The anchor protocol property returns 'http' for broken http(s) url's. */
@BrowserFeature({FF, FF_ESR})
JS_ANCHOR_PROTOCOL_HTTP_FOR_BROKEN_URL,
/** The anchor protocol property setter throws an error if the protocol is not valid. */
@BrowserFeature(IE)
JS_ANCHOR_PROTOCOL_INVALID_THROWS,
/**
* Javascript property anchors includes all anchors with a name or an id property.
* If not set name property is required.
*/
@BrowserFeature(IE)
JS_ANCHOR_REQUIRES_NAME_OR_ID,
/**
* Javascript fetch api is supported.
*/
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_API_FETCH,
/** An area element without a href attribute is focusable. */
@BrowserFeature({FF, FF_ESR})
JS_AREA_WITHOUT_HREF_FOCUSABLE,
/** Indicates that "someFunction.arguments" is a read-only view of the function's argument. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_ARGUMENTS_READ_ONLY_ACCESSED_FROM_FUNCTION,
/** Indicates that Array.from() is supported. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_ARRAY_FROM,
/** firstChild and lastChild returns null for Attr (like IE does). */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_ATTR_FIRST_LAST_CHILD_RETURNS_NULL,
/** AudioProcessingEvent ctor is callable. */
@BrowserFeature({CHROME, EDGE})
JS_AUDIO_PROCESSING_EVENT_CTOR,
/** HTMLBGSoundElement reported as HTMLUnknownElement. */
@BrowserFeature({FF, FF_ESR})
JS_BGSOUND_AS_UNKNOWN,
/** Whether {@code Blob} stores the content type case sensitive. */
@BrowserFeature(IE)
JS_BLOB_CONTENT_TYPE_CASE_SENSITIVE,
/** BlobEvent ctor requires a data value. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_BLOB_EVENT_REQUIRES_DATA,
/** Body {@code margin} is 8px. */
@BrowserFeature(IE)
JS_BODY_MARGINS_8,
/** HtmlElement.getBoundingClientRect throws an error if the element is not attached to the page. */
@BrowserFeature(IE)
JS_BOUNDINGCLIENTRECT_THROWS_IF_DISCONNECTED,
/** toDataURL for canvas returns the CHROME version of the PNG. */
@BrowserFeature({CHROME, EDGE})
JS_CANVAS_DATA_URL_CHROME_PNG,
/** toDataURL for canvas returns the IE version of the PNG. */
@BrowserFeature(IE)
JS_CANVAS_DATA_URL_IE_PNG,
/** Do not allow invalid clear values. */
@BrowserFeature(IE)
JS_CLEAR_RESTRICT,
/** ClientHeight for input is 17. */
@BrowserFeature({CHROME, EDGE})
JS_CLIENTHEIGHT_INPUT_17,
/** ClientHeight for input is 18. */
@BrowserFeature({FF, FF_ESR})
JS_CLIENTHEIGHT_INPUT_18,
/** ClientHeight for radio button and checkbox is 10. */
@BrowserFeature({FF, FF_ESR})
JS_CLIENTHEIGHT_RADIO_CHECKBOX_10,
/** ClientRectList.item throws instead of returning null if an element was not found. */
@BrowserFeature(IE)
JS_CLIENTRECTLIST_THROWS_IF_ITEM_NOT_FOUND,
/** ClientWidth for text/password input is 143. */
@BrowserFeature(IE)
JS_CLIENTWIDTH_INPUT_TEXT_143,
/** ClientWidth for text/password input is 173. */
@BrowserFeature({CHROME, EDGE})
JS_CLIENTWIDTH_INPUT_TEXT_173,
/** ClientWidth for radio button and checkbox is 10. */
@BrowserFeature({FF, FF_ESR})
JS_CLIENTWIDTH_RADIO_CHECKBOX_10,
/** Console has timeStamp() method. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_CONSOLE_TIMESTAMP,
/** item is enumerated before length property of CSSRuleList. */
@BrowserFeature({FF, FF_ESR})
JS_CSSRULELIST_ENUM_ITEM_LENGTH,
/** Date.toLocaleDateString()
returns a short form (d.M.yyyy). */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DATE_LOCALE_DATE_SHORT,
/** {@link DateTimeFormat} uses the Unicode Character {@code 'LEFT-TO-RIGHT MARK'}. */
@BrowserFeature(IE)
JS_DATE_WITH_LEFT_TO_RIGHT_MARK,
/** Javascript doctyp.entities returns null (FF10). */
@BrowserFeature(IE)
JS_DOCTYPE_ENTITIES_NULL,
/** Javascript doctyp.notations returns null (FF10). */
@BrowserFeature(IE)
JS_DOCTYPE_NOTATIONS_NULL,
/** Indicates that document.createAttribute converts the local name to lowercase. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOCUMENT_CREATE_ATTRUBUTE_LOWER_CASE,
/** The browser supports the design mode 'Inherit'. */
@BrowserFeature(IE)
JS_DOCUMENT_DESIGN_MODE_INHERIT,
/** Javascript document.evaluate creates a new result object even if provided as param. */
@BrowserFeature({CHROME, EDGE})
JS_DOCUMENT_EVALUATE_RECREATES_RESULT,
/** Javascript document.forms(...) supported. */
@BrowserFeature(IE)
JS_DOCUMENT_FORMS_FUNCTION_SUPPORTED,
/** The browser has selection {@code rangeCount}. */
@BrowserFeature({FF, FF_ESR, IE})
JS_DOCUMENT_SELECTION_RANGE_COUNT,
/** Javascript property document.domain doesn't allow setting domain of {@code about:blank}. */
@BrowserFeature(IE)
JS_DOCUMENT_SETTING_DOMAIN_THROWS_FOR_ABOUT_BLANK,
/** createHTMLDucument requires a title. */
@BrowserFeature(IE)
JS_DOMIMPLEMENTATION_CREATE_HTMLDOCOMENT_REQUIRES_TITLE,
/** If document.implementation.hasFeature() supports 'Core 1.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_CORE_3,
/** If document.implementation.hasFeature() supports 'CSS2 1.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_CSS2_1,
/** If document.implementation.hasFeature() supports 'CSS2 3.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_CSS2_3,
/** If document.implementation.hasFeature() supports 'CSS3 1.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_CSS3_1,
/** If document.implementation.hasFeature() supports 'CSS3 2.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_CSS3_2,
/** If document.implementation.hasFeature() supports 'CSS3 3.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_CSS3_3,
/** If document.implementation.hasFeature() supports 'CSS 1.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_CSS_1,
/** If document.implementation.hasFeature() supports 'CSS 2.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_CSS_2,
/** If document.implementation.hasFeature() supports 'CSS 3.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_CSS_3,
/** If document.implementation.hasFeature() supports 'Events 1.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_EVENTS_1,
/** If document.implementation.hasFeature() supports 'KeyboardEvents'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_KEYBOARDEVENTS,
/** If document.implementation.hasFeature() supports 'LS'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_LS,
/** If document.implementation.hasFeature() supports 'MutationNameEvents'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_MUTATIONNAMEEVENTS,
/** If document.implementation.hasFeature() supports 'Range 1.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_RANGE_1,
/** If document.implementation.hasFeature() supports 'Range 3.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_RANGE_3,
/** If document.implementation.hasFeature() supports 'StyleSheets 2.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_STYLESHEETS,
/** If document.implementation.hasFeature() supports 'http://www.w3.org/TR/SVG11/feature#BasicStructure 1.2'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_SVG_BASICSTRUCTURE_1_2,
/** If document.implementation.hasFeature() supports 'TextEvents'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_TEXTEVENTS,
/** If document.implementation.hasFeature() supports 'UIEvents 2.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_UIEVENTS_2,
/** If document.implementation.hasFeature() supports 'Validation'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_VALIDATION,
/** If document.implementation.hasFeature() supports 'Views 1.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_VIEWS_1,
/** If document.implementation.hasFeature() supports 'Views 3.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_VIEWS_3,
/** If document.implementation.hasFeature() supports 'XPath 3.0'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMIMPLEMENTATION_FEATURE_XPATH,
/** DOMParser.parseFromString(..)
handles an empty String as error. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMPARSER_EMPTY_STRING_IS_ERROR,
/** DOMParser.parseFromString(..)
throws an exception if an error occurs. */
@BrowserFeature(IE)
JS_DOMPARSER_EXCEPTION_ON_ERROR,
/** {@code DOMParser.parseFromString(..)} creates a document containing a {@code parsererror} element. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMPARSER_PARSERERROR_ON_ERROR,
/** DOMTokenList returns false instead of throwing an exception when receiver is blank. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMTOKENLIST_CONTAINS_RETURNS_FALSE_FOR_BLANK,
/** DOMTokenList uses an enhanced set of whitespace chars. */
@BrowserFeature(IE)
JS_DOMTOKENLIST_ENHANCED_WHITESPACE_CHARS,
/** DOMTokenList index access returns null if index is outside. */
@BrowserFeature(IE)
JS_DOMTOKENLIST_GET_NULL_IF_OUTSIDE,
/** DOMTokenList ignores duplicates when determining the length. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMTOKENLIST_LENGTH_IGNORES_DUPLICATES,
/** DOMTokenList removed all whitespace chars during add. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMTOKENLIST_REMOVE_WHITESPACE_CHARS_ON_ADD,
/** DOMTokenList removed all whitespace chars during remove. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_DOMTOKENLIST_REMOVE_WHITESPACE_CHARS_ON_REMOVE,
/** Javascript property function {@code delete} throws an exception if the given count is negative. */
@BrowserFeature(IE)
JS_DOM_CDATA_DELETE_THROWS_NEGATIVE_COUNT,
/** Indicates that attributeNS returns an empty string instead of null if not found. */
@BrowserFeature(IE)
JS_ELEMENT_GET_ATTRIBUTE_RETURNS_EMPTY,
/** Javascript {@code Error.captureStackTrace}. */
@BrowserFeature({CHROME, EDGE})
JS_ERROR_CAPTURE_STACK_TRACE,
/** Javascript {@code Error.stackTraceLimit}. */
@BrowserFeature({CHROME, EDGE, IE})
JS_ERROR_STACK_TRACE_LIMIT,
/** Javascript InputEvent reads the inputType property from data. */
@BrowserFeature({FF, FF_ESR})
JS_EVENT_INPUT_CTOR_INPUTTYPE,
/** Javascript KeyboardEvent reads the which property from data. */
@BrowserFeature({FF, FF_ESR, IE})
JS_EVENT_KEYBOARD_CTOR_WHICH,
/** do not trigger the onload event if the frame content
* was not shown because of the csp. */
@BrowserFeature({FF, FF_ESR})
JS_EVENT_LOAD_SUPPRESSED_BY_CONTENT_SECURIRY_POLICY,
/** Whether {@code FileReader} includes content type or not. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_FILEREADER_CONTENT_TYPE,
/** Whether {@code FileReader} includes {@code base64} for empty content or not. */
@BrowserFeature(IE)
JS_FILEREADER_EMPTY_NULL,
/** Indicates that the action property will not be expanded if defined as empty string. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_FORM_ACTION_EXPANDURL_NOT_DEFINED,
/** use content-type text/plain if the file type is unknown'. */
@BrowserFeature(IE)
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, FF_ESR})
JS_FORM_DISPATCHEVENT_SUBMITS,
/** Setting form.encoding only allowed for valid encodings. */
@BrowserFeature(IE)
JS_FORM_REJECT_INVALID_ENCODING,
/** Calling form.submit() twice forces double download. */
@BrowserFeature(IE)
JS_FORM_SUBMIT_FORCES_DOWNLOAD,
/** Support for document.formName('inputName'). */
@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,
/** Supports globalThis. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_GLOBAL_THIS,
/** The index parameter of {@link CSSGroupingRule#insertRule(String, Object)} is optional. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_GROUPINGRULE_INSERTRULE_INDEX_OPTIONAL,
/** HTMLElement instead of HTMLUnknownElement for elements with hyphen ('-'). */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_HTML_HYPHEN_ELEMENT_CLASS_NAME,
/** HTMLObject Validity isValid ignores custom error property. */
@BrowserFeature({CHROME, EDGE})
JS_HTML_OBJECT_VALIDITYSTATE_ISVALID_IGNORES_CUSTOM_ERROR,
/** HTMLElement instead of HTMLUnknownElement for ruby elements. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
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, FF_ESR, IE})
JS_IFRAME_ALWAYS_EXECUTE_ONLOAD,
/** Ignore the last line containing uncommented. */
@BrowserFeature(IE)
JS_IGNORES_LAST_LINE_CONTAINING_UNCOMMENTED,
/** Ignore the UTF8 BOM header when loading external js in some situations. */
@BrowserFeature(IE)
JS_IGNORES_UTF8_BOM_SOMETIMES,
/**
* The complete property returns also true, if the image download was failing
* or if there was no src at all.
*/
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_IMAGE_COMPLETE_RETURNS_TRUE_FOR_NO_REQUEST,
/**
* Getting the width and height of an image tag with an empty source returns 0x0.
*/
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_IMAGE_WIDTH_HEIGHT_EMPTY_SOURCE_RETURNS_0x0,
/**
* Getting the width and height of an image tag without a source returns 16x16;
* for invalid values returns 0.
*/
@BrowserFeature({CHROME, EDGE})
JS_IMAGE_WIDTH_HEIGHT_RETURNS_16x16_0x0,
/**
* Getting the width and height of an image tag without a source returns 24x24;
* for invalid values returns 0x0.
*/
@BrowserFeature({FF, FF_ESR})
JS_IMAGE_WIDTH_HEIGHT_RETURNS_24x24_0x0,
/**
* Getting the width and height of an image tag without a source returns 28x30;
* for invalid values returns same.
*/
@BrowserFeature(IE)
JS_IMAGE_WIDTH_HEIGHT_RETURNS_28x30_28x30,
/** Indicates that innerHTML adds the child also for null values. */
@BrowserFeature(IE)
JS_INNER_HTML_ADD_CHILD_FOR_NULL_VALUE,
/** Indicates that innerHTML uses {@code lf} instead of {@code lf}. */
@BrowserFeature(IE)
JS_INNER_HTML_LF,
/** Indicates that innerText adds script content also. */
@BrowserFeature(IE)
JS_INNER_TEXT_SCRIPT,
/** Indicates that innerText add a nl when reaching svg element. */
@BrowserFeature({CHROME, EDGE})
JS_INNER_TEXT_SVG_NL,
/** Indicates that innerText add svg title content also. */
@BrowserFeature(IE)
JS_INNER_TEXT_SVG_TITLE,
/** Indicates that innerText setter supports null values. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_INNER_TEXT_VALUE_NULL,
/** The value is ignored when the type of an input is changed. */
@BrowserFeature(IE)
JS_INPUT_CHANGE_TYPE_DROPS_VALUE,
/** The value is ignored when the type of an week/month input is changed. */
@BrowserFeature({CHROME, EDGE})
JS_INPUT_CHANGE_TYPE_DROPS_VALUE_WEEK_MONTH,
/** Ignore negative selection starts. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_INPUT_IGNORE_NEGATIVE_SELECTION_START,
/** FF accepts all chars. */
@BrowserFeature({FF, FF_ESR, IE})
JS_INPUT_NUMBER_ACCEPT_ALL,
/** FF comma at end is not an integer. */
@BrowserFeature({FF, FF_ESR})
JS_INPUT_NUMBER_DOT_AT_END_IS_DOUBLE,
/** Chrome/FF returns null for selectionStart/selectionEnd. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_INPUT_NUMBER_SELECTION_START_END_NULL,
/** Setting the type property of an input converts the type to lowercase. */
@BrowserFeature(IE)
JS_INPUT_SET_TYPE_LOWERCASE,
/** Setting of unsupported type value throw exception. */
@BrowserFeature(IE)
JS_INPUT_SET_UNSUPORTED_TYPE_EXCEPTION,
/** Setting the value of an Input Date will check for correct format. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_INPUT_SET_VALUE_DATE_SUPPORTED,
/** Setting the value of an Input Email to blank will result in an empty value. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_INPUT_SET_VALUE_EMAIL_TRIMMED,
/** Setting the value of an Input Text/Password/TextArea resets the selection. */
@BrowserFeature(IE)
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, EDGE, FF, FF_ESR})
JS_INPUT_URL_VALUE_TRIMMED,
/** Intl is named Object. */
@BrowserFeature(IE)
JS_INTL_NAMED_OBJECT,
/** Indicates that Intl.v8BreakIterator is supported. */
@BrowserFeature({CHROME, EDGE})
JS_INTL_V8_BREAK_ITERATOR,
/** Indicates that isSearchProviderInstalled returns zero instead of undefined. */
@BrowserFeature({CHROME, EDGE, IE})
JS_IS_SEARCH_PROVIDER_INSTALLED_ZERO,
/** 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, EDGE, FF, FF_ESR})
JS_LOCATION_HASH_HASH_IS_ENCODED,
/**
* Set this property if the browser evaluates
* window.location.hash to #ü (like Firefox)
* for url 'http://localhost/something/#%C3%BC'.
* IE evaluates to #%C3%BC.
*/
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_LOCATION_HASH_IS_DECODED,
/**
* Property location.hash returns '#' for urls ending with a hash
* sign (e.g. http://localhost/something/#).
*/
@BrowserFeature(IE)
JS_LOCATION_HASH_RETURNS_HASH_FOR_EMPTY_DEFINED,
/**
* Set this property if the browser evaluates
* window.location.hash to #%C3%BC; (like Firefox)
* for url 'http://localhost/something/#ü'.
* IE evaluates to #ü.
*/
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_LOCATION_HREF_HASH_IS_ENCODED,
/** Reload sends a referrer header. */
@BrowserFeature({CHROME, EDGE})
JS_LOCATION_RELOAD_REFERRER,
/** Indicates that an empty media list is represented by the string 'all'. */
@BrowserFeature(IE)
JS_MEDIA_LIST_ALL,
/** Indicates that an empty media list is represented by the string ''. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_MEDIA_LIST_EMPTY_STRING,
/** Type property of menu has always '' as value. */
@BrowserFeature(IE)
JS_MENU_TYPE_EMPTY,
/** Type property of menu returns the current (maybe invalid) value. */
@BrowserFeature({FF, FF_ESR})
JS_MENU_TYPE_PASS,
/** Indicates if the String representation of a native function is without newline. */
@BrowserFeature({CHROME, EDGE})
JS_NATIVE_FUNCTION_TOSTRING_COMPACT,
/** Indicates if the String representation of a native function begins and ends with a {@code \n}.*/
@BrowserFeature(IE)
JS_NATIVE_FUNCTION_TOSTRING_NEW_LINE,
/** Indicates if the String representation of a native function has a newline for empty parameter list. */
@BrowserFeature({FF, FF_ESR})
JS_NATIVE_FUNCTION_TOSTRING_NL,
/** Navigator.doNotTrack returns unspecified if not set. */
@BrowserFeature({FF, FF_ESR})
JS_NAVIGATOR_DO_NOT_TRACK_UNSPECIFIED,
/** Node.contains
returns false instead of throwing an exception. */
@BrowserFeature(IE)
JS_NODE_CONTAINS_RETURNS_FALSE_FOR_INVALID_ARG,
/** The reference argument of Node.insertBefore(..)
is optional. */
@BrowserFeature(IE)
JS_NODE_INSERT_BEFORE_REF_OPTIONAL,
/** Indicates that Object.assign() is supported. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_OBJECT_ASSIGN,
/** Indicates that Object.getOwnPropertySymbols() is supported. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_OBJECT_GET_OWN_PROPERTY_SYMBOLS,
/** Indicates that someObj.offsetParent returns null, it someObj has fixed style. */
@BrowserFeature({CHROME, EDGE, IE})
JS_OFFSET_PARENT_NULL_IF_FIXED,
/** element.outerHTML handles null value as string "null". */
@BrowserFeature(IE)
JS_OUTER_HTML_NULL_AS_STRING,
/** element.outerHTML removes all children from detached node. */
@BrowserFeature(IE)
JS_OUTER_HTML_REMOVES_CHILDREN_FOR_DETACHED,
/** element.outerHTML removes all children from detached node. */
@BrowserFeature({CHROME, EDGE})
JS_OUTER_HTML_THROWS_FOR_DETACHED,
/** Indicates that CSSPageRule.selectorText always returns an empty string. */
@BrowserFeature(IE)
JS_PAGERULE_SELECTORTEXT_EMPTY,
/** Indicates that HTMLPhraseElements returning 'HTMLElement'
* as class name. */
@BrowserFeature({FF, FF_ESR})
JS_PHRASE_COMMON_CLASS_NAME,
/** Indicates that the {@link PopStateEvent}.{@code state} is cloned. */
@BrowserFeature(IE)
JS_POP_STATE_EVENT_CLONE_STATE,
/** Indicates that the {@code pre.width} is string. */
@BrowserFeature(IE)
JS_PRE_WIDTH_STRING,
/** Supports Promise. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_PROMISE,
/** Indicates that the {@code Object.getOwnPropertyDescriptor.get} contains name. */
@BrowserFeature({FF, FF_ESR, IE})
JS_PROPERTY_DESCRIPTOR_NAME,
/** Indicates that the {@code Object.getOwnPropertyDescriptor.get} starts with a new line. */
@BrowserFeature(IE)
JS_PROPERTY_DESCRIPTOR_NEW_LINE,
/** Support {@code Reflect}. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_REFLECT,
/** RegExp.lastParen
returns an empty string if the RegExp has too many groups. */
@BrowserFeature(IE)
JS_REGEXP_EMPTY_LASTPAREN_IF_TOO_MANY_GROUPS,
/** RegExp group $0
returns the whole previous match (see {@link java.util.regex.Matcher#group()}). */
@BrowserFeature(IE)
JS_REGEXP_GROUP0_RETURNS_WHOLE_MATCH,
/**
* Javascript script tags handles a 204 (no content) response for the src
* attrib as error.
*/
@BrowserFeature(IE)
JS_SCRIPT_HANDLE_204_AS_ERROR,
/** Javascript script tags supports the 'for' and the 'event' attribute. */
@BrowserFeature(IE)
JS_SCRIPT_SUPPORTS_FOR_AND_EVENT_WINDOW,
/** Javascript selectorText property returns selectors in lower case. */
@BrowserFeature({CHROME, EDGE, IE})
JS_SELECTOR_TEXT_LOWERCASE,
/** Indicates that setting the value to null has no effect. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_SELECT_FILE_THROWS,
/** Indicates that select.options has a wong class name. */
@BrowserFeature(IE)
JS_SELECT_OPTIONS_HAS_SELECT_CLASS_NAME,
/** Ignore negative value when setting the length. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_SELECT_OPTIONS_IGNORE_NEGATIVE_LENGTH,
/** The 'in' operator returns always true for HtmlOptionsCollection. */
@BrowserFeature(IE)
JS_SELECT_OPTIONS_IN_ALWAYS_TRUE,
/** Indicates that select.options returns null if requested index is outside. */
@BrowserFeature(IE)
JS_SELECT_OPTIONS_NULL_FOR_OUTSIDE,
/** Indicates that select.options.remove ignores the call if index is too large. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_SELECT_OPTIONS_REMOVE_IGNORE_IF_INDEX_NEGATIVE,
/** 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, FF_ESR})
JS_SELECT_REMOVE_IGNORE_IF_INDEX_OUTSIDE,
/** Indicates that select.value = 'val' only checks the value attribute and
* not the option text. */
@BrowserFeature(IE)
JS_SELECT_SET_VALUES_CHECKS_ONLY_VALUE_ATTRIBUTE,
/** Whether to get any property from the items first. */
@BrowserFeature(IE)
JS_STORAGE_GET_FROM_ITEMS,
/** Whether to add to the storage even preserved words. */
@BrowserFeature({FF, FF_ESR, IE})
JS_STORAGE_PRESERVED_INCLUDED,
/** Indicates that string.includes() is supported. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_STRING_INCLUDES,
/** Indicates that string.startsWith() and .endWith() are supported. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_STRING_REPEAT,
/** Indicates that string.startsWith() and .endWith() are supported. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_STRING_STARTS_ENDS_WITH,
/** Indicates that string.trimLeft() and .trimRight() are supported. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_STRING_TRIM_LEFT_RIGHT,
/** Stylesheet list contains only active style sheets. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_STYLESHEETLIST_ACTIVE_ONLY,
/** IE supports accessing unsupported style elements via getter
* like val = elem.style.htmlunit;.
*/
@BrowserFeature(IE)
JS_STYLE_UNSUPPORTED_PROPERTY_GETTER,
/** Indicates wordSpacing support percent values. */
@BrowserFeature({FF, FF_ESR})
JS_STYLE_WORD_SPACING_ACCEPTS_PERCENT,
/** Indicates that trying to access the style property with a wrong index returns undefined
* instead of "". */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_STYLE_WRONG_INDEX_RETURNS_UNDEFINED,
/** Supports Symbol. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_SYMBOL,
/** The width cell height does not return negative values. */
@BrowserFeature(IE)
JS_TABLE_CELL_HEIGHT_DOES_NOT_RETURN_NEGATIVE_VALUES,
/** The width cell offset calculation takes border into account. */
@BrowserFeature(IE)
JS_TABLE_CELL_OFFSET_INCLUDES_BORDER,
/** The width cell property does not return negative values. */
@BrowserFeature(IE)
JS_TABLE_CELL_WIDTH_DOES_NOT_RETURN_NEGATIVE_VALUES,
/** The width column property does not return negative values. */
@BrowserFeature(IE)
JS_TABLE_COLUMN_WIDTH_NO_NEGATIVE_VALUES,
/** The width column property has a value of 'null' for null. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_TABLE_COLUMN_WIDTH_NULL_STRING,
/** Calling deleteCell without an index throws an exception. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_TABLE_ROW_DELETE_CELL_REQUIRES_INDEX,
/** Set span zo zero if provided value is invalid. */
@BrowserFeature({CHROME, EDGE})
JS_TABLE_SPAN_SET_ZERO_IF_INVALID,
/** Throws an exception if the value for column span is less than one. */
@BrowserFeature(IE)
JS_TABLE_SPAN_THROWS_EXCEPTION_IF_INVALID,
/** Indicates that table elements supports the values "top", "bottom", "middle", "baseline". */
@BrowserFeature(IE)
JS_TABLE_VALIGN_SUPPORTS_IE_VALUES,
/** Getting the property maxLength if it is not defined in the DOM returns MAX_INT.
* FF and Chrome return -1.
*/
@BrowserFeature(IE)
JS_TEXT_AREA_GET_MAXLENGTH_MAX_INT,
/** Setting the property cols throws an exception, if the provided value is less than 0.
* FF ignores the provided value in this case.
*/
@BrowserFeature(IE)
JS_TEXT_AREA_SET_COLS_NEGATIVE_THROWS_EXCEPTION,
/** Setting the property cols throws an exception, if the provided value is not convertible into an integer.
* FF ignores the provided value in this case and sets cols to 0.
*/
@BrowserFeature(IE)
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, EDGE, FF, FF_ESR})
JS_TEXT_AREA_SET_MAXLENGTH_NEGATIVE_THROWS_EXCEPTION,
/** Setting the property {@code rows} throws an exception, if the provided value is less than 0. */
@BrowserFeature(IE)
JS_TEXT_AREA_SET_ROWS_NEGATIVE_THROWS_EXCEPTION,
/** Setting the property rows throws an exception, if the provided value is not convertible into an integer.
* FF ignores the provided value in this case and sets rows to 0.
*/
@BrowserFeature(IE)
JS_TEXT_AREA_SET_ROWS_THROWS_EXCEPTION,
/** Setting the value processes null as null value. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_TEXT_AREA_SET_VALUE_NULL,
/** Indicates that TreeWalker.expandEntityReferences
is always {@code false}. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_TREEWALKER_EXPAND_ENTITY_REFERENCES_FALSE,
/**
* Indicates that the filter to be used by the TreeWalker has to be a function (so no object with a method
* acceptNode(..)
is supported).
*/
@BrowserFeature(IE)
JS_TREEWALKER_FILTER_FUNCTION_ONLY,
/** Setting the property align to arbitrary values is allowed. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_TYPE_ACCEPTS_ARBITRARY_VALUES,
/** Setting the property valign converts to lowercase. */
@BrowserFeature(IE)
JS_VALIGN_CONVERTS_TO_LOWERCASE,
/** Indicates that WeakSet is supported. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_WEAK_SET,
/** Setting the property width/height to arbitrary values is allowed. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_WIDTH_HEIGHT_ACCEPTS_ARBITRARY_VALUES,
/**
* The window.ActiveXObject is special in IE
*
* http://msdn.microsoft.com/en-us/library/ie/dn423948%28v=vs.85%29.aspx.
*/
@BrowserFeature(IE)
JS_WINDOW_ACTIVEXOBJECT_HIDDEN,
/** Changing the opener of a window to something not null and not a window is not valid. */
@BrowserFeature(IE)
JS_WINDOW_CHANGE_OPENER_ONLY_WINDOW_OBJECT,
/** window.getComputedStyle works with pseudo selectors without colon in front. */
@BrowserFeature({CHROME, EDGE})
JS_WINDOW_COMPUTED_STYLE_PSEUDO_ACCEPT_WITHOUT_COLON,
/** window.name
returns also form fields (e.g. input, textarea). */
@BrowserFeature(IE)
JS_WINDOW_FORMFIELDS_ACCESSIBLE_BY_NAME,
/** Support for accessing the frame of a window by id additionally to using the name. */
@BrowserFeature(IE)
JS_WINDOW_FRAMES_ACCESSIBLE_BY_ID,
/** window..frames['id']
returns the frame window instead of the frame element. */
@BrowserFeature(IE)
JS_WINDOW_FRAME_BY_ID_RETURNS_WINDOW,
/** Javascript InstallTrigger property set to null. */
@BrowserFeature({FF, FF_ESR})
JS_WINDOW_INSTALL_TRIGGER_NULL,
/**
* Difference of window.outer/inner height is 131.
*/
@BrowserFeature(EDGE)
JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_131,
/**
* Difference of window.outer/inner height is 138.
*/
@BrowserFeature(CHROME)
JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_138,
/**
* Difference of window.outer/inner height is 86.
*/
@BrowserFeature(IE)
JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_86,
/**
* Difference of window.outer/inner height is 91.
*/
@BrowserFeature({FF, FF_ESR})
JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_91,
/** Window.getSelection returns null, if the window is not visible. */
@BrowserFeature({FF, FF_ESR})
JS_WINDOW_SELECTION_NULL_IF_INVISIBLE,
/** Window.top property is writable. */
@BrowserFeature(IE)
JS_WINDOW_TOP_WRITABLE,
/**
* Method importScripts does not check the content type for js.
*/
@BrowserFeature(IE)
JS_WORKER_IMPORT_SCRIPTS_ACCEPTS_ALL,
/** Supports XML. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_XML,
/** XMLDocument: .getElementsByTagName() to search the nodes by their local name. */
@BrowserFeature(IE)
JS_XML_GET_ELEMENTS_BY_TAG_NAME_LOCAL,
/** XMLDocument: .getElementById() to return any element, not HTML specifically. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
JS_XML_GET_ELEMENT_BY_ID__ANY_ELEMENT,
/** Indicates that new XMLSerializer().serializeToString(..) inserts a blank before self-closing a tag. */
@BrowserFeature(IE)
JS_XML_SERIALIZER_BLANK_BEFORE_SELF_CLOSING,
/**
* Indicates that new XMLSerializer().serializeToString(..) called with a document fragment created by an
* HTMLPage always returns ''.
*/
@BrowserFeature(IE)
JS_XML_SERIALIZER_HTML_DOCUMENT_FRAGMENT_ALWAYS_EMPTY,
/** Indicates that XMLSerializer.serializeToString(..)
serializes a single CDataSection as escaped
* text instead of <![CDATA[xxx]]>
. */
@BrowserFeature(IE)
JS_XML_SERIALIZER_ROOT_CDATA_AS_ESCAPED_TEXT,
/** Indicates that the browser uses the ActiveXObject for implementing XML support. */
@BrowserFeature(IE)
JS_XML_SUPPORT_VIA_ACTIVEXOBJECT,
/** {@code XSLTProcessor.transformToDocument} supports output indent attribute. */
@BrowserFeature({CHROME, EDGE})
JS_XSLT_TRANSFORM_INDENT,
/** With special keys [in .type(int)], should we trigger onkeypress event or not. */
@BrowserFeature({FF, FF_ESR})
KEYBOARD_EVENT_SPECIAL_KEYPRESS,
/** Handle {@code } as {@code }. */
@BrowserFeature(IE)
KEYGEN_AS_BLOCK,
/**
* Indicates that the browser considers the meta X-UA-Compatible when determining
* compatibility/quirks mode.
*/
@BrowserFeature(IE)
META_X_UA_COMPATIBLE,
/**
* The default display style of multicol is 'block'.
*/
@BrowserFeature({FF, FF_ESR})
MULTICOL_BLOCK,
/** */
@BrowserFeature(IE)
PAGE_SELECTION_RANGE_FROM_SELECTABLE_TEXT_INPUT,
/** Indicates .querySelectorAll()
and .querySelector()
is not supported in quirks mode. */
@BrowserFeature(IE)
QUERYSELECTORALL_NOT_IN_QUIRKS,
/** IE throws a syntax error if a css3 pseudo selector is used on a detached node. */
@BrowserFeature(IE)
QUERYSELECTOR_CSS3_PSEUDO_REQUIRE_ATTACHED_NODE,
/** Set the value attribute of a reset input to 'Reset' if no value attribute specified. */
@BrowserFeature(IE)
RESETINPUT_DEFAULT_VALUE_IF_VALUE_NOT_DEFINED,
/** The default display style of slot is 'content'. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
SLOT_CONTENTS,
/**
* Method addRule returns the rule position instead of -1.
*/
@BrowserFeature(IE)
STYLESHEET_ADD_RULE_RETURNS_POS,
/**
* Indicates that the href property for a <link rel="stylesheet" type="text/css" href="" />
* (href empty) is null.
*/
@BrowserFeature(IE)
STYLESHEET_HREF_EMPTY_IS_NULL,
/** Set the value attribute of a submit input to 'Submit Query' if no value attribute specified. */
@BrowserFeature(IE)
SUBMITINPUT_DEFAULT_VALUE_IF_VALUE_NOT_DEFINED,
/** Indicates that unknown tags inside an SVG element are handled as DOM elements, not SVG elements. */
@BrowserFeature(IE)
SVG_UNKNOWN_ARE_DOM,
/**
* Indicates, that the pathname for the url 'blank' is empty;
* instead of 'blank'.
*/
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
URL_ABOUT_BLANK_HAS_BLANK_PATH,
/**
* Indicates, that the browser supports username and password as
* part of the url (e.g. http://john.smith:secret@localhost).
*/
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
URL_AUTH_CREDENTIALS,
/** The protocol setter does not check for special protocols. */
@BrowserFeature({FF_ESR, IE})
URL_IGNORE_SPECIAL,
/** Replace only ' ' with %20 when encode the query part of an url. */
@BrowserFeature(IE)
URL_MINIMAL_QUERY_ENCODING,
/** Handles missing slashes. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
URL_MISSING_SLASHES,
/** Set the origin property for web socket events. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
WEBSOCKET_ORIGIN_SET,
/** Execute window events. */
@BrowserFeature(IE)
WINDOW_EXECUTE_EVENTS,
/** XMLHttpRequest.getAllResponseHeaders() has a trailing separator. */
@BrowserFeature(IE)
XHR_ALL_RESPONSE_HEADERS_APPEND_SEPARATOR,
/** XMLHttpRequest.getAllResponseHeaders() uses only Lf as separator. */
@BrowserFeature({FF, FF_ESR, IE})
XHR_ALL_RESPONSE_HEADERS_SEPARATE_BY_LF,
/** XMLHttpRequest triggers the opened event at the beginning of the send method again. */
@BrowserFeature(IE)
XHR_FIRE_STATE_OPENED_AGAIN_IN_ASYNC_MODE,
/**
* Indicates that the Browser handles async and sync network errors the same way.
*/
@BrowserFeature({FF, FF_ESR})
XHR_HANDLE_SYNC_NETWORK_ERRORS,
/** ProgressEvent.lengthComputable is true. */
@BrowserFeature(IE)
XHR_LENGTH_COMPUTABLE,
/** XMLHttpRequest triggers the load events also if the abort was signaled. */
@BrowserFeature({FF, FF_ESR})
XHR_LOAD_ALWAYS_AFTER_DONE,
/** XMLHttpRequest triggers the load start event async. */
@BrowserFeature(IE)
XHR_LOAD_START_ASYNC,
/** A cross origin request to {@code about:blank} is not allowed. */
@BrowserFeature(IE)
XHR_NO_CROSS_ORIGIN_TO_ABOUT,
/** Indicates if an empty url is allowed as url param for the open method. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
XHR_OPEN_ALLOW_EMTPY_URL,
/** XMLHttpRequest triggers an additional progress event if a network error
* was thrown in async mode. */
@BrowserFeature(FF_ESR)
XHR_PROGRESS_ON_NETWORK_ERROR_ASYNC,
/** If state unsent the response text is empty even if the response type is wrong. */
@BrowserFeature({FF, FF_ESR})
XHR_RESPONSE_TEXT_EMPTY_UNSENT,
/** Setting the responseType throws in state unsent. */
@BrowserFeature(IE)
XHR_RESPONSE_TYPE_THROWS_UNSENT,
/** Indicates if the XMLHttpRequest.send() method will send the mimeType of the blob as Content-Type header. */
@BrowserFeature(IE)
XHR_SEND_IGNORES_BLOB_MIMETYPE_AS_CONTENTTYPE,
/** Indicates if the XMLHttpRequest.send() method will throw if aborted. */
@BrowserFeature({CHROME, EDGE})
XHR_SEND_NETWORK_ERROR_IF_ABORTED,
/** Indicates that the content charset is used for response parsing. */
@BrowserFeature({CHROME, EDGE, FF, FF_ESR})
XHR_USE_CONTENT_CHARSET,
/** Indicates that the 'SelectionNamespaces' property is supported by XPath expressions. */
@BrowserFeature(IE)
XPATH_SELECTION_NAMESPACES,
}