WebKit Bugzilla
Attachment 371032 Details for
Bug 198244
: iOS: Main frame should be scrollable when pinch zoomed or software keyboard is up
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for landing
bug-198244-20190530213152.patch (text/plain), 12.26 KB, created by
Ryosuke Niwa
on 2019-05-30 21:31:53 PDT
(
hide
)
Description:
Patch for landing
Filename:
MIME Type:
Creator:
Ryosuke Niwa
Created:
2019-05-30 21:31:53 PDT
Size:
12.26 KB
patch
obsolete
>Index: Source/WebKit/ChangeLog >=================================================================== >--- Source/WebKit/ChangeLog (revision 245944) >+++ Source/WebKit/ChangeLog (working copy) >@@ -1,3 +1,19 @@ >+2019-05-30 Ryosuke Niwa <rniwa@webkit.org> >+ >+ iOS: Main frame should be scrollable when pinch zoomed or software keyboard is up >+ https://bugs.webkit.org/show_bug.cgi?id=198244 >+ >+ Reviewed by Simon Fraser. >+ >+ This is a follow up to r245006. Even when overflow: hidden is specified on the document body, >+ we still need to make it scrollable when the page is pinch zoomed or there is a content inset >+ e.g. for software keyboard. Otherwise, the user won't be able to get to the content that is >+ outside the visual viewport when pinch zoomed or the parts of the page that is not outside >+ the visual viewport due to the scrolling caused by the software keyboard being brought up. >+ >+ * UIProcess/API/Cocoa/WKWebView.mm: >+ (-[WKWebView _didCommitLayerTree:]): >+ > 2019-05-30 Sihui Liu <sihui_liu@apple.com> > > WKWebsiteDataStore API fails to fetch web storage data for non-persistent data store >Index: Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm >=================================================================== >--- Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (revision 245944) >+++ Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (working copy) >@@ -1988,7 +1988,9 @@ - (void)_didCommitLayerTree:(const WebKi > [_scrollView setMaximumZoomScale:layerTreeTransaction.maximumScaleFactor()]; > [_scrollView setZoomEnabled:layerTreeTransaction.allowsUserScaling()]; > #if ENABLE(ASYNC_SCROLLING) >- [_scrollView setScrollEnabled:_page->scrollingCoordinatorProxy()->hasScrollableMainFrame()]; >+ bool hasDockedInputView = !CGRectIsEmpty(_inputViewBounds); >+ bool isZoomed = layerTreeTransaction.pageScaleFactor() > layerTreeTransaction.initialScaleFactor(); >+ [_scrollView setScrollEnabled:_page->scrollingCoordinatorProxy()->hasScrollableMainFrame() || hasDockedInputView || isZoomed]; > #endif > if (!layerTreeTransaction.scaleWasSetByUIProcess() && ![_scrollView isZooming] && ![_scrollView isZoomBouncing] && ![_scrollView _isAnimatingZoom] && [_scrollView zoomScale] != layerTreeTransaction.pageScaleFactor()) { > LOG_WITH_STREAM(VisibleRects, stream << " updating scroll view with pageScaleFactor " << layerTreeTransaction.pageScaleFactor()); >Index: LayoutTests/ChangeLog >=================================================================== >--- LayoutTests/ChangeLog (revision 245944) >+++ LayoutTests/ChangeLog (working copy) >@@ -1,3 +1,19 @@ >+2019-05-30 Ryosuke Niwa <rniwa@webkit.org> >+ >+ iOS: Main frame should be scrollable when pinch zoomed or software keyboard is up >+ https://bugs.webkit.org/show_bug.cgi?id=198244 >+ >+ Reviewed by Simon Fraser. >+ >+ Added regression tests. >+ >+ * fast/scrolling/ios/body-overflow-hidden-height-100-percent-keyboard-expected.txt: Added. >+ * fast/scrolling/ios/body-overflow-hidden-height-100-percent-keyboard.html: Added. >+ * fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-1-expected.txt: Added. >+ * fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-1.html: Added. >+ * fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-2-expected.txt: Added. >+ * fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-2.html: Added. >+ > 2019-05-30 Ryan Haddad <ryanhaddad@apple.com> > > Unreviewed, rolling out r245890, 245887. >Index: LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-keyboard-expected.txt >=================================================================== >--- LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-keyboard-expected.txt (nonexistent) >+++ LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-keyboard-expected.txt (working copy) >@@ -0,0 +1,4 @@ >+This document shouldn't be scrollable normally but should be scrollable when the software keyboard is shown. >+To manually test, tap on the text field below to bring up the docked software keyboard. >+The document should become scrollable. >+PASS - the document did scroll >Index: LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-keyboard.html >=================================================================== >--- LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-keyboard.html (nonexistent) >+++ LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-keyboard.html (working copy) >@@ -0,0 +1,50 @@ >+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true internal:AsyncOverflowScrollingEnabled=true internal:AsyncFrameScrollingEnabled=true ] --> >+<html> >+<head> >+<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> >+<script src="../../../resources/ui-helper.js"></script> >+<script src="../../../resources/basic-gestures.js"></script> >+<style> >+html, body { width: 100%; height: 100%; margin: 0px; padding: 0px; } >+body { overflow: hidden; } >+#content { width: 100%; height: 100%; box-sizing: border-box; padding: 20px; background: #ccc; } >+</style> >+<script> >+if (window.testRunner) { >+ testRunner.waitUntilDone(); >+ testRunner.dumpAsText(); >+} >+ >+async function runTest() { >+ if (!window.testRunner) >+ return; >+ >+ await UIHelper.setHardwareKeyboardAttached(false); >+ >+ // FIXME: <rdar://problem/51289800> Scrolling down by touch gestures does not work immediately after software keyboard is brought up for the first time >+ await UIHelper.activateElementAndWaitForInputSession(document.querySelector('input')); >+ document.activeElement.blur(); >+ await UIHelper.waitForKeyboardToHide(); >+ >+ await UIHelper.activateElementAndWaitForInputSession(document.querySelector('input')); >+ >+ const result = document.getElementById('result'); >+ const y = result.getBoundingClientRect().top + 10; >+ >+ await touchAndDragFromPointToPoint(200, y + 100, 200, y + 10); >+ await liftUpAtPoint(200, y + 10); >+ await UIHelper.delayFor(100); >+ >+ result.textContent = document.documentElement.scrollTop >= 50 ? 'PASS - the document did scroll' : 'FAIL - the document did not scroll'; >+ >+ testRunner.notifyDone(); >+} >+ >+</script> >+<body onload="runTest()"><div id="content"> >+This document shouldn't be scrollable normally but should be scrollable when the software keyboard is shown.<br> >+To manually test, tap on the text field below to bring up the docked software keyboard.<br> >+The document should become scrollable.<br> >+<div id="result"><input placeholder="Click here"></div> >+</div></body> >+</html> >Index: LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-1-expected.txt >=================================================================== >--- LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-1-expected.txt (nonexistent) >+++ LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-1-expected.txt (working copy) >@@ -0,0 +1,5 @@ >+This document shouldn't be scrollable normally but should be scrollable when pinch zoomed. >+To manually test, pinch zoom on the page. The document should become scrollable. >+PASS - the document did scroll with zooming >+PASS - the document scrolled back to the top >+ >Index: LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-1.html >=================================================================== >--- LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-1.html (nonexistent) >+++ LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-1.html (working copy) >@@ -0,0 +1,48 @@ >+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true internal:AsyncOverflowScrollingEnabled=true internal:AsyncFrameScrollingEnabled=true ] --> >+<html> >+<head> >+<meta name="viewport" content="width=device-width, initial-scale=1"> >+<script src="../../../resources/ui-helper.js"></script> >+<script src="../../../resources/basic-gestures.js"></script> >+<style> >+html, body { width: 100%; height: 100%; margin: 0px; padding: 0px; } >+body { overflow: hidden; } >+#content { width: 100%; height: 100%; box-sizing: border-box; padding: 20px; background: #ccc; } >+</style> >+<script> >+if (window.testRunner) { >+ testRunner.waitUntilDone(); >+ testRunner.dumpAsText(); >+} >+ >+async function runTest() { >+ if (!window.testRunner) >+ return; >+ >+ let result = ''; >+ const log = (text) => result += text + '\n'; >+ >+ await UIHelper.zoomToScale(1.5); >+ >+ log(visualViewport.pageTop > 50 ? 'PASS - the document did scroll with zooming' : `FAIL - the document did not scroll with zooming: ${visualViewport.pageTop}`); >+ >+ await touchAndDragFromPointToPoint(200, 100, 200, 200); >+ await liftUpAtPoint(200, 200); >+ await UIHelper.delayFor(200); >+ >+ log(visualViewport.pageTop <= 0 ? 'PASS - the document scrolled back to the top' : `FAIL - the document did not scroll back to the top: ${visualViewport.pageTop}`); >+ >+ document.getElementById('log').textContent = result; >+ >+ testRunner.notifyDone(); >+} >+ >+</script> >+<body onload="runTest()"> >+<div id="content"> >+This document shouldn't be scrollable normally but should be scrollable when pinch zoomed.<br> >+To manually test, pinch zoom on the page. The document should become scrollable. >+</div> >+<pre id="log"></pre> >+</body> >+</html> >Index: LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-2-expected.txt >=================================================================== >--- LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-2-expected.txt (nonexistent) >+++ LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-2-expected.txt (working copy) >@@ -0,0 +1,5 @@ >+This document shouldn't be scrollable normally but should be scrollable when pinch zoomed. >+To manually test, pinch zoom on the page. The document should become scrollable. >+PASS - the document did scroll with zooming >+PASS - the document scrolled back to the top >+ >Index: LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-2.html >=================================================================== >--- LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-2.html (nonexistent) >+++ LayoutTests/fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-2.html (working copy) >@@ -0,0 +1,53 @@ >+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true internal:AsyncOverflowScrollingEnabled=true internal:AsyncFrameScrollingEnabled=true ] --> >+<html> >+<head> >+<script src="../../../resources/ui-helper.js"></script> >+<script src="../../../resources/basic-gestures.js"></script> >+<style> >+html, body { width: 100%; height: 100%; margin: 0px; padding: 0px; } >+body { overflow: hidden; } >+#content { width: 100%; height: 100%; box-sizing: border-box; padding: 20px; background: #ccc; } >+</style> >+<script> >+if (window.testRunner) { >+ testRunner.waitUntilDone(); >+ testRunner.dumpAsText(); >+} >+ >+async function runTest() { >+ if (!window.testRunner) >+ return; >+ >+ let result = ''; >+ const log = (text) => result += text + '\n'; >+ >+ const initialScale = await UIHelper.zoomScale(); >+ await UIHelper.zoomToScale(initialScale * 1.5); >+ const finalScale = await UIHelper.zoomScale(); >+ >+ log(visualViewport.pageTop > 100 ? 'PASS - the document did scroll with zooming' : `FAIL - the document did not scroll with zooming: ${visualViewport.pageTop}`); >+ >+ const x = visualViewport.pageLeft; >+ const y = visualViewport.pageTop; >+ >+ await touchAndDragFromPointToPoint(x + 100, y + 100, x + 100, y + 200); >+ await liftUpAtPoint(x + 100, y + 200); >+ await UIHelper.delayFor(200); >+ >+ const expectedY = y - 80 * finalScale; >+ log(visualViewport.pageTop < expectedY ? 'PASS - the document scrolled back to the top' : `FAIL - the document did not scroll back to the top: expected ${visualViewport.pageTop} < ${expectedY}`); >+ >+ document.getElementById('log').textContent = result; >+ >+ testRunner.notifyDone(); >+} >+ >+</script> >+<body onload="runTest()"> >+<div id="content"> >+This document shouldn't be scrollable normally but should be scrollable when pinch zoomed.<br> >+To manually test, pinch zoom on the page. The document should become scrollable. >+</div> >+<pre id="log"></pre> >+</body> >+</html>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 198244
:
370624
|
370625
|
370628
|
370629
|
370631
|
370632
|
370825
|
370826
|
371000
|
371024
| 371032