Changeset 73114 in webkit
- Timestamp:
- Dec 2, 2010 1:15:00 AM (13 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r73112 r73114 1 2010-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 1 27 2010-12-02 Adam Barth <abarth@webkit.org> 2 28 -
trunk/WebCore/dom/Element.cpp
r72826 r73114 857 857 // by the time we reach updateId 858 858 ContainerNode::insertedIntoDocument(); 859 if (Node* shadow = shadowRoot()) 860 shadow->insertedIntoDocument(); 859 861 860 862 if (hasID()) { … … 878 880 879 881 ContainerNode::removedFromDocument(); 882 if (Node* shadow = shadowRoot()) 883 shadow->removedFromDocument(); 884 } 885 886 void 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 895 void Element::removedFromTree(bool deep) 896 { 897 ContainerNode::removedFromTree(deep); 898 if (!deep) 899 return; 900 if (Node* shadow = shadowRoot()) 901 shadow->removedFromTree(true); 880 902 } 881 903 … … 887 909 createRendererIfNeeded(); 888 910 ContainerNode::attach(); 911 if (Node* shadow = shadowRoot()) 912 shadow->attach(); 889 913 if (hasRareData()) { 890 914 ElementRareData* data = rareData(); … … 908 932 rareData()->resetComputedStyle(); 909 933 ContainerNode::detach(); 934 if (Node* shadow = shadowRoot()) 935 shadow->detach(); 910 936 911 937 RenderWidget::resumeWidgetHierarchyUpdates(); … … 961 987 bool hasDirectAdjacentRules = currentStyle && currentStyle->childrenAffectedByDirectAdjacentRules(); 962 988 963 #if ENABLE(SVG) 964 if (!hasParentStyle && isShadowNode() && isSVGElement()) 989 if (!hasParentStyle && isShadowNode()) 965 990 hasParentStyle = true; 966 #endif967 991 968 992 if ((change > NoChange || needsStyleRecalc())) { … … 1043 1067 forceCheckOfNextElementSibling = childRulesChanged && hasDirectAdjacentRules; 1044 1068 } 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 } 1045 1074 1046 1075 clearNeedsStyleRecalc(); 1047 1076 clearChildNeedsStyleRecalc(); 1077 } 1078 1079 Node* Element::shadowRoot() 1080 { 1081 return hasRareData() ? rareData()->m_shadowRoot.get() : 0; 1082 } 1083 1084 void 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 1092 void 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); 1048 1104 } 1049 1105 -
trunk/WebCore/dom/Element.h
r71895 r73114 226 226 virtual void recalcStyle(StyleChange = NoChange); 227 227 228 Node* shadowRoot(); 229 void setShadowRoot(PassRefPtr<Node>); 230 void clearShadowRoot(); 231 228 232 RenderStyle* computedStyle(PseudoId = NOPSEUDO); 229 233 … … 338 342 virtual void insertedIntoDocument(); 339 343 virtual void removedFromDocument(); 344 virtual void insertedIntoTree(bool); 345 virtual void removedFromTree(bool); 340 346 virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0); 341 347 -
trunk/WebCore/dom/ElementRareData.h
r70854 r73114 42 42 IntSize m_minimumSizeForResizing; 43 43 RefPtr<RenderStyle> m_computedStyle; 44 RefPtr<Node> m_shadowRoot; 44 45 45 46 OwnPtr<DatasetDOMStringMap> m_datasetDOMStringMap;
Note: See TracChangeset
for help on using the changeset viewer.