View Javadoc
1   /*
2    * Copyright (c) 2002-2017 Gargoyle Software Inc.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * http://www.apache.org/licenses/LICENSE-2.0
8    *
9    * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  package com.gargoylesoftware.htmlunit;
16  
17  import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.CHROME;
18  import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.EDGE;
19  import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF;
20  import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF45;
21  import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF52;
22  import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.IE;
23  
24  import com.gargoylesoftware.htmlunit.javascript.configuration.BrowserFeature;
25  import com.gargoylesoftware.htmlunit.javascript.host.event.PopStateEvent;
26  import com.gargoylesoftware.htmlunit.javascript.host.intl.DateTimeFormat;
27  
28  /**
29   * Constants of various features of each {@link BrowserVersion}.
30   *
31   * @author Ahmed Ashour
32   * @author Marc Guillemot
33   * @author Sudhan Moghe
34   * @author Ronald Brill
35   * @author Frank Danek
36   * @author Carsten Steul
37   */
38  public enum BrowserVersionFeatures {
39  
40      /**
41       * If the "href" attribute of HtmlAnchor is defined but empty then IE interprets this as an empty filename.
42       * Example: The page http://htmlunit.sourceforge.net/test/myFile.html contains an anchor with an empty
43       * href attribute. Clicking the link in IE force the load of page http://htmlunit.sourceforge.net/test/.
44       * In Firefox the URL is unchanged.
45       */
46      @BrowserFeature(IE)
47      ANCHOR_EMPTY_HREF_NO_FILENAME,
48  
49      /** Ignore target when {@code href} is a javascript snippet. */
50      @BrowserFeature(CHROME)
51      ANCHOR_IGNORE_TARGET_FOR_JS_HREF,
52  
53      /** Is the default display style of Applet is 'inline-block'. */
54      @BrowserFeature(FF45)
55      APPLET_INLINE_BLOCK,
56  
57      /** Background image is 'initial'. */
58      @BrowserFeature(CHROME)
59      CSS_BACKGROUND_INITIAL,
60  
61      /** Computed {@code display} is {@code block} for non-attached elements. */
62      @BrowserFeature(FF)
63      CSS_COMPUTED_BLOCK_IF_NOT_ATTACHED,
64  
65      /** Computed {@code zIndex} is not considered. */
66      @BrowserFeature(CHROME)
67      CSS_COMPUTED_NO_Z_INDEX,
68  
69      /** Is display style of HtmlDialog is 'none'. */
70      @BrowserFeature(CHROME)
71      CSS_DIALOG_NONE,
72  
73      /** Is display style 'block'. */
74      @BrowserFeature(FF)
75      CSS_DISPLAY_BLOCK,
76  
77      /** Is display style 'block'. */
78      @BrowserFeature({CHROME, FF})
79      CSS_DISPLAY_BLOCK2,
80  
81      /** {@code CSSFontFaceRule.cssText} uses {@code \r\n} to break lines. */
82      @BrowserFeature(IE)
83      CSS_FONTFACERULE_CSSTEXT_CRLF,
84  
85      /** {@code CSSFontFaceRule.cssText} has no {@code \n}. */
86      @BrowserFeature(CHROME)
87      CSS_FONTFACERULE_CSSTEXT_NO_CRLF,
88  
89      /** The default value of the display property for the 'input' tags is 'inline-block'. */
90      @BrowserFeature({CHROME, IE})
91      CSS_INPUT_DISPLAY_INLINE_BLOCK,
92  
93      /** 'initial' is a valid length value. */
94      @BrowserFeature({CHROME, FF})
95      CSS_LENGTH_INITIAL,
96  
97      /** undefined is processed as empty length value. */
98      @BrowserFeature(CHROME)
99      CSS_LENGTH_UNDEFINED_AS_EMPTY,
100 
101     /** Is display style of HtmlNoEmbed is 'inline'. */
102     @BrowserFeature(CHROME)
103     CSS_NOEMBED_INLINE,
104 
105     /** The default value of the display property for the 'noscript' tag is 'inline' instead of the default one. */
106     @BrowserFeature(CHROME)
107     CSS_NOSCRIPT_DISPLAY_INLINE,
108 
109     /** Unit is not required when setting outline-width style. */
110     @BrowserFeature(IE)
111     CSS_OUTLINE_WIDTH_UNIT_NOT_REQUIRED,
112 
113     /** The default value of the display property for the 'progress' tag is 'inline' instead of the default one. */
114     @BrowserFeature(IE)
115     CSS_PROGRESS_DISPLAY_INLINE,
116 
117     /** The default value of the display property for the 'rp' tag is 'none'. */
118     @BrowserFeature(FF)
119     CSS_RP_DISPLAY_NONE,
120 
121     /** The default value of the display property for the 'rt' tag is always 'ruby-text'. */
122     @BrowserFeature({IE, FF})
123     CSS_RT_DISPLAY_RUBY_TEXT_ALWAYS,
124 
125     /** The default value of the display property for the 'ruby' tag is 'inline'. */
126     @BrowserFeature(CHROME)
127     CSS_RUBY_DISPLAY_INLINE,
128 
129     /** Throws exception on setting a CSS style value to null. */
130     @BrowserFeature(IE)
131     CSS_SET_NULL_THROWS,
132 
133     /** Internet Explorer versions 5 and later support the behavior property. The behavior property lets
134      * you use CSS to attach a script to a specific element in order to implement
135      * DHTML (Dynamic HTML) components.
136      */
137     @BrowserFeature(IE)
138     CSS_SUPPORTS_BEHAVIOR_PROPERTY,
139 
140     /** 'auto' is supported when setting vertical-align style. */
141     @BrowserFeature(IE)
142     CSS_VERTICAL_ALIGN_SUPPORTS_AUTO,
143 
144     /** zIndex is of type Integer. Other values are ignored (''). */
145     @BrowserFeature(IE)
146     CSS_ZINDEX_TYPE_INTEGER,
147 
148     /** Add the 'Referer' header to a request triggered by window.showModalDialog. */
149     @BrowserFeature({CHROME, FF})
150     DIALOGWINDOW_REFERER,
151 
152     /** IE removes all child text nodes, but FF preserves the first. */
153     @BrowserFeature(IE)
154     DOM_NORMALIZE_REMOVE_CHILDREN,
155 
156     /** Event false result. */
157     @BrowserFeature(IE)
158     EVENT_FALSE_RESULT,
159 
160     /** Triggers the onfocus onfocusin blur onfocusout events in this order. */
161     @BrowserFeature(CHROME)
162     EVENT_FOCUS_FOCUS_IN_BLUR_OUT,
163 
164     /** Triggers the onfocusin onfocus onfocusout blur events in this order. */
165     @BrowserFeature(IE)
166     EVENT_FOCUS_IN_FOCUS_OUT_BLUR,
167 
168     /** Mouse events are triggered on disabled elements also. */
169     @BrowserFeature(FF)
170     EVENT_MOUSE_ON_DISABLED,
171 
172     /** Triggers "onchange" event handler after "onclick" event handler. */
173     @BrowserFeature({CHROME, FF})
174     EVENT_ONCHANGE_AFTER_ONCLICK,
175 
176     /** Triggers "onclick" event handler for the select only, not for the clicked option. */
177     @BrowserFeature(IE)
178     EVENT_ONCLICK_FOR_SELECT_ONLY,
179 
180     /** Triggers 'onclick' and 'ondblclick' event handler using <code>PointerEvent</code>. */
181     @BrowserFeature(IE)
182     EVENT_ONCLICK_USES_POINTEREVENT,
183 
184     /** <code>CloseEvent</code> can not be created by calling document.createEvent('CloseEvent'). */
185     @BrowserFeature(FF)
186     EVENT_ONCLOSE_DOCUMENT_CREATE_NOT_SUPPORTED,
187 
188     /** <code>CloseEvent</code> initCloseEvent is available but throws an exception when called. */
189     @BrowserFeature(FF)
190     EVENT_ONCLOSE_INIT_CLOSE_EVENT_THROWS,
191 
192     /** <code>Event.bubbles</code> and <code>Event.cancelable</code> are false in 'onhashchange' event handler. */
193     @BrowserFeature({CHROME, IE})
194     EVENT_ONHASHCHANGE_BUBBLES_FALSE,
195 
196     /** <code>Event.cancelable</code> is false in 'onload' event handler. */
197     @BrowserFeature({CHROME, FF, IE})
198     EVENT_ONLOAD_CANCELABLE_FALSE,
199 
200     /** Triggers "onload" event if internal javascript loaded. */
201     @BrowserFeature(IE)
202     EVENT_ONLOAD_INTERNAL_JAVASCRIPT,
203 
204     /** MessageEvent default data value is null. */
205     @BrowserFeature({CHROME, FF52})
206     EVENT_ONMESSAGE_DEFAULT_DATA_NULL,
207 
208     /** Does not trigger "onmousedown" event handler for the select options. */
209     @BrowserFeature(IE)
210     EVENT_ONMOUSEDOWN_FOR_SELECT_OPTION_TRIGGERS_ADDITIONAL_DOWN_FOR_SELECT,
211 
212     /** Does not trigger "onmousedown" event handler for the select options. */
213     @BrowserFeature(IE)
214     EVENT_ONMOUSEDOWN_NOT_FOR_SELECT_OPTION,
215 
216     /** FF triggers a mouseover event even if the option is disabled. */
217     @BrowserFeature(FF)
218     EVENT_ONMOUSEOVER_FOR_DISABLED_OPTION,
219 
220     /** IE never triggers a mouseover event for select options. */
221     @BrowserFeature(IE)
222     EVENT_ONMOUSEOVER_NEVER_FOR_SELECT_OPTION,
223 
224     /** Does not trigger "onmousedown" event handler for the select options. */
225     @BrowserFeature(IE)
226     EVENT_ONMOUSEUP_FOR_SELECT_OPTION_TRIGGERS_ADDITIONAL_UP_FOR_SELECT,
227 
228     /** Does not trigger "onmouseup" event handler for the select options. */
229     @BrowserFeature(IE)
230     EVENT_ONMOUSEUP_NOT_FOR_SELECT_OPTION,
231 
232     /** Supports event type 'BeforeUnloadEvent'. */
233     @BrowserFeature({CHROME, FF})
234     EVENT_TYPE_BEFOREUNLOADEVENT,
235 
236     /** Supports event type 'HashChangeEvent'. */
237     @BrowserFeature({CHROME, FF})
238     EVENT_TYPE_HASHCHANGEEVENT,
239 
240     /** Supports vendor specific event type 'KeyEvents'. */
241     @BrowserFeature(FF)
242     EVENT_TYPE_KEY_EVENTS,
243 
244     /** Supports event type 'PointerEvent'. */
245     @BrowserFeature(IE)
246     EVENT_TYPE_POINTEREVENT,
247 
248     /** Supports event type 'ProgressEvent'. */
249     @BrowserFeature(IE)
250     EVENT_TYPE_PROGRESSEVENT,
251 
252     /** For new pages the focus points to the body node. */
253     @BrowserFeature(IE)
254     FOCUS_BODY_ELEMENT_AT_START,
255 
256     /** Indicates if a form field is directly reachable by its new name once this has been changed. */
257     @BrowserFeature({CHROME, FF})
258     FORMFIELD_REACHABLE_BY_NEW_NAMES,
259 
260     /** Indicates if a form field is directly reachable by its original name once this has been changed. */
261     @BrowserFeature({CHROME, FF})
262     FORMFIELD_REACHABLE_BY_ORIGINAL_NAME,
263 
264     /** Form elements are able to refer to the for by using the from attribute. */
265     @BrowserFeature({CHROME, FF})
266     FORM_FORM_ATTRIBUTE_SUPPORTED,
267 
268     /** Form formxxx parameters not supported for input type image. */
269     @BrowserFeature(IE)
270     FORM_PARAMETRS_NOT_SUPPORTED_FOR_IMAGE,
271 
272     /** Form submit forces a real request also if only the hash was changed. */
273     @BrowserFeature(CHROME)
274     FORM_SUBMISSION_DOWNLOWDS_ALSO_IF_ONLY_HASH_CHANGED,
275 
276     /** Form submit includes the Cache-Control: max-age=0 header. */
277     @BrowserFeature(CHROME)
278     FORM_SUBMISSION_HEADER_CACHE_CONTROL_MAX_AGE,
279 
280     /** Form submit includes the Cache-Control: cn-cache header. */
281     @BrowserFeature(IE)
282     FORM_SUBMISSION_HEADER_CACHE_CONTROL_NO_CACHE,
283 
284     /** Form submit includes the origin header. */
285     @BrowserFeature(CHROME)
286     FORM_SUBMISSION_HEADER_ORIGIN,
287 
288     /** Form submit is done without the hash part of the action url. */
289     @BrowserFeature(IE)
290     FORM_SUBMISSION_URL_WITHOUT_HASH,
291 
292     /** */
293     @BrowserFeature(IE)
294     HTMLABBREVIATED,
295 
296     /** HtmlAllCollection.item returns null instead of undefined if an element was not found. */
297     @BrowserFeature({IE, FF})
298     HTMLALLCOLLECTION_DO_NOT_CONVERT_STRINGS_TO_NUMBER,
299 
300     /** HtmlAllCollection.item(int) is not supported. */
301     @BrowserFeature(FF)
302     HTMLALLCOLLECTION_DO_NOT_SUPPORT_PARANTHESES,
303 
304     /** HtmlAllCollection.item(int) requires int parameter. */
305     @BrowserFeature(CHROME)
306     HTMLALLCOLLECTION_INTEGER_INDEX,
307 
308     /** HtmlCollection returns a node list for duplicate id's. */
309     @BrowserFeature(CHROME)
310     HTMLALLCOLLECTION_NODE_LIST_FOR_DUPLICATES,
311 
312     /** HtmlCollection returns the first hit instead of a collection if many elements found. */
313     @BrowserFeature(IE)
314     HTMLALLCOLLECTION_NO_COLLECTION_FOR_MANY_HITS,
315 
316     /** HtmlAllCollection.item returns null instead of undefined if an element was not found. */
317     @BrowserFeature({IE, FF})
318     HTMLALLCOLLECTION_NULL_IF_ITEM_NOT_FOUND,
319 
320     /** HtmlAllCollection.namedItem returns null instead of undefined if an element was not found. */
321     @BrowserFeature({CHROME, FF})
322     HTMLALLCOLLECTION_NULL_IF_NAMED_ITEM_NOT_FOUND,
323 
324     /** Should {@link com.gargoylesoftware.htmlunit.javascript.host.html.HTMLBaseFontElement#isEndTagForbidden}. */
325     @BrowserFeature(FF)
326     HTMLBASEFONT_END_TAG_FORBIDDEN,
327 
328     /** Base tag href attribute is empty if not defined. */
329     @BrowserFeature(IE)
330     HTMLBASE_HREF_DEFAULT_EMPTY,
331 
332     /** HtmlCollection.item() supports also doubles as index. */
333     @BrowserFeature({IE, FF})
334     HTMLCOLLECTION_ITEM_FUNCT_SUPPORTS_DOUBLE_INDEX_ALSO,
335 
336     /** HtmlCollection.item[] supports also doubles as index. */
337     @BrowserFeature(IE)
338     HTMLCOLLECTION_ITEM_SUPPORTS_DOUBLE_INDEX_ALSO,
339 
340     /** HtmlCollection.item searches by id also. */
341     @BrowserFeature(IE)
342     HTMLCOLLECTION_ITEM_SUPPORTS_ID_SEARCH_ALSO,
343 
344     /** HtmlCollection.namedItem searches by id first. */
345     @BrowserFeature(CHROME)
346     HTMLCOLLECTION_NAMED_ITEM_ID_FIRST,
347 
348     /** HtmlCollection.item returns null instead of undefined if an element was not found. */
349     @BrowserFeature(IE)
350     HTMLCOLLECTION_NULL_IF_ITEM_NOT_FOUND,
351 
352     /** HtmlCollection returns null instead of undefined if an element was not found. */
353     @BrowserFeature(FF)
354     HTMLCOLLECTION_NULL_IF_NOT_FOUND,
355 
356     /** HtmlAllCollection(int) is not supported. */
357     @BrowserFeature(IE)
358     HTMLCOLLECTION_SUPPORTS_PARANTHESES,
359 
360     /** Is the default display style {@code inline} for quirks mode. */
361     @BrowserFeature(FF)
362     HTMLDEFINITION_INLINE_IN_QUIRKS,
363 
364     /** Is {@code document.charset} lower-case. */
365     @BrowserFeature(IE)
366     HTMLDOCUMENT_CHARSET_LOWERCASE,
367 
368     /** Do document.bgColor/.alinkColor/.vlinkColor/.linkColor have value by default. */
369     @BrowserFeature(IE)
370     HTMLDOCUMENT_COLOR,
371 
372     /** We can used function in detached documents. */
373     @BrowserFeature(IE)
374     HTMLDOCUMENT_FUNCTION_DETACHED,
375 
376     /** Calls to <code>document.XYZ</code> also looks at frames. */
377     @BrowserFeature({IE, CHROME})
378     HTMLDOCUMENT_GET_ALSO_FRAMES,
379 
380     /** Calls to <code>document.XYZ</code> looks at children with the specified ID and/or name. */
381     @BrowserFeature(IE)
382     HTMLDOCUMENT_GET_FOR_ID_AND_OR_NAME,
383 
384     /**
385      * Calls to <code>document.XYZ</code> should first look at standard functions before looking at elements
386      * named <code>XYZ</code>.
387      */
388     @BrowserFeature(IE)
389     HTMLDOCUMENT_GET_PREFERS_STANDARD_FUNCTIONS,
390 
391     /** Allows invalid 'align' values. */
392     @BrowserFeature({CHROME, FF})
393     HTMLELEMENT_ALIGN_INVALID,
394 
395     /** Removing the active element from the dom tree triggers the onblur event. */
396     @BrowserFeature(CHROME)
397     HTMLELEMENT_REMOVE_ACTIVE_TRIGGERS_BLUR_EVENT,
398 
399     /** Handle blank source like empty. */
400     @BrowserFeature({IE, CHROME})
401     HTMLIMAGE_BLANK_SRC_AS_EMPTY,
402 
403     /** Empty src attribute sets display to false. */
404     @BrowserFeature(FF52)
405     HTMLIMAGE_EMPTY_SRC_DISPLAY_FALSE,
406 
407     /** Is document.cretaeElement('image') an HTMLElement. */
408     @BrowserFeature(FF)
409     HTMLIMAGE_HTMLELEMENT,
410 
411     /** Is document.cretaeElement('image') an HTMLUnknownElement. */
412     @BrowserFeature(CHROME)
413     HTMLIMAGE_HTMLUNKNOWNELEMENT,
414 
415     /** Mark the image as invisible if the download failes. */
416     @BrowserFeature(CHROME)
417     HTMLIMAGE_INVISIBLE_NOT_AVAILABLE,
418 
419     /** Mark the image as invisible if no src attribute defined. */
420     @BrowserFeature({CHROME, FF})
421     HTMLIMAGE_INVISIBLE_NO_SRC,
422 
423     /** Clicking an image input submits the value as param if defined. */
424     @BrowserFeature(CHROME)
425     HTMLIMAGE_NAME_VALUE_PARAMS,
426 
427     /** When clicking a {@code checkbox} or {@code radio} input the surrounding anchor is not clicked. */
428     @BrowserFeature(CHROME)
429     HTMLINPUT_CHECKBOX_DOES_NOT_CLICK_SURROUNDING_ANCHOR,
430 
431     /** When clicking a input the surrounding anchor is not clicked. */
432     @BrowserFeature(IE)
433     HTMLINPUT_DOES_NOT_CLICK_SURROUNDING_ANCHOR,
434 
435     /** HTMLInputElement: {@code files} to be {@code undefined}. */
436     @BrowserFeature(IE)
437     HTMLINPUT_FILES_UNDEFINED,
438 
439     /** HTMLInputElement: type {@code file} selectionSart/End are null. */
440     @BrowserFeature({CHROME, FF52})
441     HTMLINPUT_FILE_SELECTION_START_END_NULL,
442 
443     /** HTMLInputElement: type {@code file} value to be {@code fakepath}. */
444     @BrowserFeature({CHROME, IE})
445     HTMLINPUT_FILE_VALUE_FAKEPATH,
446 
447     /** Should the HTMLElement of {@code keygen} have no end tag. */
448     @BrowserFeature(IE)
449     HTMLKEYGEN_END_TAG_FORBIDDEN,
450 
451     /** If the type is present for a link only use if type is text/css. */
452     @BrowserFeature(CHROME)
453     HTMLLINK_CHECK_TYPE_FOR_STYLESHEET,
454 
455     /** */
456     @BrowserFeature({FF, IE})
457     HTMLOPTION_EMPTY_TEXT_IS_NO_CHILDREN,
458 
459     /** If the single select has exact one option, this options gets never deselected. */
460     @BrowserFeature(FF45)
461     HTMLOPTION_EXACT_ONE_OPTION_GETS_NERVER_DESELECTED,
462 
463     /** */
464     @BrowserFeature(IE)
465     HTMLOPTION_PREVENT_DISABLED,
466 
467     /** Removing the selected attribute, de selects the option. */
468     @BrowserFeature({CHROME, FF})
469     HTMLOPTION_REMOVE_SELECTED_ATTRIB_DESELECTS,
470 
471     /** Trims the value of the type attribute before to verify it. */
472     @BrowserFeature({CHROME, FF})
473     HTMLSCRIPT_TRIM_TYPE,
474 
475     /** Setting defaultValue updates the value also. */
476     @BrowserFeature({CHROME, FF})
477     HTMLTEXTAREA_SET_DEFAULT_VALUE_UPDATES_VALUE,
478 
479     /** When calculation the value of a text area ie uses a recursive approach. */
480     @BrowserFeature(IE)
481     HTMLTEXTAREA_USE_ALL_TEXT_CHILDREN,
482 
483     /** Should {@link com.gargoylesoftware.htmlunit.javascript.host.html.HTMLTrackElement#isEndTagForbidden}. */
484     @BrowserFeature({FF, IE})
485     HTMLTRACK_END_TAG_FORBIDDEN,
486 
487     /** HTML attributes are always lower case. */
488     @BrowserFeature({CHROME, FF})
489     HTML_ATTRIBUTE_LOWER_CASE,
490 
491     /** Expand #0 to #000000. */
492     @BrowserFeature(IE)
493     HTML_COLOR_EXPAND_ZERO,
494 
495     /** Do not allow anything invalid in color, but restrict to valid values (names and hex digits) only. */
496     @BrowserFeature(IE)
497     HTML_COLOR_RESTRICT,
498 
499     /** Convert the color (name and hex code) to lower case. */
500     @BrowserFeature(IE)
501     HTML_COLOR_TO_LOWER,
502 
503     /** HTML parser supports the 'command' tag. */
504     @BrowserFeature({CHROME, IE})
505     HTML_COMMAND_TAG,
506 
507     /** HTML parser supports the 'isindex' tag. */
508     @BrowserFeature(CHROME)
509     HTML_ISINDEX_TAG,
510 
511     /** HTML parser supports the 'main' tag. */
512     @BrowserFeature(IE)
513     HTML_MAIN_TAG,
514 
515     /** Supports &lt;object&gt; {@code classid} attribute. */
516     @BrowserFeature(IE)
517     HTML_OBJECT_CLASSID,
518 
519     /** Additionally support dates in format "d/M/yyyy". */
520     @BrowserFeature(FF)
521     HTTP_COOKIE_EXTENDED_DATE_PATTERNS_1,
522 
523     /** Dates format pattern 2. */
524     @BrowserFeature(CHROME)
525     HTTP_COOKIE_EXTENDED_DATE_PATTERNS_2,
526 
527     /** Indicates that the pas is extracted from the location.
528      * Sample: from the location /foo/boo only /foo is used.
529      */
530     @BrowserFeature(IE)
531     HTTP_COOKIE_EXTRACT_PATH_FROM_LOCATION,
532 
533     /** domain '.org' is handled as 'org'. */
534     @BrowserFeature({FF, IE})
535     HTTP_COOKIE_REMOVE_DOT_FROM_ROOT_DOMAINS,
536 
537     /** Indicates that the start date for two digits cookies is 1970
538      * instead of 2000 (Two digits years are interpreted as 20xx
539      * if before 1970 and as 19xx otherwise).
540      */
541     @BrowserFeature({CHROME, FF})
542     HTTP_COOKIE_START_DATE_1970,
543 
544     /** Browser sends Upgrade-Insecure-Requests header. */
545     @BrowserFeature({CHROME, FF52})
546     HTTP_HEADER_UPGRADE_INSECURE_REQUEST,
547 
548     /** Supports redirect via 308 code. */
549     @BrowserFeature({CHROME, FF})
550     HTTP_REDIRECT_308,
551 
552     /** Setting the property align to arbitrary values is allowed. */
553     @BrowserFeature({CHROME, FF})
554     JS_ALIGN_ACCEPTS_ARBITRARY_VALUES,
555 
556     /** Setting the property align of an input element ignores the value
557      * if the value is one of center, justify, left or right.
558      * For all other values an exception is still thrown.
559      */
560     @BrowserFeature(IE)
561     JS_ALIGN_FOR_INPUT_IGNORES_VALUES,
562 
563     /**
564      * Javascript property anchors includes all anchors with a name or an id property.
565      * If not set name property is required.
566      */
567     @BrowserFeature(IE)
568     JS_ANCHORS_REQUIRES_NAME_OR_ID,
569 
570     /** The anchor pathname detects url's starting with one letter as file url's. */
571     @BrowserFeature({CHROME, IE})
572     JS_ANCHOR_PATHNAME_DETECT_WIN_DRIVES_URL,
573 
574     /** The anchor pathname property returns nothing for broken http(s) url's. */
575     @BrowserFeature(CHROME)
576     JS_ANCHOR_PATHNAME_NONE_FOR_BROKEN_URL,
577 
578     /** The anchor pathname property returns nothing for none http(s) url's. */
579     @BrowserFeature(FF)
580     JS_ANCHOR_PATHNAME_NONE_FOR_NONE_HTTP_URL,
581 
582     /** The anchor pathname prefixes file url's with '/'. */
583     @BrowserFeature({CHROME, IE})
584     JS_ANCHOR_PATHNAME_PREFIX_WIN_DRIVES_URL,
585 
586     /** The anchor protocol property returns ':' for broken http(s) url's. */
587     @BrowserFeature(CHROME)
588     JS_ANCHOR_PROTOCOL_COLON_FOR_BROKEN_URL,
589 
590     /** The anchor protocol property converts drive letters to uppercase. */
591     @BrowserFeature(CHROME)
592     JS_ANCHOR_PROTOCOL_COLON_UPPER_CASE_DRIVE_LETTERS,
593 
594     /** Indicates that "someFunction.arguments" is a read-only view of the function's argument. */
595     @BrowserFeature({CHROME, FF})
596     JS_ARGUMENTS_READ_ONLY_ACCESSED_FROM_FUNCTION,
597 
598     /** Indicates that the {@code Array} supports construction properties. */
599     @BrowserFeature(FF)
600     JS_ARRAY_CONSTRUCTION_PROPERTIES,
601 
602     /** Indicates that Array.from() is supported. */
603     @BrowserFeature({CHROME, FF})
604     JS_ARRAY_FROM,
605 
606     /** firstChild and lastChild returns null for Attr (like IE does). */
607     @BrowserFeature({CHROME, FF})
608     JS_ATTR_FIRST_LAST_CHILD_RETURNS_NULL,
609 
610     /** HTMLBGSoundElement reported as HTMLUnknownElement. */
611     @BrowserFeature(FF)
612     JS_BGSOUND_AS_UNKNOWN,
613 
614     /** Body {@code margin} is 8px. */
615     @BrowserFeature(IE)
616     JS_BODY_MARGINS_8,
617 
618     /** HtmlElement.getBoundingClientRect throws an error if the element is not attached to the page. */
619     @BrowserFeature(IE)
620     JS_BOUNDINGCLIENTRECT_THROWS_IF_DISCONNECTED,
621 
622     /** If we're emulating IE, the overall JavaScript return value is the last return value. */
623     @BrowserFeature(IE)
624     JS_CALL_RESULT_IS_LAST_RETURN_VALUE,
625 
626     /** toDataURL for canvas returns the CHROME version of the PNG. */
627     @BrowserFeature(CHROME)
628     JS_CANVAS_DATA_URL_CHROME_PNG,
629 
630     /** toDataURL for canvas returns the IE version of the PNG. */
631     @BrowserFeature(IE)
632     JS_CANVAS_DATA_URL_IE_PNG,
633 
634     /** draw for canvas throws an error if no image available. */
635     @BrowserFeature(FF45)
636     JS_CANVAS_DRAW_THROWS_FOR_MISSING_IMG,
637 
638     /** Do not allow invalid clear values. */
639     @BrowserFeature(IE)
640     JS_CLEAR_RESTRICT,
641 
642     /** ClientHeight for input is 17. */
643     @BrowserFeature(CHROME)
644     JS_CLIENTHIGHT_INPUT_17,
645 
646     /** ClientRectList toString reports the first item. */
647     @BrowserFeature(FF)
648     JS_CLIENTRECTLIST_DEFAUL_VALUE_FROM_FIRST,
649 
650     /** ClientRectList.item throws instead of returning null if an element was not found. */
651     @BrowserFeature(IE)
652     JS_CLIENTRECTLIST_THROWS_IF_ITEM_NOT_FOUND,
653 
654     /** ClientWidth for text/password input is 143. */
655     @BrowserFeature(IE)
656     JS_CLIENTWIDTH_INPUT_TEXT_143,
657 
658     /** ClientWidth for text/password input is 169. */
659     @BrowserFeature(CHROME)
660     JS_CLIENTWIDTH_INPUT_TEXT_169,
661 
662     /** Is window can be used as Console. */
663     @BrowserFeature({CHROME, FF52})
664     JS_CONSOLE_HANDLE_WINDOW,
665 
666     /** item is enumerated before length property of CSSRuleList. */
667     @BrowserFeature(FF)
668     JS_CSSRULELIST_ENUM_ITEM_LENGTH,
669 
670     /** Uses {@code MozCSSKeyframesRule}. */
671     @BrowserFeature(FF45)
672     JS_CSS_MOZ_CSS_KEYFRAMES_RULE,
673 
674     /** <code>Date.toLocaleDateString()</code> returns a short form (d.M.yyyy). */
675     @BrowserFeature({CHROME, FF})
676     JS_DATE_LOCALE_DATE_SHORT,
677 
678     /** {@link DateTimeFormat} uses the Unicode Character {@code 'LEFT-TO-RIGHT MARK'}. */
679     @BrowserFeature(IE)
680     JS_DATE_WITH_LEFT_TO_RIGHT_MARK,
681 
682     /** */
683     @BrowserFeature(IE)
684     JS_DEFERRED,
685 
686     /** Javascript doctyp.entities returns null (FF10). */
687     @BrowserFeature(IE)
688     JS_DOCTYPE_ENTITIES_NULL,
689 
690     /** Javascript doctyp.notations returns null (FF10). */
691     @BrowserFeature(IE)
692     JS_DOCTYPE_NOTATIONS_NULL,
693 
694     /** Indicates that document.createAttribute converts the local name to lowercase. */
695     @BrowserFeature({CHROME, FF})
696     JS_DOCUMENT_CREATE_ATTRUBUTE_LOWER_CASE,
697 
698     /** Javascript function document.createElement accepts only tag names. */
699     @BrowserFeature({CHROME, FF, IE})
700     JS_DOCUMENT_CREATE_ELEMENT_STRICT,
701 
702     /** The browser supports the design mode 'Inherit'. */
703     @BrowserFeature(IE)
704     JS_DOCUMENT_DESIGN_MODE_INHERIT,
705 
706     /** Javascript document.forms(...) supported. */
707     @BrowserFeature(IE)
708     JS_DOCUMENT_FORMS_FUNCTION_SUPPORTED,
709 
710     /** The browser has selection {@code rangeCount}. */
711     @BrowserFeature({FF, IE})
712     JS_DOCUMENT_SELECTION_RANGE_COUNT,
713 
714     /** Javascript property document.domain doesn't allow to set domain of {@code about:blank}. */
715     @BrowserFeature(IE)
716     JS_DOCUMENT_SETTING_DOMAIN_THROWS_FOR_ABOUT_BLANK,
717 
718     /** If setting the document.location inside onclick() of anchor element should be triggered. */
719     @BrowserFeature({IE, FF})
720     JS_DOCUMENT_SET_LOCATION_EXECUTED_IN_ANCHOR,
721 
722     /** createHTMLDucument requires a title. */
723     @BrowserFeature(IE)
724     JS_DOMIMPLEMENTATION_CREATE_HTMLDOCOMENT_REQUIRES_TITLE,
725 
726     /** If document.implementation.hasFeature() supports 'Core 1.0'. */
727     @BrowserFeature({CHROME, FF})
728     JS_DOMIMPLEMENTATION_FEATURE_CORE_3,
729 
730     /** If document.implementation.hasFeature() supports 'CSS2 1.0'. */
731     @BrowserFeature({CHROME, FF})
732     JS_DOMIMPLEMENTATION_FEATURE_CSS2_1,
733 
734     /** If document.implementation.hasFeature() supports 'CSS2 3.0'. */
735     @BrowserFeature({CHROME, FF})
736     JS_DOMIMPLEMENTATION_FEATURE_CSS2_3,
737 
738     /** If document.implementation.hasFeature() supports 'CSS3 1.0'. */
739     @BrowserFeature({CHROME, FF})
740     JS_DOMIMPLEMENTATION_FEATURE_CSS3_1,
741 
742     /** If document.implementation.hasFeature() supports 'CSS3 2.0'. */
743     @BrowserFeature({CHROME, FF})
744     JS_DOMIMPLEMENTATION_FEATURE_CSS3_2,
745 
746     /** If document.implementation.hasFeature() supports 'CSS3 3.0'. */
747     @BrowserFeature({CHROME, FF})
748     JS_DOMIMPLEMENTATION_FEATURE_CSS3_3,
749 
750     /** If document.implementation.hasFeature() supports 'CSS 1.0'. */
751     @BrowserFeature({CHROME, FF})
752     JS_DOMIMPLEMENTATION_FEATURE_CSS_1,
753 
754     /** If document.implementation.hasFeature() supports 'CSS 2.0'. */
755     @BrowserFeature({CHROME, FF})
756     JS_DOMIMPLEMENTATION_FEATURE_CSS_2,
757 
758     /** If document.implementation.hasFeature() supports 'CSS 3.0'. */
759     @BrowserFeature({CHROME, FF})
760     JS_DOMIMPLEMENTATION_FEATURE_CSS_3,
761 
762     /** If document.implementation.hasFeature() supports 'Events 1.0'. */
763     @BrowserFeature({CHROME, FF})
764     JS_DOMIMPLEMENTATION_FEATURE_EVENTS_1,
765 
766     /** If document.implementation.hasFeature() supports 'KeyboardEvents'. */
767     @BrowserFeature({CHROME, FF})
768     JS_DOMIMPLEMENTATION_FEATURE_KEYBOARDEVENTS,
769 
770     /** If document.implementation.hasFeature() supports 'LS'. */
771     @BrowserFeature({CHROME, FF})
772     JS_DOMIMPLEMENTATION_FEATURE_LS,
773 
774     /** If document.implementation.hasFeature() supports 'MutationNameEvents'. */
775     @BrowserFeature({CHROME, FF})
776     JS_DOMIMPLEMENTATION_FEATURE_MUTATIONNAMEEVENTS,
777 
778     /** If document.implementation.hasFeature() supports 'Range 1.0'. */
779     @BrowserFeature({CHROME, FF})
780     JS_DOMIMPLEMENTATION_FEATURE_RANGE_1,
781 
782     /** If document.implementation.hasFeature() supports 'Range 3.0'. */
783     @BrowserFeature({CHROME, FF})
784     JS_DOMIMPLEMENTATION_FEATURE_RANGE_3,
785 
786     /** If document.implementation.hasFeature() supports 'StyleSheets 2.0'. */
787     @BrowserFeature({CHROME, FF})
788     JS_DOMIMPLEMENTATION_FEATURE_STYLESHEETS,
789 
790     /** If document.implementation.hasFeature() supports 'http://www.w3.org/TR/SVG11/feature#BasicStructure 1.2'. */
791     @BrowserFeature({CHROME, FF52})
792     JS_DOMIMPLEMENTATION_FEATURE_SVG_BASICSTRUCTURE_1_2,
793 
794     /** If document.implementation.hasFeature() supports 'MutationNameEvents'. */
795     @BrowserFeature({CHROME, FF})
796     JS_DOMIMPLEMENTATION_FEATURE_TEXTEVENTS,
797 
798     /** If document.implementation.hasFeature() supports 'UIEvents 2.0'. */
799     @BrowserFeature({CHROME, FF})
800     JS_DOMIMPLEMENTATION_FEATURE_UIEVENTS_2,
801 
802     /** If document.implementation.hasFeature() supports 'Validation'. */
803     @BrowserFeature({CHROME, FF})
804     JS_DOMIMPLEMENTATION_FEATURE_VALIDATION,
805 
806     /** If document.implementation.hasFeature() supports 'Views 1.0'. */
807     @BrowserFeature({CHROME, FF})
808     JS_DOMIMPLEMENTATION_FEATURE_VIEWS_1,
809 
810     /** If document.implementation.hasFeature() supports 'Views 3.0'. */
811     @BrowserFeature({CHROME, FF})
812     JS_DOMIMPLEMENTATION_FEATURE_VIEWS_3,
813 
814     /** If document.implementation.hasFeature() supports 'XPath 3.0'. */
815     @BrowserFeature({CHROME, FF})
816     JS_DOMIMPLEMENTATION_FEATURE_XPATH,
817 
818     /** <code>DOMParser.parseFromString(..)</code> handles an empty String as error. */
819     @BrowserFeature({CHROME, FF})
820     JS_DOMPARSER_EMPTY_STRING_IS_ERROR,
821 
822     /** <code>DOMParser.parseFromString(..)</code> throws an exception if an error occurs. */
823     @BrowserFeature(IE)
824     JS_DOMPARSER_EXCEPTION_ON_ERROR,
825 
826     /** {@code DOMParser.parseFromString(..)} creates a document containing a {@code parsererror} element. */
827     @BrowserFeature({CHROME, FF})
828     JS_DOMPARSER_PARSERERROR_ON_ERROR,
829 
830     /** DOMTokenList returns false instead of throwing an exception when receiver is blank. */
831     @BrowserFeature({CHROME, FF52})
832     JS_DOMTOKENLIST_CONTAINS_RETURNS_FALSE_FOR_BLANK,
833 
834     /** DOMTokenList uses an enhanced set of whitespace chars. */
835     @BrowserFeature(IE)
836     JS_DOMTOKENLIST_ENHANCED_WHITESPACE_CHARS,
837 
838     /** DOMTokenList index access returns null if index is outside. */
839     @BrowserFeature(IE)
840     JS_DOMTOKENLIST_GET_NULL_IF_OUTSIDE,
841 
842     /** DOMTokenList ignores duplicates when determining the length. */
843     @BrowserFeature(CHROME)
844     JS_DOMTOKENLIST_LENGTH_IGNORES_DUPLICATES,
845 
846     /** DOMTokenList removed all whitespace chars during add. */
847     @BrowserFeature(CHROME)
848     JS_DOMTOKENLIST_REMOVE_WHITESPACE_CHARS_ON_ADD,
849 
850     /** DOMTokenList removed all whitespace chars during edit. */
851     @BrowserFeature({CHROME, IE})
852     JS_DOMTOKENLIST_REMOVE_WHITESPACE_CHARS_ON_EDIT,
853 
854     /** DOMTokenList removed all whitespace chars during remove. */
855     @BrowserFeature({CHROME, FF52})
856     JS_DOMTOKENLIST_REMOVE_WHITESPACE_CHARS_ON_REMOVE,
857 
858     /** Javascript property function {@code delete} throws an exception if the given count is negative. */
859     @BrowserFeature(IE)
860     JS_DOM_CDATA_DELETE_THROWS_NEGATIVE_COUNT,
861 
862     /** Indicates that attributeNS returns an empty string instead of null if not found. */
863     @BrowserFeature(IE)
864     JS_ELEMENT_GET_ATTRIBUTE_RETURNS_EMPTY,
865 
866     /** The Enumerator constructor throws an exception if called with HtmlCollections as parameter. */
867     @BrowserFeature(IE)
868     JS_ENUMERATOR_CONSTRUCTOR_THROWS,
869 
870     /** Indicates that for(x in y) should enumerate the numbers first. */
871     @BrowserFeature({CHROME, FF,
872         IE})
873     JS_ENUM_NUMBERS_FIRST,
874 
875     /** Javascript {@code Error.stack}. */
876     @BrowserFeature({CHROME, FF})
877     JS_ERROR_STACK,
878 
879     /** Javascript {@code Error.stackTraceLimit}. */
880     @BrowserFeature({CHROME, IE})
881     JS_ERROR_STACK_TRACE_LIMIT,
882 
883     /** Javascript event.keyCode and event.charCode distinguish between printable and not printable keys. */
884     @BrowserFeature(FF)
885     JS_EVENT_DISTINGUISH_PRINTABLE_KEY,
886 
887     /** Executes the window event listeners if the node is detached from the document. */
888     @BrowserFeature(CHROME)
889     JS_EVENT_WINDOW_EXECUTE_IF_DITACHED,
890 
891     /** Whether {@code FileReader} includes content type or not. */
892     @BrowserFeature(FF)
893     JS_FILEREADER_CONTENT_TYPE,
894 
895     /** Whether {@code FileReader} includes {@code base64} for empty content or not. */
896     @BrowserFeature(IE)
897     JS_FILEREADER_EMPTY_NULL,
898 
899     /** FF uses a different date format for file.lastModifiedDate. */
900     @BrowserFeature(FF)
901     JS_FILE_SHORT_DATE_FORMAT,
902 
903     /** Indicates that the action property will not be expanded if defined as empty string. */
904     @BrowserFeature(FF)
905     JS_FORM_ACTION_EXPANDURL_IGNORE_EMPTY,
906 
907     /** form.dispatchEvent(e) submits the form if the event is of type 'submit'. */
908     @BrowserFeature(FF)
909     JS_FORM_DISPATCHEVENT_SUBMITS,
910 
911     /** Setting form.encoding only allowed for valid encodings. */
912     @BrowserFeature(IE)
913     JS_FORM_REJECT_INVALID_ENCODING,
914 
915     /** Calling form.submit() twice forces double download. */
916     @BrowserFeature(IE)
917     JS_FORM_SUBMIT_FORCES_DOWNLOAD,
918 
919     /** Support for document.formName('inputName'). */
920     @BrowserFeature(IE)
921     JS_FORM_USABLE_AS_FUNCTION,
922 
923     /** Indicates that function is defined even before its declaration, inside a block. */
924     @BrowserFeature({CHROME, FF52, IE})
925     JS_FUNCTION_DECLARED_FORWARD_IN_BLOCK,
926 
927     /** Indicates if the method toSource exists on the native objects. */
928     @BrowserFeature(FF)
929     JS_FUNCTION_TOSOURCE,
930 
931     /** Indicates that {@code Object.getPrototypeOf('')} is allowed. */
932     @BrowserFeature({CHROME, FF})
933     JS_GET_PROTOTYPE_OF_STRING,
934 
935     /** HTMLElement instead of HTMLUnknownElement for elements with hyphen ('-'). */
936     @BrowserFeature({CHROME, FF})
937     JS_HTML_HYPHEN_ELEMENT_CLASS_NAME,
938 
939     /** HTMLElement instead of HTMLUnknownElement for ruby elements. */
940     @BrowserFeature({CHROME, FF})
941     JS_HTML_RUBY_ELEMENT_CLASS_NAME,
942 
943     /** Executes the {@code onload} handler, regardless of the whether the element was already attached to the page. */
944     @BrowserFeature({FF, IE})
945     JS_IFRAME_ALWAYS_EXECUTE_ONLOAD,
946 
947     /** Ignore the last line containing uncommented. */
948     @BrowserFeature(IE)
949     JS_IGNORES_LAST_LINE_CONTAINING_UNCOMMENTED,
950 
951     /** Ignore the UTF8 BOM header when loading external js in some situations. */
952     @BrowserFeature(IE)
953     JS_IGNORES_UTF8_BOM_SOMETIMES,
954 
955     /**
956      * The complete property returns also true, if the image download was failing
957      * or if there was no src at all.
958      */
959     @BrowserFeature({CHROME, FF})
960     JS_IMAGE_COMPLETE_RETURNS_TRUE_FOR_NO_REQUEST,
961 
962     /**
963      * Is the prototype of {@link com.gargoylesoftware.htmlunit.javascript.host.html.Image} the same as
964      * {@link com.gargoylesoftware.htmlunit.javascript.host.html.HTMLImageElement}.
965      */
966     @BrowserFeature({FF, IE})
967     JS_IMAGE_PROTOTYPE_SAME_AS_HTML_IMAGE,
968 
969     /**
970      * Getting the width and height of an image tag without a source returns 18x20;
971      * for invalid values returns 1.
972      */
973     @BrowserFeature(CHROME)
974     JS_IMAGE_WIDTH_HEIGHT_RETURNS_0x0_0x0,
975 
976     /**
977      * Getting the width and height of an image tag without a source returns 18x20;
978      * for invalid values returns 1.
979      */
980     @BrowserFeature(FF)
981     JS_IMAGE_WIDTH_HEIGHT_RETURNS_24x24_0x0,
982 
983     /**
984      * Getting the width and height of an image tag without a source returns 28x30;
985      * for invalid values returns same.
986      */
987     @BrowserFeature(IE)
988     JS_IMAGE_WIDTH_HEIGHT_RETURNS_28x30_28x30,
989 
990     /** Indicates that innerHTML adds the child also for null values. */
991     @BrowserFeature(IE)
992     JS_INNER_HTML_ADD_CHILD_FOR_NULL_VALUE,
993 
994     /** Indicates that innerHTML uses {@code crnl} instead of {@code nl}. */
995     @BrowserFeature(IE)
996     JS_INNER_TEXT_CR_NL,
997 
998     /** Indicates that innerText setter supports null values. */
999     @BrowserFeature({CHROME, FF52})
1000     JS_INNER_TEXT_VALUE_NULL,
1001 
1002     /** Chrome ignores negative selection starts. */
1003     @BrowserFeature(CHROME)
1004     JS_INPUT_IGNORE_NEGATIVE_SELECTION_START,
1005 
1006     /** Chrome/FF returns null for selectionStart/selectionEnd. */
1007     @BrowserFeature({CHROME, FF52})
1008     JS_INPUT_NUMBER_SELECTION_START_END_NULL,
1009 
1010     /** Setting the type property of an input converts the type to lowercase. */
1011     @BrowserFeature(IE)
1012     JS_INPUT_SET_TYPE_LOWERCASE,
1013 
1014     /** Setting the value of an Input Date to blank will result in an empty value. */
1015     @BrowserFeature(CHROME)
1016     JS_INPUT_SET_VALUE_DATE_SUPPORTED,
1017 
1018     /** Setting the value of an Input Email to blank will result in an empty value. */
1019     @BrowserFeature({CHROME, FF})
1020     JS_INPUT_SET_VALUE_EMAIL_TRIMMED,
1021 
1022     /** Setting the value of an Input Text/Password/TextArea resets the selection. */
1023     @BrowserFeature(IE)
1024     JS_INPUT_SET_VALUE_MOVE_SELECTION_TO_START,
1025 
1026     /** Setting the value of an Input URL to blank will result in an empty value. */
1027     @BrowserFeature({CHROME, FF})
1028     JS_INPUT_SET_VALUE_URL_TRIMMED,
1029 
1030     /** Indicates that Intl.v8BreakIterator is supported. */
1031     @BrowserFeature(CHROME)
1032     JS_INTL_V8_BREAK_ITERATOR,
1033 
1034     /** Supports Iterator and StopIteration. */
1035     @BrowserFeature(FF)
1036     JS_Iterator,
1037 
1038     /** Property form for label always returns null. */
1039     @BrowserFeature({CHROME, FF52})
1040     JS_LABEL_FORM_NULL,
1041 
1042     /** location.hash returns an encoded hash. */
1043     @BrowserFeature(FF)
1044     JS_LOCATION_HASH_HASH_IS_ENCODED,
1045 
1046     /**
1047      * Set this property if the browser evaluates<br>
1048      * window.location.hash to #&uuml; (like Firefox)<br>
1049      * for url 'http://localhost/something/#%C3%BC'.<br>
1050      * IE evaluates to #%C3%BC.
1051      */
1052     @BrowserFeature(FF)
1053     JS_LOCATION_HASH_IS_DECODED,
1054 
1055     /**
1056      * Property location.hash returns '#' for urls ending with a hash
1057      * sign (e.g. http://localhost/something/#).
1058      */
1059     @BrowserFeature(IE)
1060     JS_LOCATION_HASH_RETURNS_HASH_FOR_EMPTY_DEFINED,
1061 
1062     /**
1063      * Set this property if the browser evaluates<br>
1064      * window.location.hash to #%C3%BC; (like Firefox)<br>
1065      * for url 'http://localhost/something/#&uuml;'.<br>
1066      * IE evaluates to #&uuml;.
1067      */
1068     @BrowserFeature(FF)
1069     JS_LOCATION_HREF_HASH_IS_ENCODED,
1070 
1071     /** Map supports the argument constructor. */
1072     @BrowserFeature({CHROME, FF})
1073     JS_MAP_CONSTRUCTOR_ARGUMENT,
1074 
1075     /** Indicates that an empty media list is represented by the string 'all'. */
1076     @BrowserFeature(IE)
1077     JS_MEDIA_LIST_ALL,
1078 
1079     /** Indicates that an empty media list is represented by the string 'all'. */
1080     @BrowserFeature(FF)
1081     JS_MEDIA_LIST_EMPTY_STRING,
1082 
1083     /** Type property of menu has always '' as value. */
1084     @BrowserFeature(IE)
1085     JS_MENU_TYPE_EMPTY,
1086 
1087     /** Indicates if the String representation of a native function is without newline. */
1088     @BrowserFeature({CHROME, EDGE})
1089     JS_NATIVE_FUNCTION_TOSTRING_COMPACT,
1090 
1091     /** Indicates if the String representation of a native function begins and ends with a {@code \n}.*/
1092     @BrowserFeature(IE)
1093     JS_NATIVE_FUNCTION_TOSTRING_NEW_LINE,
1094 
1095     /** <code>Node.contains</code> returns false instead of throwing an exception. */
1096     @BrowserFeature(IE)
1097     JS_NODE_CONTAINS_RETURNS_FALSE_FOR_INVALID_ARG,
1098 
1099     /** The reference argument of <code>Node.insertBefore(..)</code> is optional. */
1100     @BrowserFeature(IE)
1101     JS_NODE_INSERT_BEFORE_REF_OPTIONAL,
1102 
1103     /** Children are enumerated. */
1104     @BrowserFeature({CHROME, IE})
1105     JS_NODE_LIST_ENUMERATE_CHILDREN,
1106 
1107     /** Functions are enumerated. */
1108     @BrowserFeature({CHROME, FF})
1109     JS_NODE_LIST_ENUMERATE_FUNCTIONS,
1110 
1111     /** Indicates that Object.getOwnPropertySymbols() is supported. */
1112     @BrowserFeature({CHROME, FF})
1113     JS_OBJECT_GET_OWN_PROPERTY_SYMBOLS,
1114 
1115     /** Indicates that someObj.offsetParent returns null, it someObj has fixed style. */
1116     @BrowserFeature({CHROME, IE})
1117     JS_OFFSET_PARENT_NULL_IF_FIXED,
1118 
1119     /** element.outerHTML handles null value as string "null". */
1120     @BrowserFeature(IE)
1121     JS_OUTER_HTML_NULL_AS_STRING,
1122 
1123     /** element.outerHTML removes all children from detached node. */
1124     @BrowserFeature(IE)
1125     JS_OUTER_HTML_REMOVES_CHILDREN_FOR_DETACHED,
1126 
1127     /** element.outerHTML removes all children from detached node. */
1128     @BrowserFeature(CHROME)
1129     JS_OUTER_HTML_THROWS_FOR_DETACHED,
1130 
1131     /** Indicates that HTMLPhraseElements returning 'HTMLElement'
1132      * as class name. */
1133     @BrowserFeature(FF)
1134     JS_PHRASE_COMMON_CLASS_NAME,
1135 
1136     /** Indicates that the {@link PopStateEvent}.{@code state} is cloned. */
1137     @BrowserFeature({CHROME, IE})
1138     JS_POP_STATE_EVENT_CLONE_STATE,
1139 
1140     /** Indicates that the {@code pre.width} is string. */
1141     @BrowserFeature(IE)
1142     JS_PRE_WIDTH_STRING,
1143 
1144     /** Indicates that the {@code Object.getOwnPropertyDescriptor.get} contains name. */
1145     @BrowserFeature({FF, IE})
1146     JS_PROPERTY_DESCRIPTOR_NAME,
1147 
1148     /** Indicates that the {@code Object.getOwnPropertyDescriptor.get} starts with a new line. */
1149     @BrowserFeature(IE)
1150     JS_PROPERTY_DESCRIPTOR_NEW_LINE,
1151 
1152     /** Support {@code Reflect}. */
1153     @BrowserFeature({CHROME, FF, EDGE})
1154     JS_REFLECT,
1155 
1156     /** <code>RegExp.lastParen</code> returns an empty string if the RegExp has too many groups. */
1157     @BrowserFeature(IE)
1158     JS_REGEXP_EMPTY_LASTPAREN_IF_TOO_MANY_GROUPS,
1159 
1160     /** RegExp group <code>$0</code> returns the whole previous match (see {@link java.util.regex.Matcher#group()}. */
1161     @BrowserFeature(IE)
1162     JS_REGEXP_GROUP0_RETURNS_WHOLE_MATCH,
1163 
1164     /** Javascript script tags supports the 'for' and the 'event' attribute.
1165      */
1166     @BrowserFeature(IE)
1167     JS_SCRIPT_SUPPORTS_FOR_AND_EVENT_WINDOW,
1168 
1169     /** Javascript selectorText property returns selectors in lower case. */
1170     @BrowserFeature({CHROME, IE})
1171     JS_SELECTOR_TEXT_LOWERCASE,
1172 
1173     /** Indicates that setting the value to null has no effect. */
1174     @BrowserFeature({CHROME, FF})
1175     JS_SELECT_FILE_THROWS,
1176 
1177     /** When expanding the collection by setting the length don't add
1178      * an empty text node. */
1179     @BrowserFeature({CHROME, IE})
1180     JS_SELECT_OPTIONS_DONT_ADD_EMPTY_TEXT_CHILD_WHEN_EXPANDING,
1181 
1182     /** Indicates that select.options has a wong class name. */
1183     @BrowserFeature(IE)
1184     JS_SELECT_OPTIONS_HAS_SELECT_CLASS_NAME,
1185 
1186     /** Ignore negative value when setting the length. */
1187     @BrowserFeature({CHROME, FF})
1188     JS_SELECT_OPTIONS_IGNORE_NEGATIVE_LENGTH,
1189 
1190     /** The 'in' operator returns always true for HtmlOptionsCollection. */
1191     @BrowserFeature(IE)
1192     JS_SELECT_OPTIONS_IN_ALWAYS_TRUE,
1193 
1194     /** Indicates that select.options returns null if requested index is outside. */
1195     @BrowserFeature(IE)
1196     JS_SELECT_OPTIONS_NULL_FOR_OUTSIDE,
1197 
1198     /** Indicates that select.options.remove ignores the call if index is too large. */
1199     @BrowserFeature(CHROME)
1200     JS_SELECT_OPTIONS_REMOVE_IGNORE_IF_INDEX_NEGATIVE,
1201 
1202     /** Indicates that select.options.remove ignores the call if index is too large. */
1203     @BrowserFeature({CHROME, IE})
1204     JS_SELECT_OPTIONS_REMOVE_IGNORE_IF_INDEX_TOO_LARGE,
1205 
1206     /** Indicates that select.options[i] throws an exception if the requested index is neagtive. */
1207     @BrowserFeature(IE)
1208     JS_SELECT_OPTIONS_REMOVE_THROWS_IF_NEGATIV,
1209 
1210     /** Indicates that select.options.remove ignores the call if index is too large. */
1211     @BrowserFeature(FF)
1212     JS_SELECT_REMOVE_IGNORE_IF_INDEX_OUTSIDE,
1213 
1214     /** Indicates that select.value = 'val' only checks the value attribute and
1215      * not the option text. */
1216     @BrowserFeature(IE)
1217     JS_SELECT_SET_VALUES_CHECKS_ONLY_VALUE_ATTRIBUTE,
1218 
1219     /** Whether to get any property from the items first. */
1220     @BrowserFeature(IE)
1221     JS_STORAGE_GET_FROM_ITEMS,
1222 
1223     /** Whether to add to the storage even preserved words. */
1224     @BrowserFeature({FF, IE})
1225     JS_STORAGE_PRESERVED_INCLUDED,
1226 
1227     /** Stylesheet list contains only active style sheets. */
1228     @BrowserFeature(CHROME)
1229     JS_STYLESHEETLIST_ACTIVE_ONLY,
1230 
1231     /** Indicates if style.setProperty ignores case when determining the priority. */
1232     @BrowserFeature({CHROME, IE})
1233     JS_STYLE_SET_PROPERTY_IMPORTANT_IGNORES_CASE,
1234 
1235     /** IE supports accessing unsupported style elements via getter
1236      * like val = elem.style.htmlunit;.
1237      */
1238     @BrowserFeature(IE)
1239     JS_STYLE_UNSUPPORTED_PROPERTY_GETTER,
1240 
1241     /** Indicates wordSpacing support percent values. */
1242     @BrowserFeature(FF)
1243     JS_STYLE_WORD_SPACING_ACCEPTS_PERCENT,
1244 
1245     /** Indicates that trying to access the style property with a wrong index returns undefined
1246      * instead of "". */
1247     @BrowserFeature({CHROME, FF})
1248     JS_STYLE_WRONG_INDEX_RETURNS_UNDEFINED,
1249 
1250     /** The width cell height does not return negative values. */
1251     @BrowserFeature(IE)
1252     JS_TABLE_CELL_HEIGHT_DOES_NOT_RETURN_NEGATIVE_VALUES,
1253 
1254     /** The width cell offset calculation takes border into account. */
1255     @BrowserFeature(IE)
1256     JS_TABLE_CELL_OFFSET_INCLUDES_BORDER,
1257 
1258     /** The width cell property does not return negative values. */
1259     @BrowserFeature(IE)
1260     JS_TABLE_CELL_WIDTH_DOES_NOT_RETURN_NEGATIVE_VALUES,
1261 
1262     /** The width column property does not return negative values. */
1263     @BrowserFeature(IE)
1264     JS_TABLE_COLUMN_WIDTH_NO_NEGATIVE_VALUES,
1265 
1266     /** The width column property has a value of 'null' for null. */
1267     @BrowserFeature({CHROME, FF})
1268     JS_TABLE_COLUMN_WIDTH_NULL_STRING,
1269 
1270     /** Calling deleteCell without an index throws an exception. */
1271     @BrowserFeature({CHROME, FF})
1272     JS_TABLE_ROW_DELETE_CELL_REQUIRES_INDEX,
1273 
1274     /** Throws an exception if the value for column span is less than one. */
1275     @BrowserFeature(IE)
1276     JS_TABLE_SPAN_THROWS_EXCEPTION_IF_INVALID,
1277 
1278     /** Indicates that table elements supports the values "top", "bottom", "middle", "baseline". */
1279     @BrowserFeature(IE)
1280     JS_TABLE_VALIGN_SUPPORTS_IE_VALUES,
1281 
1282     /** Getting the property maxLength if it is not defined in the DOM returns MAX_INT.
1283      * FF and Chrome return -1.
1284      */
1285     @BrowserFeature(IE)
1286     JS_TEXT_AREA_GET_MAXLENGTH_MAX_INT,
1287 
1288     /** Setting the property cols throws an exception, if the provided value is less than 0.
1289      * FF ignores the provided value in this case.
1290      */
1291     @BrowserFeature(IE)
1292     JS_TEXT_AREA_SET_COLS_NEGATIVE_THROWS_EXCEPTION,
1293 
1294     /** Setting the property cols throws an exception, if the provided value is not convertible into an integer.
1295      * FF ignores the provided value in this case and sets cols to 0.
1296      */
1297     @BrowserFeature({IE, FF45})
1298     JS_TEXT_AREA_SET_COLS_THROWS_EXCEPTION,
1299 
1300     /** Setting the property {@code maxLength} throws an exception, if the provided value is less than 0. */
1301     @BrowserFeature({CHROME, FF})
1302     JS_TEXT_AREA_SET_MAXLENGTH_NEGATIVE_THROWS_EXCEPTION,
1303 
1304     /** Setting the property {@code rows} throws an exception, if the provided value is less than 0. */
1305     @BrowserFeature(IE)
1306     JS_TEXT_AREA_SET_ROWS_NEGATIVE_THROWS_EXCEPTION,
1307 
1308     /** Setting the property rows throws an exception, if the provided value is not convertible into an integer.
1309      * FF ignores the provided value in this case and sets rows to 0.
1310      */
1311     @BrowserFeature({IE, FF45})
1312     JS_TEXT_AREA_SET_ROWS_THROWS_EXCEPTION,
1313 
1314     /** Setting the value processes null as null value. */
1315     @BrowserFeature({CHROME, FF})
1316     JS_TEXT_AREA_SET_VALUE_NULL,
1317 
1318     /** Indicates that <code>TreeWalker.expandEntityReferences</code> is always {@code false}. */
1319     @BrowserFeature({CHROME, FF})
1320     JS_TREEWALKER_EXPAND_ENTITY_REFERENCES_FALSE,
1321 
1322     /**
1323      * Indicates that the filter to be used by the TreeWalker has to be a function (so no object with a method
1324      * <code>acceptNode(..)</code> is supported).
1325      */
1326     @BrowserFeature(IE)
1327     JS_TREEWALKER_FILTER_FUNCTION_ONLY,
1328 
1329     /** Types arrays can be constructed with {@code null}. */
1330     @BrowserFeature(CHROME)
1331     JS_TYPED_ARRAYS_NULL,
1332 
1333     /** Setting the property align to arbitrary values is allowed. */
1334     @BrowserFeature({CHROME, FF})
1335     JS_TYPE_ACCEPTS_ARBITRARY_VALUES,
1336 
1337     /** WeakMap supports the argument constructor. */
1338     @BrowserFeature({CHROME, FF})
1339     JS_WEAKMAP_CONSTRUCTOR_ARGUMENT,
1340 
1341     /** Allow inheriting parent constants
1342      * in {@link com.gargoylesoftware.htmlunit.javascript.host.event.WebGLContextEvent}. */
1343     @BrowserFeature({CHROME, FF})
1344     JS_WEBGL_CONTEXT_EVENT_CONSTANTS,
1345 
1346     /** Setting the property width/height to arbitrary values is allowed. */
1347     @BrowserFeature({CHROME, FF})
1348     JS_WIDTH_HEIGHT_ACCEPTS_ARBITRARY_VALUES,
1349 
1350     /**
1351      * The window.ActiveXObject is special in IE
1352      * http://msdn.microsoft.com/en-us/library/ie/dn423948%28v=vs.85%29.aspx.
1353      */
1354     @BrowserFeature(IE)
1355     JS_WINDOW_ACTIVEXOBJECT_HIDDEN,
1356 
1357     /** Changing the opener of a window to something not null and not a window is not valid. */
1358     @BrowserFeature(IE)
1359     JS_WINDOW_CHANGE_OPENER_ONLY_WINDOW_OBJECT,
1360 
1361     /** window.getComputedStyle works with pseudo selectors without colon in front. */
1362     @BrowserFeature(CHROME)
1363     JS_WINDOW_COMPUTED_STYLE_PSEUDO_ACCEPT_WITHOUT_COLON,
1364 
1365     /** <code>window.name</code> returns also form fields (e.g. input, textarea). */
1366     @BrowserFeature(IE)
1367     JS_WINDOW_FORMFIELDS_ACCESSIBLE_BY_NAME,
1368 
1369     /** Support for accessing the frame of a window by id additionally to using the name (FF). */
1370     @BrowserFeature(IE)
1371     JS_WINDOW_FRAMES_ACCESSIBLE_BY_ID,
1372 
1373     /** <code>window..frames['id']</code> returns the frame window instead of the frame element. */
1374     @BrowserFeature(IE)
1375     JS_WINDOW_FRAME_BY_ID_RETURNS_WINDOW,
1376 
1377     /**
1378      * Difference of window.outer/inner height is 89.
1379      */
1380     @BrowserFeature(CHROME)
1381     JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_132,
1382 
1383     /**
1384      * Difference of window.outer/inner height is 63.
1385      */
1386     @BrowserFeature(IE)
1387     JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_63,
1388 
1389     /**
1390      * Difference of window.outer/inner height is 94.
1391      */
1392     @BrowserFeature(FF)
1393     JS_WINDOW_OUTER_INNER_HEIGHT_DIFF_94,
1394 
1395     /** Window.getSelection returns null, if the window is not visible. */
1396     @BrowserFeature(FF)
1397     JS_WINDOW_SELECTION_NULL_IF_INVISIBLE,
1398 
1399     /** Window.top property is writable. */
1400     @BrowserFeature(IE)
1401     JS_WINDOW_TOP_WRITABLE,
1402 
1403     /** Supports XML. */
1404     @BrowserFeature({CHROME, FF})
1405     JS_XML,
1406 
1407     /** XMLDocument: .getElementsByTagName() to search the nodes by their local name. */
1408     @BrowserFeature(IE)
1409     JS_XML_GET_ELEMENTS_BY_TAG_NAME_LOCAL,
1410 
1411     /** XMLDocument: .getElementById() to return any element, not HTML specifically. */
1412     @BrowserFeature({CHROME, FF})
1413     JS_XML_GET_ELEMENT_BY_ID__ANY_ELEMENT,
1414 
1415     /** Indicates that new XMLSerializer().serializeToString(..) inserts a blank before self-closing a tag. */
1416     @BrowserFeature(IE)
1417     JS_XML_SERIALIZER_BLANK_BEFORE_SELF_CLOSING,
1418 
1419     /**
1420      * Indicates that new XMLSerializer().serializeToString(..) called with a document fragment created by an
1421      * HTMLPage always returns ''.
1422      */
1423     @BrowserFeature(IE)
1424     JS_XML_SERIALIZER_HTML_DOCUMENT_FRAGMENT_ALWAYS_EMPTY,
1425 
1426     /** Indicates that <code>XMLSerializer.serializeToString(..)</code> serializes a single CDataSection as escaped
1427      * text instead of <code>&lt;![CDATA[xxx]]&gt;</code>. */
1428     @BrowserFeature(IE)
1429     JS_XML_SERIALIZER_ROOT_CDATA_AS_ESCAPED_TEXT,
1430 
1431     /** Indicates that the browser uses the ActiveXObject for implementing XML support. */
1432     @BrowserFeature(IE)
1433     JS_XML_SUPPORT_VIA_ACTIVEXOBJECT,
1434 
1435     /** With special keys [in .type(int)], should we trigger onkeypress event or not. */
1436     @BrowserFeature(FF)
1437     KEYBOARD_EVENT_SPECIAL_KEYPRESS,
1438 
1439     /** Handle {@code <keygen>} as {@code <block>}. */
1440     @BrowserFeature(IE)
1441     KEYGEN_AS_BLOCK,
1442 
1443     /** Handle {@code <keygen>} as {@code <select>}. */
1444     @BrowserFeature(FF)
1445     KEYGEN_AS_SELECT,
1446 
1447     /**
1448      * Indicates that the browser considers the meta X-UA-Compatible when determining
1449      * compatibility/quirks mode.
1450      */
1451     @BrowserFeature(IE)
1452     META_X_UA_COMPATIBLE,
1453 
1454     /**
1455      * The default display style of multicol is 'block'.
1456      */
1457     @BrowserFeature(FF)
1458     MULTICOL_BLOCK,
1459 
1460     /** */
1461     @BrowserFeature(IE)
1462     PAGE_SELECTION_RANGE_FROM_SELECTABLE_TEXT_INPUT,
1463 
1464     /** Wait for the whole page to load before initializing bodies for frames. */
1465     @BrowserFeature(IE)
1466     PAGE_WAIT_LOAD_BEFORE_BODY,
1467 
1468     /** Indicates <code>.querySelectorAll()</code> and <code>.querySelector()</code> is not supported in quirks mode. */
1469     @BrowserFeature(IE)
1470     QUERYSELECTORALL_NOT_IN_QUIRKS,
1471 
1472     /** Indicates {@code .querySelectorAll()} ignores {@code :target} condition. */
1473     @BrowserFeature(CHROME)
1474     QUERYSELECTORALL_NO_TARGET,
1475 
1476     /** IE throws a syntax error if a css3 pseudo selector is used on a detached node. */
1477     @BrowserFeature(IE)
1478     QUERYSELECTOR_CSS3_PSEUDO_REQUIRE_ATTACHED_NODE,
1479 
1480     /** Set the value attribute of a reset input to 'Reset' if no value attribute specified. */
1481     @BrowserFeature(IE)
1482     RESETINPUT_DEFAULT_VALUE_IF_VALUE_NOT_DEFINED,
1483 
1484     /**
1485      * Indicates that all options of a select are deselected,
1486      * if the select state is changed for an unknown option.
1487      */
1488     @BrowserFeature({CHROME, FF52, IE})
1489     SELECT_DESELECT_ALL_IF_SWITCHING_UNKNOWN,
1490 
1491     /** Indicates that string.contains() is supported. */
1492     @BrowserFeature(FF45)
1493     STRING_CONTAINS,
1494 
1495     /** Indicates that string.includes() is supported. */
1496     @BrowserFeature({CHROME, FF})
1497     STRING_INCLUDES,
1498 
1499     /** Indicates that string.startsWith() and .endWith() are supported. */
1500     @BrowserFeature({CHROME, FF})
1501     STRING_REPEAT,
1502 
1503     /** Indicates that string.startsWith() and .endWith() are supported. */
1504     @BrowserFeature({CHROME, FF})
1505     STRING_STARTS_ENDS_WITH,
1506 
1507     /** Indicates that string.trimLeft() and .trimRight() are supported. */
1508     @BrowserFeature({CHROME, FF})
1509     STRING_TRIM_LEFT_RIGHT,
1510 
1511     /**
1512      * Indicates that the href property for a &lt;link rel="stylesheet" type="text/css" href="" /&gt;
1513      * (href empty) is null.
1514      */
1515     @BrowserFeature(IE)
1516     STYLESHEET_HREF_EMPTY_IS_NULL,
1517 
1518     /** Set the value attribute of a submit input to 'Submit Query' if no value attribute specified. */
1519     @BrowserFeature(IE)
1520     SUBMITINPUT_DEFAULT_VALUE_IF_VALUE_NOT_DEFINED,
1521 
1522     /** Indicates that unknown tags inside an SVG element are handled as DOM elements, not SVG elements. */
1523     @BrowserFeature(IE)
1524     SVG_UNKNOWN_ARE_DOM,
1525 
1526     /**
1527      * Indicates, that the pathname for the url 'blank' is empty;
1528      * instead of 'blank'.
1529      */
1530     @BrowserFeature({CHROME, FF52})
1531     URL_ABOUT_BLANK_HAS_BLANK_PATH,
1532 
1533     /**
1534      * Indicates, that the pathname for the url {@code about:blank} is empty;
1535      * instead of '/blank'.
1536      */
1537     @BrowserFeature(FF45)
1538     URL_ABOUT_BLANK_HAS_EMPTY_PATH,
1539 
1540     /**
1541      * Indicates, that the browser supports username and password as
1542      * part of the url (e.g. http://john.smith:secret@localhost).
1543      */
1544     @BrowserFeature({CHROME, FF})
1545     URL_AUTH_CREDENTIALS,
1546 
1547     /** Replace only ' ' with %20 when encode the query part of a url. */
1548     @BrowserFeature(IE)
1549     URL_MINIMAL_QUERY_ENCODING,
1550 
1551     /** Handles missing slashes. */
1552     @BrowserFeature({CHROME, FF})
1553     URL_MISSING_SLASHES,
1554 
1555     /** Execute window events. */
1556     @BrowserFeature(IE)
1557     WINDOW_EXECUTE_EVENTS,
1558 
1559     /** XMLHttpRequest.getAllResponseHeaders() has a trailing CrLf. */
1560     @BrowserFeature(IE)
1561     XHR_ALL_RESPONSE_HEADERS_APPEND_CRLF,
1562 
1563     /** XMLHttpRequest triggers the opened event at the beginning of the send method again. */
1564     @BrowserFeature(IE)
1565     XHR_FIRE_STATE_OPENED_AGAIN_IN_ASYNC_MODE,
1566 
1567     /**
1568      * Indicates if the port should be ignored during origin check.
1569      * For IE: this is currently a bug, see
1570      * http://connect.microsoft.com/IE/feedback/details/781303/
1571      * origin-header-is-not-added-to-cors-requests-to-same-domain-but-different-port
1572      */
1573     @BrowserFeature(IE)
1574     XHR_IGNORE_PORT_FOR_SAME_ORIGIN,
1575 
1576     /** ProgressEvent.lengthComputable is true. */
1577     @BrowserFeature({FF45, IE})
1578     XHR_LENGTH_COMPUTABLE,
1579 
1580     /** A cross origin request to {@code about:blank} is not allowed. */
1581     @BrowserFeature(IE)
1582     XHR_NO_CROSS_ORIGIN_TO_ABOUT,
1583 
1584     /** Indicates if an empty url is allowed as url param for the open method. */
1585     @BrowserFeature({CHROME, FF})
1586     XHR_OPEN_ALLOW_EMTPY_URL,
1587 
1588     /** Indicates that open() throws an exception in sync mode if 'withCredentials' is set to true. */
1589     @BrowserFeature(FF45)
1590     XHR_OPEN_WITHCREDENTIALS_TRUE_IN_SYNC_EXCEPTION,
1591 
1592     /** Indicates that method overrideMimeType throws if msg was already sent. */
1593     @BrowserFeature({CHROME, FF52, IE})
1594     XHR_OVERRIDE_MIME_TYPE_BEFORE_SEND,
1595 
1596     /** Indicates that the content charset is used for response parsing. */
1597     @BrowserFeature(FF)
1598     XHR_USE_CONTENT_CHARSET,
1599 
1600     /** Indicates that the request uses the charset from the requesting page. */
1601     @BrowserFeature(CHROME)
1602     XHR_USE_DEFAULT_CHARSET_FROM_PAGE,
1603 
1604     /** Indicates that the "*" pattern is allowed when withCredential is enabled. */
1605     @BrowserFeature(IE)
1606     XHR_WITHCREDENTIALS_ALLOW_ORIGIN_ALL,
1607 
1608     /**
1609      * Indicates that the property <code>withCredentials</code> is not writable for sync requests.
1610      * Setting the property throws an exception.
1611      */
1612     @BrowserFeature(FF45)
1613     XHR_WITHCREDENTIALS_NOT_WRITEABLE_IN_SYNC_EXCEPTION,
1614 
1615     /** Indicates that the XPath attribute is case sensitive. */
1616     @BrowserFeature(CHROME)
1617     XPATH_ATTRIBUTE_CASE_SENSITIVE,
1618 
1619     /** Indicates that the 'SelectionNamespaces' property is supported by XPath expressions. */
1620     @BrowserFeature({IE, CHROME})
1621     XPATH_SELECTION_NAMESPACES,
1622 
1623 }