Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/LayoutBox.cpp |
| diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
| index b59cf4626abb3a6e4380f5724f7e55c2d0214412..5813e4adae31820718f030f783e9f548ee62a8bb 100644 |
| --- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
| +++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
| @@ -2282,11 +2282,10 @@ bool LayoutBox::mapToVisualRectInAncestorSpace( |
| LayoutObject* container = |
| this->container(ancestor, &ancestorSkipped, &filterSkipped); |
| LayoutBox* tableRowContainer = nullptr; |
| - // Skip table row because cells and rows are in the same coordinate space |
| - // (see below, however for more comments about when |ancestor| is the table row). |
| - // The second and third conditionals below are to skip cases where content has display: table-row or display: table-cell but is not |
| - // parented like a cell/row combo. |
| - if (container->isTableRow() && isTableCell() && parentBox() == container) { |
| + // Skip table row because cells and rows are in the same coordinate space (see |
| + // below, however for more comments about when |ancestor| is the table row). |
| + if (isTableCell()) { |
| + DCHECK(container->isTableRow() && parentBox() == container); |
|
chrishtr
2016/10/04 17:32:17
I changed the code to remove the DCHECK just last
Xianzhu
2016/10/04 17:48:02
Based on my test, we create anonymous LayoutTable,
|
| if (container != ancestor) |
| container = container->parent(); |
| else |
| @@ -5047,11 +5046,24 @@ LayoutPoint LayoutBox::flipForWritingModeForChild( |
| point.y()); |
| } |
| +LayoutBox* LayoutBox::locationContainer() const { |
|
chrishtr
2016/10/04 18:25:59
Please add a unittest that tests this method direc
Xianzhu
2016/10/04 19:20:30
Done.
|
| + // Normally the box's location is relative to its containing box. |
| + LayoutObject* container = this->container(); |
| + while (container && !container->isBox()) |
| + container = container->container(); |
| + return toLayoutBox(container); |
| +} |
| + |
| LayoutPoint LayoutBox::topLeftLocation( |
| const LayoutBox* flippedBlocksContainer) const { |
| - const LayoutBox* containerBox = |
| - flippedBlocksContainer ? flippedBlocksContainer : containingBlock(); |
| - if (!containerBox || containerBox == this) |
| + const LayoutBox* containerBox; |
| + if (flippedBlocksContainer) { |
| + DCHECK(flippedBlocksContainer == locationContainer()); |
| + containerBox = flippedBlocksContainer; |
| + } else { |
| + containerBox = locationContainer(); |
| + } |
| + if (!containerBox) |
| return location(); |
| return containerBox->flipForWritingModeForChild(this, location()); |
| } |