| Index: Source/core/rendering/RenderTable.cpp
|
| diff --git a/Source/core/rendering/RenderTable.cpp b/Source/core/rendering/RenderTable.cpp
|
| index db2c65c451260bebfb9f549c6059ce81ab752246..0f5d565e8b96d550a3b0975cb86a73992623bcae 100644
|
| --- a/Source/core/rendering/RenderTable.cpp
|
| +++ b/Source/core/rendering/RenderTable.cpp
|
| @@ -272,10 +272,6 @@ void RenderTable::updateLogicalWidth()
|
| setLogicalWidth(min<int>(availableContentLogicalWidth, maxPreferredLogicalWidth()));
|
| }
|
|
|
| - // Ensure we aren't smaller than our min preferred width.
|
| - setLogicalWidth(max<int>(logicalWidth(), minPreferredLogicalWidth()));
|
| -
|
| -
|
| // Ensure we aren't bigger than our max-width style.
|
| Length styleMaxLogicalWidth = style()->logicalMaxWidth();
|
| if ((styleMaxLogicalWidth.isSpecified() && !styleMaxLogicalWidth.isNegative()) || styleMaxLogicalWidth.isIntrinsic()) {
|
| @@ -283,7 +279,11 @@ void RenderTable::updateLogicalWidth()
|
| setLogicalWidth(min<int>(logicalWidth(), computedMaxLogicalWidth));
|
| }
|
|
|
| - // Ensure we aren't smaller than our min-width style.
|
| + // Ensure we aren't smaller than our min preferred width. This MUST be done after 'max-width' as
|
| + // we ignore it if it means we wouldn't accomodate our content.
|
| + setLogicalWidth(max<int>(logicalWidth(), minPreferredLogicalWidth()));
|
| +
|
| + // Ensure we aren't smaller than our min-width style.
|
| Length styleMinLogicalWidth = style()->logicalMinWidth();
|
| if ((styleMinLogicalWidth.isSpecified() && !styleMinLogicalWidth.isNegative()) || styleMinLogicalWidth.isIntrinsic()) {
|
| LayoutUnit computedMinLogicalWidth = convertStyleLogicalWidthToComputedWidth(styleMinLogicalWidth, availableLogicalWidth);
|
| @@ -308,6 +308,10 @@ void RenderTable::updateLogicalWidth()
|
| setMarginStart(minimumValueForLength(style()->marginStart(), availableLogicalWidth, renderView));
|
| setMarginEnd(minimumValueForLength(style()->marginEnd(), availableLogicalWidth, renderView));
|
| }
|
| +
|
| + // We should NEVER shrink the table below the min-content logical width, or else the table can't accomodate
|
| + // its own content which doesn't match CSS nor what authors expect.
|
| + ASSERT(logicalWidth() >= minPreferredLogicalWidth());
|
| }
|
|
|
| // This method takes a RenderStyle's logical width, min-width, or max-width length and computes its actual value.
|
| @@ -768,8 +772,9 @@ void RenderTable::computePreferredLogicalWidths()
|
|
|
| // FIXME: This should probably be checking for isSpecified since you should be able to use percentage, calc or viewport relative values for maxWidth.
|
| if (styleToUse->logicalMaxWidth().isFixed()) {
|
| + // We don't constrain m_minPreferredLogicalWidth as the table should be at least the size of its min-content, regardless of 'max-width'.
|
| m_maxPreferredLogicalWidth = std::min(m_maxPreferredLogicalWidth, adjustContentBoxLogicalWidthForBoxSizing(styleToUse->logicalMaxWidth().value()));
|
| - m_minPreferredLogicalWidth = std::min(m_minPreferredLogicalWidth, adjustContentBoxLogicalWidthForBoxSizing(styleToUse->logicalMaxWidth().value()));
|
| + m_maxPreferredLogicalWidth = std::max(m_minPreferredLogicalWidth, m_maxPreferredLogicalWidth);
|
| }
|
|
|
| // FIXME: We should be adding borderAndPaddingLogicalWidth here, but m_tableLayout->computePreferredLogicalWidths already does,
|
|
|