Changeset 73114 in webkit


Ignore:
Timestamp:
Dec 2, 2010 1:15:00 AM (13 years ago)
Author:
Dimitri Glazkov
Message:

2010-12-02 Dimitri Glazkov <Dimitri Glazkov>

Reviewed by Kent Tamura.

Provide means to store shadow DOM nodes on Element
https://bugs.webkit.org/show_bug.cgi?id=48697

Adds shadow DOM awareness to the standard Node attach/detach,
document and tree insertion and removal cycle.

No new tests, because the code is not yet used.

  • dom/Element.cpp: (WebCore::Element::insertedIntoDocument): Added logic to cascade down to shadow DOM, if present. (WebCore::Element::removedFromDocument): Ditto. (WebCore::Element::insertedIntoTree): Ditto. (WebCore::Element::removedFromTree): Ditto. (WebCore::Element::attach): Ditto. (WebCore::Element::detach): Ditto. (WebCore::Element::recalcStyle): (WebCore::Element::shadowRoot): Added. (WebCore::Element::setShadowRoot): Added. (WebCore::Element::clearShadowRoot): Added.
  • dom/Element.h: Added decls.
  • dom/ElementRareData.h: Added a member to hold a RefPtr to the shadow DOM root for the element.
Location:
trunk/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r73112 r73114  
     12010-12-02  Dimitri Glazkov  <dglazkov@chromium.org>
     2
     3        Reviewed by Kent Tamura.
     4
     5        Provide means to store shadow DOM nodes on Element
     6        https://bugs.webkit.org/show_bug.cgi?id=48697
     7
     8        Adds shadow DOM awareness to the standard Node attach/detach,
     9        document and tree insertion and removal cycle.
     10
     11        No new tests, because the code is not yet used.
     12
     13        * dom/Element.cpp:
     14        (WebCore::Element::insertedIntoDocument): Added logic to cascade down to shadow DOM, if present.
     15        (WebCore::Element::removedFromDocument): Ditto.
     16        (WebCore::Element::insertedIntoTree): Ditto.
     17        (WebCore::Element::removedFromTree): Ditto.
     18        (WebCore::Element::attach): Ditto.
     19        (WebCore::Element::detach): Ditto.
     20        (WebCore::Element::recalcStyle):
     21        (WebCore::Element::shadowRoot): Added.
     22        (WebCore::Element::setShadowRoot): Added.
     23        (WebCore::Element::clearShadowRoot): Added.
     24        * dom/Element.h: Added decls.
     25        * dom/ElementRareData.h: Added a member to hold a RefPtr to the shadow DOM root for the element.
     26
    1272010-12-02  Adam Barth  <abarth@webkit.org>
    228
  • trunk/WebCore/dom/Element.cpp

    r72826 r73114  
    857857    // by the time we reach updateId
    858858    ContainerNode::insertedIntoDocument();
     859    if (Node* shadow = shadowRoot())
     860        shadow->insertedIntoDocument();
    859861
    860862    if (hasID()) {
     
    878880
    879881    ContainerNode::removedFromDocument();
     882    if (Node* shadow = shadowRoot())
     883        shadow->removedFromDocument();
     884}
     885
     886void Element::insertedIntoTree(bool deep)
     887{
     888    ContainerNode::insertedIntoTree(deep);
     889    if (!deep)
     890        return;
     891    if (Node* shadow = shadowRoot())
     892        shadow->insertedIntoTree(true);
     893}
     894
     895void Element::removedFromTree(bool deep)
     896{
     897    ContainerNode::removedFromTree(deep);
     898    if (!deep)
     899        return;
     900    if (Node* shadow = shadowRoot())
     901        shadow->removedFromTree(true);
    880902}
    881903
     
    887909    createRendererIfNeeded();
    888910    ContainerNode::attach();
     911    if (Node* shadow = shadowRoot())
     912        shadow->attach();
    889913    if (hasRareData()) {   
    890914        ElementRareData* data = rareData();
     
    908932        rareData()->resetComputedStyle();
    909933    ContainerNode::detach();
     934    if (Node* shadow = shadowRoot())
     935        shadow->detach();
    910936
    911937    RenderWidget::resumeWidgetHierarchyUpdates();
     
    961987    bool hasDirectAdjacentRules = currentStyle && currentStyle->childrenAffectedByDirectAdjacentRules();
    962988
    963 #if ENABLE(SVG)
    964     if (!hasParentStyle && isShadowNode() && isSVGElement())
     989    if (!hasParentStyle && isShadowNode())
    965990        hasParentStyle = true;
    966 #endif
    967991
    968992    if ((change > NoChange || needsStyleRecalc())) {
     
    10431067            forceCheckOfNextElementSibling = childRulesChanged && hasDirectAdjacentRules;
    10441068    }
     1069    // FIXME: This does not care about sibling combinators. Will be necessary in XBL2 world.
     1070    if (Node* shadow = shadowRoot()) {
     1071        if (change >= Inherit || shadow->isTextNode() || shadow->childNeedsStyleRecalc() || shadow->needsStyleRecalc())
     1072            shadow->recalcStyle(change);
     1073    }
    10451074
    10461075    clearNeedsStyleRecalc();
    10471076    clearChildNeedsStyleRecalc();
     1077}
     1078
     1079Node* Element::shadowRoot()
     1080{
     1081    return hasRareData() ? rareData()->m_shadowRoot.get() : 0;
     1082}
     1083
     1084void Element::setShadowRoot(PassRefPtr<Node> node)
     1085{
     1086    ASSERT(node);
     1087
     1088    // FIXME: Once all instances of shadow DOM are converted to use this code, add setting of shadow host (shadowParent) on node.
     1089    ensureRareData()->m_shadowRoot = node;
     1090}
     1091
     1092void Element::clearShadowRoot()
     1093{
     1094    if (!hasRareData())
     1095        return;
     1096
     1097    RefPtr<Node> shadowRoot = rareData()->m_shadowRoot.release();
     1098    document()->removeFocusedNodeOfSubtree(shadowRoot.get());
     1099    // FIXME: Once all instances of shadow DOM are converted to use this code, add clearing of shadow host (shadowParent).
     1100    if (shadowRoot->inDocument())
     1101        shadowRoot->removedFromDocument();
     1102    else
     1103        shadowRoot->removedFromTree(true);
    10481104}
    10491105
  • trunk/WebCore/dom/Element.h

    r71895 r73114  
    226226    virtual void recalcStyle(StyleChange = NoChange);
    227227
     228    Node* shadowRoot();
     229    void setShadowRoot(PassRefPtr<Node>);
     230    void clearShadowRoot();
     231
    228232    RenderStyle* computedStyle(PseudoId = NOPSEUDO);
    229233
     
    338342    virtual void insertedIntoDocument();
    339343    virtual void removedFromDocument();
     344    virtual void insertedIntoTree(bool);
     345    virtual void removedFromTree(bool);
    340346    virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0);
    341347
  • trunk/WebCore/dom/ElementRareData.h

    r70854 r73114  
    4242    IntSize m_minimumSizeForResizing;
    4343    RefPtr<RenderStyle> m_computedStyle;
     44    RefPtr<Node> m_shadowRoot;
    4445
    4546    OwnPtr<DatasetDOMStringMap> m_datasetDOMStringMap;
Note: See TracChangeset for help on using the changeset viewer.