Index: third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc |
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc |
index 1e653fc86dbfbda45a474d086023d56cbe90ea6c..40b7ad094bd356e9d6d0583f92d3535c465be507 100644 |
--- a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc |
+++ b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc |
@@ -49,16 +49,31 @@ NGConstraintSpace::NGConstraintSpace( |
NGConstraintSpace* NGConstraintSpace::CreateFromLayoutObject( |
const LayoutBox& box) { |
+ auto writing_mode = FromPlatformWritingMode(box.styleRef().getWritingMode()); |
+ bool parallel_containing_block = IsParallelWritingMode( |
+ FromPlatformWritingMode( |
+ box.containingBlock()->styleRef().getWritingMode()), |
+ writing_mode); |
bool fixed_inline = false, fixed_block = false; |
- // XXX for orthogonal writing mode this is not right |
- LayoutUnit available_logical_width = |
- std::max(LayoutUnit(), box.containingBlockLogicalWidthForContent()); |
+ |
+ LayoutUnit available_logical_width; |
+ if (parallel_containing_block) |
+ available_logical_width = box.containingBlockLogicalWidthForContent(); |
+ else |
+ available_logical_width = box.perpendicularContainingBlockLogicalHeight(); |
+ available_logical_width = std::max(LayoutUnit(), available_logical_width); |
+ |
LayoutUnit available_logical_height; |
if (!box.parent()) { |
available_logical_height = box.view()->viewLogicalHeightForPercentages(); |
} else if (box.containingBlock()) { |
- available_logical_height = |
- box.containingBlock()->availableLogicalHeightForPercentageComputation(); |
+ if (parallel_containing_block) { |
+ available_logical_height = |
+ box.containingBlock() |
+ ->availableLogicalHeightForPercentageComputation(); |
+ } else { |
+ available_logical_height = box.containingBlockLogicalWidthForContent(); |
+ } |
} |
NGLogicalSize percentage_size = {available_logical_width, |
available_logical_height}; |
@@ -80,8 +95,6 @@ NGConstraintSpace* NGConstraintSpace::CreateFromLayoutObject( |
bool is_new_fc = |
box.isLayoutBlock() && toLayoutBlock(box).createsNewFormattingContext(); |
- auto writing_mode = FromPlatformWritingMode(box.styleRef().getWritingMode()); |
- |
FloatSize icb_float_size = box.view()->viewportSizeForViewportUnits(); |
NGPhysicalSize initial_containing_block_size{ |
LayoutUnit(icb_float_size.width()), LayoutUnit(icb_float_size.height())}; |