From 9a028d4e0955d4e1b7c284e25599e35a5c7fed1e Mon Sep 17 00:00:00 2001 From: webbeef Date: Tue, 11 Aug 2026 03:50:56 -0700 Subject: [PATCH] chore: update Servo to 9afd4bce84e9252606469c05b4fa9186e08b554e Signed-off-by: webbeef --- Cargo.lock | 5 + forkme.lock | 2 +- patches/Cargo.lock.patch | 22 ++--- .../constellation/constellation.rs.patch | 92 +++++++++---------- .../components/layout/layout_impl.rs.patch | 2 +- patches/components/paint/painter.rs.patch | 28 +++--- .../dom/debugger/debuggerglobalscope.rs.patch | 4 +- .../script/dom/document/document.rs.patch | 34 +++---- .../dom/globalscope/globalscope.rs.patch | 10 +- .../form_controls/htmlformelement.rs.patch | 2 +- .../form_controls/htmlinputelement.rs.patch | 4 +- .../window/dissimilaroriginwindow.rs.patch | 2 +- .../script/dom/window/window.rs.patch | 26 +++--- .../dom/workers/workerglobalscope.rs.patch | 4 +- .../dom/worklet/workletglobalscope.rs.patch | 4 +- .../components/script/script_thread.rs.patch | 39 ++++---- .../script_bindings/interfaces.rs.patch | 2 +- patches/components/servo/servo.rs.patch | 12 +-- 18 files changed, 148 insertions(+), 146 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bbcd8da..2560b85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10936,6 +10936,7 @@ dependencies = [ "servo-webxr-api", "servo_arc", "smallvec", + "strum 0.27.2", "stylo", "stylo_atoms", "tendril", @@ -10983,9 +10984,12 @@ dependencies = [ name = "servo-script-webgpu" version = "0.4.0" dependencies = [ + "indexmap", "log", "malloc_size_of_derive", "mozjs", + "num-traits", + "servo-base", "servo-deny-public-fields", "servo-dom-struct", "servo-jstraceable-derive", @@ -10993,6 +10997,7 @@ dependencies = [ "servo-script-bindings", "servo-webgpu-traits", "wgpu-core 30.0.0", + "wgpu-types 30.0.0", ] [[package]] diff --git a/forkme.lock b/forkme.lock index 3207bc7..36f4b5f 100644 --- a/forkme.lock +++ b/forkme.lock @@ -1 +1 @@ -0f40e5fb164753c3bea1d6cee96f9301a92e03dc +9afd4bce84e9252606469c05b4fa9186e08b554e diff --git a/patches/Cargo.lock.patch b/patches/Cargo.lock.patch index 3de610b..9d1381f 100644 --- a/patches/Cargo.lock.patch +++ b/patches/Cargo.lock.patch @@ -692,7 +692,7 @@ "url", "uuid", "webrender_api", -@@ -9387,6 +9813,7 @@ +@@ -9392,6 +9818,7 @@ "bpaf", "cc", "cfg-if", @@ -700,7 +700,7 @@ "crossbeam-channel", "dirs", "dpi", -@@ -9401,6 +9828,7 @@ +@@ -9406,6 +9833,7 @@ "headers", "hilog", "hitrace", @@ -708,7 +708,7 @@ "image", "ipc-channel", "jni 0.22.4", -@@ -9423,6 +9851,7 @@ +@@ -9428,6 +9856,7 @@ "ohos-window-sys", "raw-window-handle", "rustls", @@ -716,7 +716,7 @@ "serde_json", "servo", "servo-allocator", -@@ -9429,6 +9858,7 @@ +@@ -9434,6 +9863,7 @@ "servo-base", "servo-webdriver-server", "signal-hook-registry", @@ -724,7 +724,7 @@ "surfman", "tokio", "tracing", -@@ -10075,6 +10505,9 @@ +@@ -10080,6 +10510,9 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" @@ -734,7 +734,7 @@ [[package]] name = "synstructure" -@@ -10109,6 +10542,27 @@ +@@ -10114,6 +10547,27 @@ ] [[package]] @@ -762,7 +762,7 @@ name = "system-deps" version = "7.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -10134,6 +10588,12 @@ +@@ -10139,6 +10593,12 @@ ] [[package]] @@ -775,7 +775,7 @@ name = "tar" version = "0.4.46" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -10451,6 +10911,16 @@ +@@ -10456,6 +10916,16 @@ ] [[package]] @@ -792,7 +792,7 @@ name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -10553,11 +11023,30 @@ +@@ -10558,11 +11028,30 @@ "futures-util", "pin-project-lite", "sync_wrapper", @@ -823,7 +823,7 @@ name = "tower-layer" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -10862,6 +11351,12 @@ +@@ -10867,6 +11356,12 @@ ] [[package]] @@ -836,7 +836,7 @@ name = "urlpattern" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -11982,6 +12477,17 @@ +@@ -11987,6 +12482,17 @@ ] [[package]] diff --git a/patches/components/constellation/constellation.rs.patch b/patches/components/constellation/constellation.rs.patch index 296c7b2..8ba3c20 100644 --- a/patches/components/constellation/constellation.rs.patch +++ b/patches/components/constellation/constellation.rs.patch @@ -36,7 +36,7 @@ }; use euclid::Size2D; use euclid::default::Size2D as UntypedSize2D; -@@ -159,14 +162,15 @@ +@@ -160,14 +163,15 @@ use servo_canvas_traits::webgl::WebGLThreads; use servo_config::{opts, pref}; use servo_constellation_traits::{ @@ -60,7 +60,7 @@ }; use servo_url::{Host, ImmutableOrigin, ServoUrl}; use storage_traits::StorageThreads; -@@ -181,6 +185,7 @@ +@@ -182,6 +186,7 @@ use webgpu_traits::{WebGPU, WebGPURequest}; use super::embedder::ConstellationToEmbedderMsg; @@ -68,7 +68,7 @@ use crate::broadcastchannel::BroadcastChannels; use crate::browsingcontext::{ AllBrowsingContextsIterator, BrowsingContext, FullyActiveBrowsingContextsIterator, -@@ -187,11 +192,18 @@ +@@ -188,11 +193,18 @@ NewBrowsingContextInfo, }; use crate::constellation_webview::ConstellationWebView; @@ -87,7 +87,7 @@ struct PendingApprovalNavigation { load_data: LoadData, -@@ -222,6 +234,12 @@ +@@ -223,6 +235,12 @@ /// While a completion failed, another global requested to complete the transfer. /// We are still buffering messages, and awaiting the return of the buffer from the global who failed. CompletionRequested(MessagePortRouterId, VecDeque), @@ -100,7 +100,7 @@ } #[derive(Debug)] -@@ -479,6 +497,13 @@ +@@ -480,6 +498,13 @@ /// currently being pressed. pressed_mouse_buttons: u16, @@ -114,7 +114,7 @@ /// The currently activated keyboard modifiers. active_keyboard_modifiers: Modifiers, -@@ -532,6 +557,47 @@ +@@ -533,6 +558,47 @@ /// to the `UserContents` need to be forwared to all the `ScriptThread`s that host /// the relevant `WebView`. pub(crate) user_contents_for_manager_id: FxHashMap, @@ -162,7 +162,7 @@ } /// State needed to construct a constellation. -@@ -595,6 +661,9 @@ +@@ -596,6 +662,9 @@ /// The wake lock provider for acquiring and releasing OS-level screen wake locks. pub wake_lock_provider: Box, @@ -172,7 +172,7 @@ } /// When we are exiting a pipeline, we can either force exiting or not. A normal exit -@@ -678,6 +747,11 @@ +@@ -679,6 +748,11 @@ let broken_image_icon_data = resources::read_bytes(Resource::BrokenImageIcon); @@ -184,7 +184,7 @@ let mut constellation: Constellation = Constellation { event_loops: Default::default(), namespace_receiver, -@@ -699,7 +773,7 @@ +@@ -700,7 +774,7 @@ script_to_devtools_callback: Default::default(), #[cfg(feature = "bluetooth")] bluetooth_ipc_sender: state.bluetooth_thread, @@ -193,7 +193,7 @@ private_resource_threads: state.private_resource_threads, public_storage_threads: state.public_storage_threads, private_storage_threads: state.private_storage_threads, -@@ -737,6 +811,7 @@ +@@ -738,6 +812,7 @@ canvas: OnceCell::new(), pending_approval_navigations: Default::default(), pressed_mouse_buttons: 0, @@ -201,7 +201,7 @@ active_keyboard_modifiers: Modifiers::empty(), hard_fail, active_media_session: None, -@@ -753,6 +828,23 @@ +@@ -754,6 +829,23 @@ pending_viewport_changes: Default::default(), screenshot_readiness_requests: Vec::new(), user_contents_for_manager_id: Default::default(), @@ -225,7 +225,7 @@ }; constellation.run(); -@@ -778,6 +870,18 @@ +@@ -779,6 +871,18 @@ fn clean_up_finished_script_event_loops(&mut self) { self.event_loop_join_handles .retain(|join_handle| !join_handle.is_finished()); @@ -244,7 +244,7 @@ self.event_loops .retain(|event_loop| event_loop.upgrade().is_some()); } -@@ -1057,6 +1161,11 @@ +@@ -1058,6 +1162,11 @@ .get(&webview_id) .and_then(|webview| webview.user_content_manager_id); @@ -256,7 +256,7 @@ let new_pipeline_info = NewPipelineInfo { parent_info: parent_pipeline_id, new_pipeline_id, -@@ -1068,6 +1177,13 @@ +@@ -1069,6 +1178,13 @@ user_content_manager_id, theme, target_snapshot_params, @@ -270,7 +270,7 @@ }; let pipeline = match Pipeline::spawn(new_pipeline_info, event_loop, self, throttled) { Ok(pipeline) => pipeline, -@@ -1233,6 +1349,9 @@ +@@ -1234,6 +1350,9 @@ Script((WebViewId, PipelineId, ScriptToConstellationMessage)), BackgroundHangMonitor(HangAlert), Embedder(EmbedderToConstellationMessage), @@ -280,7 +280,7 @@ RemoveProcess(usize), } // Get one incoming request. -@@ -1252,6 +1371,28 @@ +@@ -1253,6 +1372,28 @@ sel.recv(&self.background_hang_monitor_receiver); sel.recv(&self.embedder_to_constellation_receiver); @@ -309,7 +309,7 @@ self.process_manager.register(&mut sel); let request = { -@@ -1278,9 +1419,30 @@ +@@ -1279,9 +1420,30 @@ oper.recv(&self.embedder_to_constellation_receiver) .expect("Unexpected embedder channel panic in constellation"), )), @@ -341,7 +341,7 @@ let _ = oper.recv(self.process_manager.receiver_at(process_index)); Ok(Request::RemoveProcess(process_index)) }, -@@ -1303,10 +1465,67 @@ +@@ -1304,10 +1466,67 @@ Request::BackgroundHangMonitor(message) => { self.handle_request_from_background_hang_monitor(message); }, @@ -409,7 +409,7 @@ #[servo_tracing::instrument(skip_all)] fn handle_request_for_pipeline_namespace(&mut self, request: PipelineNamespaceRequest) { let PipelineNamespaceRequest(sender) = request; -@@ -1398,6 +1617,15 @@ +@@ -1399,6 +1618,15 @@ EmbedderToConstellationMessage::ThemeChange(webview_id, theme) => { self.handle_theme_change(webview_id, theme); }, @@ -425,7 +425,7 @@ EmbedderToConstellationMessage::TickAnimation(webview_ids) => { self.handle_tick_animation(webview_ids) }, -@@ -1416,6 +1644,16 @@ +@@ -1417,6 +1645,16 @@ EmbedderToConstellationMessage::ForwardInputEvent(webview_id, event, hit_test) => { self.forward_input_event(webview_id, event, hit_test); }, @@ -442,7 +442,7 @@ EmbedderToConstellationMessage::RefreshCursor(pipeline_id) => { self.handle_refresh_cursor(pipeline_id) }, -@@ -1465,11 +1703,7 @@ +@@ -1466,11 +1704,7 @@ } }, EmbedderToConstellationMessage::PreferencesUpdated(updates) => { @@ -455,7 +455,7 @@ let _ = event_loop.send(ScriptThreadMessage::PreferencesUpdated( updates .iter() -@@ -1496,6 +1730,18 @@ +@@ -1497,6 +1731,18 @@ EmbedderToConstellationMessage::SetAccessibilityActive(webview_id, active) => { self.set_accessibility_active(webview_id, active); }, @@ -474,7 +474,7 @@ } } -@@ -1693,7 +1939,13 @@ +@@ -1694,7 +1940,13 @@ return warn!("Attempt to add channel name from an unexpected origin."); } self.broadcast_channels @@ -489,7 +489,7 @@ }, ScriptToConstellationMessage::RemoveBroadcastChannelNameInRouter( router_id, -@@ -1707,7 +1959,13 @@ +@@ -1708,7 +1960,13 @@ return warn!("Attempt to remove channel name from an unexpected origin."); } self.broadcast_channels @@ -504,7 +504,7 @@ }, ScriptToConstellationMessage::RemoveBroadcastChannelRouter(router_id, origin) => { if self -@@ -1719,6 +1977,12 @@ +@@ -1720,6 +1978,12 @@ self.broadcast_channels .remove_broadcast_channel_router(router_id); }, @@ -517,7 +517,7 @@ ScriptToConstellationMessage::ScheduleBroadcast(router_id, message) => { if self .check_origin_against_pipeline(&source_pipeline_id, &message.origin) -@@ -1728,8 +1992,15 @@ +@@ -1729,8 +1993,15 @@ "Attempt to schedule broadcast from an origin not matching the origin of the msg." ); } @@ -534,7 +534,7 @@ }, ScriptToConstellationMessage::PipelineExited => { self.handle_pipeline_exited(source_pipeline_id); -@@ -1749,6 +2020,12 @@ +@@ -1750,6 +2021,12 @@ ScriptToConstellationMessage::CreateAuxiliaryWebView(load_info) => { self.handle_script_new_auxiliary(load_info); }, @@ -547,7 +547,7 @@ ScriptToConstellationMessage::ChangeRunningAnimationsState(animation_state) => { self.handle_change_running_animations_state(source_pipeline_id, animation_state) }, -@@ -1820,7 +2097,7 @@ +@@ -1821,7 +2098,7 @@ ScriptToConstellationMessage::SetFinalUrl(final_url) => { // The script may have finished loading after we already started shutting down. if let Some(ref mut pipeline) = self.pipelines.get_mut(&source_pipeline_id) { @@ -556,7 +556,7 @@ } else { warn!("constellation got set final url message for dead pipeline"); } -@@ -1945,6 +2222,12 @@ +@@ -1946,6 +2223,12 @@ .entry(interest) .or_default() .insert(source_pipeline_id); @@ -569,7 +569,7 @@ }, ScriptToConstellationMessage::UnregisterInterest(interest) => { if let Some(set) = self.pipeline_interests.get_mut(&interest) { -@@ -1970,6 +2253,29 @@ +@@ -1971,6 +2254,29 @@ new_value, ); }, @@ -599,7 +599,7 @@ ScriptToConstellationMessage::MediaSessionEvent(pipeline_id, event) => { // Unlikely at this point, but we may receive events coming from // different media sessions, so we set the active media session based -@@ -1988,8 +2294,13 @@ +@@ -1989,8 +2295,13 @@ }; self.active_media_session = Some(pipeline_id); self.constellation_to_embedder_proxy.send( @@ -614,7 +614,7 @@ }, #[cfg(feature = "webgpu")] ScriptToConstellationMessage::RequestAdapter(response_sender, options, ids) => self -@@ -2062,9 +2373,1088 @@ +@@ -2063,9 +2374,1088 @@ } }, }, @@ -1703,7 +1703,7 @@ /// Check the origin of a message against that of the pipeline it came from. /// Note: this is still limited as a security check, /// see -@@ -2381,6 +3771,55 @@ +@@ -2382,6 +3772,55 @@ TransferState::TransferInProgress(queue) => queue.push_back(task), TransferState::CompletionFailed(queue) => queue.push_back(task), TransferState::CompletionRequested(_, queue) => queue.push_back(task), @@ -1759,7 +1759,7 @@ } } -@@ -3194,6 +4633,101 @@ +@@ -3195,6 +4634,101 @@ ); } @@ -1861,7 +1861,7 @@ fn forward_input_event( &mut self, webview_id: WebViewId, -@@ -3213,6 +4747,66 @@ +@@ -3214,6 +4748,66 @@ let pressed_mouse_buttons = self.pressed_mouse_buttons; let active_keyboard_modifiers = self.active_keyboard_modifiers; @@ -1928,7 +1928,7 @@ let event_id = event.id; let Some(webview) = self.webviews.get_mut(&webview_id) else { warn!("Got input event for unknown WebViewId: {webview_id:?}"); -@@ -3315,6 +4909,40 @@ +@@ -3316,6 +4910,40 @@ /// fn handle_close_top_level_browsing_context(&mut self, webview_id: WebViewId) { debug!("{webview_id}: Closing"); @@ -1969,7 +1969,7 @@ let browsing_context_id = BrowsingContextId::from(webview_id); // Step 5. Remove traversable from the user agent's top-level traversable set. let browsing_context = -@@ -3591,8 +5219,27 @@ +@@ -3592,8 +5220,27 @@ opener_webview_id, opener_pipeline_id, response_sender, @@ -1997,7 +1997,7 @@ let Some((webview_id_sender, webview_id_receiver)) = generic_channel::channel() else { warn!("Failed to create channel"); let _ = response_sender.send(None); -@@ -3691,6 +5338,402 @@ +@@ -3692,6 +5339,402 @@ }); } @@ -2400,7 +2400,7 @@ #[servo_tracing::instrument(skip_all)] fn handle_refresh_cursor(&self, pipeline_id: PipelineId) { let Some(pipeline) = self.pipelines.get(&pipeline_id) else { -@@ -4528,7 +6571,7 @@ +@@ -4529,7 +6572,7 @@ }, }; @@ -2409,7 +2409,7 @@ match self.browsing_contexts.get_mut(&browsing_context_id) { Some(browsing_context) => { let old_pipeline_id = browsing_context.pipeline_id; -@@ -4537,6 +6580,7 @@ +@@ -4538,6 +6581,7 @@ old_pipeline_id, browsing_context.parent_pipeline_id, browsing_context.webview_id, @@ -2417,7 +2417,7 @@ ) }, None => { -@@ -4546,6 +6590,15 @@ +@@ -4547,6 +6591,15 @@ self.unload_document(old_pipeline_id); @@ -2433,7 +2433,7 @@ if let Some(new_pipeline) = self.pipelines.get(&new_pipeline_id) { if let Some(ref chan) = self.devtools_sender { let state = NavigationState::Start(new_pipeline.url.clone()); -@@ -5114,7 +7167,7 @@ +@@ -5115,7 +7168,7 @@ } #[servo_tracing::instrument(skip_all)] @@ -2442,7 +2442,7 @@ // Send a flat projection of the history to embedder. // The final vector is a concatenation of the URLs of the past // entries, the current entry and the future entries. -@@ -5226,9 +7279,22 @@ +@@ -5227,9 +7280,22 @@ self.constellation_to_embedder_proxy .send(ConstellationToEmbedderMsg::HistoryChanged( webview_id, @@ -2466,7 +2466,7 @@ } #[servo_tracing::instrument(skip_all)] -@@ -5247,7 +7313,7 @@ +@@ -5248,7 +7314,7 @@ webview.focused_browsing_context_id = change.browsing_context_id; } @@ -2475,7 +2475,7 @@ match self.browsing_contexts.get_mut(&change.browsing_context_id) { Some(browsing_context) => { debug!("Adding pipeline to existing browsing context."); -@@ -5254,11 +7320,15 @@ +@@ -5255,11 +7321,15 @@ let old_pipeline_id = browsing_context.pipeline_id; browsing_context.pipelines.insert(change.new_pipeline_id); browsing_context.update_current_entry(change.new_pipeline_id); @@ -2493,7 +2493,7 @@ }, }; -@@ -5266,6 +7336,18 @@ +@@ -5267,6 +7337,18 @@ self.unload_document(old_pipeline_id); } diff --git a/patches/components/layout/layout_impl.rs.patch b/patches/components/layout/layout_impl.rs.patch index c3a89bf..bfe0552 100644 --- a/patches/components/layout/layout_impl.rs.patch +++ b/patches/components/layout/layout_impl.rs.patch @@ -42,7 +42,7 @@ } device.set_viewport_size(viewport_details.size); -@@ -807,6 +824,7 @@ +@@ -811,6 +828,7 @@ needs_accessibility_update: Cell::new(false), web_font_finished_loading_callback: Arc::new(web_font_finished_loading_callback) as StylesheetWebFontLoadFinishedCallback, diff --git a/patches/components/paint/painter.rs.patch b/patches/components/paint/painter.rs.patch index 7b9eec0..61d2693 100644 --- a/patches/components/paint/painter.rs.patch +++ b/patches/components/paint/painter.rs.patch @@ -8,8 +8,8 @@ use std::collections::hash_map::Entry; use std::rc::Rc; use std::sync::Arc; -@@ -42,8 +43,8 @@ - MemoryReport, ONE_TIME_USAGE_HINT, RenderApi, ShaderPrecacheFlags, Transaction, UploadMethod, +@@ -44,8 +45,8 @@ + ShaderPrecacheFlags, Transaction, UploadMethod, }; use webrender_api::units::{ - DevicePixel, DevicePoint, LayoutPoint, LayoutRect, LayoutSize, LayoutTransform, LayoutVector2D, @@ -19,7 +19,7 @@ }; use webrender_api::{ self, BuiltDisplayList, BuiltDisplayListDescriptor, ColorF, DirtyRect, DisplayListPayload, -@@ -81,8 +82,15 @@ +@@ -83,8 +84,15 @@ pub(crate) painter_id: PainterId, /// Our [`WebViewRenderer`]s, one for every `WebView`. @@ -36,7 +36,7 @@ /// Tracks whether or not the view needs to be repainted. pub(crate) needs_repaint: Cell, -@@ -266,6 +274,7 @@ +@@ -276,6 +284,7 @@ painter_id, embedder_to_constellation_sender, webview_renderers: Default::default(), @@ -44,7 +44,7 @@ rendering_context, needs_repaint: Cell::default(), pending_frames: Default::default(), -@@ -290,20 +299,37 @@ +@@ -300,20 +309,37 @@ painter } @@ -93,7 +93,7 @@ if let Some(colors) = self.web_content_animator.update(&self.webview_renderers) { let mut transaction = Transaction::new(); -@@ -316,8 +342,106 @@ +@@ -326,8 +352,106 @@ self.generate_frame(&mut transaction, RenderReasons::ANIMATED_PROPERTY); self.send_transaction(transaction); } @@ -200,7 +200,7 @@ #[track_caller] fn assert_no_gl_error(&self) { debug_assert_eq!(self.webrender_gl.get_error(), gleam::gl::NO_ERROR); -@@ -339,6 +463,20 @@ +@@ -349,6 +473,20 @@ self.webview_renderers.get(&webview_id) } @@ -221,7 +221,7 @@ pub(crate) fn webview_renderer_mut( &mut self, webview_id: WebViewId, -@@ -610,7 +748,16 @@ +@@ -620,7 +758,16 @@ let root_clip_id = builder.define_clip_rect(root_reference_frame, viewport_rect); let clip_chain_id = builder.define_clip_chain(None, [root_clip_id]); @@ -238,7 +238,7 @@ if webview_renderer.hidden() { continue; } -@@ -670,7 +817,7 @@ +@@ -680,7 +827,7 @@ /// Set the root pipeline for our WebRender scene to a display list that consists of an iframe /// for each visible top-level browsing context, applying a transformation on the root for /// pinch zoom, page zoom, and HiDPI scaling. @@ -247,7 +247,7 @@ let mut transaction = Transaction::new(); self.send_root_pipeline_display_list_in_transaction(&mut transaction); self.generate_frame(&mut transaction, RenderReasons::SCENE); -@@ -677,6 +824,115 @@ +@@ -687,6 +834,115 @@ self.send_transaction(transaction); } @@ -363,7 +363,7 @@ /// Update the given transaction with the scroll offsets of all active scroll nodes in /// the WebRender scene. This is necessary because WebRender does not preserve scroll /// offsets between scroll tree modifications. If a display list could potentially -@@ -759,7 +1015,15 @@ +@@ -769,7 +1025,15 @@ } pub(crate) fn decrement_pending_frames(&self) { @@ -380,7 +380,7 @@ } pub(crate) fn report_memory(&self) -> MemoryReport { -@@ -806,6 +1070,26 @@ +@@ -816,6 +1080,26 @@ self.send_root_pipeline_display_list(); } @@ -407,7 +407,7 @@ pub(crate) fn set_throttled( &mut self, webview_id: WebViewId, -@@ -1205,15 +1489,23 @@ +@@ -1215,15 +1499,23 @@ webview: Box, viewport_details: ViewportDetails, ) { @@ -435,7 +435,7 @@ } pub(crate) fn remove_webview(&mut self, webview_id: WebViewId) { -@@ -1415,7 +1707,6 @@ +@@ -1425,7 +1717,6 @@ result: InputEventResult, ) { let Some(webview_renderer) = self.webview_renderers.get_mut(&webview_id) else { diff --git a/patches/components/script/dom/debugger/debuggerglobalscope.rs.patch b/patches/components/script/dom/debugger/debuggerglobalscope.rs.patch index cac6777..e18e3b1 100644 --- a/patches/components/script/dom/debugger/debuggerglobalscope.rs.patch +++ b/patches/components/script/dom/debugger/debuggerglobalscope.rs.patch @@ -1,17 +1,15 @@ --- original +++ modified -@@ -114,9 +114,11 @@ +@@ -114,8 +114,10 @@ None, #[cfg(feature = "webgpu")] gpu_id_hub, - None, - false, -- None, // font_context + None, // inherited_secure_context + false, // unminify_js + false, // is_embedded_webview + false, // hide_focus - debugger has no focus -+ None, // font_context ), devtools_to_script_sender, get_possible_breakpoints_result_sender: RefCell::new(None), diff --git a/patches/components/script/dom/document/document.rs.patch b/patches/components/script/dom/document/document.rs.patch index ba95c30..cc588e0 100644 --- a/patches/components/script/dom/document/document.rs.patch +++ b/patches/components/script/dom/document/document.rs.patch @@ -126,7 +126,7 @@ } impl Document { -@@ -919,6 +959,68 @@ +@@ -938,6 +978,68 @@ self.dirty_root.take() } @@ -195,7 +195,7 @@ #[inline] pub(crate) fn loader(&self) -> Ref<'_, DocumentLoader> { self.loader.borrow() -@@ -990,6 +1092,12 @@ +@@ -1009,6 +1111,12 @@ // Set the document's activity level, reflow if necessary, and suspend or resume timers. self.activity.set(activity); @@ -208,7 +208,7 @@ let media = ServoMedia::get(); let pipeline_id = self.window().pipeline_id(); let client_context_id = -@@ -1003,6 +1111,7 @@ +@@ -1022,6 +1130,7 @@ self.title_changed(); self.notify_embedder_favicon(); @@ -216,7 +216,7 @@ self.dirty_all_nodes(cx.no_gc()); self.window().resume(cx); media.resume(&client_context_id); -@@ -1393,6 +1502,9 @@ +@@ -1412,6 +1521,9 @@ )); self.send_to_embedder(EmbedderMsg::Status(self.webview_id(), None)); update_with_current_instant(&self.navigation_timing.dom_loading); @@ -226,7 +226,7 @@ } }, DocumentReadyState::Complete => { -@@ -1401,6 +1513,9 @@ +@@ -1420,6 +1532,9 @@ self.webview_id(), LoadStatus::Complete, )); @@ -236,7 +236,7 @@ } update_with_current_instant(&self.navigation_timing.dom_complete); }, -@@ -1481,7 +1596,13 @@ +@@ -1500,7 +1615,13 @@ let window = self.window(); if window.is_top_level() { let title = self.title().map(String::from); @@ -251,7 +251,7 @@ } } -@@ -1490,6 +1611,18 @@ +@@ -1509,6 +1630,18 @@ window.send_to_embedder(msg); } @@ -270,7 +270,7 @@ pub(crate) fn dirty_all_nodes(&self, no_gc: &NoGC) { let root = match self.GetDocumentElement() { Some(root) => root, -@@ -2940,6 +3073,17 @@ +@@ -2959,6 +3092,17 @@ self.iframes.borrow_mut() } @@ -288,7 +288,7 @@ pub(crate) fn set_navigation_start(&self, navigation_start: CrossProcessInstant) { self.interactive_time .borrow_mut() -@@ -3226,6 +3370,60 @@ +@@ -3245,6 +3389,60 @@ .push(Dom::from_ref(resize_observer)); } @@ -349,7 +349,7 @@ /// /// pub(crate) fn gather_active_resize_observations_at_depth( -@@ -3810,6 +4008,7 @@ +@@ -3829,6 +4027,7 @@ anchors: Default::default(), applets: Default::default(), iframes: RefCell::new(IFrameCollection::new()), @@ -357,7 +357,7 @@ shared_style_locks, stylesheets: DomRefCell::new(DocumentStylesheetSet::new()), stylesheet_list: MutNullableDom::new(None), -@@ -3869,6 +4068,8 @@ +@@ -3888,6 +4087,8 @@ dirty_root: Default::default(), declarative_refresh: Default::default(), resize_observers: Default::default(), @@ -366,7 +366,7 @@ fonts: Default::default(), visibility_state: Cell::new(DocumentVisibilityState::Hidden), status_code, -@@ -3891,10 +4092,12 @@ +@@ -3910,10 +4111,12 @@ active_sandboxing_flag_set: Cell::new(creation_sandboxing_flag_set), creation_sandboxing_flag_set: Cell::new(creation_sandboxing_flag_set), favicon: RefCell::new(None), @@ -379,7 +379,7 @@ state_override: Default::default(), value_override: Default::default(), default_single_line_container_name: Default::default(), -@@ -3911,6 +4114,7 @@ +@@ -3930,6 +4133,7 @@ )), image_cache, history: Default::default(), @@ -387,7 +387,7 @@ } } -@@ -4662,6 +4866,33 @@ +@@ -4681,6 +4885,33 @@ .mark_animating_nodes_as_dirty(no_gc, current_timeline_value); } @@ -421,7 +421,7 @@ pub(crate) fn current_animation_timeline_value(&self) -> f64 { self.timeline .upcast::() -@@ -4721,10 +4952,8 @@ +@@ -4740,10 +4971,8 @@ /// An implementation of . pub(crate) fn update_animations_and_send_events(&self, cx: &mut CurrentRealm) { @@ -434,7 +434,7 @@ // > 1. Update the current time of all timelines associated with doc passing now // > as the timestamp. -@@ -4970,6 +5199,36 @@ +@@ -4989,6 +5218,36 @@ pub(crate) fn notify_embedder_favicon(&self) { if let Some(ref image) = *self.favicon.borrow() { @@ -471,7 +471,7 @@ self.send_to_embedder(EmbedderMsg::NewFavicon(self.webview_id(), image.clone())); } } -@@ -5048,6 +5307,30 @@ +@@ -5067,6 +5326,30 @@ pub(crate) fn set_iframe_load_in_progress(&self, value: bool) { self.iframe_load_in_progress.set(value) } diff --git a/patches/components/script/dom/globalscope/globalscope.rs.patch b/patches/components/script/dom/globalscope/globalscope.rs.patch index daaa61b..be5dfd3 100644 --- a/patches/components/script/dom/globalscope/globalscope.rs.patch +++ b/patches/components/script/dom/globalscope/globalscope.rs.patch @@ -17,16 +17,16 @@ /// Directory to store unminified scripts for this window if unminify-js /// opt is enabled. unminified_js_dir: Option, -@@ -791,6 +801,8 @@ +@@ -784,6 +794,8 @@ #[cfg(feature = "webgpu")] gpu_id_hub: Arc, inherited_secure_context: Option, unminify_js: bool, + is_embedded_webview: bool, + hide_focus: bool, - font_context: Option>, ) -> Self { Self { -@@ -828,6 +840,8 @@ + message_port_state: DomRefCell::new(MessagePortState::UnManaged), +@@ -820,6 +832,8 @@ console_group_stack: DomRefCell::new(Vec::new()), console_count_map: Default::default(), inherited_secure_context, @@ -35,7 +35,7 @@ unminified_js_dir: unminify_js.then(|| unminified_path("unminified-js")), byte_length_queuing_strategy_size_function: OnceCell::new(), count_queuing_strategy_size_function: OnceCell::new(), -@@ -1170,6 +1184,25 @@ +@@ -1167,6 +1181,25 @@ .send(ScriptToConstellationMessage::EntanglePorts(port1, port2)); } @@ -61,7 +61,7 @@ /// Handle the transfer of a port in the current task. pub(crate) fn mark_port_as_transferred(&self, port_id: &MessagePortId) -> MessagePortImpl { if let MessagePortState::Managed(_id, message_ports) = -@@ -3219,6 +3252,16 @@ +@@ -3216,6 +3249,16 @@ self.inherited_secure_context } diff --git a/patches/components/script/dom/html/form_controls/htmlformelement.rs.patch b/patches/components/script/dom/html/form_controls/htmlformelement.rs.patch index 7e0c598..5208afd 100644 --- a/patches/components/script/dom/html/form_controls/htmlformelement.rs.patch +++ b/patches/components/script/dom/html/form_controls/htmlformelement.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -857,7 +857,7 @@ +@@ -859,7 +859,7 @@ // form's node navigable, and noopener. let source = doc.browsing_context().unwrap(); let (maybe_chosen, _new) = diff --git a/patches/components/script/dom/html/form_controls/htmlinputelement.rs.patch b/patches/components/script/dom/html/form_controls/htmlinputelement.rs.patch index 2fe2e97..a2dff4a 100644 --- a/patches/components/script/dom/html/form_controls/htmlinputelement.rs.patch +++ b/patches/components/script/dom/html/form_controls/htmlinputelement.rs.patch @@ -11,7 +11,7 @@ use encoding_rs::Encoding; use fonts::{ByteIndex, TextByteRange}; use html5ever::{LocalName, Prefix, local_name}; -@@ -1016,6 +1018,9 @@ +@@ -1020,6 +1022,9 @@ enabled, }; self.owner_window().layout().set_needs_new_display_list(); @@ -21,7 +21,7 @@ } fn is_password_field(&self) -> bool { -@@ -1957,10 +1962,25 @@ +@@ -1965,10 +1970,25 @@ .hide_embedder_control(self.upcast()); } else if *event_type == *"focus" { let input_type = &*self.input_type(); diff --git a/patches/components/script/dom/window/dissimilaroriginwindow.rs.patch b/patches/components/script/dom/window/dissimilaroriginwindow.rs.patch index 8ac23ff..3e7d135 100644 --- a/patches/components/script/dom/window/dissimilaroriginwindow.rs.patch +++ b/patches/components/script/dom/window/dissimilaroriginwindow.rs.patch @@ -8,6 +8,6 @@ + false, // unminify_js + false, // is_embedded_webview - dissimilar origin windows are never embedded webviews + false, // hide_focus - dissimilar origin windows don't have focus - global_to_clone_from.font_context().cloned(), ), window_proxy: Dom::from_ref(window_proxy), + location: Default::default(), diff --git a/patches/components/script/dom/window/window.rs.patch b/patches/components/script/dom/window/window.rs.patch index bc765e7..d8ab37b 100644 --- a/patches/components/script/dom/window/window.rs.patch +++ b/patches/components/script/dom/window/window.rs.patch @@ -41,7 +41,7 @@ use crate::dom::location::Location; use crate::dom::medialist::MediaList; use crate::dom::mediaquerylist::{MediaQueryList, MediaQueryListMatchState}; -@@ -1209,12 +1214,22 @@ +@@ -1207,12 +1212,22 @@ let (sender, receiver) = ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); @@ -65,7 +65,7 @@ receiver.recv().unwrap_or_else(|_| { // If the receiver is closed, we assume the dialog was cancelled. debug!("Alert dialog was cancelled or failed to show."); -@@ -1248,13 +1263,22 @@ +@@ -1246,13 +1261,22 @@ // the user to respond with a positive or negative response. let (sender, receiver) = ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); @@ -89,7 +89,7 @@ // Step 5: Let userPromptHandler be WebDriver BiDi user prompt opened with this, // "confirm", and message. // -@@ -1299,6 +1323,7 @@ +@@ -1297,6 +1321,7 @@ // defaulted to the value given by default. let (sender, receiver) = ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); @@ -97,7 +97,7 @@ let dialog = SimpleDialogRequest::Prompt { id: self.Document().embedder_controls().next_control_id(), message: String::from(message), -@@ -1305,8 +1330,16 @@ +@@ -1303,8 +1328,16 @@ default: String::from(default), response_sender: sender, }; @@ -115,7 +115,7 @@ // Step 6: Let userPromptHandler be WebDriver BiDi user prompt opened with this, // "prompt", and message. // TODO: Add support for WebDriver BiDi. -@@ -1802,6 +1835,27 @@ +@@ -1800,6 +1833,27 @@ // https://html.spec.whatwg.org/multipage/#windoweventhandlers window_event_handlers!(); @@ -143,7 +143,7 @@ /// fn Screen(&self, cx: &mut JSContext) -> DomRoot { self.screen.or_init(|| Screen::new(cx, self)) -@@ -2732,6 +2786,10 @@ +@@ -2730,6 +2784,10 @@ accessibility_damage = Some(accessibility_data.drain_pending_accessibility_damage()); } @@ -154,7 +154,7 @@ // Send new document and relevant styles to layout. let reflow = ReflowRequest { document: document.upcast::().to_trusted_node_address(), -@@ -3242,10 +3300,33 @@ +@@ -3240,10 +3298,33 @@ flags: HitTestFlags, input_event: &ConstellationInputEvent, ) -> Option { @@ -192,7 +192,7 @@ } #[expect(unsafe_code)] -@@ -3266,8 +3347,42 @@ +@@ -3264,8 +3345,42 @@ let address = UntrustedNodeAddress(node.0 as *const c_void); unsafe { from_untrusted_node_address(address) } }; @@ -236,7 +236,7 @@ dom_position_for_selection: result .dom_position_for_selection .map(|(node, offset)| (from_opaque_node(node), offset)), -@@ -3641,17 +3756,19 @@ +@@ -3639,17 +3754,19 @@ } pub(crate) fn send_to_embedder(&self, msg: EmbedderMsg) { @@ -262,7 +262,7 @@ } #[cfg(feature = "webxr")] -@@ -3885,6 +4002,8 @@ +@@ -3882,6 +3999,8 @@ player_context: WindowGLContext, #[cfg(feature = "webgpu")] gpu_id_hub: Arc, inherited_secure_context: Option, @@ -271,16 +271,16 @@ theme: Theme, weak_script_thread: Weak, ) -> DomRoot { -@@ -3909,6 +4028,8 @@ +@@ -3906,6 +4025,8 @@ gpu_id_hub, inherited_secure_context, unminify_js, + is_embedded_webview, + hide_focus, - Some(font_context), ), caches: Default::default(), -@@ -4179,3 +4300,114 @@ + ongoing_navigation: Default::default(), +@@ -4175,3 +4296,114 @@ Window::origin(self) } } diff --git a/patches/components/script/dom/workers/workerglobalscope.rs.patch b/patches/components/script/dom/workers/workerglobalscope.rs.patch index 507e92c..86564a4 100644 --- a/patches/components/script/dom/workers/workerglobalscope.rs.patch +++ b/patches/components/script/dom/workers/workerglobalscope.rs.patch @@ -1,11 +1,11 @@ --- original +++ modified -@@ -409,6 +409,8 @@ +@@ -414,6 +414,8 @@ gpu_id_hub, init.inherited_secure_context, init.unminify_js, + false, // is_embedded_webview - workers are never embedded webviews + false, // hide_focus - workers don't have focus - font_context, ), caches: Default::default(), + microtask_queue: runtime.microtask_queue.clone(), diff --git a/patches/components/script/dom/worklet/workletglobalscope.rs.patch b/patches/components/script/dom/worklet/workletglobalscope.rs.patch index ba8d53c..1e37c7d 100644 --- a/patches/components/script/dom/worklet/workletglobalscope.rs.patch +++ b/patches/components/script/dom/worklet/workletglobalscope.rs.patch @@ -1,15 +1,13 @@ --- original +++ modified -@@ -144,8 +144,10 @@ +@@ -144,7 +144,9 @@ #[cfg(feature = "webgpu")] init.gpu_id_hub.clone(), inherited_secure_context, - false, -- None, // font_context + false, // unminify_js + false, // is_embedded_webview - worklets are never embedded webviews + false, // hide_focus - worklets don't have focus -+ None, // font_context ), base_url, to_script_thread_sender: init.to_script_thread_sender.clone(), diff --git a/patches/components/script/script_thread.rs.patch b/patches/components/script/script_thread.rs.patch index 0d4e47c..6e8382d 100644 --- a/patches/components/script/script_thread.rs.patch +++ b/patches/components/script/script_thread.rs.patch @@ -9,7 +9,7 @@ }; use encoding_rs::Encoding; use fonts::{FontContext, SystemFontServiceProxy, WebFontLoadEvent}; -@@ -83,17 +83,19 @@ +@@ -83,18 +83,20 @@ use servo_base::cross_process_instant::CrossProcessInstant; use servo_base::generic_channel::GenericSender; use servo_base::id::{ @@ -17,6 +17,7 @@ + BrowsingContextId, HistoryStateId, MessagePortId, PipelineId, PipelineNamespace, + ScriptEventLoopId, WebViewId, }; + use servo_base::threadboost::{BoostAffinity, ThreadPriority}; use servo_base::{Epoch, generic_channel}; use servo_canvas_traits::webgl::WebGLPipeline; use servo_config::opts::{self, DiagnosticsLoggingOption}; @@ -34,7 +35,7 @@ }; use servo_url::{ImmutableOrigin, MutableOrigin, OriginSnapshot, ServoUrl}; use storage_traits::StorageThreads; -@@ -116,6 +118,8 @@ +@@ -117,6 +119,8 @@ use crate::dom::bindings::codegen::Bindings::DocumentBinding::{ DocumentMethods, DocumentReadyState, }; @@ -43,7 +44,7 @@ use crate::dom::bindings::codegen::Bindings::NavigatorBinding::NavigatorMethods; use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use crate::dom::bindings::conversions::{ -@@ -134,9 +138,13 @@ +@@ -135,9 +139,13 @@ Document, DocumentSource, HasBrowsingContext, IsHTMLDocument, RenderingUpdateReason, }; use crate::dom::element::Element; @@ -57,7 +58,7 @@ use crate::dom::servoparser::{ParserContext, ServoParser}; use crate::dom::types::DebuggerGlobalScope; #[cfg(feature = "webgpu")] -@@ -1255,18 +1263,22 @@ +@@ -1259,18 +1267,22 @@ // Unspecified, but necessary: Any of the previous callbacks may have put the // document into a render-blocked state. If that's the case, then abort the // rendering process now. @@ -89,7 +90,7 @@ } let should_generate_frame = !painters_generating_frames.is_empty(); -@@ -1794,6 +1806,14 @@ +@@ -1798,6 +1810,14 @@ ScriptThreadMessage::GetDocumentOrigin(pipeline_id, result_sender) => { self.handle_get_document_origin(pipeline_id, result_sender); }, @@ -104,7 +105,7 @@ ScriptThreadMessage::GetTitle(pipeline_id) => self.handle_get_title_msg(pipeline_id), ScriptThreadMessage::SetDocumentActivity(pipeline_id, activity) => { self.handle_set_document_activity_msg(cx, pipeline_id, activity) -@@ -1959,11 +1979,46 @@ +@@ -1963,11 +1983,46 @@ self.handle_refresh_cursor(pipeline_id); }, ScriptThreadMessage::PreferencesUpdated(updates) => { @@ -155,7 +156,7 @@ }, ScriptThreadMessage::ForwardKeyboardScroll(pipeline_id, scroll) => { if let Some(document) = self.documents.borrow().find_document(pipeline_id) { -@@ -1996,6 +2051,52 @@ +@@ -2000,6 +2055,52 @@ ScriptThreadMessage::TriggerGarbageCollection => unsafe { JS_GC(cx, GCReason::API); }, @@ -208,7 +209,7 @@ } } -@@ -3059,16 +3160,32 @@ +@@ -3063,16 +3164,32 @@ reason: UpdatePipelineIdReason, cx: &mut js::context::JSContext, ) { @@ -245,7 +246,7 @@ let Some(window) = self.documents.borrow().find_window(new_pipeline_id) else { return; -@@ -3087,6 +3204,7 @@ +@@ -3091,6 +3208,7 @@ // is no need to pass along existing opener information that // will be discarded. None, @@ -253,7 +254,7 @@ ); } -@@ -3378,6 +3496,212 @@ +@@ -3382,6 +3500,212 @@ } } @@ -466,7 +467,7 @@ fn ask_constellation_for_top_level_info( &self, sender_webview_id: WebViewId, -@@ -3488,7 +3812,13 @@ +@@ -3491,7 +3815,13 @@ self.senders.pipeline_to_embedder_sender.clone(), self.senders.constellation_sender.clone(), incomplete.pipeline_id, @@ -481,7 +482,7 @@ incomplete.viewport_details, origin.clone(), final_url.clone(), -@@ -3510,6 +3840,8 @@ +@@ -3513,6 +3843,8 @@ #[cfg(feature = "webgpu")] self.gpu_id_hub.clone(), incomplete.load_data.inherited_secure_context, @@ -490,7 +491,7 @@ incomplete.theme, self.this.clone(), ); -@@ -3615,6 +3947,8 @@ +@@ -3618,6 +3950,8 @@ ); } @@ -499,7 +500,7 @@ document.set_ready_state(cx, DocumentReadyState::Loading); self.documents -@@ -3621,8 +3955,6 @@ +@@ -3624,8 +3958,6 @@ .borrow_mut() .insert(incomplete.pipeline_id, &document); @@ -508,7 +509,7 @@ // Initialize the browsing context for the window. let window_proxy = self.window_proxies.local_window_proxy( cx, -@@ -3633,6 +3965,7 @@ +@@ -3636,6 +3968,7 @@ incomplete.webview_id, incomplete.parent_info, incomplete.opener, @@ -516,7 +517,7 @@ ); if window_proxy.parent().is_some() { // https://html.spec.whatwg.org/multipage/#navigating-across-documents:delaying-load-events-mode-2 -@@ -3805,11 +4138,11 @@ +@@ -3808,11 +4141,11 @@ target_snapshot_params: TargetSnapshotParams, cx: &mut js::context::JSContext, ) { @@ -531,7 +532,7 @@ iframe.navigate_or_reload_child_browsing_context( load_data, history_handling, -@@ -3817,7 +4150,17 @@ +@@ -3820,7 +4153,17 @@ target_snapshot_params, cx, ); @@ -549,7 +550,7 @@ } /// Turn javascript: URL into JS code to eval, according to the steps in -@@ -4366,10 +4709,88 @@ +@@ -4369,10 +4712,88 @@ document.event_handler().handle_refresh_cursor(); } @@ -638,7 +639,7 @@ fn handle_request_screenshot_readiness( &self, webview_id: WebViewId, -@@ -4410,7 +4831,7 @@ +@@ -4413,7 +4834,7 @@ pinch_zoom_infos: PinchZoomInfos, ) { let Some(window) = self.documents.borrow().find_window(pipeline_id) else { diff --git a/patches/components/script_bindings/interfaces.rs.patch b/patches/components/script_bindings/interfaces.rs.patch index 3b5be3b..f7c8ef2 100644 --- a/patches/components/script_bindings/interfaces.rs.patch +++ b/patches/components/script_bindings/interfaces.rs.patch @@ -1,6 +1,6 @@ --- original +++ modified -@@ -110,3 +110,7 @@ +@@ -119,3 +119,7 @@ pub trait HasOrigin { fn origin(&self) -> MutableOrigin; } diff --git a/patches/components/servo/servo.rs.patch b/patches/components/servo/servo.rs.patch index 7e8e1b9..a86055b 100644 --- a/patches/components/servo/servo.rs.patch +++ b/patches/components/servo/servo.rs.patch @@ -187,7 +187,7 @@ ); net::connector::prewarm_tls(); -@@ -1008,6 +1104,7 @@ +@@ -1004,6 +1100,7 @@ Servo(Rc::new(ServoInner { delegate: RefCell::new(Rc::new(DefaultServoDelegate)), paint, @@ -195,7 +195,7 @@ network_manager: Rc::new(RefCell::new(NetworkManager::new( public_resource_threads.clone(), private_resource_threads.clone(), -@@ -1042,6 +1139,10 @@ +@@ -1038,6 +1135,10 @@ *self.0.delegate.borrow_mut() = delegate; } @@ -206,7 +206,7 @@ /// **EXPERIMENTAL:** Intialize GL accelerated media playback. This currently only works on a limited number /// of platforms. This should be run *before* creating [`Servo`] and its first [`WebView`]. pub fn initialize_gl_accelerated_media(display: NativeDisplay, api: GlApi, context: GlContext) { -@@ -1082,6 +1183,22 @@ +@@ -1078,6 +1179,22 @@ .send(EmbedderToConstellationMessage::WebDriverCommand(command)); } @@ -229,7 +229,7 @@ pub fn set_preference(&self, name: &str, value: PrefValue) { let mut preferences = prefs::get().clone(); preferences.set_value(name, value); -@@ -1096,6 +1213,14 @@ +@@ -1092,6 +1209,14 @@ &self.0.site_data_manager } @@ -244,7 +244,7 @@ pub(crate) fn paint<'a>(&'a self) -> Ref<'a, Paint> { self.0.paint.borrow() } -@@ -1204,6 +1329,7 @@ +@@ -1200,6 +1325,7 @@ async_runtime: Box, public_storage_threads: StorageThreads, private_storage_threads: StorageThreads, @@ -252,7 +252,7 @@ ) { // Global configuration options, parsed from the command line. let opts = opts::get(); -@@ -1247,6 +1373,7 @@ +@@ -1243,6 +1369,7 @@ async_runtime, privileged_urls, wake_lock_provider: Box::new(DefaultWakeLockDelegate), -- 2.51.2