[webkit-changes] [WebKit/WebKit] 90bbdb: [Unified Text Replacement] `willBeginTextReplaceme...

Richard Robinson noreply at github.com
Mon May 20 10:35:29 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 90bbdbb17a629ae973babc361cf167577eff0668
      https://github.com/WebKit/WebKit/commit/90bbdbb17a629ae973babc361cf167577eff0668
  Author: Richard Robinson <richard_robinson2 at apple.com>
  Date:   2024-05-20 (Mon, 20 May 2024)

  Changed paths:
    M Source/WebCore/editing/TextIterator.cpp
    M Source/WebCore/editing/TextIteratorBehavior.h
    M Source/WebCore/editing/cocoa/AttributedString.mm
    M Source/WebCore/editing/cocoa/HTMLConverter.mm
    M Source/WebKit/WebProcess/WebPage/Cocoa/UnifiedTextReplacementController.mm
    M Source/WebKit/WebProcess/WebPage/UnifiedTextReplacementController.h

  Log Message:
  -----------
  [Unified Text Replacement] `willBeginTextReplacementSession` sometimes does not return a context if the text lengths differ
https://bugs.webkit.org/show_bug.cgi?id=274325
rdar://128285414

Reviewed by Aditya Keerthi.

The length of the string produced by `editingAttributedString` and the character count produced by
`TextIterator` can sometimes differ. This can happen when there are images in the HTML, as `editingAttributedString`
handles them in a special case.

Fix by adding a new `TextIteratorBehavior` option that acts the same as `EmitsObjectReplacementCharacters`,
but only for images, and then use this behavior anywhere in UnifiedTextReplacementController that
needs character ranges or counts.

Also fix a few issues with attachments in attributed strings:

* When converting an `AttributedString` to an `NSAttributedString` with an attachment, if the attachment
does not have a "preferred" filename, an empty file wrapper will be created. Fix by always creating a file
wrapper.

* When converting HTML with an image to an attributed string, the position of the resulting attachment in
the produced attributed string is sometimes incorrect. This is because the length of the attachment itself
is never taken into account, and so consequent parts of the string will be inserted in too early of a position.
Fix by accounting for the length of the attachment.

* Source/WebCore/editing/TextIterator.cpp:
(WebCore::TextIterator::TextIterator):
(WebCore::TextIterator::handleReplacedElement):
* Source/WebCore/editing/TextIteratorBehavior.h:
* Source/WebCore/editing/cocoa/AttributedString.mm:
(WebCore::toNSObject):
* Source/WebCore/editing/cocoa/HTMLConverter.mm:
(WebCore::editingAttributedString):
* Source/WebKit/WebProcess/WebPage/Cocoa/UnifiedTextReplacementController.mm:
(WebKit::UnifiedTextReplacementController::characterRange):
(WebKit::UnifiedTextReplacementController::characterCount):
(WebKit::UnifiedTextReplacementController::resolveCharacterRange):
(WebKit::UnifiedTextReplacementController::plainText):
(WebKit::UnifiedTextReplacementController::willBeginTextReplacementSession):
(WebKit::UnifiedTextReplacementController::textReplacementSessionDidReceiveReplacements):
(WebKit::UnifiedTextReplacementController::textReplacementSessionDidReceiveTextWithReplacementRange):
(WebKit::UnifiedTextReplacementController::textReplacementSessionPerformEditActionForPlainText):
(WebKit::UnifiedTextReplacementController::contextRangeForSessionOrRangeWithUUID const):
(WebKit::UnifiedTextReplacementController::replaceContentsOfRangeInSessionInternal):
* Source/WebKit/WebProcess/WebPage/UnifiedTextReplacementController.h:

Canonical link: https://commits.webkit.org/279002@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