зеркало из https://github.com/mozilla/gecko-dev.git
f8731e5b3c
This patch is based on Mats Palmgren's idea bug 1599159 comment 0. When a child block frame reports inline-break-before status after being reflowed, its size in the returned reflow output shouldn't matter because the parent is expected to push it to the next page/column [1]. Here is the detail of the debug assertion if the workaround in fieldset frame is removed. In nsBlockReflowContext::ReflowBlock(), it sets mReflowOutput::BSize() to 0xdeadbeef, which is a negative number in 32-bits integer. Without the early break of the loop in nsBlockFrame::ReflowBlockFrame(), then later in the loop we are going to pass the negative block-size to BlockReflowState::GetFloatAvailableSpaceForBSize(), which triggers a `aBSize>=0` assertion further down in the callstack in nsFloatManager::GetFlowArea(). layout/reftests/pagination/fieldset-00G.html can trigger the above assertion after removing the workaround in fieldset frame. I don't expect this patch will change the behavior even if there are some float elements interacting with this block. Without the early breaking out of the loop, we still end up in [1]. [1] https://searchfox.org/mozilla-central/rev/ace2c59e6c56b2dcba25af1aa8903a5e7f9a5857/layout/generic/nsBlockFrame.cpp#4026-4035 Differential Revision: https://phabricator.services.mozilla.com/D148815 |
||
---|---|---|
.. | ||
crashtests | ||
test | ||
HTMLSelectEventListener.cpp | ||
HTMLSelectEventListener.h | ||
moz.build | ||
nsButtonFrameRenderer.cpp | ||
nsButtonFrameRenderer.h | ||
nsCheckboxRadioFrame.cpp | ||
nsCheckboxRadioFrame.h | ||
nsColorControlFrame.cpp | ||
nsColorControlFrame.h | ||
nsComboboxControlFrame.cpp | ||
nsComboboxControlFrame.h | ||
nsDateTimeControlFrame.cpp | ||
nsDateTimeControlFrame.h | ||
nsFieldSetFrame.cpp | ||
nsFieldSetFrame.h | ||
nsFileControlFrame.cpp | ||
nsFileControlFrame.h | ||
nsGfxButtonControlFrame.cpp | ||
nsGfxButtonControlFrame.h | ||
nsHTMLButtonControlFrame.cpp | ||
nsHTMLButtonControlFrame.h | ||
nsIFormControlFrame.h | ||
nsISelectControlFrame.h | ||
nsITextControlFrame.h | ||
nsImageControlFrame.cpp | ||
nsListControlFrame.cpp | ||
nsListControlFrame.h | ||
nsMeterFrame.cpp | ||
nsMeterFrame.h | ||
nsNumberControlFrame.cpp | ||
nsNumberControlFrame.h | ||
nsProgressFrame.cpp | ||
nsProgressFrame.h | ||
nsRangeFrame.cpp | ||
nsRangeFrame.h | ||
nsSearchControlFrame.cpp | ||
nsSearchControlFrame.h | ||
nsSelectsAreaFrame.cpp | ||
nsSelectsAreaFrame.h | ||
nsTextControlFrame.cpp | ||
nsTextControlFrame.h |