Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: eb551731bdda4d96b22724af1703ba169df61f0b
https://github.com/WebKit/WebKit/commit/eb551731bdda4d96b22724af1703ba169df61f0b
Author: Wenson Hsieh <[email protected]>
Date: 2023-06-27 (Tue, 27 Jun 2023)
Changed paths:
A
LayoutTests/editing/selection/ios/scroll-to-reveal-selection-in-mail-compose-expected.txt
A
LayoutTests/editing/selection/ios/scroll-to-reveal-selection-in-mail-compose.html
R
LayoutTests/editing/selection/ios/scroll-to-reveal-selection-with-keyboard-avoidance-disabled-expected.txt
R
LayoutTests/editing/selection/ios/scroll-to-reveal-selection-with-keyboard-avoidance-disabled.html
M
LayoutTests/editing/selection/ios/update-selection-after-iframe-scroll-expected.txt
M
LayoutTests/editing/selection/ios/update-selection-after-iframe-scroll.html
M Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
M Tools/WebKitTestRunner/TestOptions.cpp
M Tools/WebKitTestRunner/TestOptions.h
M Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h
M Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.mm
M Tools/WebKitTestRunner/ios/TestControllerIOS.mm
Log Message:
-----------
[iOS 17] [OOP Keyboard] Scrolling to reveal the selection is broken in Mail
compose
https://bugs.webkit.org/show_bug.cgi?id=258573
rdar://110139313
Reviewed by Aditya Keerthi and Abrar Rahman Protyasha.
We currently call `-[WKContentView reloadInputViews]` twice whenever we focus
an editable element on
iOS. While this *should* be benign, it causes UIKit to dispatch redundant sets
of `KeyboardWillShow`
and `KeyboardDidShow` notifications before the keyboard animation has even
started, when out-of-
process keyboard is enabled.
Importantly, this redundant set of notifications causes us to not scroll to
reveal the selection
when tapping into Mail compose to bring up the keyboard, since the keyboard
height is still 0 (i.e.
the keyboard is not covering anything) when the earliest set of keyboard
notifications arrives.
While the redundant notification dispatching likely still needs to be fixed in
UIKit, it seems
wasteful to unnecessarily trigger `-reloadInputViews` in WebKit, so we can
address the issue for now
by fixing this.
*
LayoutTests/editing/selection/ios/scroll-to-reveal-selection-in-mail-compose-expected.txt:
Added.
*
LayoutTests/editing/selection/ios/scroll-to-reveal-selection-in-mail-compose.html:
Added.
Augment an existing layout test that was originally intended to simulate Mail
compose, such that it
more closely follows Mail compose with the software keyboard — i.e.:
- The web view is editable.
- First responder keyboard avoidance scrolling is disabled.
- The input accessory view is suppressed.
*
LayoutTests/editing/selection/ios/scroll-to-reveal-selection-with-keyboard-avoidance-disabled-expected.txt:
Removed.
*
LayoutTests/editing/selection/ios/scroll-to-reveal-selection-with-keyboard-avoidance-disabled.html:
Removed.
*
LayoutTests/editing/selection/ios/update-selection-after-iframe-scroll-expected.txt:
* LayoutTests/editing/selection/ios/update-selection-after-iframe-scroll.html:
Drive-by-fix a flaky layout test, which fails if run after some other layout
tests (discovered while
debugging nearby test failures), by (1) ensuring that the test begins after the
`iframe` finishes
loading, and (2) the selection in editable content is always set properly, by
setting it after
starting the input session — the initial tap sometimes causes the selection to
collapse right after
the click handler selects a range.
* Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView _showKeyboard]):
Also remove an unnecessary check for `PLATFORM(WATCHOS)`, now that this method
is only invoked from
non-watchOS codepaths.
(-[WKContentView
_elementDidFocus:userIsInteracting:blurPreviousNode:activityStateChanges:userObject:]):
See comments above.
* Tools/WebKitTestRunner/TestOptions.cpp:
(WTR::TestOptions::defaults):
(WTR::TestOptions::keyTypeMapping):
* Tools/WebKitTestRunner/TestOptions.h:
Add a new test option to suppress the input accessory view when starting an
input session; necessary
to satisfy the conditions required to trigger this bug.
(WTR::TestOptions::suppressInputAccessoryView const):
* Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
* Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
(-[TestRunnerWKWebView _webView:willStartInputSession:]):
* Tools/WebKitTestRunner/ios/TestControllerIOS.mm:
(WTR::TestController::platformResetStateToConsistentValues):
Canonical link: https://commits.webkit.org/265556@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes