fix: make macOS text replacement work on contenteditable (#51343)

* fix: make macOS text replacement work on `contenteditable` (#51289)

* fix: make macOS text replacement work on `contenteditable`

* fix: remove accidentally included patch line

Co-authored-by: Noah Gregory <noahmgregory@gmail.com>

* chore: update patches (trivial only)

---------

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Noah Gregory <noahmgregory@gmail.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
This commit is contained in:
trop[bot]
2026-04-27 16:57:02 -04:00
committed by GitHub
parent b88bbb9ca6
commit d0afb91da4
2 changed files with 31 additions and 0 deletions

View File

@@ -176,3 +176,4 @@ cherry-pick-c75f63de7188.patch
cherry-pick-7687618.patch
patch_osr_control_screen_info.patch
cherry-pick-cve-2026-6920.patch
fix_make_macos_text_replacement_work_on_contenteditable.patch

View File

@@ -0,0 +1,30 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Noah Gregory <noahmgregory@gmail.com>
Date: Thu, 23 Apr 2026 11:11:44 -0400
Subject: fix: make macOS text replacement work on `contenteditable`
Text-editor libraries like `lexical` don't use `input` elements,
but instead use `contenteditable` elements. macOS text replacement
is currently bugged on these elements. This patch fixes that.
1. Backspace now rejects the replacement instead of accepting it.
2. Space now adds a space after accepting the replacement.
diff --git a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
index de24209bbd3cd4a530c6f32990a0f93a182abfc0..ef028e82621ef681aa6f1f543e87d136dcc1fe64 100644
--- a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
+++ b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
@@ -519,6 +519,13 @@ - (void)didAcceptReplacementString:(NSString*)acceptedString
if (acceptedString == nil)
return;
+ if (changeNumber != _availableTextChangeCounter) {
+ if (!_textSelectionRange.is_empty() ||
+ _textSelectionRange.start() <= NSMaxRange(correction.range)) {
+ return;
+ }
+ }
+
NSRange availableTextRange =
NSMakeRange(_availableTextOffset, _availableText.length());