Index: Source/core/layout/LayoutInline.cpp |
diff --git a/Source/core/layout/LayoutInline.cpp b/Source/core/layout/LayoutInline.cpp |
index cecd977097edfa45693bf35586842a9930fd6738..902e79c4d8746e2189242bc44e629fa574a75b98 100644 |
--- a/Source/core/layout/LayoutInline.cpp |
+++ b/Source/core/layout/LayoutInline.cpp |
@@ -1400,16 +1400,21 @@ public: |
void LayoutInline::addFocusRingRects(Vector<LayoutRect>& rects, const LayoutPoint& additionalOffset) const |
{ |
- AbsoluteLayoutRectsIgnoringEmptyRectsGeneratorContext context(rects, additionalOffset); |
- generateLineBoxRects(context); |
+ // Add line boxes only if this object is the first object of addFocusRingRects(). |
+ // Otherwise the parent (LayoutBlockFlow or LayoutInline) should have added line box rects |
+ // covering those of this object. |
+ if (rects.isEmpty()) { |
+ AbsoluteLayoutRectsIgnoringEmptyRectsGeneratorContext context(rects, additionalOffset); |
+ generateLineBoxRects(context); |
+ } |
addChildFocusRingRects(rects, additionalOffset); |
- if (continuation()) { |
- if (continuation()->isInline()) |
- continuation()->addFocusRingRects(rects, additionalOffset + (continuation()->containingBlock()->location() - containingBlock()->location())); |
+ if (LayoutBoxModelObject* continuation = this->continuation()) { |
+ if (continuation->isInline()) |
+ continuation->addFocusRingRects(rects, additionalOffset + (continuation->containingBlock()->location() - containingBlock()->location())); |
else |
- continuation()->addFocusRingRects(rects, additionalOffset + (toLayoutBox(continuation())->location() - containingBlock()->location())); |
+ continuation->addFocusRingRects(rects, additionalOffset + (toLayoutBox(continuation)->location() - containingBlock()->location())); |
} |
} |