Index: third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp |
index 1f11e9809007648f8021300f03ebf495772820d2..e024ccc5af6948c48ab64160fce998dc246ae4ed 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp |
@@ -2362,6 +2362,29 @@ void LayoutBlockFlow::invalidatePaintForOverflow() |
m_paintInvalidationLogicalBottom = LayoutUnit(); |
} |
+void LayoutBlockFlow::invalidateDisplayItemClients(const LayoutBoxModelObject& paintInvalidationContainer, PaintInvalidationReason invalidationReason) const |
+{ |
+ LayoutBlock::invalidateDisplayItemClients(paintInvalidationContainer, invalidationReason); |
+ |
+ // If the block is a continuation or containing block of an inline continuation, invalidate the |
+ // start object of the continuations if it has focus ring because change of continuation may change |
+ // the shape of the focus ring. |
+ if (!isAnonymous()) |
+ return; |
+ |
+ LayoutObject* startOfContinuations = nullptr; |
+ if (LayoutInline* inlineElementContinuation = this->inlineElementContinuation()) { |
+ // This block is an anonymous block continuation. |
+ startOfContinuations = inlineElementContinuation->node()->layoutObject(); |
+ } else if (LayoutObject* firstChild = this->firstChild()) { |
+ // This block is the anonymous containing block of an inline element continuation. |
+ if (firstChild->isElementContinuation()) |
+ startOfContinuations = firstChild->node()->layoutObject(); |
+ } |
+ if (startOfContinuations && startOfContinuations->styleRef().outlineStyleIsAuto()) |
+ startOfContinuations->invalidateDisplayItemClient(*startOfContinuations); |
+} |
+ |
void LayoutBlockFlow::paintFloats(const PaintInfo& paintInfo, const LayoutPoint& paintOffset) const |
{ |
BlockFlowPainter(*this).paintFloats(paintInfo, paintOffset); |