WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
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
Details
Formatted Diff
Diff
Patch
(4.41 KB, patch)
2015-03-16 15:29 PDT
,
Brent Fulgham
simon.fraser
: review+
Details
Formatted Diff
Diff
Show Obsolete
(1)
View All
Add attachment
proposed patch, testcase, etc.
Brent Fulgham
Comment 1
2015-03-16 15:00:58 PDT
Created
attachment 248751
[details]
Patch
Brent Fulgham
Comment 2
2015-03-16 15:01:43 PDT
<
rdar://problem/20042453
>
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
Created
attachment 248755
[details]
Patch
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
Committed
r181587
: <
http://trac.webkit.org/changeset/181587
>
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug