Use a 1-byte enum class for TextDirection
[WebKit-https.git] / Source / WebCore / dom / Element.idl
index 7e0ee08..7df36ec 100644 (file)
 
 [
     CustomToJSObject,
 
 [
     CustomToJSObject,
+    DOMJIT,
     JSCustomHeader,
     JSGenerateToNativeObject,
     ExportMacro=WEBCORE_EXPORT,
 ] interface Element : Node {
     JSCustomHeader,
     JSGenerateToNativeObject,
     ExportMacro=WEBCORE_EXPORT,
 ] interface Element : Node {
-
-    // DOM Level 1 Core
-
-    readonly attribute DOMString? tagName;
-
-    // FIXME: Using "undefined" as default parameter value is wrong.
-    DOMString? getAttribute(optional DOMString name = "undefined");
-
-    [ObjCLegacyUnnamedParameters, RaisesException, InvokesCustomElementLifecycleCallbacks]
-
-    // FIXME: Using "undefined" as default parameter value is wrong.
-    void setAttribute(optional DOMString name = "undefined", optional DOMString value = "undefined");
-
-    // FIXME: Using "undefined" as default parameter value is wrong.
-    [InvokesCustomElementLifecycleCallbacks] void removeAttribute(optional DOMString name = "undefined");
-    Attr getAttributeNode(optional DOMString name = "undefined");
-
-    [RaisesException, InvokesCustomElementLifecycleCallbacks] Attr setAttributeNode(Attr newAttr);
-    [RaisesException, InvokesCustomElementLifecycleCallbacks] Attr removeAttributeNode(Attr oldAttr);
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-    [ImplementedAs=getElementsByTagNameForObjC] NodeList getElementsByTagName(optional DOMString name);
-#else
-    // FIXME: Using "undefined" as default parameter value is wrong.
-    HTMLCollection getElementsByTagName(optional DOMString name = "undefined");
-#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
-
-    // FIXME: Using "undefined" as default parameter value is wrong.
-    [ObjCLegacyUnnamedParameters] DOMString? getAttributeNS(optional DOMString? namespaceURI = null, optional DOMString localName = "undefined");
-
-    [ObjCLegacyUnnamedParameters, RaisesException, InvokesCustomElementLifecycleCallbacks]
-
-    // FIXME: Using "undefined" as default parameter value is wrong.
-    void setAttributeNS(optional DOMString? namespaceURI = null, optional DOMString qualifiedName = "undefined", optional DOMString value = "undefined");
-
-    [ObjCLegacyUnnamedParameters, InvokesCustomElementLifecycleCallbacks] void removeAttributeNS(DOMString? namespaceURI, DOMString localName);
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-    [ObjCLegacyUnnamedParameters, ImplementedAs=getElementsByTagNameNSForObjC] NodeList getElementsByTagNameNS(optional DOMString namespaceURI, optional DOMString localName);
-#else
-    // FIXME: Using "undefined" as default parameter value is wrong.
-    HTMLCollection getElementsByTagNameNS(optional DOMString? namespaceURI = null, optional DOMString localName = "undefined");
-#endif
-
-    // FIXME: Using "undefined" as default parameter value is wrong.
-    [ObjCLegacyUnnamedParameters] Attr getAttributeNodeNS(optional DOMString? namespaceURI = null, optional DOMString localName = "undefined");
-    [RaisesException, InvokesCustomElementLifecycleCallbacks] Attr setAttributeNodeNS(Attr newAttr);
-    boolean hasAttribute(DOMString name);
-    // FIXME: Using "undefined" as default parameter value is wrong.
-    [ObjCLegacyUnnamedParameters] boolean hasAttributeNS(optional DOMString? namespaceURI = null, optional DOMString localName = "undefined");
-
-    [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 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;
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C || defined(LANGUAGE_GOBJECT) && LANGUAGE_GOBJECT
-    void focus();
-    void blur();
-#endif
-
-    void scrollIntoView(optional boolean alignWithTop = true);
-
-    // WebKit extensions
-
+    // Non standard API (https://www.w3.org/Bugs/Public/show_bug.cgi?id=17152).
     void scrollIntoViewIfNeeded(optional boolean centerIfNeeded = true);
     void scrollIntoViewIfNeeded(optional boolean centerIfNeeded = true);
-    void scrollByLines(optional long lines = 0);
-    void scrollByPages(optional long pages = 0);
-
-    // HTML 5
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-    [ImplementedAs=getElementsByClassNameForObjC] NodeList getElementsByClassName(optional DOMString name);
-#else
-    // FIXME: Using "undefined" as default parameter value is wrong.
-    HTMLCollection getElementsByClassName(optional DOMString name = "undefined");
-#endif
-    [TreatNullAs=EmptyString, SetterRaisesException] attribute DOMString innerHTML;
-    [TreatNullAs=EmptyString, 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(optional unsigned short flags = 0);
-
-    // W3C version
-    void webkitRequestFullscreen();
-#endif
-
-#if defined(ENABLE_INDIE_UI) && ENABLE_INDIE_UI
-    [Reflect] attribute DOMString uiactions;
-#endif
 
 
-    [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.
+
+    // 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;
 
 
-    // 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, EnabledAtRuntime=ShadowDOM, RaisesException] ShadowRoot attachShadow(ShadowRootInit init);
-    [Conditional=SHADOW_DOM, EnabledAtRuntime=ShadowDOM, ImplementedAs=shadowRootForBindings, CallWith=ScriptState] readonly attribute ShadowRoot shadowRoot;
-    [Conditional=SHADOW_DOM, EnabledAtRuntime=ShadowDOM, 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;
+    // 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;
     [NotEnumerable, ImplementedAs=onwebkitAnimationEnd] attribute EventHandler onwebkitanimationend;
     [NotEnumerable, ImplementedAs=onwebkitAnimationIteration] attribute EventHandler onwebkitanimationiteration;
     [NotEnumerable, ImplementedAs=onwebkitAnimationStart] attribute EventHandler onwebkitanimationstart;
     [NotEnumerable, ImplementedAs=onwebkitTransitionEnd] attribute EventHandler onwebkittransitionend;
-    [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
+    // 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;
 
     [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] 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;
     [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;
     [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;
     [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventHandler onwebkitplaybacktargetavailabilitychanged;
-};
 
 
-enum ShadowRootMode { "open", "closed" };
+    // 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;
 };
 
 
 dictionary ShadowRootInit {
     required ShadowRootMode mode;
 };
 
+Element implements AccessibilityRole;
+Element implements AriaAttributes;
 Element implements Animatable;
 Element implements ChildNode;
 Element implements Animatable;
 Element implements ChildNode;
-Element implements ParentNode;
+Element implements DocumentAndElementEventHandlers;
 Element implements NonDocumentTypeChildNode;
 Element implements NonDocumentTypeChildNode;
-Element implements GlobalEventHandlers;
+Element implements ParentNode;
+Element implements Slotable;