WebCore/ChangeLog

 12010-12-13 Dimitri Glazkov <dglazkov@chromium.org>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 Combine setShadowRoot and clearShadowRoot into a simpler API
 6 https://bugs.webkit.org/show_bug.cgi?id=50971
 7
 8 No change in behavior, and API is not used yet.
 9
 10 * dom/Element.cpp:
 11 (WebCore::Element::setShadowRoot): Combined clearing and setting of
 12 the shadowRoot, also hooked up with setting and clearing of the
 13 corresponding shadowHost values.
 14 * dom/Element.h: removed clearShadowRoot def.
 15 * dom/Node.h: Made shadow host-related functions public.
 16
1172010-12-14 Alexander Pavlov <apavlov@chromium.org>
218
319 Reviewed by Yury Semikhatsky.

WebCore/dom/Element.cpp

@@Node* Element::shadowRoot()
10821082
10831083void Element::setShadowRoot(PassRefPtr<Node> node)
10841084{
1085  ASSERT(node);
1086 
1087  // FIXME: Once all instances of shadow DOM are converted to use this code, add setting of shadow host (shadowParent) on node.
1088  ensureRareData()->m_shadowRoot = node;
1089 }
 1085 RefPtr<Node> newRoot = node;
 1086 if (hasRareData()) {
 1087 if (RefPtr<Node> oldRoot = rareData()->m_shadowRoot.release()) {
 1088 document()->removeFocusedNodeOfSubtree(oldRoot.get());
 1089 oldRoot->setShadowHost(0);
 1090 if (oldRoot->inDocument())
 1091 oldRoot->removedFromDocument();
 1092 else
 1093 oldRoot->removedFromTree(true);
 1094 }
 1095 }
10901096
1091 void Element::clearShadowRoot()
1092 {
1093  if (!hasRareData())
 1097 if (!newRoot)
10941098 return;
10951099
1096  RefPtr<Node> shadowRoot = rareData()->m_shadowRoot.release();
1097  document()->removeFocusedNodeOfSubtree(shadowRoot.get());
1098  // FIXME: Once all instances of shadow DOM are converted to use this code, add clearing of shadow host (shadowParent).
1099  if (shadowRoot->inDocument())
1100  shadowRoot->removedFromDocument();
1101  else
1102  shadowRoot->removedFromTree(true);
 1100 ensureRareData()->m_shadowRoot = newRoot;
 1101 newRoot->setShadowHost(this);
11031102}
11041103
11051104bool Element::childTypeAllowed(NodeType type)

WebCore/dom/Element.h

@@public:
227227
228228 Node* shadowRoot();
229229 void setShadowRoot(PassRefPtr<Node>);
230  void clearShadowRoot();
231230
232231 RenderStyle* computedStyle(PseudoId = NOPSEUDO);
233232

WebCore/dom/Node.h

@@public:
216216 // Use when it's guaranteed to that shadowParentNode is 0.
217217 ContainerNode* parentNodeGuaranteedHostFree() const;
218218
 219 Element* shadowHost() const;
 220 void setShadowHost(Element*);
 221
219222 // Returns the enclosing event parent node (or self) that, when clicked, would trigger a navigation.
220223 Node* enclosingLinkEventParentOrSelf();
221224

@@protected:
638641 NodeRareData* rareData() const;
639642 NodeRareData* ensureRareData();
640643
641  Element* shadowHost() const;
642  void setShadowHost(Element*);
643 
644644private:
645645#if USE(JSC)
646646 void markCachedNodeListsSlow(JSC::MarkStack&, JSC::JSGlobalData&);