Skip to content

libservo: Merge input method activation into the EmbedderControl API#40014

Merged
mrobinson merged 3 commits intoservo:mainfrom
mrobinson:merge-input-method-into-embedder-control-api
Oct 24, 2025
Merged

libservo: Merge input method activation into the EmbedderControl API#40014
mrobinson merged 3 commits intoservo:mainfrom
mrobinson:merge-input-method-into-embedder-control-api

Conversation

@mrobinson
Copy link
Copy Markdown
Member

@mrobinson mrobinson commented Oct 20, 2025

Input methods are very similar to other kinds of embedder controls such
as file selection boxes, so merge them into the same libservo API. This
simplfiies the API surface a bit.

Testing: This change comes with a new unit test.

@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Oct 20, 2025
Copy link
Copy Markdown
Member

@mukilan mukilan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think ports/servoshell/egl/app_state.rs also needs to be updated to use the new signature for the show_ime method on the delegate.

InputType::Url => Some(InputMethodType::Url),
InputType::Week => Some(InputMethodType::Week),
_ => None,
impl TryInto<InputMethodType> for InputType {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The std library recommends we implement TryFrom<InputType> for InputMethodType rather than TryInto.

https://doc.rust-lang.org/std/convert/trait.TryInto.html

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done this now.

pending_webdriver_events: HashMap<InputEventId, Sender<()>>,

/// A list of showing [`InputMethod`] interfaces.
visible_input_method: Vec<EmbedderControlId>,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this use a plural name?

Suggested change
visible_input_method: Vec<EmbedderControlId>,
visible_input_methods: Vec<EmbedderControlId>,

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, I've modified the name of this member.

@mrobinson mrobinson force-pushed the merge-input-method-into-embedder-control-api branch from 6dfda96 to 9b7a87b Compare October 23, 2025 22:30
@mrobinson mrobinson requested a review from jschwe as a code owner October 23, 2025 22:30
@mrobinson mrobinson force-pushed the merge-input-method-into-embedder-control-api branch from 9b7a87b to a40f9c6 Compare October 23, 2025 22:48
@mrobinson
Copy link
Copy Markdown
Member Author

I think ports/servoshell/egl/app_state.rs also needs to be updated to use the new signature for the show_ime method on the delegate.

Thanks for the review. I've taken your suggestions and have also made a few more miscellaneous changes, fixes, and renames. PTAL.

@mrobinson mrobinson added the T-ohos Do a try run on OpenHarmony label Oct 23, 2025
@github-actions github-actions bot removed the T-ohos Do a try run on OpenHarmony label Oct 23, 2025
@github-actions
Copy link
Copy Markdown

🔨 Triggering try run (#18764095783) for OpenHarmony

@github-actions
Copy link
Copy Markdown

⚠️ Try run (#18764095783) failed.

@jschwe
Copy link
Copy Markdown
Member

jschwe commented Oct 24, 2025

Testing: This just changes the way that IME is activated and deactivated in the
API surface, which is not currently tested at the moment.

How hard would it be to add an integration test with virtual keyboards for this? How about a test webpage with an input form, where we assert that e.g. "hello" is input. I would imagine the test script to be as follows:

  1. load test page
  2. the test page triggers IME activation
  3. the test script (after some grace period) inputs virtual touch presses to the expected location (keep it simple, we might need to adapt the location for each physical phone we test on)
  4. Assert that text was input / matches expectation

Perhaps the test page could also have a touch handler for the surface we expect to be covered by the IME on the lower half of the screen, so we could assert if the IME doesn't come up (as an alternative / addition to validating text input.
I could write the part that sends the touch events for ohos / android, but I'm not sure about the rest. Would webdriver be needed for such a test?

Comment on lines +559 to +562
pub input_method_type: InputMethodType,
pub text: String,
pub insertion_point: Option<u32>,
pub multiline: bool,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/// If the input is text, the second parameter defines the pre-existing string
/// text content and the zero-based index into the string locating the insertion point.
/// bool is true for multi-line and false otherwise.

Can we add the previous documentation for test and insertion point here?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've re-added this documentation.

@mrobinson mrobinson force-pushed the merge-input-method-into-embedder-control-api branch 2 times, most recently from f508bf9 to 3f32554 Compare October 24, 2025 06:21
@mrobinson
Copy link
Copy Markdown
Member Author

mrobinson commented Oct 24, 2025

How hard would it be to add an integration test with virtual keyboards for this? How about a test webpage with an input form, where we assert that e.g. "hello" is input. I would imagine the test script to be as follows:

  1. load test page
  2. the test page triggers IME activation
  3. the test script (after some grace period) inputs virtual touch presses to the expected location (keep it simple, we might need to adapt the location for each physical phone we test on)
  4. Assert that text was input / matches expectation

I've added a unit test for this functionality, which I think is a better match. This avoids the need for touch handling.

@mrobinson mrobinson force-pushed the merge-input-method-into-embedder-control-api branch from 8f85f89 to bbc5a10 Compare October 24, 2025 06:54
@mrobinson mrobinson added the T-ohos Do a try run on OpenHarmony label Oct 24, 2025
@github-actions github-actions bot removed the T-ohos Do a try run on OpenHarmony label Oct 24, 2025
@github-actions
Copy link
Copy Markdown

🔨 Triggering try run (#18772120901) for OpenHarmony

@github-actions
Copy link
Copy Markdown

🐰 Bencher Report

Branch40014/PR
TestbedHUAWEI Mate 60 Pro

⚠️ WARNING: No Threshold found!

Without a Threshold, no Alerts will ever be generated.

Click here to create a new Threshold
For more information, see the Threshold documentation.
To only post results if a Threshold exists, set the --ci-only-thresholds flag.

Click to view all benchmark results
BenchmarkDataMeasure (units) x 1e3Latencymilliseconds (ms)MemoryBytesscoreMeasure (units)
release/E2E/file:///parse_from_string.html/📈 view plot
⚠️ NO THRESHOLD
1.80 units x 1e3
release/E2E/https://www.google.com/JS/gc-heap/admin📈 view plot
⚠️ NO THRESHOLD
26,752.00
release/E2E/https://www.google.com/JS/gc-heap/decommitted📈 view plot
⚠️ NO THRESHOLD
409,600.00
release/E2E/https://www.google.com/JS/gc-heap/unused📈 view plot
⚠️ NO THRESHOLD
137,960.00
release/E2E/https://www.google.com/JS/gc-heap/used📈 view plot
⚠️ NO THRESHOLD
474,264.00
release/E2E/https://www.google.com/JS/malloc-heap📈 view plot
⚠️ NO THRESHOLD
5,053,607.00
release/E2E/https://www.google.com/JS/non-heap📈 view plot
⚠️ NO THRESHOLD
262,144.00
release/E2E/https://www.google.com/LayoutThread/box-tree📈 view plot
⚠️ NO THRESHOLD
107,632.00
release/E2E/https://www.google.com/LayoutThread/display-list📈 view plot
⚠️ NO THRESHOLD
0.00
release/E2E/https://www.google.com/LayoutThread/font-context📈 view plot
⚠️ NO THRESHOLD
8,616.00
release/E2E/https://www.google.com/LayoutThread/fragment-tree📈 view plot
⚠️ NO THRESHOLD
112.00
release/E2E/https://www.google.com/LayoutThread/stacking-context-tree📈 view plot
⚠️ NO THRESHOLD
14,080.00
release/E2E/https://www.google.com/LayoutThread/stylist📈 view plot
⚠️ NO THRESHOLD
5,104.00
release/E2E/https://www.google.com/Load📈 view plot
⚠️ NO THRESHOLD
713.58 ms
release/E2E/https://www.google.com/Resident📈 view plot
⚠️ NO THRESHOLD
183,892,377.00
release/E2E/https://www.google.com/image-cache📈 view plot
⚠️ NO THRESHOLD
35,760.00
release/E2E/https://www.google.com/resident-smaps📈 view plot
⚠️ NO THRESHOLD
186,338,508.00
release/E2E/https://www.servo.org/Load📈 view plot
⚠️ NO THRESHOLD
834.09 ms
release/E2E/https://www.servo.org/Resident📈 view plot
⚠️ NO THRESHOLD
267,065,753.00
release/E2E/https://www.servo.org/resident-smaps📈 view plot
⚠️ NO THRESHOLD
266,136,780.00
release/Speedometer/Charts-observable-plot📈 view plot
⚠️ NO THRESHOLD
804.10 ms
release/Speedometer/Charts-observable-plot/Dotted📈 view plot
⚠️ NO THRESHOLD
97.06 ms
release/Speedometer/Charts-observable-plot/Dotted/Async📈 view plot
⚠️ NO THRESHOLD
9.75 ms
release/Speedometer/Charts-observable-plot/Dotted/Sync📈 view plot
⚠️ NO THRESHOLD
87.32 ms
release/Speedometer/Charts-observable-plot/Stacked by 20📈 view plot
⚠️ NO THRESHOLD
393.03 ms
release/Speedometer/Charts-observable-plot/Stacked by 20/Async📈 view plot
⚠️ NO THRESHOLD
17.35 ms
release/Speedometer/Charts-observable-plot/Stacked by 20/Sync📈 view plot
⚠️ NO THRESHOLD
375.68 ms
release/Speedometer/Charts-observable-plot/Stacked by 6📈 view plot
⚠️ NO THRESHOLD
314.01 ms
release/Speedometer/Charts-observable-plot/Stacked by 6/Async📈 view plot
⚠️ NO THRESHOLD
9.04 ms
release/Speedometer/Charts-observable-plot/Stacked by 6/Sync📈 view plot
⚠️ NO THRESHOLD
304.97 ms
release/Speedometer/Geomean📈 view plot
⚠️ NO THRESHOLD
708.67 ms
release/Speedometer/Iteration-0-Total📈 view plot
⚠️ NO THRESHOLD
843.18 ms
release/Speedometer/Iteration-1-Total📈 view plot
⚠️ NO THRESHOLD
828.18 ms
release/Speedometer/Iteration-2-Total📈 view plot
⚠️ NO THRESHOLD
1,047.81 ms
release/Speedometer/Iteration-3-Total📈 view plot
⚠️ NO THRESHOLD
1,079.78 ms
release/Speedometer/Iteration-4-Total📈 view plot
⚠️ NO THRESHOLD
1,039.84 ms
release/Speedometer/Iteration-5-Total📈 view plot
⚠️ NO THRESHOLD
823.74 ms
release/Speedometer/Iteration-6-Total📈 view plot
⚠️ NO THRESHOLD
993.13 ms
release/Speedometer/Iteration-7-Total📈 view plot
⚠️ NO THRESHOLD
1,083.35 ms
release/Speedometer/Iteration-8-Total📈 view plot
⚠️ NO THRESHOLD
1,085.32 ms
release/Speedometer/Iteration-9-Total📈 view plot
⚠️ NO THRESHOLD
1,080.27 ms
release/Speedometer/Score📈 view plot
⚠️ NO THRESHOLD
1.42 units
release/Speedometer/TodoMVC-Angular📈 view plot
⚠️ NO THRESHOLD
1,020.54 ms
release/Speedometer/TodoMVC-Angular/Adding100Items📈 view plot
⚠️ NO THRESHOLD
485.64 ms
release/Speedometer/TodoMVC-Angular/Adding100Items/Async📈 view plot
⚠️ NO THRESHOLD
27.44 ms
release/Speedometer/TodoMVC-Angular/Adding100Items/Sync📈 view plot
⚠️ NO THRESHOLD
458.20 ms
release/Speedometer/TodoMVC-Angular/CompletingAllItems📈 view plot
⚠️ NO THRESHOLD
329.97 ms
release/Speedometer/TodoMVC-Angular/CompletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
30.51 ms
release/Speedometer/TodoMVC-Angular/CompletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
299.45 ms
release/Speedometer/TodoMVC-Angular/DeletingAllItems📈 view plot
⚠️ NO THRESHOLD
204.93 ms
release/Speedometer/TodoMVC-Angular/DeletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
7.01 ms
release/Speedometer/TodoMVC-Angular/DeletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
197.92 ms
release/Speedometer/TodoMVC-JavaScript-ES5📈 view plot
⚠️ NO THRESHOLD
1,514.72 ms
release/Speedometer/TodoMVC-JavaScript-ES5/Adding100Items📈 view plot
⚠️ NO THRESHOLD
1,239.40 ms
release/Speedometer/TodoMVC-JavaScript-ES5/Adding100Items/Async📈 view plot
⚠️ NO THRESHOLD
48.04 ms
release/Speedometer/TodoMVC-JavaScript-ES5/Adding100Items/Sync📈 view plot
⚠️ NO THRESHOLD
1,191.36 ms
release/Speedometer/TodoMVC-JavaScript-ES5/CompletingAllItems📈 view plot
⚠️ NO THRESHOLD
171.83 ms
release/Speedometer/TodoMVC-JavaScript-ES5/CompletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
29.93 ms
release/Speedometer/TodoMVC-JavaScript-ES5/CompletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
141.90 ms
release/Speedometer/TodoMVC-JavaScript-ES5/DeletingAllItems📈 view plot
⚠️ NO THRESHOLD
103.49 ms
release/Speedometer/TodoMVC-JavaScript-ES5/DeletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
7.65 ms
release/Speedometer/TodoMVC-JavaScript-ES5/DeletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
95.84 ms
release/Speedometer/TodoMVC-JavaScript-ES6-Webpack📈 view plot
⚠️ NO THRESHOLD
2,215.29 ms
release/Speedometer/TodoMVC-JavaScript-ES6-Webpack/Adding100Items📈 view plot
⚠️ NO THRESHOLD
1,798.00 ms
release/Speedometer/TodoMVC-JavaScript-ES6-Webpack/Adding100Items/Async📈 view plot
⚠️ NO THRESHOLD
34.88 ms
release/Speedometer/TodoMVC-JavaScript-ES6-Webpack/Adding100Items/Sync📈 view plot
⚠️ NO THRESHOLD
1,763.12 ms
release/Speedometer/TodoMVC-JavaScript-ES6-Webpack/CompletingAllItems📈 view plot
⚠️ NO THRESHOLD
260.63 ms
release/Speedometer/TodoMVC-JavaScript-ES6-Webpack/CompletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
34.91 ms
release/Speedometer/TodoMVC-JavaScript-ES6-Webpack/CompletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
225.72 ms
release/Speedometer/TodoMVC-JavaScript-ES6-Webpack/DeletingAllItems📈 view plot
⚠️ NO THRESHOLD
156.66 ms
release/Speedometer/TodoMVC-JavaScript-ES6-Webpack/DeletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
7.82 ms
release/Speedometer/TodoMVC-JavaScript-ES6-Webpack/DeletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
148.84 ms
release/Speedometer/TodoMVC-Preact📈 view plot
⚠️ NO THRESHOLD
158.08 ms
release/Speedometer/TodoMVC-Preact/Adding100Items📈 view plot
⚠️ NO THRESHOLD
79.77 ms
release/Speedometer/TodoMVC-Preact/Adding100Items/Async📈 view plot
⚠️ NO THRESHOLD
72.02 ms
release/Speedometer/TodoMVC-Preact/Adding100Items/Sync📈 view plot
⚠️ NO THRESHOLD
7.75 ms
release/Speedometer/TodoMVC-Preact/CompletingAllItems📈 view plot
⚠️ NO THRESHOLD
62.64 ms
release/Speedometer/TodoMVC-Preact/CompletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
50.23 ms
release/Speedometer/TodoMVC-Preact/CompletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
12.41 ms
release/Speedometer/TodoMVC-Preact/DeletingAllItems📈 view plot
⚠️ NO THRESHOLD
15.67 ms
release/Speedometer/TodoMVC-Preact/DeletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
9.86 ms
release/Speedometer/TodoMVC-Preact/DeletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
5.81 ms
release/Speedometer/TodoMVC-React📈 view plot
⚠️ NO THRESHOLD
917.99 ms
release/Speedometer/TodoMVC-React-Redux📈 view plot
⚠️ NO THRESHOLD
1,150.88 ms
release/Speedometer/TodoMVC-React-Redux/Adding100Items📈 view plot
⚠️ NO THRESHOLD
372.36 ms
release/Speedometer/TodoMVC-React-Redux/Adding100Items/Async📈 view plot
⚠️ NO THRESHOLD
37.22 ms
release/Speedometer/TodoMVC-React-Redux/Adding100Items/Sync📈 view plot
⚠️ NO THRESHOLD
335.14 ms
release/Speedometer/TodoMVC-React-Redux/CompletingAllItems📈 view plot
⚠️ NO THRESHOLD
510.96 ms
release/Speedometer/TodoMVC-React-Redux/CompletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
40.85 ms
release/Speedometer/TodoMVC-React-Redux/CompletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
470.11 ms
release/Speedometer/TodoMVC-React-Redux/DeletingAllItems📈 view plot
⚠️ NO THRESHOLD
267.56 ms
release/Speedometer/TodoMVC-React-Redux/DeletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
8.46 ms
release/Speedometer/TodoMVC-React-Redux/DeletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
259.10 ms
release/Speedometer/TodoMVC-React/Adding100Items📈 view plot
⚠️ NO THRESHOLD
320.91 ms
release/Speedometer/TodoMVC-React/Adding100Items/Async📈 view plot
⚠️ NO THRESHOLD
37.55 ms
release/Speedometer/TodoMVC-React/Adding100Items/Sync📈 view plot
⚠️ NO THRESHOLD
283.35 ms
release/Speedometer/TodoMVC-React/CompletingAllItems📈 view plot
⚠️ NO THRESHOLD
382.84 ms
release/Speedometer/TodoMVC-React/CompletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
34.90 ms
release/Speedometer/TodoMVC-React/CompletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
347.94 ms
release/Speedometer/TodoMVC-React/DeletingAllItems📈 view plot
⚠️ NO THRESHOLD
214.25 ms
release/Speedometer/TodoMVC-React/DeletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
8.09 ms
release/Speedometer/TodoMVC-React/DeletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
206.16 ms
release/Speedometer/TodoMVC-Svelte📈 view plot
⚠️ NO THRESHOLD
142.07 ms
release/Speedometer/TodoMVC-Svelte/Adding100Items📈 view plot
⚠️ NO THRESHOLD
80.68 ms
release/Speedometer/TodoMVC-Svelte/Adding100Items/Async📈 view plot
⚠️ NO THRESHOLD
62.26 ms
release/Speedometer/TodoMVC-Svelte/Adding100Items/Sync📈 view plot
⚠️ NO THRESHOLD
18.42 ms
release/Speedometer/TodoMVC-Svelte/CompletingAllItems📈 view plot
⚠️ NO THRESHOLD
45.33 ms
release/Speedometer/TodoMVC-Svelte/CompletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
36.25 ms
release/Speedometer/TodoMVC-Svelte/CompletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
9.08 ms
release/Speedometer/TodoMVC-Svelte/DeletingAllItems📈 view plot
⚠️ NO THRESHOLD
16.06 ms
release/Speedometer/TodoMVC-Svelte/DeletingAllItems/Async📈 view plot
⚠️ NO THRESHOLD
11.28 ms
release/Speedometer/TodoMVC-Svelte/DeletingAllItems/Sync📈 view plot
⚠️ NO THRESHOLD
4.78 ms
🐰 View full continuous benchmarking report in Bencher

@github-actions
Copy link
Copy Markdown

✨ Try run (#18772120901) succeeded.

};

ensure!(ime.input_method_type() == InputMethodType::Text);
ensure!(ime.text() == "boo");
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where does the value "boo" come from?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So it turns out that no tests are actually run at all when the libservo tests are run. I think this is a regression from #39812. I'll try to post a fix soon.

Input methods are very similar to other kinds of embedder controls such
as file selection boxes, so merge them into the same libservo API. This
simplfiies the API surface a bit.

Signed-off-by: Martin Robinson <[email protected]>
Signed-off-by: Martin Robinson <[email protected]>
@mrobinson mrobinson force-pushed the merge-input-method-into-embedder-control-api branch from bbc5a10 to 3782b0a Compare October 24, 2025 11:27
@mrobinson
Copy link
Copy Markdown
Member Author

Okay. This has been rebased on top of #40131 and should be ready to review again.

@servo-highfive servo-highfive removed the S-awaiting-review There is new code that needs to be reviewed. label Oct 24, 2025
@mrobinson mrobinson added this pull request to the merge queue Oct 24, 2025
@servo-highfive servo-highfive added the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Oct 24, 2025
Merged via the queue into servo:main with commit 868793e Oct 24, 2025
30 checks passed
@mrobinson mrobinson deleted the merge-input-method-into-embedder-control-api branch October 24, 2025 12:54
@servo-highfive servo-highfive removed the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Oct 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants