For some reason SVG frames' overflow rects sometimes don't account for filter effects. Still debugging this one.
This happens when frames are added after the first reflow - which apparently can be triggered by a <script> referencing an external file an the top of the doc - and then any filtered SVG frames that come after that never account for filters in their visual overflow rects. Even if the document is subsequently reflowed, or the filtered elements change, or the filter changes, the filter effect is still not accounted for in the visual overflow rect. The reason that this happens is because nsSVGDisplayContainerFrame::InsertFrames removes NS_FRAME_FIRST_REFLOW from the kid so that nsSVGUtils::ScheduleBoundsUpdate will work when passed the kid, but then forgets to add it back afterwards. That means we never make the nsSVGEffects::UpdateEffects() call in the UpdateBounds implementations since it is guarded by a NS_FRAME_FIRST_REFLOW check.
Summary: Sometimes SVG frames overflow rects do not account for filter effects → Make sure that we call nsSVGEffects::UpdateEffects() on frames that are added after the first reflow
The unconditional setting of NS_FRAME_FIRST_REFLOW here scares me a little. Are we guaranteed that NS_FRAME_FIRST_REFLOW will be set on everything in the frame list, when this function is called? If so, we should assert that (maybe just before we clear that bit). And if not, we should check for it and only add it back if it was originally set.
Ah, yeah, good point.
Attachment #642434 - Flags: review?(dholbert) → review+
Target Milestone: --- → mozilla16
Status: NEW → RESOLVED
Closed: 7 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.