Changeset 214173 in webkit
- Timestamp:
- Mar 20, 2017 10:28:55 AM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 42 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r214170 r214173 1 2017-03-20 Simon Fraser <simon.fraser@apple.com> 2 3 Move code out of renderer destructors into willBeDestroyed() 4 https://bugs.webkit.org/show_bug.cgi?id=169650 5 6 Reviewed by Antti Koivisto. 7 8 This is done for four reasons. First, code in willBeDestroyed() is able to call 9 virtual functions on derived classes. Second, this code will run before we've destroyed 10 the renderer's rareData, so can safely access it. Third, RenderWidget is special, and can have 11 its lifetime extended via manual ref-counting, and we want all cleanup to complete 12 before it goes into this weird zombie state. Fourth, in a shiny future where we have 13 ref-counted RenderObjects, we want cleanup code to be run explicitly and not tied 14 to object lifetime, and this is a step in that direction. 15 16 For all classes that derive from RenderObject, move code from the destructor into 17 willBeDestroyed(). New willBeDestroyed() implementations must call the base class. 18 19 RenderBlock and RenderBlockFlow are special; RenderBlockFlow::willBeDestroyed() 20 skips over RenderBlock::willBeDestroyed(), but they both need to run some code, which 21 I moved into RenderBlock::blockWillBeDestroyed(). 22 23 * rendering/RenderBlock.cpp: 24 (WebCore::RenderBlock::~RenderBlock): 25 (WebCore::RenderBlock::willBeDestroyed): 26 (WebCore::RenderBlock::blockWillBeDestroyed): 27 * rendering/RenderBlock.h: 28 * rendering/RenderBlockFlow.cpp: 29 (WebCore::RenderBlockFlow::~RenderBlockFlow): 30 (WebCore::RenderBlockFlow::willBeDestroyed): 31 * rendering/RenderBox.cpp: 32 (WebCore::RenderBox::~RenderBox): 33 (WebCore::RenderBox::willBeDestroyed): 34 * rendering/RenderBox.h: 35 * rendering/RenderBoxModelObject.cpp: 36 (WebCore::RenderBoxModelObject::~RenderBoxModelObject): 37 * rendering/RenderCounter.cpp: 38 (WebCore::RenderCounter::~RenderCounter): 39 (WebCore::RenderCounter::willBeDestroyed): 40 * rendering/RenderCounter.h: 41 * rendering/RenderElement.cpp: 42 (WebCore::RenderElement::~RenderElement): 43 (WebCore::RenderElement::willBeDestroyed): 44 * rendering/RenderEmbeddedObject.cpp: 45 (WebCore::RenderEmbeddedObject::~RenderEmbeddedObject): 46 (WebCore::RenderEmbeddedObject::willBeDestroyed): 47 * rendering/RenderEmbeddedObject.h: 48 * rendering/RenderImage.cpp: 49 (WebCore::RenderImage::~RenderImage): 50 (WebCore::RenderImage::willBeDestroyed): 51 * rendering/RenderImage.h: 52 * rendering/RenderLayerModelObject.cpp: 53 (WebCore::RenderLayerModelObject::~RenderLayerModelObject): 54 (WebCore::RenderLayerModelObject::willBeDestroyed): 55 * rendering/RenderLayerModelObject.h: 56 * rendering/RenderLineBreak.cpp: 57 (WebCore::RenderLineBreak::~RenderLineBreak): 58 (WebCore::RenderLineBreak::willBeDestroyed): 59 * rendering/RenderLineBreak.h: 60 * rendering/RenderListBox.cpp: 61 (WebCore::RenderListBox::~RenderListBox): 62 (WebCore::RenderListBox::willBeDestroyed): 63 * rendering/RenderListBox.h: 64 * rendering/RenderListItem.cpp: 65 (WebCore::RenderListItem::~RenderListItem): 66 (WebCore::RenderListItem::willBeDestroyed): 67 * rendering/RenderListItem.h: 68 * rendering/RenderListMarker.cpp: 69 (WebCore::RenderListMarker::~RenderListMarker): 70 (WebCore::RenderListMarker::willBeDestroyed): 71 * rendering/RenderListMarker.h: 72 * rendering/RenderMenuList.cpp: 73 (WebCore::RenderMenuList::~RenderMenuList): 74 (WebCore::RenderMenuList::willBeDestroyed): 75 * rendering/RenderMenuList.h: 76 * rendering/RenderNamedFlowThread.cpp: 77 (WebCore::RenderNamedFlowThread::~RenderNamedFlowThread): 78 (WebCore::RenderNamedFlowThread::willBeDestroyed): 79 * rendering/RenderNamedFlowThread.h: 80 * rendering/RenderObject.cpp: 81 (WebCore::RenderObject::willBeDestroyed): 82 * rendering/RenderQuote.cpp: 83 (WebCore::RenderQuote::~RenderQuote): 84 (WebCore::RenderQuote::willBeDestroyed): 85 * rendering/RenderQuote.h: 86 * rendering/RenderSearchField.cpp: 87 (WebCore::RenderSearchField::~RenderSearchField): 88 (WebCore::RenderSearchField::willBeDestroyed): 89 * rendering/RenderSearchField.h: 90 * rendering/RenderSnapshottedPlugIn.cpp: 91 (WebCore::RenderSnapshottedPlugIn::~RenderSnapshottedPlugIn): 92 (WebCore::RenderSnapshottedPlugIn::willBeDestroyed): 93 * rendering/RenderSnapshottedPlugIn.h: 94 * rendering/RenderText.cpp: 95 (WebCore::RenderText::~RenderText): 96 (WebCore::RenderText::willBeDestroyed): 97 * rendering/RenderTextControlMultiLine.cpp: 98 (WebCore::RenderTextControlMultiLine::~RenderTextControlMultiLine): 99 (WebCore::RenderTextControlMultiLine::willBeDestroyed): 100 * rendering/RenderTextControlMultiLine.h: 101 * rendering/RenderVideo.cpp: 102 (WebCore::RenderVideo::~RenderVideo): 103 (WebCore::RenderVideo::willBeDestroyed): 104 * rendering/RenderVideo.h: 105 * rendering/RenderWidget.h: 106 * rendering/svg/RenderSVGImage.cpp: 107 (WebCore::RenderSVGImage::~RenderSVGImage): 108 (WebCore::RenderSVGImage::willBeDestroyed): 109 * rendering/svg/RenderSVGImage.h: 110 * rendering/svg/RenderSVGResourceContainer.cpp: 111 (WebCore::RenderSVGResourceContainer::~RenderSVGResourceContainer): 112 (WebCore::RenderSVGResourceContainer::willBeDestroyed): 113 1 114 2017-03-20 Jon Lee <jonlee@apple.com> 2 115 -
trunk/Source/WebCore/rendering/RenderBlock.cpp
r214082 r214173 257 257 258 258 typedef HashMap<const RenderBlock*, std::unique_ptr<RenderBlockRareData>> RenderBlockRareDataMap; 259 static RenderBlockRareDataMap* gRareDataMap = 0;259 static RenderBlockRareDataMap* gRareDataMap; 260 260 261 261 // This class helps dispatching the 'overflow' event on layout change. overflow can be set on RenderBoxes, yet the existing code … … 334 334 RenderBlock::~RenderBlock() 335 335 { 336 removeFromUpdateScrollInfoAfterLayoutTransaction(); 337 336 // Blocks can be added to gRareDataMap during willBeDestroyed(), so this code can't move there. 338 337 if (gRareDataMap) 339 338 gRareDataMap->remove(this); 340 removeBlockFromPercentageDescendantAndContainerMaps(this); 341 positionedDescendantsMap().removeContainingBlock(*this); 342 } 343 339 340 // Do not add any more code here. Add it to willBeDestroyed() instead. 341 } 342 343 // Note that this is not called for RenderBlockFlows. 344 344 void RenderBlock::willBeDestroyed() 345 345 { … … 349 349 } 350 350 351 blockWillBeDestroyed(); 352 351 353 RenderBox::willBeDestroyed(); 354 } 355 356 void RenderBlock::blockWillBeDestroyed() 357 { 358 removeFromUpdateScrollInfoAfterLayoutTransaction(); 359 360 removeBlockFromPercentageDescendantAndContainerMaps(this); 361 positionedDescendantsMap().removeContainingBlock(*this); 352 362 } 353 363 … … 1068 1078 } 1069 1079 1070 static RenderBlockRareData* getBlockRareData(const RenderBlock *block)1071 { 1072 return gRareDataMap ? gRareDataMap->get( block) : nullptr;1073 } 1074 1075 static RenderBlockRareData& ensureBlockRareData(const RenderBlock *block)1080 static RenderBlockRareData* getBlockRareData(const RenderBlock& block) 1081 { 1082 return gRareDataMap ? gRareDataMap->get(&block) : nullptr; 1083 } 1084 1085 static RenderBlockRareData& ensureBlockRareData(const RenderBlock& block) 1076 1086 { 1077 1087 if (!gRareDataMap) 1078 1088 gRareDataMap = new RenderBlockRareDataMap; 1079 1089 1080 auto& rareData = gRareDataMap->add( block, nullptr).iterator->value;1090 auto& rareData = gRareDataMap->add(&block, nullptr).iterator->value; 1081 1091 if (!rareData) 1082 1092 rareData = std::make_unique<RenderBlockRareData>(); … … 3365 3375 RenderFlowThread* RenderBlock::cachedFlowThreadContainingBlock() const 3366 3376 { 3367 RenderBlockRareData* rareData = getBlockRareData( this);3377 RenderBlockRareData* rareData = getBlockRareData(*this); 3368 3378 3369 3379 if (!rareData || !rareData->m_flowThreadContainingBlock) … … 3375 3385 bool RenderBlock::cachedFlowThreadContainingBlockNeedsUpdate() const 3376 3386 { 3377 RenderBlockRareData* rareData = getBlockRareData( this);3387 RenderBlockRareData* rareData = getBlockRareData(*this); 3378 3388 3379 3389 if (!rareData || !rareData->m_flowThreadContainingBlock) … … 3385 3395 void RenderBlock::setCachedFlowThreadContainingBlockNeedsUpdate() 3386 3396 { 3387 RenderBlockRareData& rareData = ensureBlockRareData( this);3397 RenderBlockRareData& rareData = ensureBlockRareData(*this); 3388 3398 rareData.m_flowThreadContainingBlock = std::nullopt; 3389 3399 } … … 3391 3401 RenderFlowThread* RenderBlock::updateCachedFlowThreadContainingBlock(RenderFlowThread* flowThread) const 3392 3402 { 3393 RenderBlockRareData& rareData = ensureBlockRareData( this);3403 RenderBlockRareData& rareData = ensureBlockRareData(*this); 3394 3404 rareData.m_flowThreadContainingBlock = flowThread; 3395 3405 … … 3399 3409 RenderFlowThread* RenderBlock::locateFlowThreadContainingBlock() const 3400 3410 { 3401 RenderBlockRareData* rareData = getBlockRareData( this);3411 RenderBlockRareData* rareData = getBlockRareData(*this); 3402 3412 if (!rareData || !rareData->m_flowThreadContainingBlock) 3403 3413 return updateCachedFlowThreadContainingBlock(RenderBox::locateFlowThreadContainingBlock()); … … 3431 3441 LayoutUnit RenderBlock::paginationStrut() const 3432 3442 { 3433 RenderBlockRareData* rareData = getBlockRareData( this);3443 RenderBlockRareData* rareData = getBlockRareData(*this); 3434 3444 return rareData ? rareData->m_paginationStrut : LayoutUnit(); 3435 3445 } … … 3437 3447 LayoutUnit RenderBlock::pageLogicalOffset() const 3438 3448 { 3439 RenderBlockRareData* rareData = getBlockRareData( this);3449 RenderBlockRareData* rareData = getBlockRareData(*this); 3440 3450 return rareData ? rareData->m_pageLogicalOffset : LayoutUnit(); 3441 3451 } … … 3443 3453 void RenderBlock::setPaginationStrut(LayoutUnit strut) 3444 3454 { 3445 RenderBlockRareData* rareData = getBlockRareData( this);3455 RenderBlockRareData* rareData = getBlockRareData(*this); 3446 3456 if (!rareData) { 3447 3457 if (!strut) 3448 3458 return; 3449 rareData = &ensureBlockRareData( this);3459 rareData = &ensureBlockRareData(*this); 3450 3460 } 3451 3461 rareData->m_paginationStrut = strut; … … 3454 3464 void RenderBlock::setPageLogicalOffset(LayoutUnit logicalOffset) 3455 3465 { 3456 RenderBlockRareData* rareData = getBlockRareData( this);3466 RenderBlockRareData* rareData = getBlockRareData(*this); 3457 3467 if (!rareData) { 3458 3468 if (!logicalOffset) 3459 3469 return; 3460 rareData = &ensureBlockRareData( this);3470 rareData = &ensureBlockRareData(*this); 3461 3471 } 3462 3472 rareData->m_pageLogicalOffset = logicalOffset; … … 4084 4094 LayoutUnit RenderBlock::intrinsicBorderForFieldset() const 4085 4095 { 4086 auto* rareData = getBlockRareData( this);4096 auto* rareData = getBlockRareData(*this); 4087 4097 return rareData ? rareData->m_intrinsicBorderForFieldset : LayoutUnit(); 4088 4098 } … … 4090 4100 void RenderBlock::setIntrinsicBorderForFieldset(LayoutUnit padding) 4091 4101 { 4092 auto* rareData = getBlockRareData( this);4102 auto* rareData = getBlockRareData(*this); 4093 4103 if (!rareData) { 4094 4104 if (!padding) 4095 4105 return; 4096 rareData = &ensureBlockRareData( this);4106 rareData = &ensureBlockRareData(*this); 4097 4107 } 4098 4108 rareData->m_intrinsicBorderForFieldset = padding; -
trunk/Source/WebCore/rendering/RenderBlock.h
r213455 r214173 428 428 void computeChildPreferredLogicalWidths(RenderObject&, LayoutUnit& minPreferredLogicalWidth, LayoutUnit& maxPreferredLogicalWidth) const; 429 429 430 void blockWillBeDestroyed(); 431 430 432 private: 431 433 static std::unique_ptr<RenderBlock> createAnonymousBlockWithStyleAndDisplay(Document&, const RenderStyle&, EDisplay); -
trunk/Source/WebCore/rendering/RenderBlockFlow.cpp
r214126 r214173 120 120 RenderBlockFlow::~RenderBlockFlow() 121 121 { 122 // Do not add any code here. Add it to willBeDestroyed() instead. 122 123 } 123 124 … … 176 177 m_lineBoxes.deleteLineBoxes(); 177 178 178 removeFromUpdateScrollInfoAfterLayoutTransaction();179 blockWillBeDestroyed(); 179 180 180 181 // NOTE: This jumps down to RenderBox, bypassing RenderBlock since it would do duplicate work. -
trunk/Source/WebCore/rendering/RenderBox.cpp
r214126 r214173 146 146 RenderBox::~RenderBox() 147 147 { 148 // Do not add any code here. Add it to willBeDestroyed() instead. 149 } 150 151 void RenderBox::willBeDestroyed() 152 { 148 153 if (frame().eventHandler().autoscrollRenderer() == this) 149 154 frame().eventHandler().stopAutoscrollTimer(true); … … 159 164 view().unscheduleLazyRepaint(*this); 160 165 removeControlStatesForRenderer(*this); 166 167 RenderBoxModelObject::willBeDestroyed(); 161 168 } 162 169 -
trunk/Source/WebCore/rendering/RenderBox.h
r214010 r214173 635 635 636 636 void willBeRemovedFromTree() override; 637 void willBeDestroyed() override; 637 638 638 639 bool createsNewFormattingContext() const; -
trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp
r214082 r214173 178 178 RenderBoxModelObject::~RenderBoxModelObject() 179 179 { 180 // Do not add any code here. Add it to willBeDestroyed() instead. 180 181 } 181 182 -
trunk/Source/WebCore/rendering/RenderCounter.cpp
r208744 r214173 352 352 RenderCounter::~RenderCounter() 353 353 { 354 // Do not add any code here. Add it to willBeDestroyed() instead. 355 } 356 357 void RenderCounter::willBeDestroyed() 358 { 354 359 view().removeRenderCounter(); 355 360 … … 358 363 ASSERT(!m_counterNode); 359 364 } 365 366 RenderText::willBeDestroyed(); 360 367 } 361 368 -
trunk/Source/WebCore/rendering/RenderCounter.h
r209292 r214173 43 43 44 44 private: 45 void willBeDestroyed() override; 46 45 47 const char* renderName() const override; 46 48 bool isCounter() const override; -
trunk/Source/WebCore/rendering/RenderElement.cpp
r214082 r214173 133 133 RenderElement::~RenderElement() 134 134 { 135 if (hasInitializedStyle()) { 136 for (auto* bgLayer = &m_style.backgroundLayers(); bgLayer; bgLayer = bgLayer->next()) { 137 if (auto* backgroundImage = bgLayer->image()) 138 backgroundImage->removeClient(this); 139 } 140 for (auto* maskLayer = &m_style.maskLayers(); maskLayer; maskLayer = maskLayer->next()) { 141 if (auto* maskImage = maskLayer->image()) 142 maskImage->removeClient(this); 143 } 144 if (auto* borderImage = m_style.borderImage().image()) 145 borderImage->removeClient(this); 146 if (auto* maskBoxImage = m_style.maskBoxImage().image()) 147 maskBoxImage->removeClient(this); 148 if (auto shapeValue = m_style.shapeOutside()) { 149 if (auto shapeImage = shapeValue->image()) 150 shapeImage->removeClient(this); 151 } 152 } 153 if (m_hasPausedImageAnimations) 154 view().removeRendererWithPausedImageAnimations(*this); 155 if (isRegisteredForVisibleInViewportCallback()) 156 view().unregisterForVisibleInViewportCallback(*this); 135 // Do not add any code here. Add it to willBeDestroyed() instead. 157 136 } 158 137 … … 1146 1125 1147 1126 clearLayoutRootIfNeeded(); 1127 1128 if (hasInitializedStyle()) { 1129 for (auto* bgLayer = &m_style.backgroundLayers(); bgLayer; bgLayer = bgLayer->next()) { 1130 if (auto* backgroundImage = bgLayer->image()) 1131 backgroundImage->removeClient(this); 1132 } 1133 for (auto* maskLayer = &m_style.maskLayers(); maskLayer; maskLayer = maskLayer->next()) { 1134 if (auto* maskImage = maskLayer->image()) 1135 maskImage->removeClient(this); 1136 } 1137 if (auto* borderImage = m_style.borderImage().image()) 1138 borderImage->removeClient(this); 1139 if (auto* maskBoxImage = m_style.maskBoxImage().image()) 1140 maskBoxImage->removeClient(this); 1141 if (auto shapeValue = m_style.shapeOutside()) { 1142 if (auto shapeImage = shapeValue->image()) 1143 shapeImage->removeClient(this); 1144 } 1145 } 1146 if (m_hasPausedImageAnimations) 1147 view().removeRendererWithPausedImageAnimations(*this); 1148 1149 if (isRegisteredForVisibleInViewportCallback()) 1150 view().unregisterForVisibleInViewportCallback(*this); 1148 1151 } 1149 1152 -
trunk/Source/WebCore/rendering/RenderEmbeddedObject.cpp
r213464 r214173 108 108 RenderEmbeddedObject::~RenderEmbeddedObject() 109 109 { 110 // Do not add any code here. Add it to willBeDestroyed() instead. 111 } 112 113 void RenderEmbeddedObject::willBeDestroyed() 114 { 110 115 view().frameView().removeEmbeddedObjectToUpdate(*this); 116 RenderWidget::willBeDestroyed(); 111 117 } 112 118 -
trunk/Source/WebCore/rendering/RenderEmbeddedObject.h
r208668 r214173 67 67 protected: 68 68 void layout() override; 69 void willBeDestroyed() override; 69 70 70 71 private: -
trunk/Source/WebCore/rendering/RenderImage.cpp
r214082 r214173 144 144 RenderImage::~RenderImage() 145 145 { 146 // Do not add any code here. Add it to willBeDestroyed() instead. 147 } 148 149 void RenderImage::willBeDestroyed() 150 { 146 151 imageResource().shutdown(); 152 RenderReplaced::willBeDestroyed(); 147 153 } 148 154 -
trunk/Source/WebCore/rendering/RenderImage.h
r213466 r214173 77 77 78 78 protected: 79 void willBeDestroyed() override; 80 79 81 bool needsPreferredWidthsRecalculation() const final; 80 82 RenderBox* embeddedContentBox() const final; -
trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp
r210768 r214173 51 51 RenderLayerModelObject::~RenderLayerModelObject() 52 52 { 53 // Do not add any code here. Add it to willBeDestroyed() instead. 54 } 55 56 void RenderLayerModelObject::willBeDestroyed() 57 { 53 58 if (isPositioned()) { 54 59 if (style().hasViewportConstrainedPosition()) 55 60 view().frameView().removeViewportConstrainedObject(this); 56 61 } 62 63 RenderElement::willBeDestroyed(); 57 64 58 65 // Our layer should have been destroyed and cleared by now -
trunk/Source/WebCore/rendering/RenderLayerModelObject.h
r208668 r214173 58 58 59 59 void createLayer(); 60 void willBeDestroyed() override; 60 61 61 62 private: -
trunk/Source/WebCore/rendering/RenderListBox.cpp
r213149 r214173 97 97 RenderListBox::~RenderListBox() 98 98 { 99 // Do not add any code here. Add it to willBeDestroyed() instead. 100 } 101 102 void RenderListBox::willBeDestroyed() 103 { 99 104 setHasVerticalScrollbar(false); 100 105 view().frameView().removeScrollableArea(this); 106 RenderBlockFlow::willBeDestroyed(); 101 107 } 102 108 -
trunk/Source/WebCore/rendering/RenderListBox.h
r209903 r214173 68 68 69 69 private: 70 void willBeDestroyed() override; 71 70 72 void element() const = delete; 71 73 -
trunk/Source/WebCore/rendering/RenderListItem.cpp
r210239 r214173 61 61 RenderListItem::~RenderListItem() 62 62 { 63 ASSERT(!m_marker || !m_marker->parent()); 63 // Do not add any code here. Add it to willBeDestroyed() instead. 64 } 65 66 void RenderListItem::willBeDestroyed() 67 { 64 68 if (m_marker) { 65 69 m_marker->destroy(); 66 70 ASSERT(!m_marker); 67 71 } 72 RenderBlockFlow::willBeDestroyed(); 68 73 } 69 74 -
trunk/Source/WebCore/rendering/RenderListItem.h
r210001 r214173 61 61 bool inLayout() const { return m_inLayout; } 62 62 #endif 63 63 64 private: 65 void willBeDestroyed() override; 66 64 67 const char* renderName() const override { return "RenderListItem"; } 65 68 -
trunk/Source/WebCore/rendering/RenderListMarker.cpp
r210239 r214173 1129 1129 RenderListMarker::~RenderListMarker() 1130 1130 { 1131 // Do not add any code here. Add it to willBeDestroyed() instead. 1132 } 1133 1134 void RenderListMarker::willBeDestroyed() 1135 { 1131 1136 m_listItem.didDestroyListMarker(); 1132 1137 if (m_image) 1133 1138 m_image->removeClient(this); 1139 1140 RenderBox::willBeDestroyed(); 1134 1141 } 1135 1142 -
trunk/Source/WebCore/rendering/RenderListMarker.h
r210239 r214173 52 52 53 53 private: 54 void willBeDestroyed() override; 55 54 56 void element() const = delete; 55 57 -
trunk/Source/WebCore/rendering/RenderMenuList.cpp
r211033 r214173 85 85 RenderMenuList::~RenderMenuList() 86 86 { 87 // Do not add any code here. Add it to willBeDestroyed() instead. 88 } 89 90 void RenderMenuList::willBeDestroyed() 91 { 87 92 #if !PLATFORM(IOS) 88 93 if (m_popup) … … 90 95 m_popup = nullptr; 91 96 #endif 97 98 RenderFlexibleBox::willBeDestroyed(); 92 99 } 93 100 -
trunk/Source/WebCore/rendering/RenderMenuList.h
r209986 r214173 61 61 62 62 private: 63 void willBeDestroyed() override; 64 63 65 void element() const = delete; 64 66 -
trunk/Source/WebCore/rendering/RenderNamedFlowThread.cpp
r208658 r214173 57 57 RenderNamedFlowThread::~RenderNamedFlowThread() 58 58 { 59 // Do not add any code here. Add it to willBeDestroyed() instead. 60 } 61 62 void RenderNamedFlowThread::willBeDestroyed() 63 { 64 WTFLogAlways("RenderNamedFlowThread %p willBeDestroyed", this); 65 59 66 // The flow thread can be destroyed without unregistering the content nodes if the document is destroyed. 60 67 // This can lead to problems because the nodes are still marked as belonging to a flow thread. … … 63 70 // Also leave the NamedFlow object in a consistent state by calling mark for destruction. 64 71 setMarkForDestruction(); 72 73 RenderFlowThread::willBeDestroyed(); 65 74 } 66 75 -
trunk/Source/WebCore/rendering/RenderNamedFlowThread.h
r208668 r214173 97 97 98 98 private: 99 void willBeDestroyed() override; 99 100 const char* renderName() const override; 100 101 bool isRenderNamedFlowThread() const override { return true; } -
trunk/Source/WebCore/rendering/RenderObject.cpp
r214119 r214173 1482 1482 1483 1483 // FIXME: Would like to do this in RenderBoxModelObject, but the timing is so complicated that this can't easily 1484 // be moved into RenderBoxModelObject::destroy. 1484 // be moved into RenderLayerModelObject::willBeDestroyed(). 1485 // FIXME: Is this still true? 1485 1486 if (hasLayer()) { 1486 1487 setHasLayer(false); -
trunk/Source/WebCore/rendering/RenderQuote.cpp
r214082 r214173 41 41 RenderQuote::~RenderQuote() 42 42 { 43 // Do not add any code here. Add it to willBeDestroyed() instead. 44 } 45 46 void RenderQuote::willBeDestroyed() 47 { 43 48 detachQuote(); 44 49 … … 46 51 ASSERT(!m_next); 47 52 ASSERT(!m_previous); 53 54 RenderInline::willBeDestroyed(); 48 55 } 49 56 -
trunk/Source/WebCore/rendering/RenderQuote.h
r208668 r214173 35 35 36 36 private: 37 void willBeDestroyed() override; 37 38 void detachQuote(); 38 39 -
trunk/Source/WebCore/rendering/RenderSearchField.cpp
r211033 r214173 59 59 RenderSearchField::~RenderSearchField() 60 60 { 61 // Do not add any code here. Add it to willBeDestroyed() instead. 62 } 63 64 void RenderSearchField::willBeDestroyed() 65 { 61 66 if (m_searchPopup) { 62 67 m_searchPopup->popupMenu()->disconnectClient(); 63 68 m_searchPopup = nullptr; 64 69 } 70 71 RenderTextControlSingleLine::willBeDestroyed(); 65 72 } 66 73 -
trunk/Source/WebCore/rendering/RenderSearchField.h
r208668 r214173 46 46 47 47 private: 48 void willBeDestroyed() override; 48 49 void centerContainerIfNeeded(RenderBox*) const override; 49 50 LayoutUnit computeControlLogicalHeight(LayoutUnit lineHeight, LayoutUnit nonContentHeight) const override; -
trunk/Source/WebCore/rendering/RenderSnapshottedPlugIn.cpp
r210828 r214173 58 58 RenderSnapshottedPlugIn::~RenderSnapshottedPlugIn() 59 59 { 60 // Do not add any code here. Add it to willBeDestroyed() instead. 61 } 62 63 void RenderSnapshottedPlugIn::willBeDestroyed() 64 { 60 65 ASSERT(m_snapshotResource); 61 66 m_snapshotResource->shutdown(); 67 68 RenderEmbeddedObject::willBeDestroyed(); 62 69 } 63 70 -
trunk/Source/WebCore/rendering/RenderSnapshottedPlugIn.h
r210319 r214173 43 43 44 44 private: 45 void willBeDestroyed() override; 45 46 void frameOwnerElement() const = delete; 46 47 const char* renderName() const final { return "RenderSnapshottedPlugIn"; } -
trunk/Source/WebCore/rendering/RenderText.cpp
r214082 r214173 209 209 RenderText::~RenderText() 210 210 { 211 if (m_originalTextDiffersFromRendered)212 originalTextMap().remove(this);211 // Do not add any code here. Add it to willBeDestroyed() instead. 212 ASSERT(!originalTextMap().contains(this)); 213 213 } 214 214 … … 287 287 288 288 removeAndDestroyTextBoxes(); 289 290 if (m_originalTextDiffersFromRendered) 291 originalTextMap().remove(this); 292 289 293 RenderObject::willBeDestroyed(); 290 294 } -
trunk/Source/WebCore/rendering/RenderTextControlMultiLine.cpp
r213455 r214173 40 40 RenderTextControlMultiLine::~RenderTextControlMultiLine() 41 41 { 42 // Do not add any code here. Add it to willBeDestroyed() instead. 43 } 44 45 void RenderTextControlMultiLine::willBeDestroyed() 46 { 42 47 if (textAreaElement().isConnected()) 43 48 textAreaElement().rendererWillBeDestroyed(); 49 50 RenderTextControl::willBeDestroyed(); 44 51 } 45 52 -
trunk/Source/WebCore/rendering/RenderTextControlMultiLine.h
r213455 r214173 35 35 36 36 private: 37 void willBeDestroyed() override; 37 38 void element() const = delete; 38 39 -
trunk/Source/WebCore/rendering/RenderVideo.cpp
r214082 r214173 57 57 RenderVideo::~RenderVideo() 58 58 { 59 // Do not add any code here. Add it to willBeDestroyed() instead. 60 } 61 62 void RenderVideo::willBeDestroyed() 63 { 59 64 if (MediaPlayer* player = videoElement().player()) 60 65 player->setVisible(false); 66 67 RenderMedia::willBeDestroyed(); 61 68 } 62 69 -
trunk/Source/WebCore/rendering/RenderVideo.h
r214010 r214173 54 54 55 55 private: 56 void willBeDestroyed() override; 56 57 void mediaElement() const = delete; 57 58 -
trunk/Source/WebCore/rendering/RenderWidget.h
r210758 r214173 80 80 RenderWidget(HTMLFrameOwnerElement&, RenderStyle&&); 81 81 82 void willBeDestroyed() override; 82 83 void styleDidChange(StyleDifference, const RenderStyle* oldStyle) final; 83 84 void layout() override; … … 95 96 RenderBox* embeddedContentBox() const final; 96 97 97 void willBeDestroyed() final;98 98 void setSelectionState(SelectionState) final; 99 99 void setOverlapTestResult(bool) final; -
trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp
r208985 r214173 54 54 RenderSVGImage::~RenderSVGImage() 55 55 { 56 } 57 58 void RenderSVGImage::willBeDestroyed() 59 { 56 60 imageResource().shutdown(); 61 RenderSVGModelObject::willBeDestroyed(); 57 62 } 58 63 -
trunk/Source/WebCore/rendering/svg/RenderSVGImage.h
r208668 r214173 52 52 53 53 private: 54 void willBeDestroyed() override; 55 54 56 void element() const = delete; 55 57 -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp
r214082 r214173 45 45 RenderSVGResourceContainer::~RenderSVGResourceContainer() 46 46 { 47 if (m_registered)48 svgExtensionsFromElement(element()).removeResource(m_id);49 47 } 50 48 … … 62 60 { 63 61 SVGResourcesCache::resourceDestroyed(*this); 62 63 if (m_registered) { 64 svgExtensionsFromElement(element()).removeResource(m_id); 65 m_registered = false; 66 } 67 64 68 RenderSVGHiddenContainer::willBeDestroyed(); 65 69 }
Note: See TracChangeset
for help on using the changeset viewer.