[webkit-reviews] review granted: [Bug 135103] [iOS WK1] Single touch div scrolling in Mobile Safari doesn't work in framesets (breaks Word previews) : [Attachment 235188] Patch
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Sun Jul 20 13:40:44 PDT 2014
Darin Adler <darin at apple.com> has granted Simon Fraser (smfr)
<simon.fraser at apple.com>'s request for review:
Bug 135103: [iOS WK1] Single touch div scrolling in Mobile Safari doesn't work
in framesets (breaks Word previews)
https://bugs.webkit.org/show_bug.cgi?id=135103
Attachment 235188: Patch
https://bugs.webkit.org/attachment.cgi?id=235188&action=review
------- Additional Comments from Darin Adler <darin at apple.com>
View in context: https://bugs.webkit.org/attachment.cgi?id=235188&action=review
r=me, not sure if you need to switch to a post-order traversal
> Source/WebCore/rendering/RenderLayerCompositor.cpp:474
> + notifySubframesAfterLayerFlush();
> + didFlushLayers();
It seems strange to flush the top frame separately.
Also, I think the function should be named for what it does rather than in what
circumstance it’s called in. Maybe flushDescendantLayers, except that argues
against putting it in there.
> Source/WebCore/rendering/RenderLayerCompositor.cpp:500
> + for (Frame* currFrame = frame.tree().firstChild(); currFrame; currFrame
= currFrame->tree().traverseNext(&frame)) {
I suggest naming this variable subframe or descendant rather than currFrame.
Since we want to flush subframes before their parent, this traversal is not the
one we want. This is a pre-order traversal, where each frame is visited before
its children. I think what we want is a post-order traversal, where children
are visited before their parents.
Unfortunately, we don’t have a post-order traversal function in FrameTree. It’s
not hard to write one. The nextPostOrder function in NodeTraversal.cpp is not a
bad model:
static Frame* firstDescendantFramePostOrder(Frame& frame)
{
Frame* descendant = &frame;
while (Frame* firstChild = descendant->tree()->firstChild())
descendant = firstChild;
return descendant;
}
static Frame* nextFramePostOrder(Frame* frame)
{
Frame* next = frame->tree()->nextSibling();
if (!next)
return frame->tree()->parent();
return firstDescendantFramePostOrder(*next);
}
And the loop is a little different:
for (Frame* subframe = firstDescendantFramePostOrder(frame); subframe !=
&frame; subframe = nextFramePostOrder(subframe)) {
...
}
More information about the webkit-reviews
mailing list