Closed
Bug 1001258
Opened 11 years ago
Closed 11 years ago
"ASSERTION: MovePositionBy should always lead to the movement specified, unless the frame is position:sticky", with position:relative, inline-block, & dynamic change to 'float'
Categories
(Core :: Layout: Block and Inline, defect)
Core
Layout: Block and Inline
Tracking
()
RESOLVED
FIXED
mozilla32
People
(Reporter: jruderman, Assigned: dbaron)
References
Details
(Keywords: assertion, testcase)
Attachments
(2 files)
|
712 bytes,
text/html
|
Details | |
|
1.35 KB,
patch
|
dholbert
:
review+
|
Details | Diff | Splinter Review |
###!!! ASSERTION: MovePositionBy should always lead to the movement specified, unless the frame is position:sticky: 'StyleDisplay()->mPosition == NS_STYLE_POSITION_STICKY || GetPosition() + aTranslation == position', file layout/generic/nsFrame.cpp, line 5164
This assertion was added in https://hg.mozilla.org/mozilla-central/rev/e700c4f7f8e3
| Reporter | ||
Comment 1•11 years ago
|
||
It took me a long time to reduce this testcase, so I hope it's useful!
Updated•11 years ago
|
Depends on: 911786
Summary: "ASSERTION: MovePositionBy should always lead to the movement specified, unless the frame is position:sticky" → "ASSERTION: MovePositionBy should always lead to the movement specified, unless the frame is position:sticky", with position:relative, inline-block, & dynamic change to 'float'
| Assignee | ||
Comment 2•11 years ago
|
||
So there's a codepath that moved the position:relative frame without calling its ApplyRelativePositioning method, which means that if that frame had been position:sticky instead of position;relative, the layout would have been wrong. The question is which codepath...
Component: Layout → Layout: Block and Inline
OS: Mac OS X → All
Hardware: x86_64 → All
| Assignee | ||
Comment 3•11 years ago
|
||
The problem is that we change the rectangle to a reasonably-bogus value here:
#0 0x00007f1a70e0dd73 in nsIFrame::SetRect (this=0x5aaa2f8, aRect=...)
at /home/dbaron/builds/ssd/mozilla-central/mozilla/layout/generic/nsIFrame.h:774
#1 0x00007f1a70e0ddaf in nsIFrame::SetRect (this=0x5aaa2f8, aWritingMode=...,
aRect=..., aContainerWidth=<optimized out>)
at /home/dbaron/builds/ssd/mozilla-central/mozilla/layout/generic/nsIFrame.h:790
#2 0x00007f1a70e0c70a in nsLineLayout::BlockDirAlignLine (this=0x7fff57649ad8)
at /home/dbaron/builds/ssd/mozilla-central/mozilla/layout/generic/nsLineLayout.cpp:1462
#3 0x00007f1a70e2fafc in nsBlockFrame::PlaceLine (this=0x5aa8a90, aState=...,
aLineLayout=..., aLine=..., aFloatStateBeforeLine=0x7fff57649be8,
aFloatAvailableSpace=..., aAvailableSpaceHeight=@0x7fff57649bfc: 0,
aKeepReflowGoing=0x7fff57649f0e)
at /home/dbaron/builds/ssd/mozilla-central/mozilla/layout/generic/nsBlockFrame.cpp:4181
and then PlaceLine returns here:
// If the available space between the floats is smaller now that we
// know the height, return false (and cause another pass with
// LINE_REFLOW_REDO_MORE_FLOATS).
if (AvailableSpaceShrunk(oldFloatAvailableSpace, aFloatAvailableSpace)) {
return false;
}
before calling aLineLayout.RelativePositionFrames().
| Assignee | ||
Comment 4•11 years ago
|
||
It's possible that the answer here is that we just remove the assertion, though.
| Assignee | ||
Comment 5•11 years ago
|
||
(The problem here is that fundamentally, nsBlockFrame is bailing out in the middle of work that it knows it's going to redo.)
| Assignee | ||
Comment 6•11 years ago
|
||
Attachment #8413142 -
Flags: review?(dholbert)
| Assignee | ||
Updated•11 years ago
|
Assignee: nobody → dbaron
Status: NEW → ASSIGNED
Comment 7•11 years ago
|
||
Comment on attachment 8413142 [details] [diff] [review]
Remove assertion added in bug 911786 part 3 since it turns out the first bug it found was bogus
Maybe include the testcase as a crashtest, too?
r=me
Attachment #8413142 -
Flags: review?(dholbert) → review+
| Assignee | ||
Comment 8•11 years ago
|
||
Comment 9•11 years ago
|
||
Status: ASSIGNED → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla32
You need to log in
before you can comment on or make changes to this bug.
Description
•