Changeset 252125 in webkit


Ignore:
Timestamp:
Nov 5, 2019 10:41:51 PM (4 years ago)
Author:
Chris Dumez
Message:

[iOS] Scroll position does not get restored when doing a history navigation while the reader view is shown
https://bugs.webkit.org/show_bug.cgi?id=203871
<rdar://problem/56564603>

Reviewed by Tim Horton.

Source/WebKit:

Previously, attempts to restore the scroll position on the web view while it is being dynamically resized
would get ignored. Instead, we now delay restoring the scroll position until after the view is resized.

  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView _restorePageScrollPosition:scrollOrigin:previousObscuredInset:scale:]):
(-[WKWebView _restorePageStateToUnobscuredCenter:scale:]):

Tools:

Add API test coverage.

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebKit/simple-tall.html:
  • TestWebKitAPI/Tests/WebKitCocoa/RestoreScrollPosition.mm: Added.

(TestWebKitAPI::TEST):

Location:
trunk
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r252123 r252125  
     12019-11-05  Chris Dumez  <cdumez@apple.com>
     2
     3        [iOS] Scroll position does not get restored when doing a history navigation while the reader view is shown
     4        https://bugs.webkit.org/show_bug.cgi?id=203871
     5        <rdar://problem/56564603>
     6
     7        Reviewed by Tim Horton.
     8
     9        Previously, attempts to restore the scroll position on the web view while it is being dynamically resized
     10        would get ignored. Instead, we now delay restoring the scroll position until after the view is resized.
     11
     12        * UIProcess/API/Cocoa/WKWebView.mm:
     13        (-[WKWebView _restorePageScrollPosition:scrollOrigin:previousObscuredInset:scale:]):
     14        (-[WKWebView _restorePageStateToUnobscuredCenter:scale:]):
     15
    1162019-11-05  Kate Cheney  <katherine_cheney@apple.com>
    217
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm

    r251956 r252125  
    21902190- (void)_restorePageScrollPosition:(Optional<WebCore::FloatPoint>)scrollPosition scrollOrigin:(WebCore::FloatPoint)scrollOrigin previousObscuredInset:(WebCore::FloatBoxExtent)obscuredInsets scale:(double)scale
    21912191{
    2192     if (_dynamicViewportUpdateMode != WebKit::DynamicViewportUpdateMode::NotResizing)
     2192    if (_dynamicViewportUpdateMode != WebKit::DynamicViewportUpdateMode::NotResizing) {
     2193        // Defer scroll position restoration until after the current resize completes.
     2194        RetainPtr<WKWebView> retainedSelf = self;
     2195        _callbacksDeferredDuringResize.append([retainedSelf, scrollPosition, scrollOrigin, obscuredInsets, scale] {
     2196            [retainedSelf _restorePageScrollPosition:scrollPosition scrollOrigin:scrollOrigin previousObscuredInset:obscuredInsets scale:scale];
     2197        });
    21932198        return;
     2199    }
    21942200
    21952201    if (![self usesStandardContentView])
     
    22082214- (void)_restorePageStateToUnobscuredCenter:(Optional<WebCore::FloatPoint>)center scale:(double)scale
    22092215{
    2210     if (_dynamicViewportUpdateMode != WebKit::DynamicViewportUpdateMode::NotResizing)
     2216    if (_dynamicViewportUpdateMode != WebKit::DynamicViewportUpdateMode::NotResizing) {
     2217        // Defer scroll position restoration until after the current resize completes.
     2218        RetainPtr<WKWebView> retainedSelf = self;
     2219        _callbacksDeferredDuringResize.append([retainedSelf, center, scale] {
     2220            [retainedSelf _restorePageStateToUnobscuredCenter:center scale:scale];
     2221        });
    22112222        return;
     2223    }
    22122224
    22132225    if (![self usesStandardContentView])
  • trunk/Tools/ChangeLog

    r252087 r252125  
     12019-11-05  Chris Dumez  <cdumez@apple.com>
     2
     3        [iOS] Scroll position does not get restored when doing a history navigation while the reader view is shown
     4        https://bugs.webkit.org/show_bug.cgi?id=203871
     5        <rdar://problem/56564603>
     6
     7        Reviewed by Tim Horton.
     8
     9        Add API test coverage.
     10
     11        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     12        * TestWebKitAPI/Tests/WebKit/simple-tall.html:
     13        * TestWebKitAPI/Tests/WebKitCocoa/RestoreScrollPosition.mm: Added.
     14        (TestWebKitAPI::TEST):
     15
    1162019-11-05  Jonathan Bedard  <jbedard@apple.com>
    217
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r252060 r252125  
    244244                46E66A901F0D75590026D83C /* WKWebViewDiagnosticLogging.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46E66A8F1F0D75590026D83C /* WKWebViewDiagnosticLogging.mm */; };
    245245                46E816F81E79E29C00375ADC /* RestoreStateAfterTermination.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46E816F71E79E29100375ADC /* RestoreStateAfterTermination.mm */; };
     246                46EBD8472372320F00223A6E /* RestoreScrollPosition.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46EBD846237231E600223A6E /* RestoreScrollPosition.mm */; };
    246247                4909EE3A2D09480C88982D56 /* Markable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EC79F168BE454E579E417B05 /* Markable.cpp */; };
    247248                4BFDFFA71314776C0061F24B /* HitTestResultNodeHandle_Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFDFFA61314776C0061F24B /* HitTestResultNodeHandle_Bundle.cpp */; };
     
    17661767                46E66A8F1F0D75590026D83C /* WKWebViewDiagnosticLogging.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewDiagnosticLogging.mm; sourceTree = "<group>"; };
    17671768                46E816F71E79E29100375ADC /* RestoreStateAfterTermination.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RestoreStateAfterTermination.mm; sourceTree = "<group>"; };
     1769                46EBD846237231E600223A6E /* RestoreScrollPosition.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RestoreScrollPosition.mm; sourceTree = "<group>"; };
    17681770                4A410F4B19AF7BD6002EBAB5 /* UserMedia.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserMedia.cpp; sourceTree = "<group>"; };
    17691771                4A410F4D19AF7BEF002EBAB5 /* getUserMedia.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = getUserMedia.html; sourceTree = "<group>"; };
     
    29462948                                5CCB10E02134579D00AC5AF0 /* ResponsivenessTimer.mm */,
    29472949                                5CCB10DD2134579C00AC5AF0 /* ResponsivenessTimerDoesntFireEarly.mm */,
     2950                                46EBD846237231E600223A6E /* RestoreScrollPosition.mm */,
    29482951                                5CCB10DE2134579D00AC5AF0 /* RestoreSessionStateWithoutNavigation.mm */,
    29492952                                A180C0F91EE67DF000468F47 /* RunOpenPanel.mm */,
     
    47904793                                512C4C9E20EAA40D004945EA /* ResponsivenessTimerCrash.mm in Sources */,
    47914794                                5CCB10E2213457D500AC5AF0 /* ResponsivenessTimerDoesntFireEarly.mm in Sources */,
     4795                                46EBD8472372320F00223A6E /* RestoreScrollPosition.mm in Sources */,
    47924796                                83B6DE6F1EE75221001E792F /* RestoreSessionState.cpp in Sources */,
    47934797                                7CCE7F111A411AE600447C4C /* RestoreSessionStateContainingFormData.cpp in Sources */,
  • trunk/Tools/TestWebKitAPI/Tests/WebKit/simple-tall.html

    r103302 r252125  
     1<meta name='viewport' content='width=device-width, initial-scale=1'>
    12<!DOCTYPE html>
    23<html>
Note: See TracChangeset for help on using the changeset viewer.