Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 2539a900b51185feffb61785523868aa20ca1482
      
https://github.com/WebKit/WebKit/commit/2539a900b51185feffb61785523868aa20ca1482
  Author: Ryosuke Niwa <[email protected]>
  Date:   2024-12-10 (Tue, 10 Dec 2024)

  Changed paths:
    A 
LayoutTests/imported/w3c/web-platform-tests/custom-elements/scoped-registry/ShadowRoot-importNode.tentative-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/custom-elements/scoped-registry/ShadowRoot-importNode.tentative.html
    M 
LayoutTests/imported/w3c/web-platform-tests/custom-elements/scoped-registry/ShadowRoot-innerHTML-upgrade.tentative-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/custom-elements/scoped-registry/ShadowRoot-innerHTML.tentative-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/custom-elements/scoped-registry/ShadowRoot-innerHTML.tentative.html
    M Source/WebCore/bindings/js/JSCustomElementInterface.cpp
    M Source/WebCore/bindings/js/JSHTMLElementCustom.cpp
    M Source/WebCore/dom/Attr.cpp
    M Source/WebCore/dom/Attr.h
    M Source/WebCore/dom/CDATASection.cpp
    M Source/WebCore/dom/CDATASection.h
    M Source/WebCore/dom/Comment.cpp
    M Source/WebCore/dom/Comment.h
    M Source/WebCore/dom/ContainerNode.cpp
    M Source/WebCore/dom/ContainerNode.h
    M Source/WebCore/dom/CustomElementRegistry.cpp
    M Source/WebCore/dom/CustomElementRegistry.h
    M Source/WebCore/dom/Document.cpp
    M Source/WebCore/dom/Document.h
    M Source/WebCore/dom/DocumentFragment.cpp
    M Source/WebCore/dom/DocumentFragment.h
    M Source/WebCore/dom/DocumentType.cpp
    M Source/WebCore/dom/DocumentType.h
    M Source/WebCore/dom/Element.cpp
    M Source/WebCore/dom/Element.h
    M Source/WebCore/dom/Node.h
    M Source/WebCore/dom/ProcessingInstruction.cpp
    M Source/WebCore/dom/ProcessingInstruction.h
    M Source/WebCore/dom/ShadowRoot.cpp
    M Source/WebCore/dom/ShadowRoot.h
    M Source/WebCore/dom/ShadowRoot.idl
    M Source/WebCore/dom/Text.cpp
    M Source/WebCore/dom/Text.h
    M Source/WebCore/dom/TreeScope.cpp
    M Source/WebCore/dom/TreeScope.h
    M Source/WebCore/editing/markup.cpp
    M Source/WebCore/editing/markup.h
    M Source/WebCore/html/AttachmentAssociatedElement.h
    M Source/WebCore/html/HTMLImageElement.cpp
    M Source/WebCore/html/HTMLImageElement.h
    M Source/WebCore/html/HTMLInputElement.cpp
    M Source/WebCore/html/HTMLInputElement.h
    M Source/WebCore/html/HTMLScriptElement.cpp
    M Source/WebCore/html/HTMLScriptElement.h
    M Source/WebCore/html/HTMLSourceElement.cpp
    M Source/WebCore/html/HTMLSourceElement.h
    M Source/WebCore/html/HTMLTemplateElement.cpp
    M Source/WebCore/html/HTMLTemplateElement.h
    M Source/WebCore/html/parser/HTMLConstructionSite.cpp
    M Source/WebCore/html/parser/HTMLConstructionSite.h
    M Source/WebCore/html/parser/HTMLDocumentParser.cpp
    M Source/WebCore/html/parser/HTMLDocumentParser.h
    M Source/WebCore/html/parser/HTMLTreeBuilder.cpp
    M Source/WebCore/html/parser/HTMLTreeBuilder.h
    M Source/WebCore/html/shadow/SliderThumbElement.cpp
    M Source/WebCore/html/shadow/SliderThumbElement.h
    M Source/WebCore/html/track/TextTrackCue.cpp
    M Source/WebCore/html/track/VTTCue.cpp
    M Source/WebCore/html/track/WebVTTElement.cpp
    M Source/WebCore/html/track/WebVTTElement.h
    M Source/WebCore/svg/SVGScriptElement.cpp
    M Source/WebCore/svg/SVGScriptElement.h
    M Source/WebCore/svg/SVGUseElement.cpp

  Log Message:
  -----------
  Expose importNode on ShadowRoot and maintain scoped registry association with 
disconnected nodes
https://bugs.webkit.org/show_bug.cgi?id=283431

Reviewed by Chris Dumez.

This PR adds ShadowRoot.prototype.importNode and association of scoped custom 
element registry with disconnected nodes.
Specifically, when disconnected nodes maintain association with the registry of 
the last shadow tree to which it belonged.

