iOS 13: Overflow:hidden on body prevents PDF scroll
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 6 Aug 2019 00:31:57 +0000 (00:31 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 6 Aug 2019 00:31:57 +0000 (00:31 +0000)
https://bugs.webkit.org/show_bug.cgi?id=200435
rdar://problem/53942888

Reviewed by Tim Horton.
Source/WebKit:

When we navigate from an overflow:hidden HTML page to a custom view (like PDF), we need
to make sure that the scroll view is scrollable.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _setHasCustomContentView:loadedMIMEType:]):

Tools:

When we navigate from an overflow:hidden HTML page to a custom view (like PDF), we need
to make sure that the scroll view is scrollable.

* TestWebKitAPI/Tests/ios/ScrollViewScrollabilityTests.mm:
(TestWebKitAPI::TEST):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248281 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
Tools/ChangeLog
Tools/TestWebKitAPI/Tests/ios/ScrollViewScrollabilityTests.mm

index 08547e9..d0a163b 100644 (file)
@@ -1,3 +1,17 @@
+2019-08-05  Simon Fraser  <simon.fraser@apple.com>
+
+        iOS 13: Overflow:hidden on body prevents PDF scroll
+        https://bugs.webkit.org/show_bug.cgi?id=200435
+        rdar://problem/53942888
+
+        Reviewed by Tim Horton.
+
+        When we navigate from an overflow:hidden HTML page to a custom view (like PDF), we need
+        to make sure that the scroll view is scrollable.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _setHasCustomContentView:loadedMIMEType:]):
+
 2019-08-05  John Wilander  <wilander@apple.com>
 
         Resource Load Statistics: Re-introduce latch mode for subresource cookie blocking
index cde2c98..e238cb4 100644 (file)
@@ -1630,6 +1630,7 @@ static CGSize roundScrollViewContentSize(const WebKit::WebPageProxy& page, CGSiz
 
         _scrollViewBackgroundColor = WebCore::Color();
         [_scrollView setContentOffset:[self _initialContentOffsetForScrollView]];
+        [_scrollView _setScrollEnabledInternal:YES];
 
         [self _setAvoidsUnsafeArea:NO];
     } else if (_customContentView) {
index 9581716..0707e16 100644 (file)
@@ -1,3 +1,17 @@
+2019-08-05  Simon Fraser  <simon.fraser@apple.com>
+
+        iOS 13: Overflow:hidden on body prevents PDF scroll
+        https://bugs.webkit.org/show_bug.cgi?id=200435
+        rdar://problem/53942888
+
+        Reviewed by Tim Horton.
+    
+        When we navigate from an overflow:hidden HTML page to a custom view (like PDF), we need
+        to make sure that the scroll view is scrollable.
+
+        * TestWebKitAPI/Tests/ios/ScrollViewScrollabilityTests.mm:
+        (TestWebKitAPI::TEST):
+
 2019-08-05  Aakash Jain  <aakash_jain@apple.com>
 
         New EWS:mac-wk2 status-bubble shows waiting to run tests for all recent bugs
index e012d1c..c2d428b 100644 (file)
@@ -29,6 +29,7 @@
 
 #import "PlatformUtilities.h"
 #import "TestInputDelegate.h"
+#import "TestNavigationDelegate.h"
 #import "TestWKWebView.h"
 #import <UIKit/UIKit.h>
 #import <WebKit/WKWebViewPrivate.h>
@@ -137,6 +138,22 @@ TEST(ScrollViewScrollabilityTests, ScrollableWithOverflowHiddenAndShrunkUI)
     EXPECT_EQ([[webView scrollView] isScrollEnabled], YES);
 }
 
+TEST(ScrollViewScrollabilityTests, ScrollableAfterNavigateToPDF)
+{
+    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, viewHeight, 414)]);
+
+    [webView synchronouslyLoadHTMLString:nonScrollableDocumentMarkup];
+    [webView waitForNextPresentationUpdate];
+    EXPECT_EQ([[webView scrollView] isScrollEnabled], NO);
+
+    NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"test" withExtension:@"pdf" subdirectory:@"TestWebKitAPI.resources"]];
+    [webView loadRequest:request];
+
+    [webView _test_waitForDidFinishNavigation];
+
+    EXPECT_EQ([[webView scrollView] isScrollEnabled], YES);
+}
+
 } // namespace TestWebKitAPI
 
 #endif // PLATFORM(IOS_FAMILY)