[webkit-changes] [WebKit/WebKit] 2dfc04: REGRESSION (262691 at main): [macOS] [WK1] Selection ...

Wenson Hsieh noreply at github.com
Wed May 3 10:18:31 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 2dfc04d252010d994f92b92ca2feb3d9f1d2b980
      https://github.com/WebKit/WebKit/commit/2dfc04d252010d994f92b92ca2feb3d9f1d2b980
  Author: Wenson Hsieh <wenson_hsieh at apple.com>
  Date:   2023-05-03 (Wed, 03 May 2023)

  Changed paths:
    M Source/WebKitLegacy/mac/WebCoreSupport/WebEditorClient.h
    M Source/WebKitLegacy/mac/WebCoreSupport/WebEditorClient.mm
    M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
    A Tools/TestWebKitAPI/Tests/mac/EditableLegacyWebView.mm

  Log Message:
  -----------
  REGRESSION (262691 at main): [macOS] [WK1] Selection fails to repaint in Mail signature editor
https://bugs.webkit.org/show_bug.cgi?id=256255
rdar://108277205

Reviewed by Ryosuke Niwa.

After the changes in 262691 at main, certain selection changes in editable web views (e.g. by clicking
or selecting all) no longer trigger repaints, causing the DOM selection to be correctly updated but
the selection highlight or caret UI (painted as a part of page rendering on macOS) to become stale.

This is because we now defer selection appearance updates until the next rendering update, but
nothing actually ends up triggering a rendering update in the WebKit1 codepath when modifying the
selection. In contrast, in WebKit2, the process of scheduling `EditorState` updates to the UI
process (among other call sites, depending on the cause of the selection change) ensures that
rendering updates are scheduled (since `EditorState` updates are rolled into remote layer tree
transactions).

To fix this, we adjust client code in WebKit1 to match that of WebKit2, and schedule rendering
updates in response to selection changes in the case where either the new or previous selection is
visible (i.e. collapsed caret selection in editable content, or a ranged selection).

Test: WebKitLegacy.SelectionAppearanceUpdatesInEditableWebView

* Source/WebKitLegacy/mac/WebCoreSupport/WebEditorClient.h:
* Source/WebKitLegacy/mac/WebCoreSupport/WebEditorClient.mm:
(WebEditorClient::respondToChangedSelection):
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/mac/EditableLegacyWebView.mm: Added.
(-[EditableLegacyWebViewLoadDelegate webView:didFinishLoadForFrame:]):
(-[EditableLegacyWebViewLoadDelegate waitForLoadToFinish]):

Add an API test to exercise the change by verifying that we trigger repaint after invoking "Select
All" in a legacy macOS `WebView`.

Canonical link: https://commits.webkit.org/263635@main




More information about the webkit-changes mailing list