Source/WebCore/ChangeLog

 12011-01-17 MORITA Hajime <morrita@google.com>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 ElementRareData::m_shadowRoot should not be RefPtr.
 6 https://bugs.webkit.org/show_bug.cgi?id=51914
 7
 8 This change makes m_shadowRoot a raw pointer, as Node::m_parent is.
 9 This change is safe because shadow host pointer is stored as TreeShared::m_parent
 10 which prevents deletion unless set to null.
 11
 12 No test, no behavioral change.
 13
 14 * dom/Element.cpp:
 15 (WebCore::Element::shadowRoot):
 16 (WebCore::Element::setShadowRoot):
 17 (WebCore::Element::removeShadowRoot):
 18 * dom/ElementRareData.h:
 19 (WebCore::ElementRareData::ElementRareData):
 20
1212011-01-16 Martin Robinson <mrobinson@igalia.com>
222
323 Reviewed by Xan Lopez.

Source/WebCore/dom/Element.cpp

@@void Element::recalcStyle(StyleChange change)
10841084
10851085Node* Element::shadowRoot()
10861086{
1087  return hasRareData() ? rareData()->m_shadowRoot.get() : 0;
 1087 return hasRareData() ? rareData()->m_shadowRoot : 0;
10881088}
10891089
10901090void Element::setShadowRoot(PassRefPtr<Node> node)

@@void Element::setShadowRoot(PassRefPtr<Node> node)
10931093 // about compromising DOM tree integrity (eg. node being a parent of this). However,
10941094 // once we implement XBL2, we will have to add integrity checks here.
10951095 removeShadowRoot();
1096  RefPtr<Node> newRoot = node;
1097  if (!newRoot)
 1096 if (!node)
10981097 return;
10991098
1100  ensureRareData()->m_shadowRoot = newRoot;
1101  newRoot->setShadowHost(this);
 1099 ElementRareData* data = ensureRareData();
 1100 data->m_shadowRoot = node.leakRef();
 1101 data->m_shadowRoot->setShadowHost(this);
11021102}
11031103
11041104void Element::removeShadowRoot()

@@void Element::removeShadowRoot()
11061106 if (!hasRareData())
11071107 return;
11081108
1109  if (RefPtr<Node> oldRoot = rareData()->m_shadowRoot.release()) {
 1109 ElementRareData* data = rareData();
 1110 if (data->m_shadowRoot) {
 1111 RefPtr<Node> oldRoot = data->m_shadowRoot;
 1112 data->m_shadowRoot = 0;
11101113 document()->removeFocusedNodeOfSubtree(oldRoot.get());
11111114 oldRoot->setShadowHost(0);
11121115 if (oldRoot->inDocument())

Source/WebCore/dom/ElementRareData.h

@@public:
4141
4242 IntSize m_minimumSizeForResizing;
4343 RefPtr<RenderStyle> m_computedStyle;
44  RefPtr<Node> m_shadowRoot;
 44 Node* m_shadowRoot;
4545
4646 OwnPtr<DatasetDOMStringMap> m_datasetDOMStringMap;
4747 OwnPtr<ClassList> m_classList;

@@inline IntSize defaultMinimumSizeForResizing()
5454
5555inline ElementRareData::ElementRareData()
5656 : m_minimumSizeForResizing(defaultMinimumSizeForResizing())
 57 , m_shadowRoot(0)
5758{
5859}
5960