WebCore:
Reviewed by Dave Hyatt.
- fix https://bugs.webkit.org/show_bug.cgi?id=15384
Div does not notice when grandparent changes height
Test: fast/block/basic/quirk-percent-height-grandchild.html
- fix https://bugs.webkit.org/show_bug.cgi?id=20714
Resizing Gmail inbox vertically results in whitespace at the bottom of the window
Test: fast/replaced/percent-height-in-anonymous-block.html
Added a two-way mapping between boxes with percentage heights and
their non-parent ancestors up to the one the height is computed relative
to. In quirks mode (the first bug), this can be any number of containing
block with auto height. In strict mode (the second bug) this can be
the containing block of an anonymous block containing a replaced
element.
* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::~RenderBlock): Added code to remove the all the
mapping to/from this block to percentage-height descendants.
(WebCore::RenderBlock::layoutBlockChildren): Added code to mark
percentage-height descendants (and their containing block ancestry chain
up to this block) for layout. This ensures that those descendants whose
height depends on the height of this block (or an ancestor) are updated.
(WebCore::RenderBlock::addPercentHeightDescendant): Added. Establishes
a two-way mapping between this block and the given box.
(WebCore::RenderBlock::removePercentHeightDescendant): Added. Removes
all the mapping to/from this box.
* rendering/RenderBlock.h:
* rendering/RenderBox.cpp:
(WebCore::RenderBox::setStyle): Added calls to
removePercentHeightDescendant() when style changes and the box
previously had a percentage height. An exception is when the style
change does not require layout, in which case the box still has
a percentage height and the mappings are valid. In all other cases,
any required mappings will be (re-)established during layout.
(WebCore::RenderBox::destroy): Added a call to
removePercentHeightDescendant.
(WebCore::RenderBox::calcPercentageHeight): Added code that, in quirks
mode, if a higher-than-parent containing block is affecting the box's
height, creates a mapping between the box and that block.
(WebCore::RenderBox::calcReplacedHeightUsing): Changed to skip over
anonymous containing blocks, if any, and when that happens, use
addPercentHeightDescendant() to ensure that the non-anonymous block
is aware of the dependent percent-height box.
LayoutTests:
Reviewed by Dave Hyatt.
- test for https://bugs.webkit.org/show_bug.cgi?id=15384
Div does not notice when grandparent changes height
- test for https://bugs.webkit.org/show_bug.cgi?id=20714
Resizing Gmail inbox vertically results in whitespace at the bottom of the window
* fast/block/basic/quirk-percent-height-grandchild.html: Added.
* fast/replaced/percent-height-in-anonymous-block.html: Added.
* platform/mac/fast/block/basic/quirk-percent-height-grandchild-expected.checksum: Added.
* platform/mac/fast/block/basic/quirk-percent-height-grandchild-expected.png: Added.
* platform/mac/fast/block/basic/quirk-percent-height-grandchild-expected.txt: Added.
* platform/mac/fast/replaced/percent-height-in-anonymous-block-expected.checksum: Added.
* platform/mac/fast/replaced/percent-height-in-anonymous-block-expected.png: Added.
* platform/mac/fast/replaced/percent-height-in-anonymous-block-expected.txt: Added.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@36513 268f45cc-cd09-0410-ab3c-d52691b4dbfc
13 files changed