| Index: third_party/WebKit/Source/core/layout/LayoutTableRow.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/LayoutTableRow.cpp b/third_party/WebKit/Source/core/layout/LayoutTableRow.cpp
|
| index 2d726bcd8ba8adf2aab88a76d8044d237b787290..39bdbe41f383311d058cea2b39f8bacc7c4cd6db 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutTableRow.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutTableRow.cpp
|
| @@ -60,34 +60,39 @@ void LayoutTableRow::styleDidChange(StyleDifference diff, const ComputedStyle* o
|
| LayoutTableBoxComponent::styleDidChange(diff, oldStyle);
|
| propagateStyleToAnonymousChildren();
|
|
|
| - if (section() && oldStyle && style()->logicalHeight() != oldStyle->logicalHeight())
|
| + if (!oldStyle)
|
| + return;
|
| +
|
| + if (section() && style()->logicalHeight() != oldStyle->logicalHeight())
|
| section()->rowLogicalHeightChanged(this);
|
|
|
| - // If border was changed, notify table.
|
| - if (parent()) {
|
| - LayoutTable* table = this->table();
|
| - if (table && !table->selfNeedsLayout() && !table->normalChildNeedsLayout() && oldStyle && oldStyle->border() != style()->border())
|
| - table->invalidateCollapsedBorders();
|
| -
|
| - if (table && oldStyle && diff.needsFullLayout() && needsLayout() && table->collapseBorders() && oldStyle->border().sizeEquals(style()->border())) {
|
| - // If the border width changes on a row, we need to make sure the cells in the row know to lay out again.
|
| - // This only happens when borders are collapsed, since they end up affecting the border sides of the cell
|
| - // itself.
|
| - for (LayoutBox* childBox = firstChildBox(); childBox; childBox = childBox->nextSiblingBox()) {
|
| - if (!childBox->isTableCell())
|
| - continue;
|
| - // TODO(dgrogan) Add a layout test showing that setChildNeedsLayout is needed instead of setNeedsLayout.
|
| - childBox->setChildNeedsLayout();
|
| - childBox->setPreferredLogicalWidthsDirty(MarkOnlyThis);
|
| - }
|
| - // Most table componenents can rely on LayoutObject::styleDidChange
|
| - // to mark the container chain dirty. But LayoutTableSection seems
|
| - // to never clear its dirty bit, which stops the propagation. So
|
| - // anything under LayoutTableSection has to restart the propagation
|
| - // at the table.
|
| - // TODO(dgrogan): Make LayoutTableSection clear its dirty bit.
|
| - table->setPreferredLogicalWidthsDirty();
|
| + if (!parent())
|
| + return;
|
| + LayoutTable* table = this->table();
|
| + if (!table)
|
| + return;
|
| +
|
| + if (!table->selfNeedsLayout() && !table->normalChildNeedsLayout() && oldStyle->border() != style()->border())
|
| + table->invalidateCollapsedBorders();
|
| +
|
| + if (LayoutTableBoxComponent::doCellsHaveDirtyWidth(*this, *table, diff, *oldStyle)) {
|
| + // If the border width changes on a row, we need to make sure the cells in the row know to lay out again.
|
| + // This only happens when borders are collapsed, since they end up affecting the border sides of the cell
|
| + // itself.
|
| + for (LayoutBox* childBox = firstChildBox(); childBox; childBox = childBox->nextSiblingBox()) {
|
| + if (!childBox->isTableCell())
|
| + continue;
|
| + // TODO(dgrogan) Add a layout test showing that setChildNeedsLayout is needed instead of setNeedsLayout.
|
| + childBox->setChildNeedsLayout();
|
| + childBox->setPreferredLogicalWidthsDirty(MarkOnlyThis);
|
| }
|
| + // Most table componenents can rely on LayoutObject::styleDidChange
|
| + // to mark the container chain dirty. But LayoutTableSection seems
|
| + // to never clear its dirty bit, which stops the propagation. So
|
| + // anything under LayoutTableSection has to restart the propagation
|
| + // at the table.
|
| + // TODO(dgrogan): Make LayoutTableSection clear its dirty bit.
|
| + table->setPreferredLogicalWidthsDirty();
|
| }
|
| }
|
|
|
|
|