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