Diff
Modified: trunk/Source/WebCore/ChangeLog (136882 => 136883)
--- trunk/Source/WebCore/ChangeLog 2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/ChangeLog 2012-12-06 21:41:27 UTC (rev 136883)
@@ -1,3 +1,36 @@
+2012-12-06 Sheriff Bot <[email protected]>
+
+ Unreviewed, rolling out r136871.
+ http://trac.webkit.org/changeset/136871
+ https://bugs.webkit.org/show_bug.cgi?id=104293
+
+ crashes on bots and memory leaks (Requested by esprehn on
+ #webkit).
+
+ * dom/Document.h:
+ (WebCore::Node::treeScope):
+ * dom/Element.cpp:
+ (WebCore::Element::createRareData):
+ * dom/ElementRareData.h:
+ (ElementRareData):
+ (WebCore::ElementRareData::ElementRareData):
+ * dom/Node.cpp:
+ (WebCore::Node::setTreeScope):
+ (WebCore::Node::ensureRareData):
+ (WebCore::Node::createRareData):
+ (WebCore::Node::clearRareData):
+ * dom/Node.h:
+ (WebCore::NodeRareDataBase::~NodeRareDataBase):
+ (WebCore::NodeRareDataBase::NodeRareDataBase):
+ (NodeRareDataBase):
+ (WebCore::Node::renderer):
+ (WebCore::Node::setRenderer):
+ (Node):
+ (WebCore::Node::hasRareData):
+ * dom/NodeRareData.h:
+ (WebCore::NodeRareData::NodeRareData):
+ (NodeRareData):
+
2012-12-06 Adam Klein <[email protected]>
Remove non-v8 binding files from WebCore.gypi
Modified: trunk/Source/WebCore/dom/Document.h (136882 => 136883)
--- trunk/Source/WebCore/dom/Document.h 2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/dom/Document.h 2012-12-06 21:41:27 UTC (rev 136883)
@@ -1554,7 +1554,7 @@
inline TreeScope* Node::treeScope() const
{
- return hasUncommonNodeData() ? m_data.m_rareData->treeScope() : documentInternal();
+ return hasRareData() ? m_data.m_rareData->treeScope() : documentInternal();
}
inline Node::Node(Document* document, ConstructionType type)
Modified: trunk/Source/WebCore/dom/Element.cpp (136882 => 136883)
--- trunk/Source/WebCore/dom/Element.cpp 2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/dom/Element.cpp 2012-12-06 21:41:27 UTC (rev 136883)
@@ -217,7 +217,7 @@
PassOwnPtr<NodeRareData> Element::createRareData()
{
- return adoptPtr(new ElementRareData());
+ return adoptPtr(new ElementRareData(documentInternal()));
}
DEFINE_VIRTUAL_ATTRIBUTE_EVENT_LISTENER(Element, blur);
Modified: trunk/Source/WebCore/dom/ElementRareData.h (136882 => 136883)
--- trunk/Source/WebCore/dom/ElementRareData.h 2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/dom/ElementRareData.h 2012-12-06 21:41:27 UTC (rev 136883)
@@ -35,7 +35,7 @@
class ElementRareData : public NodeRareData {
public:
- ElementRareData();
+ ElementRareData(Document*);
virtual ~ElementRareData();
void setPseudoElement(PseudoId, PassRefPtr<PseudoElement>);
@@ -130,8 +130,9 @@
return IntSize(LayoutUnit::max(), LayoutUnit::max());
}
-inline ElementRareData::ElementRareData()
- : m_minimumSizeForResizing(defaultMinimumSizeForResizing())
+inline ElementRareData::ElementRareData(Document* document)
+ : NodeRareData(document)
+ , m_minimumSizeForResizing(defaultMinimumSizeForResizing())
, m_generatedBefore(0)
, m_generatedAfter(0)
{
Modified: trunk/Source/WebCore/dom/Node.cpp (136882 => 136883)
--- trunk/Source/WebCore/dom/Node.cpp 2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/dom/Node.cpp 2012-12-06 21:41:27 UTC (rev 136883)
@@ -441,14 +441,10 @@
void Node::setTreeScope(TreeScope* scope)
{
- if (!hasUncommonNodeData() && scope->rootNode()->isDocumentNode())
+ if (!hasRareData() && scope->rootNode()->isDocumentNode())
return;
- if (!hasUncommonNodeData()) {
- m_data.m_rareData = UncommonNodeData::create(scope, m_data.m_renderer);
- setFlag(HasUncommonNodeData);
- } else
- rareData()->setTreeScope(scope);
+ ensureRareData()->setTreeScope(scope);
}
Node* Node::pseudoAwarePreviousSibling() const
@@ -492,21 +488,15 @@
NodeRareData* data = ""
ASSERT(data);
- data->setRenderer(renderer());
- data->setTreeScope(treeScope());
-
- if (hasUncommonNodeData())
- delete m_data.m_rareData;
-
+ data->setRenderer(m_data.m_renderer);
m_data.m_rareData = data;
- setFlag(HasUncommonNodeData);
-
+ setFlag(HasRareDataFlag);
return data;
}
PassOwnPtr<NodeRareData> Node::createRareData()
{
- return adoptPtr(new NodeRareData());
+ return adoptPtr(new NodeRareData(documentInternal()));
}
void Node::clearRareData()
@@ -520,7 +510,7 @@
RenderObject* renderer = m_data.m_rareData->renderer();
delete m_data.m_rareData;
m_data.m_renderer = renderer;
- clearFlag(HasUncommonNodeData);
+ clearFlag(HasRareDataFlag);
}
Node* Node::toNode()
Modified: trunk/Source/WebCore/dom/Node.h (136882 => 136883)
--- trunk/Source/WebCore/dom/Node.h 2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/dom/Node.h 2012-12-06 21:41:27 UTC (rev 136883)
@@ -110,85 +110,23 @@
SyntheticStyleChange = 3 << nodeStyleChangeShift
};
-class UncommonNodeData {
+class NodeRareDataBase {
public:
- static UncommonNodeData* create(TreeScope* scope, RenderObject* renderer)
- {
- return new UncommonNodeData(scope, renderer);
- }
-
RenderObject* renderer() const { return m_renderer; }
void setRenderer(RenderObject* renderer) { m_renderer = renderer; }
TreeScope* treeScope() const { return m_treeScope; }
void setTreeScope(TreeScope* scope) { m_treeScope = scope; }
- virtual ~UncommonNodeData() { }
-
- bool isNodeRareData() const { return m_isNodeRareData; }
-
+ virtual ~NodeRareDataBase() { }
protected:
- UncommonNodeData()
- : m_tabIndex(0)
- , m_childIndex(0)
- , m_isNodeRareData(true)
- , m_tabIndexWasSetExplicitly(false)
- , m_isFocused(false)
- , m_needsFocusAppearanceUpdateSoonAfterAttach(false)
- , m_styleAffectedByEmpty(false)
- , m_isInCanvasSubtree(false)
-#if ENABLE(FULLSCREEN_API)
- , m_containsFullScreenElement(false)
-#endif
-#if ENABLE(DIALOG_ELEMENT)
- , m_isInTopLayer(false)
-#endif
- , m_childrenAffectedByHover(false)
- , m_childrenAffectedByActive(false)
- , m_childrenAffectedByDrag(false)
- , m_childrenAffectedByFirstChildRules(false)
- , m_childrenAffectedByLastChildRules(false)
- , m_childrenAffectedByDirectAdjacentRules(false)
- , m_childrenAffectedByForwardPositionalRules(false)
- , m_childrenAffectedByBackwardPositionalRules(false)
+ NodeRareDataBase(TreeScope* scope)
+ : m_treeScope(scope)
{
}
private:
- UncommonNodeData(TreeScope* scope, RenderObject* renderer)
- : m_renderer(renderer)
- , m_treeScope(scope)
- , m_isNodeRareData(false)
- {
- }
-
RenderObject* m_renderer;
TreeScope* m_treeScope;
-protected:
- short m_tabIndex;
- unsigned short m_childIndex;
- bool m_isNodeRareData : 1;
- bool m_tabIndexWasSetExplicitly : 1;
- bool m_isFocused : 1;
- bool m_needsFocusAppearanceUpdateSoonAfterAttach : 1;
- bool m_styleAffectedByEmpty : 1;
- bool m_isInCanvasSubtree : 1;
-#if ENABLE(FULLSCREEN_API)
- bool m_containsFullScreenElement : 1;
-#endif
-#if ENABLE(DIALOG_ELEMENT)
- bool m_isInTopLayer : 1;
-#endif
- bool m_childrenAffectedByHover : 1;
- bool m_childrenAffectedByActive : 1;
- bool m_childrenAffectedByDrag : 1;
- // Bits for dynamic child matching.
- // We optimize for :first-child and :last-child. The other positional child selectors like nth-child or
- // *-child-of-type, we will just give up and re-evaluate whenever children change at all.
- bool m_childrenAffectedByFirstChildRules : 1;
- bool m_childrenAffectedByLastChildRules : 1;
- bool m_childrenAffectedByDirectAdjacentRules : 1;
- bool m_childrenAffectedByForwardPositionalRules : 1;
- bool m_childrenAffectedByBackwardPositionalRules : 1;
};
class Node : public EventTarget, public ScriptWrappable, public TreeShared<Node, ContainerNode> {
@@ -585,10 +523,10 @@
// Integration with rendering tree
// As renderer() includes a branch you should avoid calling it repeatedly in hot code paths.
- RenderObject* renderer() const { return hasUncommonNodeData() ? m_data.m_rareData->renderer() : m_data.m_renderer; };
+ RenderObject* renderer() const { return hasRareData() ? m_data.m_rareData->renderer() : m_data.m_renderer; };
void setRenderer(RenderObject* renderer)
{
- if (hasUncommonNodeData())
+ if (hasRareData())
m_data.m_rareData->setRenderer(renderer);
else
m_data.m_renderer = renderer;
@@ -772,7 +710,7 @@
IsActiveFlag = 1 << 10,
IsHoveredFlag = 1 << 11,
InActiveChainFlag = 1 << 12,
- HasUncommonNodeData = 1 << 13,
+ HasRareDataFlag = 1 << 13,
IsDocumentFragmentFlag = 1 << 14,
// These bits are used by derived classes, pulled up here so they can
@@ -836,9 +774,9 @@
virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const { }
void setTabIndexExplicitly(short);
void clearTabIndexExplicitly();
+
+ bool hasRareData() const { return getFlag(HasRareDataFlag); }
- bool hasRareData() const { return hasUncommonNodeData() && m_data.m_rareData->isNodeRareData(); }
-
NodeRareData* rareData() const;
NodeRareData* ensureRareData();
void clearRareData();
@@ -870,7 +808,6 @@
virtual void refEventTarget();
virtual void derefEventTarget();
- bool hasUncommonNodeData() const { return getFlag(HasUncommonNodeData); }
virtual PassOwnPtr<NodeRareData> createRareData();
bool rareDataFocused() const;
@@ -907,7 +844,7 @@
union DataUnion {
DataUnion() : m_renderer(0) { }
RenderObject* m_renderer;
- UncommonNodeData* m_rareData;
+ NodeRareDataBase* m_rareData;
} m_data;
protected:
Modified: trunk/Source/WebCore/dom/NodeRareData.h (136882 => 136883)
--- trunk/Source/WebCore/dom/NodeRareData.h 2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/dom/NodeRareData.h 2012-12-06 21:41:27 UTC (rev 136883)
@@ -196,11 +196,33 @@
TagNodeListCacheNS m_tagNodeListCacheNS;
};
-class NodeRareData : public UncommonNodeData {
+class NodeRareData : public NodeRareDataBase {
WTF_MAKE_NONCOPYABLE(NodeRareData); WTF_MAKE_FAST_ALLOCATED;
public:
- NodeRareData()
- : m_childNodeList(0)
+ NodeRareData(Document* document)
+ : NodeRareDataBase(document)
+ , m_childNodeList(0)
+ , m_tabIndex(0)
+ , m_childIndex(0)
+ , m_tabIndexWasSetExplicitly(false)
+ , m_isFocused(false)
+ , m_needsFocusAppearanceUpdateSoonAfterAttach(false)
+ , m_styleAffectedByEmpty(false)
+ , m_isInCanvasSubtree(false)
+#if ENABLE(FULLSCREEN_API)
+ , m_containsFullScreenElement(false)
+#endif
+#if ENABLE(DIALOG_ELEMENT)
+ , m_isInTopLayer(false)
+#endif
+ , m_childrenAffectedByHover(false)
+ , m_childrenAffectedByActive(false)
+ , m_childrenAffectedByDrag(false)
+ , m_childrenAffectedByFirstChildRules(false)
+ , m_childrenAffectedByLastChildRules(false)
+ , m_childrenAffectedByDirectAdjacentRules(false)
+ , m_childrenAffectedByForwardPositionalRules(false)
+ , m_childrenAffectedByBackwardPositionalRules(false)
{
}
@@ -304,9 +326,33 @@
virtual void reportMemoryUsage(MemoryObjectInfo*) const;
-private:
+protected:
OwnPtr<NodeListsNodeData> m_nodeLists;
ChildNodeList* m_childNodeList;
+ short m_tabIndex;
+ unsigned short m_childIndex;
+ bool m_tabIndexWasSetExplicitly : 1;
+ bool m_isFocused : 1;
+ bool m_needsFocusAppearanceUpdateSoonAfterAttach : 1;
+ bool m_styleAffectedByEmpty : 1;
+ bool m_isInCanvasSubtree : 1;
+#if ENABLE(FULLSCREEN_API)
+ bool m_containsFullScreenElement : 1;
+#endif
+#if ENABLE(DIALOG_ELEMENT)
+ bool m_isInTopLayer : 1;
+#endif
+ bool m_childrenAffectedByHover : 1;
+ bool m_childrenAffectedByActive : 1;
+ bool m_childrenAffectedByDrag : 1;
+ // Bits for dynamic child matching.
+ // We optimize for :first-child and :last-child. The other positional child selectors like nth-child or
+ // *-child-of-type, we will just give up and re-evaluate whenever children change at all.
+ bool m_childrenAffectedByFirstChildRules : 1;
+ bool m_childrenAffectedByLastChildRules : 1;
+ bool m_childrenAffectedByDirectAdjacentRules : 1;
+ bool m_childrenAffectedByForwardPositionalRules : 1;
+ bool m_childrenAffectedByBackwardPositionalRules : 1;
#if ENABLE(MUTATION_OBSERVERS)
OwnPtr<Vector<OwnPtr<MutationObserverRegistration> > > m_mutationObserverRegistry;