diff options
author | Narfinger <Narfinger@users.noreply.github.com> | 2025-05-13 14:54:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-13 12:54:18 +0000 |
commit | 991be359a3b896c204778cd3f3b226e16f9435b8 (patch) | |
tree | 8dc9b81799a9afee02de84aed25c2901028a35e2 /components/shared/constellation/lib.rs | |
parent | 91c4c7b9982556bc11a39d47081984cbdfa6280e (diff) | |
download | servo-991be359a3b896c204778cd3f3b226e16f9435b8.tar.gz servo-991be359a3b896c204778cd3f3b226e16f9435b8.zip |
libservo: Allow embedders to execute JavaScript scripts via the API (#35720)
This change adds a new `WebView` API `evaluate_javascript()`, which
allows embedders to
execute JavaScript code and wait for a reply asynchronously. Ongoing
script execution is
tracked by a libservo `JavaScriptEvaluator` struct, which maps an id to
the callback passed
to the `evaluate_javascript()` method. The id is used to track the
script and its execution
through the other parts of Servo.
Testing: This changes includes `WebView` unit tests.
---------
Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Diffstat (limited to 'components/shared/constellation/lib.rs')
-rw-r--r-- | components/shared/constellation/lib.rs | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/components/shared/constellation/lib.rs b/components/shared/constellation/lib.rs index 134eed6c1d9..d85fbe31bdf 100644 --- a/components/shared/constellation/lib.rs +++ b/components/shared/constellation/lib.rs @@ -19,8 +19,8 @@ use base::Epoch; use base::cross_process_instant::CrossProcessInstant; use base::id::{MessagePortId, PipelineId, WebViewId}; use embedder_traits::{ - CompositorHitTestResult, Cursor, InputEvent, MediaSessionActionType, Theme, ViewportDetails, - WebDriverCommandMsg, + CompositorHitTestResult, Cursor, InputEvent, JavaScriptEvaluationId, MediaSessionActionType, + Theme, ViewportDetails, WebDriverCommandMsg, }; use euclid::Vector2D; pub use from_script_message::*; @@ -92,6 +92,9 @@ pub enum EmbedderToConstellationMessage { SetScrollStates(PipelineId, Vec<ScrollState>), /// Notify the constellation that a particular paint metric event has happened for the given pipeline. PaintMetric(PipelineId, PaintMetricEvent), + /// Evaluate a JavaScript string in the context of a `WebView`. When execution is complete or an + /// error is encountered, a correpsonding message will be sent to the embedding layer. + EvaluateJavaScript(WebViewId, JavaScriptEvaluationId, String), } /// A description of a paint metric that is sent from the Servo renderer to the |