Rewild Your Web
18
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: update to Servo 3a680c53897cfb51040b9380954c9068943873cc

webbeef dbf3e2b4 5bb90014

+155 -96
+57 -7
Cargo.lock
··· 4431 4431 "icu_properties 1.5.1", 4432 4432 "icu_provider 1.5.0", 4433 4433 "icu_provider_adapters", 4434 - "icu_segmenter", 4434 + "icu_segmenter 1.5.0", 4435 4435 "icu_timezone", 4436 4436 "tinystr 0.7.6", 4437 4437 "unicode-bidi", ··· 4616 4616 checksum = "52b1a7fbdbf3958f1be8354cb59ac73f165b7b7082d447ff2090355c9a069120" 4617 4617 4618 4618 [[package]] 4619 + name = "icu_locale" 4620 + version = "2.1.1" 4621 + source = "registry+https://github.com/rust-lang/crates.io-index" 4622 + checksum = "532b11722e350ab6bf916ba6eb0efe3ee54b932666afec989465f9243fe6dd60" 4623 + dependencies = [ 4624 + "icu_collections 2.1.1", 4625 + "icu_locale_core", 4626 + "icu_locale_data", 4627 + "icu_provider 2.1.1", 4628 + "potential_utf", 4629 + "tinystr 0.8.2", 4630 + "zerovec 0.11.5", 4631 + ] 4632 + 4633 + [[package]] 4619 4634 name = "icu_locale_core" 4620 4635 version = "2.1.1" 4621 4636 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4623 4638 dependencies = [ 4624 4639 "displaydoc", 4625 4640 "litemap 0.8.1", 4641 + "serde", 4626 4642 "tinystr 0.8.2", 4627 4643 "writeable 0.6.2", 4628 4644 "zerovec 0.11.5", 4629 4645 ] 4646 + 4647 + [[package]] 4648 + name = "icu_locale_data" 4649 + version = "2.1.2" 4650 + source = "registry+https://github.com/rust-lang/crates.io-index" 4651 + checksum = "1c5f1d16b4c3a2642d3a719f18f6b06070ab0aef246a6418130c955ae08aa831" 4630 4652 4631 4653 [[package]] 4632 4654 name = "icu_locid" ··· 4805 4827 dependencies = [ 4806 4828 "displaydoc", 4807 4829 "icu_locale_core", 4830 + "serde", 4831 + "stable_deref_trait", 4808 4832 "writeable 0.6.2", 4809 4833 "yoke 0.8.1", 4810 4834 "zerofrom", ··· 4847 4871 "icu_collections 1.5.0", 4848 4872 "icu_locid", 4849 4873 "icu_provider 1.5.0", 4850 - "icu_segmenter_data", 4874 + "icu_segmenter_data 1.5.1", 4851 4875 "utf8_iter", 4852 4876 "zerovec 0.10.4", 4853 4877 ] 4854 4878 4855 4879 [[package]] 4880 + name = "icu_segmenter" 4881 + version = "2.1.2" 4882 + source = "registry+https://github.com/rust-lang/crates.io-index" 4883 + checksum = "a807a7488f3f758629ae86d99d9d30dce24da2fb2945d74c80a4f4a62c71db73" 4884 + dependencies = [ 4885 + "core_maths", 4886 + "icu_collections 2.1.1", 4887 + "icu_locale", 4888 + "icu_provider 2.1.1", 4889 + "icu_segmenter_data 2.1.1", 4890 + "potential_utf", 4891 + "utf8_iter", 4892 + "zerovec 0.11.5", 4893 + ] 4894 + 4895 + [[package]] 4856 4896 name = "icu_segmenter_data" 4857 4897 version = "1.5.1" 4858 4898 source = "registry+https://github.com/rust-lang/crates.io-index" 4859 4899 checksum = "a1e52775179941363cc594e49ce99284d13d6948928d8e72c755f55e98caa1eb" 4860 4900 4861 4901 [[package]] 4902 + name = "icu_segmenter_data" 4903 + version = "2.1.1" 4904 + source = "registry+https://github.com/rust-lang/crates.io-index" 4905 + checksum = "6ebbb7321d9e21d25f5660366cb6c08201d0175898a3a6f7a41ee9685af21c80" 4906 + 4907 + [[package]] 4862 4908 name = "icu_timezone" 4863 4909 version = "1.5.0" 4864 4910 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 6904 6950 6905 6951 [[package]] 6906 6952 name = "once_cell" 6907 - version = "1.21.3" 6953 + version = "1.21.4" 6908 6954 source = "registry+https://github.com/rust-lang/crates.io-index" 6909 - checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 6955 + checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" 6910 6956 dependencies = [ 6911 6957 "critical-section", 6912 6958 "portable-atomic", ··· 7618 7664 source = "registry+https://github.com/rust-lang/crates.io-index" 7619 7665 checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" 7620 7666 dependencies = [ 7667 + "serde_core", 7668 + "writeable 0.6.2", 7621 7669 "zerovec 0.11.5", 7622 7670 ] 7623 7671 ··· 9354 9402 "euclid", 9355 9403 "html5ever", 9356 9404 "icu_locid", 9357 - "icu_segmenter", 9405 + "icu_segmenter 1.5.0", 9358 9406 "itertools 0.14.0", 9359 9407 "kurbo 0.12.0", 9360 9408 "log", ··· 10775 10823 "derive_more", 10776 10824 "encoding_rs", 10777 10825 "euclid", 10778 - "icu_segmenter", 10826 + "icu_segmenter 2.1.2", 10779 10827 "indexmap", 10780 10828 "itertools 0.14.0", 10781 10829 "itoa", ··· 11321 11369 checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" 11322 11370 dependencies = [ 11323 11371 "displaydoc", 11372 + "serde_core", 11324 11373 "zerovec 0.11.5", 11325 11374 ] 11326 11375 ··· 12502 12551 "bytes", 12503 12552 "cookie 0.16.2", 12504 12553 "http 0.2.12", 12505 - "icu_segmenter", 12554 + "icu_segmenter 1.5.0", 12506 12555 "log", 12507 12556 "serde", 12508 12557 "serde_derive", ··· 13936 13985 source = "registry+https://github.com/rust-lang/crates.io-index" 13937 13986 checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" 13938 13987 dependencies = [ 13988 + "serde", 13939 13989 "yoke 0.8.1", 13940 13990 "zerofrom", 13941 13991 "zerovec-derive 0.11.2",
+1 -1
forkme.lock
··· 1 - 74c16ffd8aa7909c55fa70d6098cd745651ff791 1 + 3a680c53897cfb51040b9380954c9068943873cc
+3 -3
patches/components/config/prefs.rs.patch
··· 8 8 use std::env::consts::ARCH; 9 9 -use std::sync::{RwLock, RwLockReadGuard}; 10 10 +use std::sync::{LazyLock, RwLock, RwLockReadGuard}; 11 + use std::time::Duration; 11 12 12 13 use serde::{Deserialize, Serialize}; 13 - use servo_config_macro::ServoPreferences; 14 - @@ -12,11 +13,16 @@ 14 + @@ -13,11 +14,16 @@ 15 15 16 16 static PREFERENCES: RwLock<Preferences> = RwLock::new(Preferences::const_default()); 17 17 ··· 29 29 30 30 #[inline] 31 31 /// Get the current set of global preferences for Servo. 32 - @@ -62,6 +68,21 @@ 32 + @@ -63,6 +69,21 @@ 33 33 } 34 34 } 35 35
+11 -10
patches/components/layout/display_list/mod.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -39,13 +39,14 @@ 3 + @@ -39,13 +39,15 @@ 4 4 use style::values::specified::text::TextDecorationLine; 5 5 use style_traits::{CSSPixel as StyloCSSPixel, DevicePixel as StyloDevicePixel}; 6 6 use webrender_api::units::{ ··· 12 12 self as wr, BorderDetails, BorderRadius, BorderSide, BoxShadowClipMode, BuiltDisplayList, 13 13 - ClipChainId, ClipMode, ColorF, CommonItemProperties, ComplexClipRegion, GlyphInstance, 14 14 - NinePatchBorder, NinePatchBorderSource, NormalBorder, PrimitiveFlags, PropertyBinding, 15 - - SpatialId, SpatialTreeItemKey, units, 15 + - PropertyBindingKey, SpatialId, SpatialTreeItemKey, units, 16 16 + ClipChainId, ClipMode, ColorF, CommonItemProperties, ComplexClipRegion, ExternalScrollId, 17 17 + GlyphInstance, NinePatchBorder, NinePatchBorderSource, NormalBorder, PrimitiveFlags, 18 - + PropertyBinding, ReferenceFrameKind, SpatialId, SpatialTreeItemKey, TransformStyle, units, 18 + + PropertyBinding, PropertyBindingKey, ReferenceFrameKind, SpatialId, SpatialTreeItemKey, 19 + + TransformStyle, units, 19 20 }; 20 21 use wr::units::LayoutVector2D; 21 22 22 - @@ -128,6 +129,9 @@ 23 + @@ -128,6 +130,9 @@ 23 24 24 25 /// Statistics collected about the reflow, in order to write tests for incremental layout. 25 26 reflow_statistics: &'a mut ReflowStatistics, ··· 29 30 } 30 31 31 32 struct InspectorHighlight { 32 - @@ -195,6 +199,36 @@ 33 + @@ -195,6 +200,36 @@ 33 34 webrender_display_list_builder.dump_serialized_display_list(); 34 35 } 35 36 ··· 66 67 let _span = profile_traits::trace_span!("DisplayListBuilder::build").entered(); 67 68 let mut builder = DisplayListBuilder { 68 69 current_scroll_node_id: paint_info.root_reference_frame_id, 69 - @@ -209,6 +243,7 @@ 70 + @@ -209,6 +244,7 @@ 70 71 device_pixel_ratio, 71 72 paint_timing_handler, 72 73 reflow_statistics, 73 74 + zoom_reference_frame_spatial_id, 74 75 }; 75 76 76 - builder.add_all_spatial_nodes(); 77 - @@ -222,15 +257,20 @@ 77 + // Clear any caret color from previous display list constructions. 78 + @@ -225,15 +261,20 @@ 78 79 let pipeline_id = builder.paint_info.pipeline_id; 79 80 let viewport_size = builder.paint_info.viewport_details.size; 80 81 let viewport_rect = LayoutRect::from_size(viewport_size.cast_unit()); ··· 97 98 stacking_context_tree 98 99 .root_stacking_context 99 100 .build_canvas_background_display_list(&mut builder, fragment_tree); 100 - @@ -239,6 +279,11 @@ 101 + @@ -242,6 +283,11 @@ 101 102 .build_display_list(&mut builder); 102 103 builder.paint_dom_inspector_highlight(); 103 104 ··· 109 110 webrender_display_list_builder.end().1 110 111 } 111 112 112 - @@ -276,12 +321,42 @@ 113 + @@ -279,12 +325,42 @@ 113 114 let mut scroll_tree = std::mem::take(&mut self.paint_info.scroll_tree); 114 115 let mut mapping = Vec::with_capacity(scroll_tree.nodes.len()); 115 116
+6 -6
patches/components/paint/paint.rs.patch
··· 40 40 } 41 41 42 42 /// Why we need to be repainted. This is used for debugging. 43 - @@ -212,6 +218,7 @@ 43 + @@ -214,6 +220,7 @@ 44 44 webxr_main_thread: RefCell::new(webxr_main_thread), 45 45 #[cfg(feature = "webgpu")] 46 46 webgpu_image_map: Default::default(), ··· 48 48 })) 49 49 } 50 50 51 - @@ -544,6 +551,92 @@ 51 + @@ -546,6 +553,92 @@ 52 52 painter.enable_lcp_calculation(&webview_id); 53 53 } 54 54 }, ··· 141 141 } 142 142 } 143 143 144 - @@ -601,6 +694,152 @@ 144 + @@ -603,6 +696,152 @@ 145 145 sender.send(ProcessReports::new(reports)); 146 146 } 147 147 ··· 294 294 /// Handle messages sent to `Paint` during the shutdown process. In general, 295 295 /// the things `Paint` can do in this state are limited. It's very important to 296 296 /// answer any synchronous messages though as other threads might be waiting on the 297 - @@ -745,10 +984,37 @@ 297 + @@ -747,10 +986,37 @@ 298 298 #[cfg(feature = "webxr")] 299 299 self.webxr_main_thread.borrow_mut().run_one_frame(); 300 300 ··· 333 333 self.shutdown_state() != ShutdownState::FinishedShuttingDown 334 334 } 335 335 336 - @@ -788,6 +1054,10 @@ 336 + @@ -790,6 +1056,10 @@ 337 337 if self.shutdown_state() != ShutdownState::NotShuttingDown { 338 338 return; 339 339 } ··· 344 344 self.painter_mut(webview_id.into()) 345 345 .notify_input_event(webview_id, event); 346 346 } 347 - @@ -796,6 +1066,53 @@ 347 + @@ -798,6 +1068,53 @@ 348 348 if self.shutdown_state() != ShutdownState::NotShuttingDown { 349 349 return; 350 350 }
+27 -19
patches/components/paint/painter.rs.patch
··· 3 3 @@ -3,6 +3,7 @@ 4 4 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ 5 5 6 - use std::cell::Cell; 6 + use std::cell::{Cell, LazyCell}; 7 7 +use std::collections::BTreeMap; 8 8 use std::collections::hash_map::Entry; 9 9 use std::rc::Rc; 10 10 use std::sync::Arc; 11 - @@ -80,7 +81,14 @@ 11 + @@ -81,7 +82,14 @@ 12 12 pub(crate) painter_id: PainterId, 13 13 14 14 /// Our [`WebViewRenderer`]s, one for every `WebView`. ··· 24 24 25 25 /// Tracks whether or not the view needs to be repainted. 26 26 pub(crate) needs_repaint: Cell<RepaintReason>, 27 - @@ -258,6 +266,7 @@ 27 + @@ -265,6 +273,7 @@ 28 28 painter_id, 29 29 embedder_to_constellation_sender, 30 30 webview_renderers: Default::default(), ··· 32 32 rendering_context, 33 33 needs_repaint: Cell::default(), 34 34 pending_frames: Default::default(), 35 - @@ -278,7 +287,12 @@ 35 + @@ -289,7 +298,12 @@ 36 36 painter 37 37 } 38 38 ··· 46 46 // The WebXR thread may make a different context current 47 47 if let Err(err) = self.rendering_context.make_current() { 48 48 warn!("Failed to make the rendering context current: {:?}", err); 49 - @@ -285,18 +299,23 @@ 49 + @@ -296,18 +310,20 @@ 50 50 } 51 51 52 52 let mut need_zoom = false; ··· 62 62 - .collect(); 63 63 + let mut unconsumed_scrolls = Vec::new(); 64 64 + let mut scroll_offset_updates = Vec::new(); 65 - + 65 + 66 + - self.send_zoom_and_scroll_offset_updates(need_zoom, scroll_offset_updates); 66 67 + for (webview_id, webview_renderer) in self.webview_renderers.iter_mut() { 67 68 + let result = 68 69 + webview_renderer.process_pending_scroll_and_pinch_zoom_events(&self.webrender_api); ··· 75 76 + } 76 77 + } 77 78 78 - self.send_zoom_and_scroll_offset_updates(need_zoom, scroll_offset_updates); 79 + if let Some(colors) = self.web_content_animator.update(&self.webview_renderers) { 80 + let mut transaction = Transaction::new(); 81 + @@ -320,6 +336,9 @@ 82 + self.generate_frame(&mut transaction, RenderReasons::ANIMATED_PROPERTY); 83 + self.send_transaction(transaction); 84 + } 85 + + 86 + + self.send_zoom_and_scroll_offset_updates(need_zoom, scroll_offset_updates); 79 87 + unconsumed_scrolls 80 88 } 81 89 82 90 #[track_caller] 83 - @@ -590,7 +609,16 @@ 91 + @@ -613,7 +632,16 @@ 84 92 85 93 let root_clip_id = builder.define_clip_rect(root_reference_frame, viewport_rect); 86 94 let clip_chain_id = builder.define_clip_chain(None, [root_clip_id]); ··· 97 105 if webview_renderer.hidden() { 98 106 continue; 99 107 } 100 - @@ -651,7 +679,7 @@ 108 + @@ -674,7 +702,7 @@ 101 109 /// Set the root pipeline for our WebRender scene to a display list that consists of an iframe 102 110 /// for each visible top-level browsing context, applying a transformation on the root for 103 111 /// pinch zoom, page zoom, and HiDPI scaling. ··· 106 114 let mut transaction = Transaction::new(); 107 115 self.send_root_pipeline_display_list_in_transaction(&mut transaction); 108 116 self.generate_frame(&mut transaction, RenderReasons::SCENE); 109 - @@ -717,6 +745,21 @@ 117 + @@ -740,6 +768,21 @@ 110 118 self.send_transaction(transaction); 111 119 } 112 120 ··· 128 136 pub(crate) fn toggle_webrender_debug(&mut self, option: WebRenderDebugOption) { 129 137 let Some(renderer) = self.webrender_renderer.as_mut() else { 130 138 return; 131 - @@ -787,6 +830,26 @@ 139 + @@ -810,6 +853,26 @@ 132 140 self.send_root_pipeline_display_list(); 133 141 } 134 142 ··· 155 163 pub(crate) fn set_throttled( 156 164 &mut self, 157 165 webview_id: WebViewId, 158 - @@ -1180,15 +1243,23 @@ 166 + @@ -1208,15 +1271,23 @@ 159 167 webview: Box<dyn WebViewTrait>, 160 168 viewport_details: ViewportDetails, 161 169 ) { ··· 183 191 } 184 192 185 193 pub(crate) fn remove_webview(&mut self, webview_id: WebViewId) { 186 - @@ -1275,28 +1346,29 @@ 194 + @@ -1303,28 +1374,29 @@ 187 195 } 188 196 189 197 pub(crate) fn notify_input_event(&mut self, webview_id: WebViewId, event: InputEventAndId) { ··· 206 214 - self.lcp_calculator.disable_for_webview(webview_id); 207 215 - }, 208 216 - } 217 + - 218 + - webview_renderer.notify_input_event(&self.webrender_api, &self.needs_repaint, event); 209 219 + let Some(webview_renderer) = self.webview_renderers.get_mut(&webview_id) else { 210 220 + return; 211 221 + }; ··· 226 236 + // Disable LCP calculation on any other input event except mouse moves. 227 237 + self.lcp_calculator.disable_for_webview(webview_id); 228 238 + }, 229 - + } 230 - 231 - - webview_renderer.notify_input_event(&self.webrender_api, &self.needs_repaint, event); 232 - - } 239 + } 240 + + 233 241 + webview_renderer.notify_input_event(&self.webrender_api, &self.needs_repaint, event); 234 242 } 235 243 236 244 pub(crate) fn notify_scroll_event( 237 - @@ -1320,6 +1392,38 @@ 245 + @@ -1348,6 +1420,38 @@ 238 246 self.lcp_calculator.enabled_for_webview(webview_id) 239 247 } 240 248 ··· 273 281 pub(crate) fn pinch_zoom( 274 282 &mut self, 275 283 webview_id: WebViewId, 276 - @@ -1366,7 +1470,6 @@ 284 + @@ -1394,7 +1498,6 @@ 277 285 result: InputEventResult, 278 286 ) { 279 287 let Some(webview_renderer) = self.webview_renderers.get_mut(&webview_id) else {
+11 -11
patches/components/paint/webview_renderer.rs.patch
··· 64 64 /// Returns the [`PipelineDetails`] for the given [`PipelineId`], creating it if needed. 65 65 pub(crate) fn ensure_pipeline_details( 66 66 &mut self, 67 - @@ -359,16 +386,14 @@ 67 + @@ -384,16 +411,14 @@ 68 68 .map(|point| point.as_device_point(self.device_pixels_per_page_pixel())); 69 69 let hit_test_result = match event_point { 70 70 Some(point) => { ··· 86 86 }, 87 87 None => None, 88 88 }; 89 - @@ -699,6 +724,88 @@ 89 + @@ -724,6 +749,88 @@ 90 90 self.on_scroll_window_event(scroll, point); 91 91 } 92 92 ··· 175 175 fn on_scroll_window_event(&mut self, scroll: Scroll, cursor: DevicePoint) { 176 176 self.pending_scroll_zoom_events 177 177 .push(ScrollZoomEvent::Scroll(ScrollEvent { 178 - @@ -708,18 +815,25 @@ 178 + @@ -733,18 +840,25 @@ 179 179 })); 180 180 } 181 181 ··· 206 206 } 207 207 208 208 // Batch up all scroll events and changes to pinch zoom into a single change, or 209 - @@ -773,15 +887,24 @@ 209 + @@ -798,15 +912,24 @@ 210 210 } 211 211 } 212 212 ··· 237 237 238 238 let scroll_result = combined_scroll_event.and_then(|combined_event| { 239 239 self.scroll_node_at_device_point( 240 - @@ -790,6 +913,21 @@ 240 + @@ -815,6 +938,21 @@ 241 241 combined_event.scroll, 242 242 ) 243 243 }); ··· 259 259 if let Some(ref scroll_result) = scroll_result { 260 260 self.send_scroll_positions_to_layout_for_pipeline( 261 261 scroll_result.hit_test_result.pipeline_id, 262 - @@ -805,7 +943,11 @@ 262 + @@ -830,7 +968,11 @@ 263 263 self.send_pinch_zoom_infos_to_script(); 264 264 } 265 265 ··· 272 272 } 273 273 274 274 /// Perform a hit test at the given [`DevicePoint`] and apply the [`Scroll`] 275 - @@ -812,7 +954,7 @@ 275 + @@ -837,7 +979,7 @@ 276 276 /// scrolling to the applicable scroll node under that point. If a scroll was 277 277 /// performed, returns the hit test result contains [`PipelineId`] of the node 278 278 /// scrolled, the id, and the final scroll delta. ··· 281 281 &mut self, 282 282 render_api: &RenderApi, 283 283 cursor: DevicePoint, 284 - @@ -840,7 +982,10 @@ 284 + @@ -865,7 +1007,10 @@ 285 285 // its ancestor pipelines. 286 286 let mut previous_pipeline_id = None; 287 287 for hit_test_result in hit_test_results { ··· 293 293 if previous_pipeline_id.replace(hit_test_result.pipeline_id) != 294 294 Some(hit_test_result.pipeline_id) 295 295 { 296 - @@ -867,7 +1012,11 @@ 296 + @@ -892,7 +1037,11 @@ 297 297 } 298 298 } 299 299 } ··· 306 306 } 307 307 308 308 /// Scroll the viewport (root pipeline, root scroll node) of this WebView, but first 309 - @@ -1006,20 +1155,45 @@ 309 + @@ -1031,20 +1180,45 @@ 310 310 } 311 311 312 312 fn send_window_size_message(&self) { ··· 364 364 } 365 365 366 366 /// Set the `hidpi_scale_factor` for this renderer, returning `true` if the value actually changed. 367 - @@ -1083,8 +1257,21 @@ 367 + @@ -1108,8 +1282,21 @@ 368 368 if let Some(wheel_event) = self.pending_wheel_events.remove(&id) { 369 369 if !result.contains(InputEventResult::DefaultPrevented) { 370 370 // A scroll delta for a wheel event is the inverse of the wheel delta.
+1 -1
patches/components/script/dom/debuggerglobalscope.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -106,9 +106,11 @@ 3 + @@ -109,9 +109,11 @@ 4 4 None, 5 5 #[cfg(feature = "webgpu")] 6 6 gpu_id_hub,
+19 -19
patches/components/script/dom/document_event_handler.rs.patch
··· 10 10 + EmbeddedWebViewEventType, KeyboardScroll, ScriptToConstellationMessage, 11 11 +}; 12 12 use embedder_traits::{ 13 - - Cursor, EditingActionEvent, EmbedderMsg, ImeEvent, InputEvent, InputEventOutcome, 13 + - Cursor, EditingActionEvent, EmbedderMsg, ImeEvent, InputEvent, InputEventId, InputEventOutcome, 14 14 - InputEventResult, KeyboardEvent as EmbedderKeyboardEvent, MouseButton, MouseButtonAction, 15 15 - MouseButtonEvent, MouseLeftViewportEvent, TouchEvent as EmbedderTouchEvent, TouchEventType, 16 16 - TouchId, UntrustedNodeAddress, WheelEvent as EmbedderWheelEvent, 17 - + Cursor, EditingActionEvent, EmbedderMsg, ImeEvent, InputEvent, InputEventAndId, 17 + + Cursor, EditingActionEvent, EmbedderMsg, ImeEvent, InputEvent, InputEventAndId, InputEventId, 18 18 + InputEventOutcome, InputEventResult, KeyboardEvent as EmbedderKeyboardEvent, MouseButton, 19 19 + MouseButtonAction, MouseButtonEvent, MouseLeftViewportEvent, TouchEvent as EmbedderTouchEvent, 20 20 + TouchEventType, TouchId, UntrustedNodeAddress, WebViewPoint, WheelEvent as EmbedderWheelEvent, ··· 111 111 /// The [`DocumentEventHandler`] is a structure responsible for handling input events for 112 112 /// the [`crate::Document`] and storing data related to event handling. It exists to 113 113 /// decrease the size of the [`crate::Document`] structure. 114 - @@ -181,6 +238,20 @@ 114 + @@ -192,6 +249,20 @@ 115 115 next_touch_pointer_id: Cell<i32>, 116 116 /// A map holding information about currently registered access key handlers. 117 117 access_key_handlers: DomRefCell<FxHashMap<char, Dom<HTMLElement>>>, ··· 132 132 } 133 133 134 134 impl DocumentEventHandler { 135 - @@ -202,6 +273,9 @@ 135 + @@ -215,6 +286,9 @@ 136 136 active_pointer_ids: Default::default(), 137 137 next_touch_pointer_id: Cell::new(1), 138 138 access_key_handlers: Default::default(), ··· 142 142 } 143 143 } 144 144 145 - @@ -497,6 +571,198 @@ 145 + @@ -536,6 +610,198 @@ 146 146 } 147 147 } 148 148 ··· 341 341 /// <https://w3c.github.io/uievents/#handle-native-mouse-move> 342 342 fn handle_native_mouse_move_event(&self, input_event: &ConstellationInputEvent, can_gc: CanGc) { 343 343 // Ignore all incoming events without a hit test. 344 - @@ -511,6 +777,57 @@ 344 + @@ -550,6 +816,57 @@ 345 345 return; 346 346 } 347 347 ··· 399 399 // Update the cursor when the mouse moves, if it has changed. 400 400 self.set_cursor(Some(hit_test_result.cursor)); 401 401 402 - @@ -736,6 +1053,12 @@ 402 + @@ -775,6 +1092,12 @@ 403 403 return; 404 404 }; 405 405 ··· 412 412 debug!( 413 413 "{:?}: at {:?}", 414 414 event.action, hit_test_result.point_in_frame 415 - @@ -828,18 +1151,25 @@ 415 + @@ -867,18 +1190,25 @@ 416 416 let target_el = element.find_click_focusable_shadow_host_if_necessary(); 417 417 418 418 let document = self.window.Document(); ··· 443 443 document.commit_focus_transaction(FocusInitiator::Click, can_gc); 444 444 } 445 445 446 - @@ -849,7 +1179,7 @@ 446 + @@ -888,7 +1218,7 @@ 447 447 self.maybe_show_context_menu( 448 448 node.upcast(), 449 449 &hit_test_result, ··· 452 452 can_gc, 453 453 ); 454 454 } 455 - @@ -973,9 +1303,30 @@ 455 + @@ -1012,9 +1342,30 @@ 456 456 &self, 457 457 target: &EventTarget, 458 458 hit_test_result: &HitTestResult, ··· 484 484 // <https://w3c.github.io/uievents/#contextmenu> 485 485 let menu_event = PointerEvent::new( 486 486 &self.window, // window 487 - @@ -989,25 +1340,25 @@ 487 + @@ -1028,25 +1379,25 @@ 488 488 hit_test_result 489 489 .point_relative_to_initial_containing_block 490 490 .to_i32(), ··· 529 529 can_gc, 530 530 ); 531 531 532 - @@ -1023,6 +1374,89 @@ 532 + @@ -1062,6 +1413,89 @@ 533 533 }; 534 534 } 535 535 ··· 619 619 fn handle_touch_event( 620 620 &self, 621 621 event: EmbedderTouchEvent, 622 - @@ -1029,6 +1463,29 @@ 622 + @@ -1068,6 +1502,29 @@ 623 623 input_event: &ConstellationInputEvent, 624 624 can_gc: CanGc, 625 625 ) -> InputEventResult { ··· 649 649 // Ignore all incoming events without a hit test. 650 650 let Some(hit_test_result) = self.window.hit_test_from_input_event(input_event) else { 651 651 self.update_active_touch_points_when_early_return(event); 652 - @@ -1035,6 +1492,16 @@ 652 + @@ -1074,6 +1531,16 @@ 653 653 return Default::default(); 654 654 }; 655 655 ··· 666 666 let TouchId(identifier) = event.touch_id; 667 667 668 668 let Some(element) = hit_test_result 669 - @@ -1166,6 +1633,10 @@ 669 + @@ -1205,6 +1672,10 @@ 670 670 // <https://html.spec.whatwg.org/multipage/#selector-active> 671 671 // If the element is being actively pointed at the element is being activated. 672 672 self.element_for_activation(element).set_active_state(true); ··· 677 677 (current_target, pointer_touch) 678 678 }, 679 679 _ => { 680 - @@ -1198,10 +1669,31 @@ 680 + @@ -1237,10 +1708,31 @@ 681 681 can_gc, 682 682 ); 683 683 ··· 710 710 }, 711 711 TouchEventType::Up | TouchEventType::Cancel => { 712 712 active_touch_points.swap_remove(index); 713 - @@ -1209,6 +1701,17 @@ 713 + @@ -1248,6 +1740,17 @@ 714 714 // <https://html.spec.whatwg.org/multipage/#selector-active> 715 715 // If the element is being actively pointed at the element is being activated. 716 716 self.element_for_activation(element).set_active_state(false); ··· 728 728 }, 729 729 TouchEventType::Down => unreachable!("Should have been handled above"), 730 730 } 731 - @@ -1252,6 +1755,19 @@ 731 + @@ -1291,6 +1794,19 @@ 732 732 ); 733 733 let event = touch_event.upcast::<Event>(); 734 734 event.fire(&touch_dispatch_target, can_gc); ··· 748 748 event.flags().into() 749 749 } 750 750 751 - @@ -1416,6 +1932,16 @@ 751 + @@ -1455,6 +1971,16 @@ 752 752 return Default::default(); 753 753 }; 754 754
+3 -3
patches/components/script/dom/mod.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -289,6 +289,7 @@ 3 + @@ -290,6 +290,7 @@ 4 4 #[expect(dead_code)] 5 5 pub(crate) mod element; 6 6 pub(crate) mod elementinternals; ··· 8 8 pub(crate) mod errorevent; 9 9 pub(crate) mod event; 10 10 pub(crate) mod eventsource; 11 - @@ -322,6 +323,7 @@ 11 + @@ -323,6 +324,7 @@ 12 12 pub(crate) mod inputevent; 13 13 pub(crate) mod intersectionobserver; 14 14 pub(crate) mod intersectionobserverentry; ··· 16 16 pub(crate) mod keyboardevent; 17 17 pub(crate) mod location; 18 18 pub(crate) mod media; 19 - @@ -349,6 +351,9 @@ 19 + @@ -350,6 +352,9 @@ 20 20 pub(crate) mod pagetransitionevent; 21 21 pub(crate) mod paintsize; 22 22 pub(crate) mod paintworkletglobalscope;
+7 -7
patches/components/script/script_thread.rs.patch
··· 77 77 } 78 78 } 79 79 80 - @@ -3047,6 +3072,9 @@ 80 + @@ -3054,6 +3079,9 @@ 81 81 .documents 82 82 .borrow() 83 83 .find_iframe(parent_pipeline_id, browsing_context_id); ··· 87 87 if let Some(frame_element) = frame_element { 88 88 frame_element.update_pipeline_id(new_pipeline_id, reason, cx); 89 89 } 90 - @@ -3066,6 +3094,7 @@ 90 + @@ -3073,6 +3101,7 @@ 91 91 // is no need to pass along existing opener information that 92 92 // will be discarded. 93 93 None, ··· 95 95 ); 96 96 } 97 97 } 98 - @@ -3342,6 +3371,60 @@ 98 + @@ -3349,6 +3378,60 @@ 99 99 } 100 100 } 101 101 ··· 156 156 fn ask_constellation_for_top_level_info( 157 157 &self, 158 158 sender_webview_id: WebViewId, 159 - @@ -3456,7 +3539,13 @@ 159 + @@ -3463,7 +3546,13 @@ 160 160 self.senders.pipeline_to_embedder_sender.clone(), 161 161 self.senders.constellation_sender.clone(), 162 162 incomplete.pipeline_id, ··· 171 171 incomplete.viewport_details, 172 172 origin.clone(), 173 173 final_url.clone(), 174 - @@ -3478,6 +3567,8 @@ 174 + @@ -3485,6 +3574,8 @@ 175 175 #[cfg(feature = "webgpu")] 176 176 self.gpu_id_hub.clone(), 177 177 incomplete.load_data.inherited_secure_context, ··· 180 180 incomplete.theme, 181 181 self.this.clone(), 182 182 ); 183 - @@ -3501,6 +3592,7 @@ 183 + @@ -3508,6 +3599,7 @@ 184 184 incomplete.webview_id, 185 185 incomplete.parent_info, 186 186 incomplete.opener, ··· 188 188 ); 189 189 if window_proxy.parent().is_some() { 190 190 // https://html.spec.whatwg.org/multipage/#navigating-across-documents:delaying-load-events-mode-2 191 - @@ -4273,6 +4365,24 @@ 191 + @@ -4280,6 +4372,24 @@ 192 192 document.event_handler().handle_refresh_cursor(); 193 193 } 194 194
+2 -2
patches/components/servo/lib.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -30,7 +30,7 @@ 3 + @@ -31,7 +31,7 @@ 4 4 // should be exported at the root. See <https://github.com/servo/servo/issues/18475>. 5 5 pub use accesskit; 6 6 pub use base::generic_channel::GenericSender; ··· 9 9 pub use embedder_traits::user_contents::UserScript; 10 10 pub use embedder_traits::*; 11 11 pub use image::RgbaImage; 12 - @@ -50,9 +50,12 @@ 12 + @@ -51,9 +51,12 @@ 13 13 // This should be replaced with an API on ServoBuilder. 14 14 // See <https://github.com/servo/servo/issues/40950>. 15 15 pub use resources;
+6 -6
patches/components/servo/servo.rs.patch
··· 9 9 use servo_geometry::{ 10 10 DeviceIndependentIntRect, convert_rect_to_css_pixel, convert_size_to_css_pixel, 11 11 }; 12 - @@ -206,9 +206,7 @@ 12 + @@ -199,9 +199,7 @@ 13 13 } 14 14 15 15 if self.constellation_proxy.disconnected() { ··· 20 20 } 21 21 22 22 self.paint.borrow_mut().perform_updates(); 23 - @@ -260,10 +258,39 @@ 23 + @@ -253,10 +251,39 @@ 24 24 25 25 fn handle_delegate_errors(&self) { 26 26 while let Some(error) = self.servo_errors.try_recv() { ··· 61 61 fn clean_up_destroyed_webview_handles(&self) { 62 62 // Remove any webview handles that have been destroyed and would not be upgradable. 63 63 // Note that `retain` is O(capacity) because it visits empty buckets, so it may be worth 64 - @@ -421,6 +448,11 @@ 64 + @@ -414,6 +441,11 @@ 65 65 webview.request_create_new(response_sender); 66 66 } 67 67 }, ··· 73 73 EmbedderMsg::WebViewClosed(webview_id) => { 74 74 if let Some(webview) = self.get_webview_handle(webview_id) { 75 75 webview.delegate().notify_closed(webview); 76 - @@ -574,10 +606,7 @@ 76 + @@ -567,10 +599,7 @@ 77 77 .delegate 78 78 .borrow() 79 79 .notify_devtools_server_started(port, token), ··· 85 85 }, 86 86 EmbedderMsg::RequestDevtoolsConnection(response_sender) => { 87 87 self.delegate 88 - @@ -702,6 +731,47 @@ 88 + @@ -695,6 +724,47 @@ 89 89 .notify_accessibility_tree_update(webview, tree_update); 90 90 } 91 91 }, ··· 133 133 } 134 134 } 135 135 } 136 - @@ -944,6 +1014,14 @@ 136 + @@ -937,6 +1007,14 @@ 137 137 )); 138 138 } 139 139
+1 -1
patches/components/shared/base/id.rs.patch
··· 21 21 } 22 22 23 23 impl From<PipelineId> for TreeId { 24 - @@ -378,6 +392,24 @@ 24 + @@ -384,6 +398,24 @@ 25 25 pub fn mock_for_testing(browsing_context_id: BrowsingContextId) -> WebViewId { 26 26 WebViewId(TEST_PAINTER_ID, browsing_context_id) 27 27 }