···8 use dom_struct::dom_struct;
9 use embedder_traits::{
10 EmbedderMsg, Notification as EmbedderNotification,
11-@@ -270,11 +271,21 @@
12 if !shown {
13 // TODO: step 6.1: Append notification to the list of notifications.
14 // step 6.2: Display notification on the device
···20+ let notification = self.to_embedder_notification();
21+ if self.global().is_embedded_webview() {
22+ // For embedded webviews, route through constellation to parent iframe
23-+ self.global().send_to_constellation(
24-+ ScriptToConstellationMessage::EmbeddedWebViewNotification(
025+ EmbeddedWebViewEventType::NotificationShow(notification),
26-+ ),
27-+ );
28+ } else {
29+ self.global()
30+ .send_to_embedder(EmbedderMsg::ShowNotification(
···35 }
3637 // TODO: step 7: If shown is false or oldNotification is non-null,
38-@@ -854,6 +865,11 @@
39 for (request, resource_type) in pending_requests {
40 self.fetch_and_show_when_ready(request, resource_type);
41 }
···8 use dom_struct::dom_struct;
9 use embedder_traits::{
10 EmbedderMsg, Notification as EmbedderNotification,
11+@@ -270,11 +271,22 @@
12 if !shown {
13 // TODO: step 6.1: Append notification to the list of notifications.
14 // step 6.2: Display notification on the device
···20+ let notification = self.to_embedder_notification();
21+ if self.global().is_embedded_webview() {
22+ // For embedded webviews, route through constellation to parent iframe
23++ self.global()
24++ .script_to_constellation_chan()
25++ .send(ScriptToConstellationMessage::EmbeddedWebViewNotification(
26+ EmbeddedWebViewEventType::NotificationShow(notification),
27++ ))
28++ .unwrap();
29+ } else {
30+ self.global()
31+ .send_to_embedder(EmbedderMsg::ShowNotification(
···36 }
3738 // TODO: step 7: If shown is false or oldNotification is non-null,
39+@@ -854,6 +866,11 @@
40 for (request, resource_type) in pending_requests {
41 self.fetch_and_show_when_ready(request, resource_type);
42 }
+8-8
patches/components/script/dom/window.rs.patch
···9 };
10 use euclid::default::Rect as UntypedRect;
11 use euclid::{Point2D, Rect, Scale, Size2D, Vector2D};
12-@@ -1138,12 +1138,22 @@
1314 let (sender, receiver) =
15 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap();
···33 receiver.recv().unwrap_or_else(|_| {
34 // If the receiver is closed, we assume the dialog was cancelled.
35 debug!("Alert dialog was cancelled or failed to show.");
36-@@ -1171,13 +1181,22 @@
37 // the user to respond with a positive or negative response.
38 let (sender, receiver) =
39 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap();
···57 // Step 5: Let userPromptHandler be WebDriver BiDi user prompt opened with this,
58 // "confirm", and message.
59 //
60-@@ -1222,6 +1241,7 @@
61 // defaulted to the value given by default.
62 let (sender, receiver) =
63 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap();
···65 let dialog = SimpleDialogRequest::Prompt {
66 id: self.Document().embedder_controls().next_control_id(),
67 message: message.to_string(),
68-@@ -1228,8 +1248,16 @@
69 default: default.to_string(),
70 response_sender: sender,
71 };
···83 // Step 6: Let userPromptHandler be WebDriver BiDi user prompt opened with this,
84 // "prompt", and message.
85 // TODO: Add support for WebDriver BiDi.
86-@@ -3046,9 +3074,33 @@
87 &self,
88 input_event: &ConstellationInputEvent,
89 ) -> Option<HitTestResult> {
···120 }
121122 #[expect(unsafe_code)]
123-@@ -3067,8 +3119,25 @@
124 // SAFETY: This is safe because `Window::query_elements_from_point` has ensured that
125 // layout has run and any OpaqueNodes that no longer refer to real nodes are gone.
126 let address = UntrustedNodeAddress(result.node.0 as *const c_void);
···147 cursor: result.cursor,
148 point_in_node: result.point_in_target,
149 point_in_frame,
150-@@ -3748,6 +3817,8 @@
151 player_context: WindowGLContext,
152 #[cfg(feature = "webgpu")] gpu_id_hub: Arc<IdentityHub>,
153 inherited_secure_context: Option<bool>,
···156 theme: Theme,
157 weak_script_thread: Weak<ScriptThread>,
158 ) -> DomRoot<Self> {
159-@@ -3774,6 +3845,8 @@
160 gpu_id_hub,
161 inherited_secure_context,
162 unminify_js,
···9 };
10 use euclid::default::Rect as UntypedRect;
11 use euclid::{Point2D, Rect, Scale, Size2D, Vector2D};
12+@@ -1139,12 +1139,22 @@
1314 let (sender, receiver) =
15 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap();
···33 receiver.recv().unwrap_or_else(|_| {
34 // If the receiver is closed, we assume the dialog was cancelled.
35 debug!("Alert dialog was cancelled or failed to show.");
36+@@ -1172,13 +1182,22 @@
37 // the user to respond with a positive or negative response.
38 let (sender, receiver) =
39 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap();
···57 // Step 5: Let userPromptHandler be WebDriver BiDi user prompt opened with this,
58 // "confirm", and message.
59 //
60+@@ -1223,6 +1242,7 @@
61 // defaulted to the value given by default.
62 let (sender, receiver) =
63 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap();
···65 let dialog = SimpleDialogRequest::Prompt {
66 id: self.Document().embedder_controls().next_control_id(),
67 message: message.to_string(),
68+@@ -1229,8 +1249,16 @@
69 default: default.to_string(),
70 response_sender: sender,
71 };
···83 // Step 6: Let userPromptHandler be WebDriver BiDi user prompt opened with this,
84 // "prompt", and message.
85 // TODO: Add support for WebDriver BiDi.
86+@@ -3047,9 +3075,33 @@
87 &self,
88 input_event: &ConstellationInputEvent,
89 ) -> Option<HitTestResult> {
···120 }
121122 #[expect(unsafe_code)]
123+@@ -3068,8 +3120,25 @@
124 // SAFETY: This is safe because `Window::query_elements_from_point` has ensured that
125 // layout has run and any OpaqueNodes that no longer refer to real nodes are gone.
126 let address = UntrustedNodeAddress(result.node.0 as *const c_void);
···147 cursor: result.cursor,
148 point_in_node: result.point_in_target,
149 point_in_frame,
150+@@ -3750,6 +3819,8 @@
151 player_context: WindowGLContext,
152 #[cfg(feature = "webgpu")] gpu_id_hub: Arc<IdentityHub>,
153 inherited_secure_context: Option<bool>,
···156 theme: Theme,
157 weak_script_thread: Weak<ScriptThread>,
158 ) -> DomRoot<Self> {
159+@@ -3777,6 +3848,8 @@
160 gpu_id_hub,
161 inherited_secure_context,
162 unminify_js,