[webkit-changes] [WebKit/WebKit] b8cacf: [iOS 17.4] 21+ layout tests assert under WebPage::...
Wenson Hsieh
noreply at github.com
Wed Mar 13 20:00:28 PDT 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: b8cacf190ad60d1d602a3b40509bb52d9ec4b5fb
https://github.com/WebKit/WebKit/commit/b8cacf190ad60d1d602a3b40509bb52d9ec4b5fb
Author: Wenson Hsieh <wenson_hsieh at apple.com>
Date: 2024-03-13 (Wed, 13 Mar 2024)
Changed paths:
M Source/WebCore/editing/VisibleUnits.cpp
M Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
M Tools/TestRunnerShared/spi/UIKitSPIForTesting.h
M Tools/TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm
Log Message:
-----------
[iOS 17.4] 21+ layout tests assert under WebPage::requestDocumentEditingContext
https://bugs.webkit.org/show_bug.cgi?id=270899
rdar://123028247
Reviewed by Abrar Rahman Protyasha.
As a part of BrowserEngineKit adoption in iOS 17.4, UIKit began issuing document editing context
requests to grab 2 sentences worth of context before and after the selection while the keyboard is
shown. This triggers a frequent debug assertion when running tests on iOS 17.4, due to the fact that
the current implementation of `nextSentenceBoundaryInDirection` frequently returns a position that
ends up being upstream of the initial `vp` when the `direction` is downstream, or downstream of the
`vp` when the given `direction` is upstream. For instance, this can happen when we're trying to find
the next downstream sentence boundary when the `vp` is anchored to a cell in a table; we end up
first moving to the end of the table with `nextSentencePosition`, but then `startOfSentence` takes
us back up to before the table, leaving us at a position before the initial `vp` (despite the fact
that we wanted to go downstream). To fix this, we make `nextSentenceBoundaryInDirection` more
robust with some minor adjustments:
1. When moving downstream, if the start of the next sentence is before `vp`, then move to the end
of the next sentence instead (and vice versa when moving upstream).
2. Repeat the process of moving to the next `startOfSentence` or `endOfSentence` until the `result`
is in the requested `direction` relative to the initial `vp`.
This ensures that we'll find the closest visible position that satisfies the following constraints:
1. It is the result of either `startOfSentence` or `endOfSentence`.
2. It is downstream of the initial `vp` when the `direction` is downstream, and vice versa when the
`direction` is upstream.
* Source/WebCore/editing/VisibleUnits.cpp:
(WebCore::nextSentenceBoundaryInDirection):
* Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::moveByGranularityRespectingWordBoundary):
Also, remove an unnecessary assertion here. This assertion can fire in the case where the given
`position` already denotes the end of the last (if moving downstream) or the start of the first (if
moving upstream) sentence in the document or editable root, in which case
`positionOfNextBoundaryOfGranularity` will just return the null position. This scenario is already
handled gracefully.
* Tools/TestRunnerShared/spi/UIKitSPIForTesting.h:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
(makeRequest):
Remove staging for `UITextDocumentRequest` / `UITextDocumentContext`, since the rename from
`UIWKDocument*` to `UITextDocument*` never ended up happening (and we alternatively went with
introducing these objects in BrowserEngineKit, as `BETextDocument*`).
(-[TestWKWebView synchronouslyRequestDocumentContext:]):
(TEST):
(-[UITextDocumentContext markedTextRects]): Deleted.
(-[UITextDocumentContext contextBeforeLength]): Deleted.
(-[UITextDocumentContext markedTextLength]): Deleted.
(-[UITextDocumentContext markedTextRange]): Deleted.
(-[UITextDocumentContext textRects]): Deleted.
(-[UITextDocumentContext boundingRectForCharacterRange:]): Deleted.
Also fix these failing API tests on iOS 17.4 (which currently expect `UIWKDocumentContext` instead
of a `BETextDocumentContext`, and therefore throw ObjC exceptions at runtime when attempting to
access `contextBefore` and other methods).
Canonical link: https://commits.webkit.org/276067@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list