Index: third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
index 6774606bbe87f2d44541a216072c22e94fcafb04..e3c2b1f099ec69a4ce3d31ddb3b0f085bb997413 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
@@ -265,6 +265,11 @@ static bool borderOrPaddingLogicalWidthChanged(const ComputedStyle& oldStyle, co |
void LayoutBlock::styleDidChange(StyleDifference diff, const ComputedStyle* oldStyle) |
{ |
+ // Horizontal writing mode definition is updated in LayoutBoxModelObject::updateFromStyle, |
+ // (as part of the LayoutBoxModelObject::styleDidChange call below). So, we can safely cache the horizontal |
+ // writing mode value before style change here. |
+ bool oldHorizontalWritingMode = isHorizontalWritingMode(); |
+ |
LayoutBox::styleDidChange(diff, oldStyle); |
if (isFloatingOrOutOfFlowPositioned() && oldStyle && !oldStyle->isFloating() && !oldStyle->hasOutOfFlowPosition() && parent() && parent()->isLayoutBlockFlow()) { |
@@ -286,6 +291,21 @@ void LayoutBlock::styleDidChange(StyleDifference diff, const ComputedStyle* oldS |
if (LayoutBlock* cb = containingBlock()) |
cb->removePositionedObjects(this, NewContainingBlock); |
} |
+ |
+ // Changing the writingMode() may change isOrthogonalWritingModeRoot() |
+ // of children. Make sure all children are marked/unmarked as orthogonal |
+ // writing-mode roots. |
+ bool newHorizontalWritingMode = isHorizontalWritingMode(); |
+ if (oldHorizontalWritingMode != newHorizontalWritingMode) { |
+ for (LayoutObject* child = firstChild(); child; child = child->nextSibling()) { |
+ if (!child->isBox()) |
+ continue; |
+ if (newHorizontalWritingMode != child->isHorizontalWritingMode()) |
+ toLayoutBox(child)->markOrthogonalWritingModeRoot(); |
+ else |
+ toLayoutBox(child)->unmarkOrthogonalWritingModeRoot(); |
+ } |
+ } |
} |
if (TextAutosizer* textAutosizer = document().textAutosizer()) |