Chromium Code Reviews| Index: Source/core/layout/LayoutObject.cpp |
| diff --git a/Source/core/layout/LayoutObject.cpp b/Source/core/layout/LayoutObject.cpp |
| index ce0831564cfa852a75a2fa0b43278a58674a5a61..b74ecd9b4a19d5df02f8c0c3e53a06e61fbcff78 100644 |
| --- a/Source/core/layout/LayoutObject.cpp |
| +++ b/Source/core/layout/LayoutObject.cpp |
| @@ -1834,12 +1834,24 @@ void LayoutObject::setStyle(PassRefPtr<ComputedStyle> style) |
| updateImage(oldStyle ? oldStyle->borderImage().image() : 0, m_style->borderImage().image()); |
| updateImage(oldStyle ? oldStyle->maskBoxImage().image() : 0, m_style->maskBoxImage().image()); |
| + const StyleImage* newContentImage = m_style->contentData() && m_style->contentData()->isImage() ? |
| + toImageContentData(m_style->contentData())->image() : nullptr; |
| + const StyleImage* oldContentImage = oldStyle && oldStyle->contentData() && oldStyle->contentData()->isImage() ? |
| + toImageContentData(oldStyle->contentData())->image() : nullptr; |
| + updateImage(const_cast<StyleImage*>(oldContentImage), const_cast<StyleImage*>(newContentImage)); |
| + |
| + StyleImage* newBoxReflectMaskImage = m_style->boxReflect() ? m_style->boxReflect()->mask().image() : nullptr; |
| + StyleImage* oldBoxReflectMaskImage = oldStyle && oldStyle->boxReflect() ? oldStyle->boxReflect()->mask().image() : nullptr; |
| + updateImage(oldBoxReflectMaskImage, newBoxReflectMaskImage); |
| + |
| updateShapeImage(oldStyle ? oldStyle->shapeOutside() : 0, m_style->shapeOutside()); |
| bool doesNotNeedLayoutOrPaintInvalidation = !m_parent; |
| styleDidChange(diff, oldStyle.get()); |
| + updateImage(oldStyle ? oldStyle->listStyleImage() : nullptr, m_style->listStyleImage()); |
|
Nate Chapin
2015/09/11 21:35:50
It appears that this and only this needs to be aft
esprehn
2015/09/17 08:20:48
That needs a comment, also can we not move them al
Nate Chapin
2015/09/22 20:24:07
Moved this logic to LayoutListItem, since listStyl
|
| + |
| // FIXME: |this| might be destroyed here. This can currently happen for a LayoutTextFragment when |
| // its first-letter block gets an update in LayoutTextFragment::styleDidChange. For LayoutTextFragment(s), |
| // we will safely bail out with the doesNotNeedLayoutOrPaintInvalidation flag. We might want to broaden |
| @@ -2479,6 +2491,15 @@ void LayoutObject::willBeDestroyed() |
| if (StyleImage* maskBoxImage = m_style->maskBoxImage().image()) |
| maskBoxImage->removeClient(this); |
| + if (m_style->contentData() && m_style->contentData()->isImage()) |
| + const_cast<StyleImage*>(toImageContentData(m_style->contentData())->image())->removeClient(this); |
|
esprehn
2015/09/17 08:20:48
This const_cast seems sketchy, why is it okay to c
Nate Chapin
2015/09/22 20:24:07
I was scared to change it. :)
Made ComputedStyle:
|
| + |
| + if (m_style->boxReflect() && m_style->boxReflect()->mask().image()) |
| + m_style->boxReflect()->mask().image()->removeClient(this); |
| + |
| + if (StyleImage* listStyleImage = m_style->listStyleImage()) |
| + listStyleImage->removeClient(this); |
| + |
| removeShapeImageClient(m_style->shapeOutside()); |
| } |
| ResourceLoadPriorityOptimizer::resourceLoadPriorityOptimizer()->removeLayoutObject(this); |