Rewild Your Web
18
fork

Configure Feed

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

chore: update to Servo 401d327b96f6eda8c856aefcb54844c8209e0b48

webbeef abeb4b8f 98e8d433

+95 -90
+1
Cargo.lock
··· 7416 7416 name = "servo-base" 7417 7417 version = "0.1.0" 7418 7418 dependencies = [ 7419 + "accesskit", 7419 7420 "crossbeam-channel", 7420 7421 "ipc-channel", 7421 7422 "libc",
+1 -1
forkme.lock
··· 1 - 6a98cdc37df111b13bcae026be2a7c2e71c01b87 1 + 401d327b96f6eda8c856aefcb54844c8209e0b48
+1 -1
patches/.gitignore.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -77,3 +77,9 @@ 3 + @@ -78,3 +78,9 @@ 4 4 5 5 # Justfiles 6 6 justfile
+7 -5
patches/components/constellation/constellation.rs.patch
··· 314 314 } 315 315 } 316 316 317 - @@ -3169,6 +3370,13 @@ 317 + @@ -3174,6 +3375,13 @@ 318 318 /// <https://html.spec.whatwg.org/multipage/#destroy-a-top-level-traversable> 319 319 fn handle_close_top_level_browsing_context(&mut self, webview_id: WebViewId) { 320 320 debug!("{webview_id}: Closing"); ··· 328 328 let browsing_context_id = BrowsingContextId::from(webview_id); 329 329 // Step 5. Remove traversable from the user agent's top-level traversable set. 330 330 let browsing_context = 331 - @@ -3445,8 +3653,27 @@ 331 + @@ -3450,8 +3658,27 @@ 332 332 opener_webview_id, 333 333 opener_pipeline_id, 334 334 response_sender, ··· 356 356 let Some((webview_id_sender, webview_id_receiver)) = generic_channel::channel() else { 357 357 warn!("Failed to create channel"); 358 358 let _ = response_sender.send(None); 359 - @@ -3544,6 +3771,359 @@ 359 + @@ -3550,6 +3777,361 @@ 360 360 }); 361 361 } 362 362 ··· 456 456 + new_webview_id, 457 457 + ConstellationWebView::new_with_hide_focus( 458 458 + new_webview_id, 459 + + new_pipeline_id, 459 460 + new_browsing_context_id, 460 461 + user_content_manager_id, 461 462 + hide_focus, ··· 618 619 + new_webview_id, 619 620 + ConstellationWebView::new( 620 621 + new_webview_id, 622 + + new_pipeline_id, 621 623 + new_browsing_context_id, 622 624 + user_content_manager_id, 623 625 + ), ··· 716 718 #[servo_tracing::instrument(skip_all)] 717 719 fn handle_refresh_cursor(&self, pipeline_id: PipelineId) { 718 720 let Some(pipeline) = self.pipelines.get(&pipeline_id) else { 719 - @@ -4670,7 +5250,7 @@ 721 + @@ -4676,7 +5258,7 @@ 720 722 } 721 723 722 724 #[servo_tracing::instrument(skip_all)] ··· 725 727 // Send a flat projection of the history to embedder. 726 728 // The final vector is a concatenation of the URLs of the past 727 729 // entries, the current entry and the future entries. 728 - @@ -4773,9 +5353,23 @@ 730 + @@ -4779,9 +5361,23 @@ 729 731 ); 730 732 self.embedder_proxy.send(EmbedderMsg::HistoryChanged( 731 733 webview_id,
+7 -5
patches/components/constellation/constellation_webview.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -45,6 +45,11 @@ 3 + @@ -48,6 +48,11 @@ 4 4 /// The [`Theme`] that this [`ConstellationWebView`] uses. This is communicated to all 5 5 /// `ScriptThread`s so that they know how to render the contents of a particular `WebView. 6 6 theme: Theme, ··· 12 12 } 13 13 14 14 impl ConstellationWebView { 15 - @@ -53,6 +58,20 @@ 15 + @@ -57,6 +62,22 @@ 16 16 focused_browsing_context_id: BrowsingContextId, 17 17 user_content_manager_id: Option<UserContentManagerId>, 18 18 ) -> Self { 19 19 + Self::new_with_hide_focus( 20 20 + webview_id, 21 + + active_top_level_pipeline_id, 21 22 + focused_browsing_context_id, 22 23 + user_content_manager_id, 23 24 + false, ··· 26 27 + 27 28 + pub(crate) fn new_with_hide_focus( 28 29 + webview_id: WebViewId, 30 + + active_top_level_pipeline_id: PipelineId, 29 31 + focused_browsing_context_id: BrowsingContextId, 30 32 + user_content_manager_id: Option<UserContentManagerId>, 31 33 + hide_focus: bool, ··· 33 35 Self { 34 36 webview_id, 35 37 user_content_manager_id, 36 - @@ -61,6 +80,7 @@ 38 + @@ -66,6 +87,7 @@ 37 39 last_mouse_move_point: Default::default(), 38 40 session_history: JointSessionHistory::new(), 39 41 theme: Theme::Light, ··· 41 43 } 42 44 } 43 45 44 - @@ -80,12 +100,41 @@ 46 + @@ -85,12 +107,41 @@ 45 47 event: &ConstellationInputEvent, 46 48 browsing_contexts: &FxHashMap<BrowsingContextId, BrowsingContext>, 47 49 ) -> Option<PipelineId> { ··· 85 87 let browsing_context_id = if matches!(event.event.event, InputEvent::MouseLeftViewport(_)) { 86 88 self.hovered_browsing_context_id 87 89 .unwrap_or(self.focused_browsing_context_id) 88 - @@ -155,11 +204,9 @@ 90 + @@ -160,11 +211,9 @@ 89 91 90 92 if let InputEvent::MouseMove(_) = &event.event.event { 91 93 update_hovered_browsing_context(Some(pipeline.browsing_context_id), true);
+1 -1
patches/components/layout/layout_impl.rs.patch
··· 41 41 device.set_viewport_size(viewport_details.size); 42 42 device.set_device_pixel_ratio(device_pixel_ratio); 43 43 self.device_has_changed = true; 44 - @@ -810,6 +827,7 @@ 44 + @@ -818,6 +835,7 @@ 45 45 paint_timing_handler: Default::default(), 46 46 user_stylesheets: config.user_stylesheets, 47 47 accessibility_active: Cell::new(config.accessibility_active),
+1 -1
patches/components/script/dom/debuggerglobalscope.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -103,9 +103,11 @@ 3 + @@ -106,9 +106,11 @@ 4 4 None, 5 5 #[cfg(feature = "webgpu")] 6 6 gpu_id_hub,
+14 -14
patches/components/script/dom/document.rs.patch
··· 15 15 + EmbeddedWebViewEventType, NavigationHistoryBehavior, ScriptToConstellationMessage, 16 16 +}; 17 17 use content_security_policy::sandboxing_directive::SandboxingFlagSet; 18 - use content_security_policy::{CspList, PolicyDisposition}; 18 + use content_security_policy::{CspList, Policy as CspPolicy, PolicyDisposition}; 19 19 use cookie::Cookie; 20 20 @@ -31,6 +33,7 @@ 21 21 Image, LoadStatus, ··· 25 25 use fonts::WebFontDocumentContext; 26 26 use html5ever::{LocalName, Namespace, QualName, local_name, ns}; 27 27 use hyper_serde::Serde; 28 - @@ -614,6 +617,9 @@ 28 + @@ -615,6 +618,9 @@ 29 29 #[no_trace] 30 30 favicon: RefCell<Option<Image>>, 31 31 ··· 35 35 /// All websockets created that are associated with this document. 36 36 websockets: DOMTracker<WebSocket>, 37 37 38 - @@ -852,6 +858,12 @@ 38 + @@ -860,6 +866,12 @@ 39 39 40 40 // Set the document's activity level, reflow if necessary, and suspend or resume timers. 41 41 self.activity.set(activity); ··· 48 48 let media = ServoMedia::get(); 49 49 let pipeline_id = self.window().pipeline_id(); 50 50 let client_context_id = 51 - @@ -865,6 +877,7 @@ 51 + @@ -873,6 +885,7 @@ 52 52 53 53 self.title_changed(); 54 54 self.notify_embedder_favicon(); ··· 56 56 self.dirty_all_nodes(); 57 57 self.window().resume(CanGc::from_cx(cx)); 58 58 media.resume(&client_context_id); 59 - @@ -1269,6 +1282,9 @@ 59 + @@ -1277,6 +1290,9 @@ 60 60 LoadStatus::Started, 61 61 )); 62 62 self.send_to_embedder(EmbedderMsg::Status(self.webview_id(), None)); ··· 66 66 } 67 67 }, 68 68 DocumentReadyState::Complete => { 69 - @@ -1277,6 +1293,9 @@ 69 + @@ -1285,6 +1301,9 @@ 70 70 self.webview_id(), 71 71 LoadStatus::Complete, 72 72 )); ··· 76 76 } 77 77 update_with_current_instant(&self.dom_complete); 78 78 }, 79 - @@ -1688,7 +1707,13 @@ 79 + @@ -1691,7 +1710,13 @@ 80 80 let window = self.window(); 81 81 if window.is_top_level() { 82 82 let title = self.title().map(String::from); ··· 91 91 } 92 92 } 93 93 94 - @@ -1697,6 +1722,18 @@ 94 + @@ -1700,6 +1725,18 @@ 95 95 window.send_to_embedder(msg); 96 96 } 97 97 ··· 110 110 pub(crate) fn dirty_all_nodes(&self) { 111 111 let root = match self.GetDocumentElement() { 112 112 Some(root) => root, 113 - @@ -3185,9 +3222,59 @@ 113 + @@ -3198,9 +3235,59 @@ 114 114 current_rendering_epoch, 115 115 ); 116 116 ··· 170 170 pub(crate) fn handle_no_longer_waiting_on_asynchronous_image_updates(&self) { 171 171 self.waiting_on_canvas_image_updates.set(false); 172 172 } 173 - @@ -3930,6 +4017,7 @@ 173 + @@ -3943,6 +4030,7 @@ 174 174 active_sandboxing_flag_set: Cell::new(SandboxingFlagSet::empty()), 175 175 creation_sandboxing_flag_set: Cell::new(creation_sandboxing_flag_set), 176 176 favicon: RefCell::new(None), ··· 178 178 websockets: DOMTracker::new(), 179 179 details_name_groups: Default::default(), 180 180 protocol_handler_automation_mode: Default::default(), 181 - @@ -5032,6 +5120,36 @@ 181 + @@ -5047,6 +5135,36 @@ 182 182 183 183 pub(crate) fn notify_embedder_favicon(&self) { 184 184 if let Some(ref image) = *self.favicon.borrow() { ··· 215 215 self.send_to_embedder(EmbedderMsg::NewFavicon(self.webview_id(), image.clone())); 216 216 } 217 217 } 218 - @@ -5054,6 +5172,20 @@ 219 - pub(crate) fn value_override(&self) -> Option<DOMString> { 220 - self.value_override.borrow().clone() 218 + @@ -5092,6 +5210,20 @@ 219 + pub(crate) fn set_css_styling_flag(&self, value: bool) { 220 + self.css_styling_flag.set(value) 221 221 } 222 222 + 223 223 + pub(crate) fn notify_embedder_theme_color(&self) {
+33 -33
patches/components/script/dom/document_event_handler.rs.patch
··· 18 18 }; 19 19 #[cfg(feature = "gamepad")] 20 20 use embedder_traits::{ 21 - @@ -30,7 +33,9 @@ 22 - use script_bindings::codegen::GenericBindings::DocumentBinding::DocumentMethods; 21 + @@ -32,7 +35,9 @@ 23 22 use script_bindings::codegen::GenericBindings::EventBinding::EventMethods; 23 + use script_bindings::codegen::GenericBindings::HTMLElementBinding::HTMLElementMethods; 24 24 use script_bindings::codegen::GenericBindings::HTMLLabelElementBinding::HTMLLabelElementMethods; 25 25 +#[cfg(feature = "gamepad")] 26 26 use script_bindings::codegen::GenericBindings::NavigatorBinding::NavigatorMethods; ··· 28 28 use script_bindings::codegen::GenericBindings::PerformanceBinding::PerformanceMethods; 29 29 use script_bindings::codegen::GenericBindings::TouchBinding::TouchMethods; 30 30 use script_bindings::codegen::GenericBindings::WindowBinding::{ScrollBehavior, WindowMethods}; 31 - @@ -51,12 +56,13 @@ 31 + @@ -54,12 +59,13 @@ 32 32 use crate::dom::bindings::refcounted::Trusted; 33 33 use crate::dom::bindings::root::MutNullableDom; 34 34 use crate::dom::clipboardevent::ClipboardEventType; ··· 41 41 use crate::dom::gamepad::gamepadevent::GamepadEventType; 42 42 +use crate::dom::html::htmliframeelement::HTMLIFrameElement; 43 43 use crate::dom::inputevent::HitTestResult; 44 + use crate::dom::interactive_element_command::InteractiveElementCommand; 44 45 use crate::dom::node::{self, Node, NodeTraits, ShadowIncluding}; 45 - use crate::dom::pointerevent::{PointerEvent, PointerId}; 46 - @@ -68,6 +74,7 @@ 46 + @@ -72,6 +78,7 @@ 47 47 }; 48 48 use crate::drag_data_store::{DragDataStore, Kind, Mode}; 49 49 use crate::realms::enter_realm; ··· 51 51 52 52 /// A data structure used for tracking the current click count. This can be 53 53 /// reset to 0 if a mouse button event happens at a sufficient distance or time 54 - @@ -131,6 +138,56 @@ 54 + @@ -135,6 +142,56 @@ 55 55 } 56 56 } 57 57 ··· 108 108 /// The [`DocumentEventHandler`] is a structure responsible for handling input events for 109 109 /// the [`crate::Document`] and storing data related to event handling. It exists to 110 110 /// decrease the size of the [`crate::Document`] structure. 111 - @@ -172,6 +229,20 @@ 112 - active_pointer_ids: DomRefCell<FxHashMap<i32, i32>>, 113 - /// Counter for generating unique pointer IDs for touch inputs 111 + @@ -178,6 +235,20 @@ 114 112 next_touch_pointer_id: Cell<i32>, 113 + /// A map holding information about currently registered access key handlers. 114 + access_key_handlers: DomRefCell<FxHashMap<char, Dom<HTMLElement>>>, 115 115 + /// Long-press state for context menu detection. 116 116 + long_press_state: DomRefCell<Option<LongPressState>>, 117 117 + /// Touch ID that triggered a context menu via long-press. ··· 129 129 } 130 130 131 131 impl DocumentEventHandler { 132 - @@ -191,6 +262,9 @@ 133 - active_keyboard_modifiers: Default::default(), 132 + @@ -198,6 +269,9 @@ 134 133 active_pointer_ids: Default::default(), 135 134 next_touch_pointer_id: Cell::new(1), 135 + access_key_handlers: Default::default(), 136 136 + long_press_state: Default::default(), 137 137 + context_menu_touch_id: Default::default(), 138 138 + forwarded_touches: Default::default(), 139 139 } 140 140 } 141 141 142 - @@ -456,6 +530,198 @@ 142 + @@ -463,6 +537,198 @@ 143 143 } 144 144 } 145 145 ··· 338 338 /// <https://w3c.github.io/uievents/#handle-native-mouse-move> 339 339 fn handle_native_mouse_move_event(&self, input_event: &ConstellationInputEvent, can_gc: CanGc) { 340 340 // Ignore all incoming events without a hit test. 341 - @@ -470,6 +736,57 @@ 341 + @@ -477,6 +743,57 @@ 342 342 return; 343 343 } 344 344 ··· 396 396 // Update the cursor when the mouse moves, if it has changed. 397 397 self.set_cursor(Some(hit_test_result.cursor)); 398 398 399 - @@ -695,6 +1012,12 @@ 399 + @@ -702,6 +1019,12 @@ 400 400 return; 401 401 }; 402 402 ··· 409 409 debug!( 410 410 "{:?}: at {:?}", 411 411 event.action, hit_test_result.point_in_frame 412 - @@ -787,18 +1110,25 @@ 413 - let target_el = element.find_focusable_shadow_host_if_necessary(); 412 + @@ -794,18 +1117,25 @@ 413 + let target_el = element.find_click_focusable_shadow_host_if_necessary(); 414 414 415 415 let document = self.window.Document(); 416 416 - document.begin_focus_transaction(); 417 417 418 418 - // Try to focus `el`. If it's not focusable, focus the document instead. 419 - - document.request_focus(None, FocusInitiator::Local, can_gc); 420 - - document.request_focus(target_el.as_deref(), FocusInitiator::Local, can_gc); 419 + - document.request_focus(None, FocusInitiator::Click, can_gc); 420 + - document.request_focus(target_el.as_deref(), FocusInitiator::Click, can_gc); 421 421 + // Skip focus handling for hidefocus webviews - no blur/focus events 422 422 + // should be fired and focus should not be transferred. 423 423 + let hide_focus = self.window.as_global_scope().hide_focus(); ··· 426 426 + document.begin_focus_transaction(); 427 427 428 428 + // Try to focus `el`. If it's not focusable, focus the document instead. 429 - + document.request_focus(None, FocusInitiator::Local, can_gc); 430 - + document.request_focus(target_el.as_deref(), FocusInitiator::Local, can_gc); 429 + + document.request_focus(None, FocusInitiator::Click, can_gc); 430 + + document.request_focus(target_el.as_deref(), FocusInitiator::Click, can_gc); 431 431 + } 432 432 + 433 433 // Step 7. Let result = dispatch event at target ··· 437 437 // that is click focusable, then Run the focusing steps at target. 438 438 - if result && document.has_focus_transaction() { 439 439 + if !hide_focus && result && document.has_focus_transaction() { 440 - document.commit_focus_transaction(FocusInitiator::Local, can_gc); 440 + document.commit_focus_transaction(FocusInitiator::Click, can_gc); 441 441 } 442 442 443 - @@ -808,7 +1138,7 @@ 443 + @@ -815,7 +1145,7 @@ 444 444 self.maybe_show_context_menu( 445 445 node.upcast(), 446 446 &hit_test_result, ··· 449 449 can_gc, 450 450 ); 451 451 } 452 - @@ -932,9 +1262,30 @@ 452 + @@ -939,9 +1269,30 @@ 453 453 &self, 454 454 target: &EventTarget, 455 455 hit_test_result: &HitTestResult, ··· 480 480 + 481 481 // <https://w3c.github.io/uievents/#contextmenu> 482 482 let menu_event = PointerEvent::new( 483 - &self.window, // window 484 - @@ -948,25 +1299,25 @@ 483 + &self.window, // window 484 + @@ -955,25 +1306,25 @@ 485 485 hit_test_result 486 486 .point_relative_to_initial_containing_block 487 487 .to_i32(), ··· 526 526 can_gc, 527 527 ); 528 528 529 - @@ -982,6 +1333,89 @@ 529 + @@ -989,6 +1340,89 @@ 530 530 }; 531 531 } 532 532 ··· 616 616 fn handle_touch_event( 617 617 &self, 618 618 event: EmbedderTouchEvent, 619 - @@ -988,6 +1422,29 @@ 619 + @@ -995,6 +1429,29 @@ 620 620 input_event: &ConstellationInputEvent, 621 621 can_gc: CanGc, 622 622 ) -> InputEventResult { ··· 646 646 // Ignore all incoming events without a hit test. 647 647 let Some(hit_test_result) = self.window.hit_test_from_input_event(input_event) else { 648 648 self.update_active_touch_points_when_early_return(event); 649 - @@ -994,6 +1451,16 @@ 649 + @@ -1001,6 +1458,16 @@ 650 650 return Default::default(); 651 651 }; 652 652 ··· 663 663 let TouchId(identifier) = event.touch_id; 664 664 665 665 let Some(element) = hit_test_result 666 - @@ -1125,6 +1592,10 @@ 666 + @@ -1132,6 +1599,10 @@ 667 667 // <https://html.spec.whatwg.org/multipage/#selector-active> 668 668 // If the element is being actively pointed at the element is being activated. 669 669 self.element_for_activation(element).set_active_state(true); ··· 674 674 (current_target, pointer_touch) 675 675 }, 676 676 _ => { 677 - @@ -1157,10 +1628,31 @@ 677 + @@ -1164,10 +1635,31 @@ 678 678 can_gc, 679 679 ); 680 680 ··· 707 707 }, 708 708 TouchEventType::Up | TouchEventType::Cancel => { 709 709 active_touch_points.swap_remove(index); 710 - @@ -1168,6 +1660,17 @@ 710 + @@ -1175,6 +1667,17 @@ 711 711 // <https://html.spec.whatwg.org/multipage/#selector-active> 712 712 // If the element is being actively pointed at the element is being activated. 713 713 self.element_for_activation(element).set_active_state(false); ··· 725 725 }, 726 726 TouchEventType::Down => unreachable!("Should have been handled above"), 727 727 } 728 - @@ -1211,6 +1714,19 @@ 728 + @@ -1218,6 +1721,19 @@ 729 729 ); 730 730 let event = touch_event.upcast::<Event>(); 731 731 event.fire(&touch_dispatch_target, can_gc); ··· 745 745 event.flags().into() 746 746 } 747 747 748 - @@ -1397,6 +1913,16 @@ 748 + @@ -1404,6 +1920,16 @@ 749 749 return Default::default(); 750 750 }; 751 751
+1 -1
patches/components/script/dom/html/htmllinkelement.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -694,7 +694,7 @@ 3 + @@ -728,7 +728,7 @@ 4 4 if !window.is_top_level() { 5 5 return; 6 6 }
+3 -3
patches/components/script/dom/html/htmlmetaelement.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -68,6 +68,9 @@ 3 + @@ -69,6 +69,9 @@ 4 4 if name == "viewport" { 5 5 self.parse_and_send_viewport_if_necessary(); 6 6 } ··· 10 10 // https://html.spec.whatwg.org/multipage/#attr-meta-http-equiv 11 11 } else if !self.HttpEquiv().is_empty() { 12 12 // TODO: Implement additional http-equiv candidates 13 - @@ -91,6 +94,23 @@ 13 + @@ -92,6 +95,23 @@ 14 14 } 15 15 } 16 16 ··· 22 22 + 23 23 + if let Some(content) = self 24 24 + .upcast::<Element>() 25 - + .get_attribute(&ns!(), &local_name!("content")) 25 + + .get_attribute(&local_name!("content")) 26 26 + .filter(|attr| !attr.value().is_empty()) 27 27 + { 28 28 + // Store the theme color on the document, which will notify the parent
+3 -3
patches/components/script/dom/mod.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -288,6 +288,7 @@ 3 + @@ -289,6 +289,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 - @@ -321,6 +322,7 @@ 11 + @@ -322,6 +323,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 - @@ -348,6 +350,8 @@ 19 + @@ -349,6 +351,8 @@ 20 20 pub(crate) mod pagetransitionevent; 21 21 pub(crate) mod paintsize; 22 22 pub(crate) mod paintworkletglobalscope;
+8 -8
patches/components/script/dom/window.rs.patch
··· 9 9 }; 10 10 use euclid::default::Rect as UntypedRect; 11 11 use euclid::{Point2D, Rect, Scale, Size2D, Vector2D}; 12 - @@ -1148,12 +1148,22 @@ 12 + @@ -1149,12 +1149,22 @@ 13 13 14 14 let (sender, receiver) = 15 15 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); ··· 33 33 receiver.recv().unwrap_or_else(|_| { 34 34 // If the receiver is closed, we assume the dialog was cancelled. 35 35 debug!("Alert dialog was cancelled or failed to show."); 36 - @@ -1181,13 +1191,22 @@ 36 + @@ -1182,13 +1192,22 @@ 37 37 // the user to respond with a positive or negative response. 38 38 let (sender, receiver) = 39 39 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); ··· 57 57 // Step 5: Let userPromptHandler be WebDriver BiDi user prompt opened with this, 58 58 // "confirm", and message. 59 59 // 60 - @@ -1232,6 +1251,7 @@ 60 + @@ -1233,6 +1252,7 @@ 61 61 // defaulted to the value given by default. 62 62 let (sender, receiver) = 63 63 ProfiledGenericChannel::channel(self.global().time_profiler_chan().clone()).unwrap(); ··· 65 65 let dialog = SimpleDialogRequest::Prompt { 66 66 id: self.Document().embedder_controls().next_control_id(), 67 67 message: message.to_string(), 68 - @@ -1238,8 +1258,16 @@ 68 + @@ -1239,8 +1259,16 @@ 69 69 default: default.to_string(), 70 70 response_sender: sender, 71 71 }; ··· 83 83 // Step 6: Let userPromptHandler be WebDriver BiDi user prompt opened with this, 84 84 // "prompt", and message. 85 85 // TODO: Add support for WebDriver BiDi. 86 - @@ -3027,9 +3055,33 @@ 86 + @@ -3042,9 +3070,33 @@ 87 87 &self, 88 88 input_event: &ConstellationInputEvent, 89 89 ) -> Option<HitTestResult> { ··· 120 120 } 121 121 122 122 #[expect(unsafe_code)] 123 - @@ -3048,8 +3100,25 @@ 123 + @@ -3063,8 +3115,25 @@ 124 124 // SAFETY: This is safe because `Window::query_elements_from_point` has ensured that 125 125 // layout has run and any OpaqueNodes that no longer refer to real nodes are gone. 126 126 let address = UntrustedNodeAddress(result.node.0 as *const c_void); ··· 147 147 cursor: result.cursor, 148 148 point_in_node: result.point_in_target, 149 149 point_in_frame, 150 - @@ -3730,6 +3799,8 @@ 150 + @@ -3745,6 +3814,8 @@ 151 151 player_context: WindowGLContext, 152 152 #[cfg(feature = "webgpu")] gpu_id_hub: Arc<IdentityHub>, 153 153 inherited_secure_context: Option<bool>, ··· 156 156 theme: Theme, 157 157 weak_script_thread: Weak<ScriptThread>, 158 158 ) -> DomRoot<Self> { 159 - @@ -3756,6 +3827,8 @@ 159 + @@ -3771,6 +3842,8 @@ 160 160 gpu_id_hub, 161 161 inherited_secure_context, 162 162 unminify_js,
+11 -11
patches/components/script/script_thread.rs.patch
··· 6 6 use constellation_traits::{ 7 7 - JsEvalResult, LoadData, LoadOrigin, NavigationHistoryBehavior, ScreenshotReadinessResponse, 8 8 - ScriptToConstellationChan, ScriptToConstellationMessage, ScrollStateUpdate, 9 - - StructuredSerializedData, WindowSizeType, 9 + - StructuredSerializedData, TraversalDirection, WindowSizeType, 10 10 + EmbeddedWebViewEventType, JsEvalResult, LoadData, LoadOrigin, NavigationHistoryBehavior, 11 11 + ScreenshotReadinessResponse, ScriptToConstellationChan, ScriptToConstellationMessage, 12 - + ScrollStateUpdate, StructuredSerializedData, WindowSizeType, 12 + + ScrollStateUpdate, StructuredSerializedData, TraversalDirection, WindowSizeType, 13 13 }; 14 14 use crossbeam_channel::unbounded; 15 15 use data_url::mime::Mime; ··· 32 32 use servo_config::{opts, pref, prefs}; 33 33 use servo_url::{ImmutableOrigin, MutableOrigin, OriginSnapshot, ServoUrl}; 34 34 use storage_traits::StorageThreads; 35 - @@ -1928,11 +1929,22 @@ 35 + @@ -1931,11 +1932,22 @@ 36 36 self.handle_refresh_cursor(pipeline_id); 37 37 }, 38 38 ScriptThreadMessage::PreferencesUpdated(updates) => { ··· 59 59 }, 60 60 ScriptThreadMessage::ForwardKeyboardScroll(pipeline_id, scroll) => { 61 61 if let Some(document) = self.documents.borrow().find_document(pipeline_id) { 62 - @@ -1973,6 +1985,16 @@ 62 + @@ -1976,6 +1988,16 @@ 63 63 ScriptThreadMessage::TriggerGarbageCollection => unsafe { 64 64 JS_GC(*GlobalScope::get_cx(), GCReason::API); 65 65 }, ··· 76 76 } 77 77 } 78 78 79 - @@ -3026,6 +3048,9 @@ 79 + @@ -3047,6 +3069,9 @@ 80 80 .documents 81 81 .borrow() 82 82 .find_iframe(parent_pipeline_id, browsing_context_id); ··· 86 86 if let Some(frame_element) = frame_element { 87 87 frame_element.update_pipeline_id(new_pipeline_id, reason, cx); 88 88 } 89 - @@ -3045,6 +3070,7 @@ 89 + @@ -3066,6 +3091,7 @@ 90 90 // is no need to pass along existing opener information that 91 91 // will be discarded. 92 92 None, ··· 94 94 ); 95 95 } 96 96 } 97 - @@ -3321,6 +3347,44 @@ 97 + @@ -3342,6 +3368,44 @@ 98 98 } 99 99 } 100 100 ··· 139 139 fn ask_constellation_for_top_level_info( 140 140 &self, 141 141 sender_webview_id: WebViewId, 142 - @@ -3435,7 +3499,13 @@ 142 + @@ -3456,7 +3520,13 @@ 143 143 self.senders.pipeline_to_embedder_sender.clone(), 144 144 self.senders.constellation_sender.clone(), 145 145 incomplete.pipeline_id, ··· 154 154 incomplete.viewport_details, 155 155 origin.clone(), 156 156 final_url.clone(), 157 - @@ -3457,6 +3527,8 @@ 157 + @@ -3478,6 +3548,8 @@ 158 158 #[cfg(feature = "webgpu")] 159 159 self.gpu_id_hub.clone(), 160 160 incomplete.load_data.inherited_secure_context, ··· 163 163 incomplete.theme, 164 164 self.this.clone(), 165 165 ); 166 - @@ -3480,6 +3552,7 @@ 166 + @@ -3501,6 +3573,7 @@ 167 167 incomplete.webview_id, 168 168 incomplete.parent_info, 169 169 incomplete.opener, ··· 171 171 ); 172 172 if window_proxy.parent().is_some() { 173 173 // https://html.spec.whatwg.org/multipage/#navigating-across-documents:delaying-load-events-mode-2 174 - @@ -4217,6 +4290,24 @@ 174 + @@ -4271,6 +4344,24 @@ 175 175 document.event_handler().handle_refresh_cursor(); 176 176 } 177 177
+3 -3
patches/components/shared/base/id.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -259,6 +259,20 @@ 3 + @@ -260,6 +260,20 @@ 4 4 pub fn root_scroll_id(&self) -> webrender_api::ExternalScrollId { 5 5 ExternalScrollId(0, self.into()) 6 6 } ··· 20 20 + } 21 21 } 22 22 23 - impl From<WebRenderPipelineId> for PipelineId { 24 - @@ -345,6 +359,24 @@ 23 + impl From<PipelineId> for TreeId { 24 + @@ -378,6 +392,24 @@ 25 25 pub fn mock_for_testing(browsing_context_id: BrowsingContextId) -> WebViewId { 26 26 WebViewId(TEST_PAINTER_ID, browsing_context_id) 27 27 }