mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-10 02:51:55 +00:00
Some checks failed
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (macos-14, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
Build Dev Container Image / build (push) Has been cancelled
Instead of bothering the GC heap with a bunch of DOMRect allocations, we can just pass around CSSPixelRect internally in many cases. Before this change, we were generating so much DOMRect garbage that we had to do a garbage collection *every frame* on the Immich demo. This was due to the large number of intersection observers checked. We still need to relax way more when idle, but for comparison, before this change, when doing nothing for 10 seconds on Immich, we'd spend 2.5 seconds updating intersection observers. After this change, we now spend 600 ms.
144 lines
6.4 KiB
Text
144 lines
6.4 KiB
Text
#import <Animations/Animatable.idl>
|
|
#import <ARIA/ARIAMixin.idl>
|
|
#import <DOM/Attr.idl>
|
|
#import <DOM/ChildNode.idl>
|
|
#import <DOM/DOMTokenList.idl>
|
|
#import <DOM/NamedNodeMap.idl>
|
|
#import <DOM/Node.idl>
|
|
#import <DOM/NodeList.idl>
|
|
#import <DOM/ParentNode.idl>
|
|
#import <DOM/ShadowRoot.idl>
|
|
#import <DOM/Slottable.idl>
|
|
#import <Geometry/DOMRect.idl>
|
|
#import <Geometry/DOMRectList.idl>
|
|
#import <HTML/HTMLSlotElement.idl>
|
|
#import <HTML/Window.idl>
|
|
|
|
enum ScrollLogicalPosition { "start", "center", "end", "nearest" };
|
|
// https://drafts.csswg.org/cssom-view-1/#dictdef-scrollintoviewoptions
|
|
dictionary ScrollIntoViewOptions : ScrollOptions {
|
|
ScrollLogicalPosition block = "start";
|
|
ScrollLogicalPosition inline = "nearest";
|
|
ScrollIntoViewContainer container = "all";
|
|
};
|
|
|
|
enum ScrollIntoViewContainer { "all", "nearest" };
|
|
|
|
// https://drafts.csswg.org/cssom-view-1/#dictdef-checkvisibilityoptions
|
|
dictionary CheckVisibilityOptions {
|
|
boolean checkOpacity = false;
|
|
boolean checkVisibilityCSS = false;
|
|
boolean contentVisibilityAuto = false;
|
|
boolean opacityProperty = false;
|
|
boolean visibilityProperty = false;
|
|
};
|
|
|
|
// https://dom.spec.whatwg.org/#element
|
|
[Exposed=Window]
|
|
interface Element : Node {
|
|
readonly attribute DOMString? namespaceURI;
|
|
readonly attribute DOMString? prefix;
|
|
readonly attribute DOMString localName;
|
|
readonly attribute DOMString tagName;
|
|
|
|
[Reflect, CEReactions] attribute DOMString id;
|
|
[Reflect=class, CEReactions] attribute DOMString className;
|
|
[SameObject, PutForwards=value] readonly attribute DOMTokenList classList;
|
|
[Reflect, CEReactions, Unscopable] attribute DOMString slot;
|
|
|
|
boolean hasAttributes();
|
|
[SameObject] readonly attribute NamedNodeMap attributes;
|
|
sequence<DOMString> getAttributeNames();
|
|
DOMString? getAttribute(DOMString qualifiedName);
|
|
DOMString? getAttributeNS([FlyString] DOMString? namespace, [FlyString] DOMString localName);
|
|
[CEReactions] undefined setAttribute(DOMString qualifiedName, DOMString value);
|
|
[CEReactions] undefined setAttributeNS([FlyString] DOMString? namespace , [FlyString] DOMString qualifiedName , DOMString value);
|
|
[CEReactions] undefined removeAttribute([FlyString] DOMString qualifiedName);
|
|
[CEReactions] undefined removeAttributeNS([FlyString] DOMString? namespace, [FlyString] DOMString localName);
|
|
[CEReactions] boolean toggleAttribute(DOMString qualifiedName, optional boolean force);
|
|
boolean hasAttribute(DOMString qualifiedName);
|
|
boolean hasAttributeNS([FlyString] DOMString? namespace, [FlyString] DOMString localName);
|
|
|
|
Attr? getAttributeNode([FlyString] DOMString qualifiedName);
|
|
Attr? getAttributeNodeNS([FlyString] DOMString? namespace, [FlyString] DOMString localName);
|
|
[CEReactions] Attr? setAttributeNode(Attr attr);
|
|
[CEReactions] Attr? setAttributeNodeNS(Attr attr);
|
|
[CEReactions] Attr removeAttributeNode(Attr attr);
|
|
|
|
ShadowRoot attachShadow(ShadowRootInit init);
|
|
[ImplementedAs=shadow_root_for_bindings] readonly attribute ShadowRoot? shadowRoot;
|
|
|
|
boolean matches(DOMString selectors);
|
|
Element? closest(DOMString selectors);
|
|
[ImplementedAs=matches] boolean webkitMatchesSelector(DOMString selectors); // legacy alias of .matches
|
|
|
|
HTMLCollection getElementsByTagName([FlyString] DOMString tagName);
|
|
HTMLCollection getElementsByTagNameNS([FlyString] DOMString? namespace, [FlyString] DOMString localName);
|
|
HTMLCollection getElementsByClassName(DOMString className);
|
|
|
|
[CEReactions] Element? insertAdjacentElement(DOMString where, Element element); // legacy
|
|
undefined insertAdjacentText(DOMString where, DOMString data); // legacy
|
|
|
|
// https://dom.spec.whatwg.org/#interface-nondocumenttypechildnode
|
|
readonly attribute Element? nextElementSibling;
|
|
readonly attribute Element? previousElementSibling;
|
|
|
|
// https://drafts.csswg.org/cssom-view/#extension-to-the-element-interface
|
|
[ImplementedAs=get_client_rects_for_bindings] DOMRectList getClientRects();
|
|
[ImplementedAs=get_bounding_client_rect_for_bindings] DOMRect getBoundingClientRect();
|
|
|
|
boolean checkVisibility(optional CheckVisibilityOptions options = {});
|
|
|
|
undefined scrollIntoView(optional (boolean or ScrollIntoViewOptions) arg = {});
|
|
undefined scroll(optional ScrollToOptions options = {});
|
|
undefined scroll(unrestricted double x, unrestricted double y);
|
|
[ImplementedAs=scroll] undefined scrollTo(optional ScrollToOptions options = {});
|
|
[ImplementedAs=scroll] undefined scrollTo(unrestricted double x, unrestricted double y);
|
|
undefined scrollBy(optional ScrollToOptions options = {});
|
|
undefined scrollBy(unrestricted double x, unrestricted double y);
|
|
attribute unrestricted double scrollTop;
|
|
attribute unrestricted double scrollLeft;
|
|
readonly attribute long scrollWidth;
|
|
readonly attribute long scrollHeight;
|
|
readonly attribute long clientTop;
|
|
readonly attribute long clientLeft;
|
|
readonly attribute long clientWidth;
|
|
readonly attribute long clientHeight;
|
|
readonly attribute double currentCSSZoom;
|
|
|
|
// https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization
|
|
// FIXME: [CEReactions] undefined setHTMLUnsafe((TrustedHTML or DOMString) html);
|
|
[CEReactions] undefined setHTMLUnsafe(DOMString html);
|
|
DOMString getHTML(optional GetHTMLOptions options = {});
|
|
|
|
// FIXME: [CEReactions] attribute (TrustedHTML or [LegacyNullToEmptyString] DOMString) innerHTML;
|
|
[CEReactions, LegacyNullToEmptyString] attribute DOMString innerHTML;
|
|
|
|
// FIXME: [CEReactions] attribute (TrustedHTML or [LegacyNullToEmptyString] DOMString) outerHTML;
|
|
[CEReactions, LegacyNullToEmptyString] attribute DOMString outerHTML;
|
|
|
|
// FIXME: [CEReactions] undefined insertAdjacentHTML(DOMString position, (TrustedHTML or DOMString) string);
|
|
[CEReactions] undefined insertAdjacentHTML(DOMString position, DOMString text);
|
|
|
|
};
|
|
|
|
dictionary GetHTMLOptions {
|
|
boolean serializableShadowRoots = false;
|
|
sequence<ShadowRoot> shadowRoots = [];
|
|
};
|
|
|
|
dictionary ShadowRootInit {
|
|
required ShadowRootMode mode;
|
|
boolean delegatesFocus = false;
|
|
SlotAssignmentMode slotAssignment = "named";
|
|
boolean clonable = false;
|
|
boolean serializable = false;
|
|
};
|
|
|
|
Element includes ParentNode;
|
|
Element includes ChildNode;
|
|
// https://www.w3.org/TR/wai-aria-1.2/#idl_element
|
|
Element includes ARIAMixin;
|
|
Element includes Slottable;
|
|
// https://www.w3.org/TR/web-animations-1/#extensions-to-the-element-interface
|
|
Element includes Animatable;
|