RESOLVED FIXED 186168
Regression(r230876): Swipe navigation snapshot may get removed too early
https://bugs.webkit.org/show_bug.cgi?id=186168
Summary Regression(r230876): Swipe navigation snapshot may get removed too early
Chris Dumez
Reported 2018-05-31 16:48:58 PDT
Swipe navigation snapshot may get removed too early after r230876, causing the view to flickr.
Attachments
WIP Patch (7.86 KB, patch)
2018-05-31 16:53 PDT, Chris Dumez
no flags
WIP Patch (9.11 KB, patch)
2018-05-31 17:00 PDT, Chris Dumez
no flags
Archive of layout-test-results from ews105 for mac-sierra-wk2 (3.03 MB, application/zip)
2018-05-31 18:21 PDT, EWS Watchlist
no flags
Patch (12.25 KB, patch)
2018-06-01 10:13 PDT, Chris Dumez
no flags
Archive of layout-test-results from ews106 for mac-sierra-wk2 (3.24 MB, application/zip)
2018-06-01 11:02 PDT, EWS Watchlist
no flags
Patch (12.30 KB, patch)
2018-06-01 11:51 PDT, Chris Dumez
no flags
Patch (12.29 KB, patch)
2018-06-01 11:52 PDT, Chris Dumez
no flags
Chris Dumez
Comment 1 2018-05-31 16:49:14 PDT
Chris Dumez
Comment 2 2018-05-31 16:53:54 PDT
Created attachment 341708 [details] WIP Patch
Chris Dumez
Comment 3 2018-05-31 17:00:54 PDT
Created attachment 341709 [details] WIP Patch
Tim Horton
Comment 4 2018-05-31 17:18:22 PDT
Comment on attachment 341709 [details] WIP Patch View in context: https://bugs.webkit.org/attachment.cgi?id=341709&action=review > Source/WebKit/UIProcess/ios/ViewGestureControllerIOS.mm:299 > + m_provisionalLoadCallback = [this] { Might as well tuck this down inside just above dispatchAfterEnsuringDrawing, since otherwise we were just going to remove it immediately anyway.
EWS Watchlist
Comment 5 2018-05-31 18:21:46 PDT
Comment on attachment 341709 [details] WIP Patch Attachment 341709 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.webkit.org/results/7912232 New failing tests: swipe/pushState-cached-back-swipe.html
EWS Watchlist
Comment 6 2018-05-31 18:21:47 PDT
Created attachment 341721 [details] Archive of layout-test-results from ews105 for mac-sierra-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews105 Port: mac-sierra-wk2 Platform: Mac OS X 10.12.6
Chris Dumez
Comment 7 2018-06-01 07:48:24 PDT
Comment on attachment 341709 [details] WIP Patch View in context: https://bugs.webkit.org/attachment.cgi?id=341709&action=review >> Source/WebKit/UIProcess/ios/ViewGestureControllerIOS.mm:299 >> + m_provisionalLoadCallback = [this] { > > Might as well tuck this down inside just above dispatchAfterEnsuringDrawing, since otherwise we were just going to remove it immediately anyway. Sorry, I do not understands this comment. The dispatchAfterEnsuringDrawing call mis *inside* this lambda.
Chris Dumez
Comment 8 2018-06-01 09:45:18 PDT
(In reply to Chris Dumez from comment #7) > Comment on attachment 341709 [details] > WIP Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=341709&action=review > > >> Source/WebKit/UIProcess/ios/ViewGestureControllerIOS.mm:299 > >> + m_provisionalLoadCallback = [this] { > > > > Might as well tuck this down inside just above dispatchAfterEnsuringDrawing, since otherwise we were just going to remove it immediately anyway. > > Sorry, I do not understands this comment. The dispatchAfterEnsuringDrawing > call mis *inside* this lambda. In English this time :) Sorry, I do not understand this comment. The dispatchAfterEnsuringDrawing call is *inside* this lambda.
Chris Dumez
Comment 9 2018-06-01 10:13:10 PDT
Tim Horton
Comment 10 2018-06-01 10:38:08 PDT
(In reply to Chris Dumez from comment #8) > (In reply to Chris Dumez from comment #7) > > Comment on attachment 341709 [details] > > WIP Patch > > > > View in context: > > https://bugs.webkit.org/attachment.cgi?id=341709&action=review > > > > >> Source/WebKit/UIProcess/ios/ViewGestureControllerIOS.mm:299 > > >> + m_provisionalLoadCallback = [this] { > > > > > > Might as well tuck this down inside just above dispatchAfterEnsuringDrawing, since otherwise we were just going to remove it immediately anyway. > > > > Sorry, I do not understands this comment. The dispatchAfterEnsuringDrawing > > call mis *inside* this lambda. > > In English this time :) > > Sorry, I do not understand this comment. The dispatchAfterEnsuringDrawing > call is *inside* this lambda. Sure, and it should be. But snapshotRemovalTracker and the if !drawingArea path both do not need to be.
Chris Dumez
Comment 11 2018-06-01 10:43:48 PDT
(In reply to Tim Horton from comment #10) > (In reply to Chris Dumez from comment #8) > > (In reply to Chris Dumez from comment #7) > > > Comment on attachment 341709 [details] > > > WIP Patch > > > > > > View in context: > > > https://bugs.webkit.org/attachment.cgi?id=341709&action=review > > > > > > >> Source/WebKit/UIProcess/ios/ViewGestureControllerIOS.mm:299 > > > >> + m_provisionalLoadCallback = [this] { > > > > > > > > Might as well tuck this down inside just above dispatchAfterEnsuringDrawing, since otherwise we were just going to remove it immediately anyway. > > > > > > Sorry, I do not understands this comment. The dispatchAfterEnsuringDrawing > > > call mis *inside* this lambda. > > > > In English this time :) > > > > Sorry, I do not understand this comment. The dispatchAfterEnsuringDrawing > > call is *inside* this lambda. > > Sure, and it should be. But snapshotRemovalTracker and the if !drawingArea > path both do not need to be. I would still need to keep the null check inside the lambda right? In case the drawing area becomes null after the callback has been set but before the callback is called.
Tim Horton
Comment 12 2018-06-01 10:48:40 PDT
Basically what I’m saying is... SnapshotRemovalTracker tracks “events that have to happen before you remove the snapshot”. Instead of deferring it’s creation, we should defer one of the events (specifically, the dispatchAfterEnsuringDrawing and the event it triggers)
Tim Horton
Comment 13 2018-06-01 10:48:52 PDT
Sure, yes
EWS Watchlist
Comment 14 2018-06-01 11:02:13 PDT
Comment on attachment 341767 [details] Patch Attachment 341767 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.webkit.org/results/7927235 New failing tests: imported/w3c/web-platform-tests/streams/piping/error-propagation-forward.html
EWS Watchlist
Comment 15 2018-06-01 11:02:15 PDT
Created attachment 341772 [details] Archive of layout-test-results from ews106 for mac-sierra-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews106 Port: mac-sierra-wk2 Platform: Mac OS X 10.12.6
Chris Dumez
Comment 16 2018-06-01 11:02:56 PDT
(In reply to Tim Horton from comment #12) > Basically what I’m saying is... SnapshotRemovalTracker tracks “events that > have to happen before you remove the snapshot”. Instead of deferring it’s > creation, we should defer one of the events (specifically, the > dispatchAfterEnsuringDrawing and the event it triggers) The events we currently wait for are: SnapshotRemovalTracker::RenderTreeSizeThreshold | SnapshotRemovalTracker::RepaintAfterNavigation | SnapshotRemovalTracker::MainFrameLoad | SnapshotRemovalTracker::SubresourceLoads | SnapshotRemovalTracker::ScrollPositionRestoration As far as I can tell, we only want to wait for ALL these events if they are associated to the new page load.
Tim Horton
Comment 17 2018-06-01 11:43:40 PDT
(In reply to Chris Dumez from comment #16) > (In reply to Tim Horton from comment #12) > > Basically what I’m saying is... SnapshotRemovalTracker tracks “events that > > have to happen before you remove the snapshot”. Instead of deferring it’s > > creation, we should defer one of the events (specifically, the > > dispatchAfterEnsuringDrawing and the event it triggers) > > The events we currently wait for are: > SnapshotRemovalTracker::RenderTreeSizeThreshold > | SnapshotRemovalTracker::RepaintAfterNavigation > | SnapshotRemovalTracker::MainFrameLoad > | SnapshotRemovalTracker::SubresourceLoads > | SnapshotRemovalTracker::ScrollPositionRestoration > > As far as I can tell, we only want to wait for ALL these events if they are > associated to the new page load. Hmmmmmm, that’s a good point! OK!
Tim Horton
Comment 18 2018-06-01 11:44:59 PDT
Comment on attachment 341767 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=341767&action=review > Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:2832 > +- (void)_didStartProvisionalLoadForMainFrame Are we going to get this if we’re coming from the page cache? (I hope so!)
Chris Dumez
Comment 19 2018-06-01 11:51:15 PDT
Chris Dumez
Comment 20 2018-06-01 11:52:33 PDT
Chris Dumez
Comment 21 2018-06-01 11:52:54 PDT
(In reply to Tim Horton from comment #18) > Comment on attachment 341767 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=341767&action=review > > > Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:2832 > > +- (void)_didStartProvisionalLoadForMainFrame > > Are we going to get this if we’re coming from the page cache? (I hope so!) I am pretty sure but I will verify before landing.
Chris Dumez
Comment 22 2018-06-01 11:55:10 PDT
(In reply to Chris Dumez from comment #21) > (In reply to Tim Horton from comment #18) > > Comment on attachment 341767 [details] > > Patch > > > > View in context: > > https://bugs.webkit.org/attachment.cgi?id=341767&action=review > > > > > Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:2832 > > > +- (void)_didStartProvisionalLoadForMainFrame > > > > Are we going to get this if we’re coming from the page cache? (I hope so!) > > I am pretty sure but I will verify before landing. YEs, we get the item from the page cache when committing the provisional load. We definitely send the didStartProvisional load beforehand.
WebKit Commit Bot
Comment 23 2018-06-01 13:58:34 PDT
Comment on attachment 341775 [details] Patch Clearing flags on attachment: 341775 Committed r232416: <https://trac.webkit.org/changeset/232416>
WebKit Commit Bot
Comment 24 2018-06-01 13:58:35 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.