To maintain the association of an element with a scoped custom element 
registry, this PR introduces the scoped custom element map.
An element is added to this map whenever it's synchronously created with a 
scoped custom element registry or removed from a shadow
tree which uses a scoped custom element registry, and an element is removed 
from the map when it's inserted into a shadow tree or
a document tree. An element has 
ElementStateFlag::UsesScopedCustomElementRegistryMap set when it's present in 
this this hash map
so that we can avoid hash map look up in common cases when the element is in a 
document tree or a shadow tree, or otherwise not
associated with a scoped custom element registry.

* 
LayoutTests/imported/w3c/web-platform-tests/custom-elements/scoped-registry/ShadowRoot-importNode.tentative-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/custom-elements/scoped-registry/ShadowRoot-importNode.tentative.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/custom-elements/scoped-registry/ShadowRoot-innerHTML.tentative-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/custom-elements/scoped-registry/ShadowRoot-innerHTML.tentative.html:
 Added.

* Source/WebCore/bindings/js/JSCustomElementInterface.cpp:
(WebCore::JSCustomElementInterface::tryToConstructCustomElement): Fixed a bug 
that we were not resetting the active custom
element registry when the global scope / previous scope wasn't set.
(WebCore::JSCustomElementInterface::upgradeElement): Ditto.

* Source/WebCore/bindings/js/JSHTMLElementCustom.cpp:
(WebCore::constructJSHTMLElement):

* Source/WebCore/dom/Attr.cpp:
(WebCore::Attr::cloneNodeInternal):
* Source/WebCore/dom/Attr.h:
* Source/WebCore/dom/CDATASection.cpp:
(WebCore::CDATASection::cloneNodeInternal):
* Source/WebCore/dom/CDATASection.h:
* Source/WebCore/dom/Comment.cpp:
(WebCore::Comment::cloneNodeInternal):
* Source/WebCore/dom/Comment.h:

* Source/WebCore/dom/ContainerNode.cpp:
(WebCore::ContainerNode::cloneChildNodes): Now takes TreeScope to clone nodes 
to.

* Source/WebCore/dom/ContainerNode.h:
* Source/WebCore/dom/CustomElementRegistry.cpp:
(WebCore::CustomElementRegistry::addToScopedCustomElementRegistryMap): Added.
(WebCore::CustomElementRegistry::removeFromScopedCustomElementRegistryMap): 
Added.
(WebCore::CustomElementRegistry::scopedCustomElementRegistryMap): Added.

* Source/WebCore/dom/CustomElementRegistry.h:
(WebCore::CustomElementRegistry::isScoped const): Added.
(WebCore::CustomElementRegistry::registryForElement): Added.
(WebCore::CustomElementRegistry::registryForNodeOrTreeScope): Added.

* Source/WebCore/dom/Document.cpp:
(WebCore::createUpgradeCandidateElement): Now takes a TreeScope instead of a 
Document.
(WebCore::createHTMLElementWithNameValidation):
(WebCore::Document::importNode): Moved to TreeScope.cpp
(WebCore::createFallbackHTMLElement): Now takes a TreeScope instead of a 
Document.
(WebCore::TreeScope::createElement):
(WebCore::Document::setActiveCustomElementRegistry): Now takes a pointer 
instead of a reference since we want to able to reset the
value to nullptr when we're done creating or upgrading an element.
(WebCore::Document::cloneNodeInternal): Now takes a TreeScope instead of a 
Document.

* Source/WebCore/dom/Document.h:

* Source/WebCore/dom/DocumentFragment.cpp:
(WebCore::DocumentFragment::cloneNodeInternal): Ditto.
(WebCore::DocumentFragment::parseHTML): Now takes CustomElementRegistry as an 
optional argument.

* Source/WebCore/dom/DocumentFragment.h:
(WebCore::DocumentFragment::parseHTML):

* Source/WebCore/dom/DocumentType.cpp:
(WebCore::DocumentType::cloneNodeInternal):
* Source/WebCore/dom/DocumentType.h:

* Source/WebCore/dom/Element.cpp:
(WebCore::Element::cloneNodeInternal): Now takes a TreeScope instead of a 
Document.
(WebCore::Element::cloneShadowTreeIfPossible):
(WebCore::Element::cloneElementWithChildren): Ditto.
(WebCore::Element::cloneElementWithoutChildren): Ditto.
(WebCore::Element::cloneElementWithoutAttributesAndChildren): Ditto.
(WebCore::Element::insertedIntoAncestor): Removes the element from the scoped 
custom element registry map if it's inserted into
a TreeScope.
(WebCore::Element::removedFromAncestor): Adds the element to the scoped custom 
element registry map if the registry of the tree
to which this element belonged before the removal is scoped.
(WebCore::Element::replaceChildrenWithMarkup): Calls 
createFragmentForInnerOuterHTML with an appropriate registry.
(WebCore::Element::setOuterHTML): Ditto.
(WebCore::Element::insertAdjacentHTML): Ditto.

* Source/WebCore/dom/Element.h:

