ladybird/Libraries/LibWeb/DOM
Timothy Flynn 0482b6bb57 LibWeb+LibWebView+WebContent: Implement versioning for document cookies
This patch introduces a cookie cache in the WebContent process to reduce
blocking IPC calls when JS accesses document.cookie. The UI process now
maintains a cookie version counter per-domain in shared memory. When JS
reads document.cookie, we check whether we have a valid cached cookie by
comparing the current shared version to the last used version. If they
match, the cached cookie is returned without IPC.

This optimization is based on Chromium's shared versioning, in which it
was observed that 87% of document.cookie accesses were redundant. See:
https://blog.chromium.org/2024/06/introducing-shared-memory-versioning-to.html

Note that this cache only supports document.cookie, not HTTP Cookie
headers. HTTP cookies are attached to requests with varying URLs and
paths. The cookies that match the document URL might not match the
request URL, which we wouldn't know from WebContent. So attaching the
cached document cookie would be incorrect.

On https://twinings.co.uk, we see approximately 600 document.cookie
requests while the page loads. This patch reduces the time spent in
the document.cookie getter from ~45ms to 2-3ms.
2026-02-05 07:28:07 -05:00
..
AbortController.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
AbortController.h LibGC+Everywhere: Factor out a LibGC from LibJS 2024-11-15 14:49:20 +01:00
AbortController.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
AbortSignal.cpp LibJS+LibWeb: Port interned bytecode strings to UTF-16 2025-08-14 10:27:08 +02:00
AbortSignal.h LibWeb: Support removing callbacks from AbortSignal 2025-04-11 12:10:46 -04:00
AbortSignal.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
AbstractElement.cpp LibWeb/DOM: Add animation helpers to AbstractElement 2025-12-03 13:29:51 +01:00
AbstractElement.h LibWeb/DOM: Add animation helpers to AbstractElement 2025-12-03 13:29:51 +01:00
AbstractRange.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
AbstractRange.h LibWeb: Only clear command states and values if range actually changed 2025-01-24 23:53:26 +01:00
AbstractRange.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
AccessibilityTreeNode.cpp LibWeb/DOM: Set missing JSON attributes for a11y text nodes 2025-10-20 10:51:19 +01:00
AccessibilityTreeNode.h LibGC+Everywhere: Factor out a LibGC from LibJS 2024-11-15 14:49:20 +01:00
AdoptedStyleSheets.cpp LibWeb: Add StyleScope to keep style caches per Document/ShadowRoot 2025-11-14 22:05:33 +01:00
AdoptedStyleSheets.h LibWeb: Enable EXPLICIT_SYMBOL_EXPORT 2025-08-23 16:04:36 -06:00
Attr.cpp LibWeb: Update Dom spec now that TrustedTypes integration is merged 2025-12-01 09:54:04 +01:00
Attr.h LibWeb: Remove unnecessary lowercase name property from Attr 2025-11-10 22:55:38 +01:00
Attr.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
CDATASection.cpp LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
CDATASection.h LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
CDATASection.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
CharacterData.cpp LibWeb: Some text-related cleanup 2025-09-12 15:34:09 -04:00
CharacterData.h LibWeb: Enable EXPLICIT_SYMBOL_EXPORT 2025-08-23 16:04:36 -06:00
CharacterData.idl LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
ChildNode.h LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
ChildNode.idl LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
Comment.cpp LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
Comment.h LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
Comment.idl LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
CustomEvent.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
CustomEvent.h LibWeb: Enable EXPLICIT_SYMBOL_EXPORT 2025-08-23 16:04:36 -06:00
CustomEvent.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Document.cpp LibWeb+LibWebView+WebContent: Implement versioning for document cookies 2026-02-05 07:28:07 -05:00
Document.h LibWeb+LibWebView+WebContent: Implement versioning for document cookies 2026-02-05 07:28:07 -05:00
Document.idl LibWeb/DOM: Stub out Document.exitPointerLock() 2025-12-09 12:11:21 +01:00
DocumentFragment.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
DocumentFragment.h LibWeb: Enable EXPLICIT_SYMBOL_EXPORT 2025-08-23 16:04:36 -06:00
DocumentFragment.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
DocumentLoadEventDelayer.cpp LibWeb: Save weak pointer to document in DocumentLoadEventDelayer 2025-12-24 10:19:28 +01:00
DocumentLoadEventDelayer.h LibWeb: Save weak pointer to document in DocumentLoadEventDelayer 2025-12-24 10:19:28 +01:00
DocumentLoading.cpp LibWeb: Support MIME type sniffing for streaming HTTP responses 2026-01-24 15:21:26 +01:00
DocumentLoading.h LibWeb: Support MIME type sniffing for streaming HTTP responses 2026-01-24 15:21:26 +01:00
DocumentObserver.cpp LibWeb/DOM: Support changing document to observe in DocumentObserver 2025-06-24 09:56:14 +02:00
DocumentObserver.h LibGC: Only call finalize() on types that override finalize() 2026-01-07 20:51:17 +01:00
DocumentOrShadowRoot.h LibWeb: Return body from activeElement() when nothing is focused 2026-01-19 13:08:30 +01:00
DocumentOrShadowRoot.idl LibWeb: Add activeElement attribute in ShadowRoot 2025-09-10 16:52:39 +01:00
DocumentType.cpp LibWeb: Update DOMImplementation.createDocumentType() name validation 2025-06-19 07:55:47 -04:00
DocumentType.h LibWeb: Update DOMImplementation.createDocumentType() name validation 2025-06-19 07:55:47 -04:00
DocumentType.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
DOMEventListener.cpp LibGC+Everywhere: Factor out a LibGC from LibJS 2024-11-15 14:49:20 +01:00
DOMEventListener.h LibWeb: Correctly implement event listeners default passive attribute 2024-12-25 14:57:22 +00:00
DOMImplementation.cpp LibJS+LibWeb: Port interned bytecode strings to UTF-16 2025-08-14 10:27:08 +02:00
DOMImplementation.h LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
DOMImplementation.idl LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
DOMTokenList.cpp LibWeb/DOM: Update DOMTokenList spec steps, and reorganize to match them 2025-12-11 22:54:39 +00:00
DOMTokenList.h LibWeb/DOM: Update DOMTokenList spec steps, and reorganize to match them 2025-12-11 22:54:39 +00:00
DOMTokenList.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
EditingHostManager.cpp LibWeb: Send InputEvent with right .inputType on insert and delete 2026-01-29 15:08:06 +01:00
EditingHostManager.h LibWeb: Send InputEvent with right .inputType on insert and delete 2026-01-29 15:08:06 +01:00
Element.cpp LibWeb/DOM: Add FIXME for flat tree descendant check 2026-02-05 11:21:08 +01:00
Element.h LibGC: Enforce that a Cell type must declare the allocator to use 2026-01-20 12:00:11 +01:00
Element.idl LibWeb/CSS: Update links to css-scoping and css-shadow-parts specs 2026-01-13 16:18:11 +01:00
ElementByIdMap.cpp LibJS+LibWeb: Use GC::Weak instead of AK::WeakPtr for GC-allocated types 2025-10-17 17:22:16 +02:00
ElementByIdMap.h LibWeb: Avoid full DOM tree traversal in Window::named_objects() 2025-11-25 09:16:17 +01:00
ElementFactory.cpp LibWeb/SVG: Implement SVGFEDropShadowElement IDL interface 2026-01-11 13:14:40 +01:00
ElementFactory.h LibWeb: Enable EXPLICIT_SYMBOL_EXPORT 2025-08-23 16:04:36 -06:00
Event.cpp LibWeb: Make Event.currentTarget return WindowProxy instead of Window 2025-10-15 15:36:34 +02:00
Event.h LibWeb: Make Event.currentTarget return WindowProxy instead of Window 2025-10-15 15:36:34 +02:00
Event.idl LibWeb: Make Event.currentTarget return WindowProxy instead of Window 2025-10-15 15:36:34 +02:00
EventDispatcher.cpp LibWeb: Make Event.currentTarget return WindowProxy instead of Window 2025-10-15 15:36:34 +02:00
EventDispatcher.h LibWeb: Implement legacyOutputDidListenersThrowFlag 2024-11-26 14:50:27 +01:00
EventHandler.idl LibWeb: Move onpointer* IDL attributes to PointerEventHandlers.idl 2026-01-13 10:09:22 +01:00
EventTarget.cpp LibJS: Don't make extra copies of every JS function's source code 2025-12-21 10:06:04 -06:00
EventTarget.h LibJS+LibWeb: Add various fast_is<T>() helpers for common things 2025-12-20 09:13:19 -06:00
EventTarget.idl LibWeb: Correctly implement event listeners default passive attribute 2024-12-25 14:57:22 +00:00
HTMLCollection.cpp LibWeb: Use weak pointer for cache in HTMLCollection 2025-12-17 11:41:21 +01:00
HTMLCollection.h LibWeb: Use weak pointer for cache in HTMLCollection 2025-12-17 11:41:21 +01:00
HTMLCollection.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
IDLEventListener.cpp LibGC+Everywhere: Factor out a LibGC from LibJS 2024-11-15 14:49:20 +01:00
IDLEventListener.h LibWeb: Correctly implement event listeners default passive attribute 2024-12-25 14:57:22 +00:00
InputEventsTarget.h LibWeb: Send InputEvent with right .inputType on insert and delete 2026-01-29 15:08:06 +01:00
LiveNodeList.cpp LibGC: Rename MarkedVector => RootVector 2024-12-26 19:10:44 +01:00
LiveNodeList.h LibGC: Rename MarkedVector => RootVector 2024-12-26 19:10:44 +01:00
MutationObserver.cpp LibGC: Enforce that a Cell type must declare the allocator to use 2026-01-20 12:00:11 +01:00
MutationObserver.h LibGC: Enforce that a Cell type must declare the allocator to use 2026-01-20 12:00:11 +01:00
MutationObserver.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
MutationRecord.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
MutationRecord.h LibGC+Everywhere: Factor out a LibGC from LibJS 2024-11-15 14:49:20 +01:00
MutationRecord.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
MutationType.cpp LibWeb: Remove the initialize_strings methods 2025-01-12 00:35:58 +01:00
MutationType.h LibWeb: Enable EXPLICIT_SYMBOL_EXPORT 2025-08-23 16:04:36 -06:00
NamedNodeMap.cpp LibWeb: Lowercase attribute only once in NamedNodeMap::get_attribute() 2025-12-28 14:11:36 +00:00
NamedNodeMap.h LibWeb: Enable EXPLICIT_SYMBOL_EXPORT 2025-08-23 16:04:36 -06:00
NamedNodeMap.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Node.cpp LibWeb/DOM: Walk the flat tree to propagate layout tree updates 2026-02-05 11:21:08 +01:00
Node.h LibWeb: Make shadow_including_first_ancestor_of_type() use the flat tree 2026-02-05 11:21:08 +01:00
Node.idl LibWeb: Port node text content to UTF-16 2025-07-28 18:30:50 +02:00
NodeFilter.cpp LibGC+Everywhere: Factor out a LibGC from LibJS 2024-11-15 14:49:20 +01:00
NodeFilter.h LibGC+Everywhere: Factor out a LibGC from LibJS 2024-11-15 14:49:20 +01:00
NodeFilter.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
NodeIterator.cpp LibJS+LibWeb: Port interned bytecode strings to UTF-16 2025-08-14 10:27:08 +02:00
NodeIterator.h LibGC: Only call finalize() on types that override finalize() 2026-01-07 20:51:17 +01:00
NodeIterator.idl LibWeb: Return actual callback object from NodeIterator::filter 2025-02-24 18:29:03 +01:00
NodeList.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
NodeList.h LibWeb: Enable EXPLICIT_SYMBOL_EXPORT 2025-08-23 16:04:36 -06:00
NodeList.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
NodeOperations.cpp LibWeb/DOM: Update spec for convert_nodes_to_single_node() 2025-12-11 22:54:39 +00:00
NodeOperations.h LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
NodeType.h LibWeb: Move DOM::NodeType to its own file 2025-02-19 08:45:51 -05:00
NonDocumentTypeChildNode.h AK+Everywhere: Rename verify_cast to as 2025-01-21 11:34:06 -05:00
ParentNode.cpp Everywhere: Change west consts caught by clang-format-21 to east consts 2025-08-29 18:18:55 +01:00
ParentNode.h LibWeb: Make shadow_including_first_ancestor_of_type() use the flat tree 2026-02-05 11:21:08 +01:00
ParentNode.idl LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
Position.cpp LibWeb: Make DOM::Position's node mandatory 2025-08-20 12:25:00 +01:00
Position.h LibWeb: Make DOM::Position's node mandatory 2025-08-20 12:25:00 +01:00
ProcessingInstruction.cpp LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
ProcessingInstruction.h LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
ProcessingInstruction.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
PseudoElement.cpp LibWeb: Support counter-* properties on pseudo-elements 2025-06-19 12:35:31 +01:00
PseudoElement.h LibWeb: Make PseudoElementTreeNode protect its tree pointers from GC 2025-12-27 16:40:34 +01:00
QualifiedName.cpp LibWeb: Make sure we run selectors for mixed-case tag names 2025-07-09 14:36:08 +02:00
QualifiedName.h LibWeb: Enable EXPLICIT_SYMBOL_EXPORT 2025-08-23 16:04:36 -06:00
Range.cpp LibGC+ClangPlugins: Forbid non-trivial destructors in Cell subclasses 2026-01-30 20:57:42 +01:00
Range.h LibGC+ClangPlugins: Forbid non-trivial destructors in Cell subclasses 2026-01-30 20:57:42 +01:00
Range.idl LibWeb: Hook TrustedTypes to the Range Dom api 2025-10-13 13:22:01 +01:00
SelectionchangeEventDispatching.h Everywhere: Clean up AD-HOC and FIXME comments without colons 2025-11-13 15:56:04 +01:00
ShadowRoot.cpp LibWeb: Avoid subtree iteration when assigning slottables 2026-01-31 11:44:20 +01:00
ShadowRoot.h LibWeb: Add a flag for UA internal shadow roots 2026-02-02 12:28:05 +00:00
ShadowRoot.idl LibWeb: Amend ShadowRoot to make it compatible with TrustedTypes 2025-10-27 16:14:20 +00:00
Slot.cpp Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Slot.h LibWeb: Store slot name as a FlyString 2026-01-31 11:44:20 +01:00
SlotRegistry.cpp LibWeb: Avoid subtree iteration when assigning slottables 2026-01-31 11:44:20 +01:00
SlotRegistry.h LibWeb: Avoid subtree iteration when assigning slottables 2026-01-31 11:44:20 +01:00
Slottable.cpp LibWeb: Clear assigned slot for slottables that become unassigned 2026-01-31 11:44:20 +01:00
Slottable.h LibWeb: Store slot name as a FlyString 2026-01-31 11:44:20 +01:00
Slottable.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
StaticNodeList.cpp LibGC+Everywhere: Factor out a LibGC from LibJS 2024-11-15 14:49:20 +01:00
StaticNodeList.h LibGC+Everywhere: Factor out a LibGC from LibJS 2024-11-15 14:49:20 +01:00
StaticRange.cpp LibJS+LibWeb: Port interned bytecode strings to UTF-16 2025-08-14 10:27:08 +02:00
StaticRange.h LibGC+Everywhere: Factor out a LibGC from LibJS 2024-11-15 14:49:20 +01:00
StaticRange.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
StyleElementUtils.cpp LibWeb/CSS: Do not give internal stylesheets a location URL 2026-01-09 10:54:11 +00:00
StyleElementUtils.h LibGC+Everywhere: Factor out a LibGC from LibJS 2024-11-15 14:49:20 +01:00
StyleInvalidator.cpp LibWeb: Invalidate less elements affected by CSS custom properties 2025-07-30 11:06:05 +02:00
StyleInvalidator.h LibWeb: Invalidate less elements affected by CSS custom properties 2025-07-30 11:06:05 +02:00
Text.cpp LibJS+LibWeb: Port interned bytecode strings to UTF-16 2025-08-14 10:27:08 +02:00
Text.h LibWeb: Enable EXPLICIT_SYMBOL_EXPORT 2025-08-23 16:04:36 -06:00
Text.idl LibWeb+LibUnicode+WebContent: Port DOM:CharacterData to UTF-16 2025-07-24 19:00:20 +02:00
TreeWalker.cpp LibJS+LibWeb: Port interned bytecode strings to UTF-16 2025-08-14 10:27:08 +02:00
TreeWalker.h LibWeb: Return actual callback object from TreeWalker::filter 2025-02-24 18:29:03 +01:00
TreeWalker.idl LibWeb: Return actual callback object from TreeWalker::filter 2025-02-24 18:29:03 +01:00
Utils.cpp AK+Everywhere: Rename verify_cast to as 2025-01-21 11:34:06 -05:00
Utils.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
XMLDocument.cpp LibWeb: Only set prototype once for object with IDL interface 2025-04-20 18:43:11 +02:00
XMLDocument.h Everywhere: Use URL::about_XXX factory functions 2025-02-15 17:05:55 +00:00
XMLDocument.idl Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00