[webkit-changes] [WebKit/WebKit] ac643e: [iOS] Document context requests with attributed st...

Wenson Hsieh noreply at github.com
Sat Jan 4 07:27:20 PST 2025


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: ac643ee151bc20383f2bedcec717ae457d609ee7
      https://github.com/WebKit/WebKit/commit/ac643ee151bc20383f2bedcec717ae457d609ee7
  Author: Wenson Hsieh <wenson_hsieh at apple.com>
  Date:   2025-01-04 (Sat, 04 Jan 2025)

  Changed paths:
    M Source/WebCore/editing/cocoa/HTMLConverter.h
    M Source/WebCore/editing/cocoa/HTMLConverter.mm
    M Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/AdaptiveImageGlyph.mm

  Log Message:
  -----------
  [iOS] Document context requests with attributed string should include adaptive image glyphs as attributes
https://bugs.webkit.org/show_bug.cgi?id=285373
rdar://142280535

Reviewed by Megan Gardner and Abrar Rahman Protyasha.

Add support for the `UIWKDocumentRequestAttributed` (`BETextDocumentOptionAttributedText`) flag when
handling document editing context requests. We currently just extract plain text in the context
range and return an `NSAttributedString` whose string is equal to that plain text, but which lacks
any attributes.

This instead uses `WebCore::editingAttributedString` to include a subset of presentational and
semantic attributes in the result, including `NSAdaptiveImageGlyphAttributeName` when the context
range includes Genmojis.

See below for more detail.

* Source/WebCore/editing/cocoa/HTMLConverter.h:
* Source/WebCore/editing/cocoa/HTMLConverter.mm:
(WebCore::editingAttributedStringInternal):

Move the existing logic in `editingAttributedString` into a separate static helper function, so that
we can share the implementation between `editingAttributedStringReplacingNoBreakSpace` and
`editingAttributedString` below.

(WebCore::editingAttributedString):
(WebCore::editingAttributedStringReplacingNoBreakSpace):

Add support for a `editingAttributedStringReplacingNoBreakSpace` method that is similar to the
extant `editingAttributedString`, except that it:

1.  Replaces non-breaking spaces with a regular space (matching `plainTextReplacingNoBreakSpace`'s
    behavior).

2.  Takes in a set of `TextIteratorBehaviors` to use when iterating over the range.

* Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::requestDocumentEditingContext):

Use `editingAttributedStringReplacingNoBreakSpace` when attributed string data is requested, instead
of always falling back on `plainTextReplacingNoBreakSpace`.

* Tools/TestWebKitAPI/Tests/WebKitCocoa/AdaptiveImageGlyph.mm:
(createAdaptiveImageGlyphForTesting):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, InsertAdaptiveImageGlyphAsPictureElement)):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, InsertAdaptiveImageGlyphAtLargerFontSize)):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, InsertAdaptiveImageGlyphMatchStyle)):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, InsertAndRemoveWKAttachments)):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, InsertWKAttachmentsOnPaste)):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, InsertWKAttachmentsCopyFromWebViewPasteToWebView)):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, InsertWKAttachmentsMovingParagraphs)):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, InsertMultiple)):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, InsertTextAfterAdaptiveImageGlyph)):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, ContentsAsAttributedString)):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, DragAdaptiveImageGlyphFromContentEditable)):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, DropAdaptiveImageGlyphAsText)):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, DropAdaptiveImageGlyphAsSticker)):
(TestWebKitAPI::TEST(AdaptiveImageGlyph, AttributedStringDocumentEditingContext)):

Add a new API test to verify that adaptive image glyphs are surfaced when requesting attributed
strings through the document editing context API; also, remove a little code duplication in these
tests by adding a new helper method, `createAdaptiveImageGlyphForTesting()`.

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