Use a 1-byte enum class for TextDirection
[WebKit-https.git] / Source / WebCore / dom / Element.idl
index f3455bb..7df36ec 100644 (file)
  */
 
 [
+    CustomToJSObject,
+    DOMJIT,
     JSCustomHeader,
     JSGenerateToNativeObject,
+    ExportMacro=WEBCORE_EXPORT,
 ] interface Element : Node {
-
-    // DOM Level 1 Core
-
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString tagName;
-
-    [TreatReturnedNullStringAs=Null] DOMString getAttribute([Default=Undefined] optional DOMString name);
-    [ObjCLegacyUnnamedParameters, RaisesException] void setAttribute([Default=Undefined] optional DOMString name,
-                                     [Default=Undefined] optional DOMString value);
-    void removeAttribute([Default=Undefined] optional DOMString name);
-    Attr getAttributeNode([Default=Undefined] optional DOMString name);
-    [RaisesException] Attr setAttributeNode([Default=Undefined] optional Attr newAttr);
-    [RaisesException] Attr removeAttributeNode([Default=Undefined] optional Attr oldAttr);
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-    [ImplementedAs=getElementsByTagNameForObjC] NodeList getElementsByTagName([Default=Undefined] optional DOMString name);
-#else
-    HTMLCollection getElementsByTagName([Default=Undefined] optional DOMString name);
-#endif
-
-#if !defined(LANGUAGE_OBJECTIVE_C)
-    // For ObjC this is defined on Node for legacy support.
-    readonly attribute NamedNodeMap     attributes;
-    boolean            hasAttributes();
-#endif
-
-    // DOM Level 2 Core
-
-    [ObjCLegacyUnnamedParameters, TreatReturnedNullStringAs=Null] DOMString getAttributeNS([TreatNullAs=NullString, TreatUndefinedAs=NullString, Default=Undefined] optional DOMString namespaceURI,
-                                            [Default=Undefined] optional DOMString localName);
-    [ObjCLegacyUnnamedParameters, RaisesException] void setAttributeNS([TreatNullAs=NullString, TreatUndefinedAs=NullString, Default=Undefined] optional DOMString namespaceURI,
-                                       [Default=Undefined] optional DOMString qualifiedName, 
-                                       [Default=Undefined] optional DOMString value);
-    [ObjCLegacyUnnamedParameters] void removeAttributeNS([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString namespaceURI,
-                                          DOMString localName);
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-    [ObjCLegacyUnnamedParameters, ImplementedAs=getElementsByTagNameNSForObjC] NodeList getElementsByTagNameNS([TreatNullAs=NullString,Default=Undefined] optional DOMString namespaceURI, [Default=Undefined] optional DOMString localName);
-#else
-    HTMLCollection getElementsByTagNameNS([TreatNullAs=NullString,Default=Undefined] optional DOMString namespaceURI, [Default=Undefined] optional DOMString localName);
-#endif
-    [ObjCLegacyUnnamedParameters] Attr getAttributeNodeNS([TreatNullAs=NullString, TreatUndefinedAs=NullString, Default=Undefined] optional DOMString namespaceURI,
-                                           [Default=Undefined] optional DOMString localName);
-    [RaisesException] Attr setAttributeNodeNS([Default=Undefined] optional Attr newAttr);
-    boolean hasAttribute(DOMString name);
-    [ObjCLegacyUnnamedParameters] boolean hasAttributeNS([TreatNullAs=NullString, TreatUndefinedAs=NullString, Default=Undefined] optional DOMString namespaceURI,
-                                          [Default=Undefined] optional DOMString localName);
-
-    [ImplementedAs=cssomStyle] readonly attribute CSSStyleDeclaration style;
-
-    // DOM 4
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-    [Reflect] attribute DOMString id;
-#endif
-
-    // Common extensions
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-    readonly attribute long offsetLeft;
-    readonly attribute long offsetTop;
-    readonly attribute long offsetWidth;
-    readonly attribute long offsetHeight;
-    readonly attribute long clientLeft;
-    readonly attribute long clientTop;
-    readonly attribute long clientWidth;
-    readonly attribute long clientHeight;
-#else
-    readonly attribute double offsetLeft;
-    readonly attribute double offsetTop;
-    readonly attribute double offsetWidth;
-    readonly attribute double offsetHeight;
-    readonly attribute double clientLeft;
-    readonly attribute double clientTop;
-    readonly attribute double clientWidth;
-    readonly attribute double clientHeight;
-#endif
-
-    attribute long scrollLeft;
-    attribute long scrollTop;
+    readonly attribute DOMString? namespaceURI;
+    readonly attribute DOMString? prefix;
+    readonly attribute DOMString localName;
+    readonly attribute DOMString tagName;
+
+    [CEReactions, Reflect] attribute DOMString id;
+    [CEReactions, Reflect=class] attribute DOMString className;
+    [PutForwards=value] readonly attribute DOMTokenList classList; // FIXME: Should be [SameObject].
+    [CEReactions, EnabledAtRuntime=ShadowDOM, Reflect, Unscopable] attribute DOMString slot;
+
+    [DOMJIT=ReadDOM] boolean hasAttributes();
+    readonly attribute NamedNodeMap attributes; // FIXME: Should be [SameObject].
+    sequence<DOMString> getAttributeNames();
+    [DOMJIT=ReadDOM] DOMString? getAttribute(DOMString qualifiedName);
+    DOMString? getAttributeNS(DOMString? namespaceURI, DOMString localName);
+    [CEReactions, MayThrowException] void setAttribute(DOMString qualifiedName, DOMString value);
+    [CEReactions, MayThrowException] void setAttributeNS(DOMString? namespaceURI, DOMString qualifiedName, DOMString value);
+    [CEReactions] void removeAttribute(DOMString qualifiedName);
+    [CEReactions] void removeAttributeNS(DOMString? namespaceURI, DOMString localName);
+    [CEReactions, MayThrowException] boolean toggleAttribute(DOMString qualifiedName, optional boolean force);
+    boolean hasAttribute(DOMString qualifiedName);
+    boolean hasAttributeNS(DOMString? namespaceURI, DOMString localName);
+
+    [DOMJIT=ReadDOM] Attr? getAttributeNode(DOMString qualifiedName);
+    Attr? getAttributeNodeNS(DOMString? namespaceURI, DOMString localName);
+    [CEReactions, MayThrowException] Attr? setAttributeNode(Attr attr);
+    [CEReactions, MayThrowException] Attr? setAttributeNodeNS(Attr attr);
+    [CEReactions, MayThrowException] Attr removeAttributeNode(Attr attr);
+
+    [EnabledAtRuntime=ShadowDOM, MayThrowException] ShadowRoot attachShadow(ShadowRootInit init);
+    [EnabledAtRuntime=ShadowDOM, ImplementedAs=shadowRootForBindings, CallWith=ScriptState] readonly attribute ShadowRoot? shadowRoot;
+
+    [MayThrowException] Element? closest(DOMString selectors);
+    [MayThrowException] boolean matches(DOMString selectors);
+    [ImplementedAs=matches, MayThrowException] boolean webkitMatchesSelector(DOMString selectors); // Historical alias of .matches.
+
+    [DOMJIT=ReadDOM] HTMLCollection getElementsByTagName(DOMString qualifiedName);
+    HTMLCollection getElementsByTagNameNS(DOMString? namespaceURI, DOMString localName);
+    HTMLCollection getElementsByClassName(DOMString name);
+
+    [CEReactions, MayThrowException] Element? insertAdjacentElement(DOMString where, Element element); // Historical.
+    [MayThrowException] void insertAdjacentText(DOMString where, DOMString data); // Historical.
+
+    // CSSOM-view extensions (https://drafts.csswg.org/cssom-view/#extension-to-the-element-interface).
+    DOMRectList getClientRects();
+    [NewObject] DOMRect getBoundingClientRect();
+    void scrollIntoView(optional boolean alignWithTop = true); // FIXME(webkit.org/b/161611): Parameter type should be (boolean or object).
+    [ImplementedAs=scrollTo] void scroll(optional ScrollToOptions options);
+    [ImplementedAs=scrollTo] void scroll(unrestricted double x, unrestricted double y);
+    void scrollTo(optional ScrollToOptions options);
+    void scrollTo(unrestricted double x, unrestricted double y);
+    void scrollBy(optional ScrollToOptions option);
+    void scrollBy(unrestricted double x, unrestricted double y);
+    attribute long scrollTop; // FIXME(webkit.org/b/188045): should be unrestricted double.
+    attribute long scrollLeft; // FIXME(webkit.org/b/188045): should be unrestricted double.
     readonly attribute long scrollWidth;
     readonly attribute long scrollHeight;
+    readonly attribute double clientTop; // FIXME: Should be of type long.
+    readonly attribute double clientLeft; // FIXME: Should be of type long.
+    readonly attribute double clientWidth; // FIXME: Should be of type long.
+    readonly attribute double clientHeight; // FIXME: Should be of type long.
+
+    // Extensions to Element from DOM Parsing and Serialization specification.
+    // https://w3c.github.io/DOM-Parsing/#extensions-to-the-element-interface
+    [CEReactions] attribute [TreatNullAs=EmptyString] DOMString innerHTML;
+    [CEReactions] attribute [TreatNullAs=EmptyString] DOMString outerHTML;
+    [CEReactions, MayThrowException] void insertAdjacentHTML(DOMString position, DOMString text);
+
+    // Extensions from Full Screen API (https://fullscreen.spec.whatwg.org/#api).
+    // FIXME: Should we add unprefixed versions?
+    [Conditional=FULLSCREEN_API, EnabledBySetting=FullScreen, ImplementedAs=webkitRequestFullscreen] void webkitRequestFullScreen(); // Prefixed Mozilla version.
+    [Conditional=FULLSCREEN_API, EnabledBySetting=FullScreen] void webkitRequestFullscreen(); // Prefixed W3C version.
+
+    // Extensions from Pointer Lock API (https://w3c.github.io/pointerlock/#extensions-to-the-element-interface).
+    [Conditional=POINTER_LOCK] void requestPointerLock();
 
-    [ImplementedAs=bindingsOffsetParent] readonly attribute Element offsetParent;
-
-    void focus();
-    void blur();
-    void scrollIntoView(optional boolean alignWithTop);
-
-    // WebKit extensions
-
-    void scrollIntoViewIfNeeded(optional boolean centerIfNeeded);
-    void scrollByLines([Default=Undefined] optional long lines);
-    void scrollByPages([Default=Undefined] optional long pages);
-
-    // HTML 5
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-    [ImplementedAs=getElementsByClassNameForObjC] NodeList getElementsByClassName([Default=Undefined] optional DOMString name);
-#else
-    HTMLCollection getElementsByClassName([Default=Undefined] optional DOMString name);
-#endif
-    [TreatNullAs=NullString, SetterRaisesException] attribute DOMString innerHTML;
-    [TreatNullAs=NullString, SetterRaisesException] attribute DOMString outerHTML;
-             
-
-    [Reflect=class] attribute DOMString className;
-    [PutForwards=value] readonly attribute DOMTokenList classList;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-    readonly attribute DOMStringMap dataset;
-#endif
-
-    [RaisesException] boolean matches(DOMString selectors);
-    [RaisesException] Element closest(DOMString selectors);    
-    [ImplementedAs=matches, RaisesException] boolean webkitMatchesSelector(DOMString selectors);
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-    // CSSOM View Module API
-    ClientRectList getClientRects();
-    ClientRect getBoundingClientRect();
-#endif
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-    // Objective-C extensions
-    readonly attribute DOMString innerText;
-#endif
-
-#if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API
-    // Mozilla version
-    const unsigned short ALLOW_KEYBOARD_INPUT = 1;
-    void webkitRequestFullScreen([Default=Undefined] optional unsigned short flags);
-
-    // W3C version
-    void webkitRequestFullscreen();
-#endif
-
-#if defined(ENABLE_INDIE_UI) && ENABLE_INDIE_UI
-    [Reflect] attribute DOMString uiactions;
-#endif
+    // Non standard API (https://www.w3.org/Bugs/Public/show_bug.cgi?id=17152).
+    void scrollIntoViewIfNeeded(optional boolean centerIfNeeded = true);
 
-    [Conditional=POINTER_LOCK] void requestPointerLock();
+    // Event handler from Selection API (http://w3c.github.io/selection-api/#extensions-to-globaleventhandlers).
+    // FIXME: Should be moved to GlobalEventHandlers.
+    [NotEnumerable] attribute EventHandler onselectstart; // FIXME: Should be enumerable.
 
-    // CSS Regions API
-    [Conditional=CSS_REGIONS] readonly attribute DOMString webkitRegionOverset;
-    [Conditional=CSS_REGIONS] sequence<Range> webkitGetRegionFlowRanges();
-
-    // Shadow DOM API
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-    [Conditional=SHADOW_DOM, RaisesException] ShadowRoot attachShadow(Dictionary options);
-    [Conditional=SHADOW_DOM, ImplementedAs=shadowRootForBindings, CallWith=ScriptState] readonly attribute ShadowRoot shadowRoot;
-    [Conditional=SHADOW_DOM, Reflect] attribute DOMString slot;
-#endif
-
-    // Event Handlers
-
-    // Unique to Element and Document
-    // FIXME: Should these be exposed on Window as well (and therefore moved to GlobalEventHandlers.idl)?
-    [NotEnumerable] attribute EventHandler onbeforecopy;
-    [NotEnumerable] attribute EventHandler onbeforecut;
-    [NotEnumerable] attribute EventHandler onbeforepaste;
-    [NotEnumerable] attribute EventHandler oncopy;
-    [NotEnumerable] attribute EventHandler oncut;
-    [NotEnumerable] attribute EventHandler onpaste;
-    [NotEnumerable] attribute EventHandler onselectstart;
-    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenchange;
-    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenerror;
-
-    // Unique to Element and DOMWindow
-    // FIXME: Should these be exposed on Document as well (and therefore moved to GlobalEventHandlers.idl)?
-    [NotEnumerable] attribute EventHandler onanimationend;
-    [NotEnumerable] attribute EventHandler onanimationiteration;
-    [NotEnumerable] attribute EventHandler onanimationstart;
-    [NotEnumerable] attribute EventHandler ontransitionend;
-    [NotEnumerable] attribute EventHandler onwebkitanimationend;
-    [NotEnumerable] attribute EventHandler onwebkitanimationiteration;
-    [NotEnumerable] attribute EventHandler onwebkitanimationstart;
-    [NotEnumerable] attribute EventHandler onwebkittransitionend;
+    // Non-standard WebKit API (https://developer.apple.com/reference/webkitjs/gestureevent).
     [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturechange;
     [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongestureend;
     [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturestart;
 
-    // Unique to Element, HTMLBodyElement and HTMLFrameSetElement
+    // Non standard.
+    [NotEnumerable, ImplementedAs=onwebkitAnimationEnd] attribute EventHandler onwebkitanimationend;
+    [NotEnumerable, ImplementedAs=onwebkitAnimationIteration] attribute EventHandler onwebkitanimationiteration;
+    [NotEnumerable, ImplementedAs=onwebkitAnimationStart] attribute EventHandler onwebkitanimationstart;
+    [NotEnumerable, ImplementedAs=onwebkitTransitionEnd] attribute EventHandler onwebkittransitionend;
+
+    // FIXME: These event handlers should only be on Document (https://fullscreen.spec.whatwg.org/#api).
+    [NotEnumerable, Conditional=FULLSCREEN_API, EnabledBySetting=FullScreen] attribute EventHandler onwebkitfullscreenchange;
+    [NotEnumerable, Conditional=FULLSCREEN_API, EnabledBySetting=FullScreen] attribute EventHandler onwebkitfullscreenerror;
+
+    // FIXME: Cannot find those EventHandlers in the latest specification (https://w3c.github.io/uievents/#events-focus-types).
     [NotEnumerable] attribute EventHandler onfocusin;
     [NotEnumerable] attribute EventHandler onfocusout;
 
-    // Unique to Element
+    // Non standard event handler (https://developer.apple.com/reference/webkitjs/element/1633146-onbeforeload).
     [NotEnumerable] attribute EventHandler onbeforeload;
-    [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeyadded;
-    [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeyerror;
-    [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeymessage;
-    [NotEnumerable, Conditional=ENCRYPTED_MEDIA|ENCRYPTED_MEDIA_V2] attribute EventHandler onwebkitneedkey;
+
+    // Non standard event handler (https://developer.apple.com/reference/webkitjs/element/1634205-onwebkitneedkey).
+    [NotEnumerable, Conditional=LEGACY_ENCRYPTED_MEDIA, EnabledAtRuntime=LegacyEncryptedMediaAPI] attribute EventHandler onwebkitneedkey;
+
+    // Non standard event handler (https://developer.apple.com/reference/webkitjs/element/1633943-onwebkitpresentationmodechanged).
     [NotEnumerable, Conditional=VIDEO_PRESENTATION_MODE] attribute EventHandler onwebkitpresentationmodechanged;
+
+    // Non standard event handler (https://developer.apple.com/reference/webkitjs/element/1630042-onwebkitcurrentplaybacktargetisw).
     [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventHandler onwebkitcurrentplaybacktargetiswirelesschanged;
+
+    // Non standard event handler (https://developer.apple.com/reference/webkitjs/element/1629580-onwebkitplaybacktargetavailabili).
     [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventHandler onwebkitplaybacktargetavailabilitychanged;
+
+    // Accessibility events.
+    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessiblecontextmenu;
+    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibleclick;
+    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibledecrement;
+    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibledismiss;
+    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessiblefocus;
+    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibleincrement;
+    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessiblescrollintoview;
+    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessiblesetvalue;
+    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibleselect;
+};
+
+dictionary ShadowRootInit {
+    required ShadowRootMode mode;
 };
 
+Element implements AccessibilityRole;
+Element implements AriaAttributes;
+Element implements Animatable;
 Element implements ChildNode;
-Element implements ParentNode;
+Element implements DocumentAndElementEventHandlers;
 Element implements NonDocumentTypeChildNode;
-Element implements GlobalEventHandlers;
+Element implements ParentNode;
+Element implements Slotable;