RESOLVED FIXED 142750
WebKit1 Clients Are Not Reliably Repainted
https://bugs.webkit.org/show_bug.cgi?id=142750
Summary WebKit1 Clients Are Not Reliably Repainted
Brent Fulgham
Reported 2015-03-16 14:52:54 PDT
In Bug 135514 I corrected a problem where paint operations were being performed during layout. An unintended side-effect of this was that WebKit clients that performed a programmatic scroll of web content (outside of WebKit's control) would no longer receive a "free" paint operation. To avoid breaking clients that relied on this misfeature, we need to notify AppKit that the view needs to be repainted once layout completes.
Attachments
Patch (4.71 KB, patch)
2015-03-16 15:00 PDT, Brent Fulgham
no flags
Patch (4.41 KB, patch)
2015-03-16 15:29 PDT, Brent Fulgham
simon.fraser: review+
Brent Fulgham
Comment 1 2015-03-16 15:00:58 PDT
Brent Fulgham
Comment 2 2015-03-16 15:01:43 PDT
Simon Fraser (smfr)
Comment 3 2015-03-16 15:05:02 PDT
Comment on attachment 248751 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=248751&action=review > Source/WebCore/page/FrameView.h:116 > + WEBCORE_EXPORT bool isInViewSizeAdjust() { return m_layoutPhase == InViewSizeAdjust; } I think this would be better called something like inPaintableState(), and it should test the inverse. > Source/WebKit/mac/WebView/WebClipView.mm:118 > + if (paintable) > + [[self window] _disableDelayedWindowDisplay]; Is this still required? > Source/WebKit/mac/WebView/WebClipView.mm:123 > + if (paintable) > + [[self window] _enableDelayedWindowDisplay]; And this?
Brent Fulgham
Comment 4 2015-03-16 15:29:52 PDT
Simon Fraser (smfr)
Comment 5 2015-03-16 15:41:48 PDT
Comment on attachment 248755 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=248755&action=review > Source/WebCore/page/FrameView.h:116 > + WEBCORE_EXPORT bool inPaintableState() { return m_layoutPhase != InViewSizeAdjust && !isInLayout(); } I don't think this is tight enough. FrameView::layout() sets the phase to InPostLayout before we've done updateLayerPositionsAfterLayout(), and it's certainly bad to paint before we've updated layers. I would prohibit painting with InLayout, InViewSizeAdjust and InPostLayout. > Source/WebKit/mac/WebView/WebClipView.mm:119 > + [self setNeedsDisplay: YES]; No space after the : I think this deserves a comment describing the situation under which this can occur.
Brent Fulgham
Comment 6 2015-03-16 16:01:53 PDT
Note You need to log in before you can comment on or make changes to this bug.