Chromium Code Reviews| Index: third_party/WebKit/Source/core/dom/Node.cpp |
| diff --git a/third_party/WebKit/Source/core/dom/Node.cpp b/third_party/WebKit/Source/core/dom/Node.cpp |
| index e7d6f098551ae1870c005465e4180553085f1d3f..95a9f0888257a21e1c6359fb362f4a31dffc0a79 100644 |
| --- a/third_party/WebKit/Source/core/dom/Node.cpp |
| +++ b/third_party/WebKit/Source/core/dom/Node.cpp |
| @@ -298,6 +298,8 @@ Node::~Node() { |
| // With Oilpan, the rare data finalizer also asserts for |
| // this condition (we cannot directly access it here.) |
| CHECK(HasRareData() || !GetLayoutObject()); |
| + if (!HasRareData() && !data_.node_layout_data_->IsSharedEmptyData()) |
| + delete data_.node_layout_data_; |
| InstanceCounters::DecrementNodeCounter(); |
| } |
| @@ -311,9 +313,9 @@ NodeRareData& Node::EnsureRareData() { |
| return *RareData(); |
| if (IsElementNode()) |
| - data_.rare_data_ = ElementRareData::Create(data_.layout_object_); |
| + data_.rare_data_ = ElementRareData::Create(data_.node_layout_data_); |
| else |
| - data_.rare_data_ = NodeRareData::Create(data_.layout_object_); |
| + data_.rare_data_ = NodeRareData::Create(data_.node_layout_data_); |
| DCHECK(data_.rare_data_); |
| SetFlag(kHasRareDataFlag); |
| @@ -589,6 +591,20 @@ LayoutBox* Node::GetLayoutBox() const { |
| : nullptr; |
| } |
| +void Node::SetLayoutObject(LayoutObject* layout_object) { |
|
esprehn
2017/04/13 18:41:08
This allocates a NodeLayoutData when setting a nul
nainar
2017/04/13 20:21:03
Done. Also commented inline.
|
| + if (HasRareData()) { |
| + if (data_.rare_data_->GetNodeLayoutData()->IsSharedEmptyData()) |
| + data_.rare_data_->SetNodeLayoutData(new NodeLayoutData(layout_object)); |
| + else |
| + data_.rare_data_->GetNodeLayoutData()->SetLayoutObject(layout_object); |
| + } else { |
| + if (data_.node_layout_data_->IsSharedEmptyData()) |
| + data_.node_layout_data_ = new NodeLayoutData(layout_object); |
| + else |
| + data_.node_layout_data_->SetLayoutObject(layout_object); |
| + } |
| +} |
| + |
| LayoutBoxModelObject* Node::GetLayoutBoxModelObject() const { |
| LayoutObject* layout_object = this->GetLayoutObject(); |
| return layout_object && layout_object->IsBoxModelObject() |