Bug 196330

Summary: Overlays on instagram.com are shifted if you click on a photo after scrolling
Product: WebKit Reporter: Simon Fraser (smfr) <simon.fraser>
Component: ScrollingAssignee: Simon Fraser (smfr) <simon.fraser>
Status: RESOLVED FIXED    
Severity: Normal CC: fred.wang, koivisto, simon.fraser, thorton, webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Attachments:
Description Flags
Reduction
none
Patch koivisto: review+

Description Simon Fraser (smfr) 2019-03-27 17:16:46 PDT
Go to an instagram page with photos. Scroll down. Click on a photo. The fixed overlay that comes up is offset by your scroll position.
Comment 1 Simon Fraser (smfr) 2019-03-27 17:17:42 PDT
Created attachment 366131 [details]
Reduction
Comment 2 Simon Fraser (smfr) 2019-03-27 17:18:51 PDT
rdar://problem/49100304
Comment 3 Simon Fraser (smfr) 2019-03-27 17:20:55 PDT
The site basically does:

document.body.style.top = -window.scrollY + 'px';
document.body.style.position = "fixed";
// show fixed overlay

so we get a scrolling tree commit that has a new layout viewport (goes from origin 0,scrollTop to 0,0) and a new scrollPosition.

In this case, we have to clobber the scrolling thread's notion of scroll position because the document suddenly became non-scrollable, so this has to act like a requestedScrollPosition change.
Comment 4 Simon Fraser (smfr) 2019-03-27 20:07:44 PDT
Ah, this is about the race between the scrolling tree commit and calling ScrollingTree::applyLayerPositions() on the main thread. I might have to have the main thread wait on the commit.
Comment 5 Simon Fraser (smfr) 2019-03-27 21:22:21 PDT
Created attachment 366149 [details]
Patch
Comment 6 Simon Fraser (smfr) 2019-03-28 08:04:08 PDT
I'll try to make the attachment into a test case.
Comment 7 Simon Fraser (smfr) 2019-03-28 09:45:42 PDT
Landed with test: https://trac.webkit.org/r243607