Closed Bug 447660 Opened 13 years ago Closed 7 years ago

Reenable float breaking in columns


(Core :: Layout, defect)

Not set





(Reporter: roc, Assigned: mats)




(3 files)

We turned this off in bug 413048. One day when it's safe to turn it on again, we should probably do so.
Depends on: 492627
We've fixed a ton of bugs in the past six years so I think we should try to enable this
again behind a pref.  I pushed a Try run (together with the fixes in bug 1108104):

There are a few assertions that we need to fix before enabling it though:

Depends on: 1108104
Fixes this assertion:
overflow container must not have computedBSizeLeftOver: '!( IS_TRUE_OVERFLOW_CONTAINER(this) && computedBSizeLeftOver )', layout\generic\nsBlockFrame.cpp, line 7199
Attachment #8535956 - Flags: review?(roc)
This fixes a few bugs when pushing/pulling float continuations between columns.
(see the patch description for details)
(other tests were green in an earlier run, so just ref/crashtests here)
Attachment #8535960 - Flags: review?(roc)
Attachment #8535955 - Flags: review?(roc) → review+
Attachment #8535956 - Flags: review?(roc) → review+
Comment on attachment 8535960 [details] [diff] [review]
part 3 - When collecting / pushing a float, make sure to also pick up its next-in-flows that are in same block.

Review of attachment 8535960 [details] [diff] [review]:

::: layout/generic/nsBlockFrame.cpp
@@ +7354,5 @@
> +      nsIFrame* nif = e.get()->GetNextInFlow();
> +      MOZ_ASSERT(!nif || (!mFloats.ContainsFrame(nif) && !mFrames.ContainsFrame(nif)));
> +    }
> +  }
> +  

trailing whitespace
Attachment #8535960 - Flags: review?(roc) → review+
Filed bug 1148104 to enable this in RELEASE builds and let it ride the trains.
Blocks: 1148104
Depends on: 1153695
I don't really understand why the following change was made in patch #2, since rewrapping a line of text and replacing comments with questions seems unrelated to any of the code changes to fixing this bug.

-      && aFinalSize.BSize(wm) < aReflowState.AvailableBSize()) {
-    // We ran out of height on this page but we're incomplete
-    // Set status to complete except for overflow
+  if (NS_FRAME_IS_NOT_COMPLETE(*aStatus) &&
+      aFinalSize.BSize(wm) < aReflowState.AvailableBSize()) {
+    // We fit in the available space - change status to OVERFLOW_INCOMPLETE.
+    // XXXmats why didn't Reflow report OVERFLOW_INCOMPLETE in the first place?
+    // XXXmats and why exclude the case when our size == AvailableBSize?
Imho the new comment is less helpful than the original: our content doesn't fit, so we're not complete and need a continuation to continue placing our content--but we ran out of computed height, that is why we need to change the reflow status to OVERFLOW_INCOMPLETE to indicate this state.

To answer the first question, Reflow didn't report OVERFLOW_INCOMPLETE rather than NOT_COMPLETE because it didn't know we ran out of computed height: we only know that after we compute the height in this function.

To answer the second question, this seems like an error and likely should be, as you seem to suspect, <= rather than < in the comparison.

p.s. Probably questions should be directed to the person responsible for answering rather than left in the source for her to discover several years later. ;)
Neerja: @fantasai graciously posted a patch for fixing the issue in comment 9 here:

Can you file a follow-up bug and get it reviewed/landed? Thx!
Flags: needinfo?(npancholi)
Blocks: 1411765
(In reply to Jet Villegas (:jet) from comment #10)
> Neerja: @fantasai graciously posted a patch for fixing the issue in comment
> 9 here:
> Can you file a follow-up bug and get it reviewed/landed? Thx!

Created follow up Bug 1411765 for this.
Flags: needinfo?(npancholi)
You need to log in before you can comment on or make changes to this bug.