* Source/WebCore/dom/Node.h:
(WebCore::Node::cloneNode):
(WebCore::Node::usesScopedCustomElementRegistryMap const): Added.
(WebCore::Node::setUsesScopedCustomElementRegistryMap): Added.
(WebCore::Node::clearUsesScopedCustomElementRegistryMap): Added.
(WebCore::Node::ElementStateFlag): Added UsesScopedCustomElementRegistryMap as 
a new enum value.

* Source/WebCore/dom/ProcessingInstruction.cpp:
(WebCore::ProcessingInstruction::cloneNodeInternal):
* Source/WebCore/dom/ProcessingInstruction.h:

* Source/WebCore/dom/ShadowRoot.cpp:
(WebCore::ShadowRoot::replaceChildrenWithMarkup): Calls 
createFragmentForInnerOuterHTML with the custom element registry
associated with this shadow tree.
(WebCore::ShadowRoot::cloneNodeInternal):

* Source/WebCore/dom/ShadowRoot.h:

* Source/WebCore/dom/ShadowRoot.idl:

* Source/WebCore/dom/Text.cpp:
(WebCore::Text::cloneNodeInternal):
* Source/WebCore/dom/Text.h:

* Source/WebCore/dom/TreeScope.cpp:
(WebCore::TreeScope::importNode): Moved from Document.

* Source/WebCore/dom/TreeScope.h:

* Source/WebCore/editing/markup.cpp:
(WebCore::createFragmentForMarkup): Now optionally takes a custom element 
registry as an argument.
(WebCore::createFragmentForInnerOuterHTML): Ditto.

* Source/WebCore/editing/markup.h:

* Source/WebCore/html/AttachmentAssociatedElement.h:
* Source/WebCore/html/HTMLImageElement.cpp:
(WebCore::HTMLImageElement::cloneElementWithoutAttributesAndChildren):
* Source/WebCore/html/HTMLImageElement.h:
* Source/WebCore/html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::cloneElementWithoutAttributesAndChildren):
* Source/WebCore/html/HTMLInputElement.h:
* Source/WebCore/html/HTMLScriptElement.cpp:
(WebCore::HTMLScriptElement::cloneElementWithoutAttributesAndChildren):
* Source/WebCore/html/HTMLScriptElement.h:
* Source/WebCore/html/HTMLSourceElement.cpp:
(WebCore::HTMLSourceElement::cloneElementWithoutAttributesAndChildren):
* Source/WebCore/html/HTMLSourceElement.h:
* Source/WebCore/html/HTMLTemplateElement.cpp:
(WebCore::HTMLTemplateElement::cloneNodeInternal):
* Source/WebCore/html/HTMLTemplateElement.h:

* Source/WebCore/html/parser/HTMLConstructionSite.cpp:
(WebCore::HTMLConstructionSite::HTMLConstructionSite): Now takes a custom 
element registry as an argument.
(WebCore::HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface): 
Add the newly created element to the scoped custom
element map if the registry we used is a scoped custom element registry.

* Source/WebCore/html/parser/HTMLConstructionSite.h:

* Source/WebCore/html/parser/HTMLDocumentParser.cpp:
(WebCore::HTMLDocumentParser::HTMLDocumentParser): Now takes 
CustomElementRegistry as an argument.
(WebCore::HTMLDocumentParser::create): Ditto.
(WebCore::HTMLDocumentParser::parseDocumentFragment): Ditto.

* Source/WebCore/html/parser/HTMLDocumentParser.h:
(WebCore::HTMLDocumentParser::parseDocumentFragment): Ditto.

* Source/WebCore/html/parser/HTMLTreeBuilder.cpp:
(WebCore::HTMLTreeBuilder::HTMLTreeBuilder): Ditto.

* Source/WebCore/html/parser/HTMLTreeBuilder.h:

* Source/WebCore/html/shadow/SliderThumbElement.cpp:
(WebCore::SliderThumbElement::cloneElementWithoutAttributesAndChildren):
* Source/WebCore/html/shadow/SliderThumbElement.h:
* Source/WebCore/html/track/TextTrackCue.cpp:
(WebCore::TextTrackCue::create):
(WebCore::TextTrackCue::getCueAsHTML):
(WebCore::TextTrackCue::rebuildDisplayTree):
* Source/WebCore/html/track/VTTCue.cpp:
(WebCore::VTTCue::createCueRenderingTree):
* Source/WebCore/html/track/WebVTTElement.cpp:
(WebCore::WebVTTElement::cloneElementWithoutAttributesAndChildren):
* Source/WebCore/html/track/WebVTTElement.h:
* Source/WebCore/svg/SVGScriptElement.cpp:
(WebCore::SVGScriptElement::cloneElementWithoutAttributesAndChildren):
* Source/WebCore/svg/SVGScriptElement.h:
* Source/WebCore/svg/SVGUseElement.cpp:
(WebCore::cloneDataAndChildren):

Canonical link: https://commits.webkit.org/287633@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to