RESOLVED FIXED 16034
REGRESSION (r27351): Departure date does not repaint when changed on Google Maps public transit planner
https://bugs.webkit.org/show_bug.cgi?id=16034
Summary REGRESSION (r27351): Departure date does not repaint when changed on Google M...
mitz
Reported 2007-11-17 17:17:09 PST
To reproduce this bug: 1) Open the URL 2) Click the Options tab 3) Click the calendar icon next to the date 4) Click a different date Notice that the value in the text field does not change. Forcing a repaint changes it. Works with shipping Safari 3.0.4 on Leopard.
Attachments
Track the layout root using the render tree and the container() relation (22.95 KB, patch)
2007-11-18 18:57 PST, mitz
eric: review+
mitz
Comment 1 2007-11-17 17:19:00 PST
mitz
Comment 2 2007-11-17 18:19:58 PST
Regressed in r27351 (subtree layout for overflow areas). Just commenting-out the extra condition in objectIsRelayoutBoundary() fixes the bug.
mitz
Comment 3 2007-11-17 23:42:18 PST
The root cause for the bug is that the code in FrameView::scheduleRelayoutOfSubtree() to handle a new root that is an ancestor or a descendant of the current root is wrong. It uses the DOM tree while in fact it should use the container()-hood graph of render objects. In the Google Maps case, the result is that when scheduleRelayoutOfSubtree() tries to mark the path from the descendant up to the ancestor, it marks all the way up to the root. Consequently, at the end of the subtree layout, the root is still marked for layout, and a second layout happens under invalidateSelection(), exposing a different bug: the inner layout clears the repaint rects set held by the frame, so the repaint never happens.
mitz
Comment 4 2007-11-18 18:57:49 PST
Created attachment 17372 [details] Track the layout root using the render tree and the container() relation In addition to fixing the root cause and the other bug mentioned in comment #3, this patch changes layoutRoot from a RefPtr<Node> to a RenderObject*. It makes more sense to keep track of the layout root in terms of the render tree, and the patch includes an ASSERT that the layout root does not get deleted. No layout test regressions.
Eric Seidel (no email)
Comment 5 2007-11-21 20:58:42 PST
Comment on attachment 17372 [details] Track the layout root using the render tree and the container() relation You might add a comment to: RenderObject* layoutRoot; something like: // weak reference, ASSERT in ~RenderObject assures this is never made stale I need to ask you a couple questions over IRC.
Eric Seidel (no email)
Comment 6 2007-11-21 21:14:56 PST
Comment on attachment 17372 [details] Track the layout root using the render tree and the container() relation Looks good. r=me.
mitz
Comment 7 2007-11-21 21:24:07 PST
Note You need to log in before you can comment on or make changes to this bug.