diff --git a/components/layout/context.rs b/components/layout/context.rs index 90b427b0e154..1374ba175f93 100644 --- a/components/layout/context.rs +++ b/components/layout/context.rs @@ -140,6 +140,7 @@ impl<'a> LayoutContext<'a> { state: PendingImageState::Unrequested(url), node: node.to_untrusted_node_address(), id: id, + origin: self.origin.clone(), }; self.pending_images .as_ref() @@ -160,6 +161,7 @@ impl<'a> LayoutContext<'a> { state: PendingImageState::PendingResponse, node: node.to_untrusted_node_address(), id: id, + origin: self.origin.clone(), }; pending_images.lock().unwrap().push(image); } diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs index 10ff2f2569bf..47b195c48842 100644 --- a/components/layout_thread/lib.rs +++ b/components/layout_thread/lib.rs @@ -93,7 +93,7 @@ use servo_atoms::Atom; use servo_config::opts; use servo_config::pref; use servo_geometry::MaxRect; -use servo_url::ServoUrl; +use servo_url::{ImmutableOrigin, ServoUrl}; use std::borrow::ToOwned; use std::cell::{Cell, RefCell}; use std::collections::HashMap; @@ -644,13 +644,18 @@ impl LayoutThread { guards: StylesheetGuards<'a>, script_initiated_layout: bool, snapshot_map: &'a SnapshotMap, + origin: Option, ) -> LayoutContext<'a> { let thread_local_style_context_creation_data = ThreadLocalStyleContextCreationInfo::new(self.new_animations_sender.clone()); LayoutContext { id: self.id, - origin: self.url.origin(), + origin: if let Some(origin) = origin { + origin + } else { + self.url.origin() + }, style_context: SharedStyleContext { stylist: &self.stylist, options: GLOBAL_STYLE_DATA.options.clone(), @@ -1341,6 +1346,8 @@ impl LayoutThread { Au::from_f32_px(initial_viewport.height), ); + let origin = data.origin.clone(); + // Calculate the actual viewport as per DEVICE-ADAPT ยง 6 // If the entire flow tree is invalid, then it will be reflowed anyhow. let document_shared_lock = document.style_shared_lock(); @@ -1482,7 +1489,8 @@ impl LayoutThread { self.stylist.flush(&guards, Some(element), Some(&map)); // Create a layout context for use throughout the following passes. - let mut layout_context = self.build_layout_context(guards.clone(), true, &map); + let mut layout_context = + self.build_layout_context(guards.clone(), true, &map, Some(origin)); let pool; let (thread_pool, num_threads) = if self.parallel_flag { @@ -1738,7 +1746,7 @@ impl LayoutThread { ua_or_user: &ua_or_user_guard, }; let snapshots = SnapshotMap::new(); - let mut layout_context = self.build_layout_context(guards, false, &snapshots); + let mut layout_context = self.build_layout_context(guards, false, &snapshots, None); let invalid_nodes = { // Perform an abbreviated style recalc that operates without access to the DOM. diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 65a601765599..1abd30ecc4a6 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -1622,6 +1622,7 @@ impl Window { document: self.Document().upcast::().to_trusted_node_address(), stylesheets_changed, window_size: self.window_size.get(), + origin: self.origin().immutable().clone(), reflow_goal, script_join_chan: join_chan, dom_count: self.Document().dom_count(), diff --git a/components/script_layout_interface/lib.rs b/components/script_layout_interface/lib.rs index ad333209033d..ef9382378cb5 100644 --- a/components/script_layout_interface/lib.rs +++ b/components/script_layout_interface/lib.rs @@ -23,7 +23,7 @@ use ipc_channel::ipc::IpcSender; use libc::c_void; use net_traits::image_cache::PendingImageId; use script_traits::UntrustedNodeAddress; -use servo_url::ServoUrl; +use servo_url::{ImmutableOrigin, ServoUrl}; use std::ptr::NonNull; use std::sync::atomic::AtomicIsize; use style::data::ElementData; @@ -138,6 +138,7 @@ pub struct PendingImage { pub state: PendingImageState, pub node: UntrustedNodeAddress, pub id: PendingImageId, + pub origin: ImmutableOrigin, } pub struct HTMLMediaData { diff --git a/components/script_layout_interface/message.rs b/components/script_layout_interface/message.rs index 9bfeddb2ea25..aeefadc72139 100644 --- a/components/script_layout_interface/message.rs +++ b/components/script_layout_interface/message.rs @@ -18,7 +18,7 @@ use script_traits::{ConstellationControlMsg, LayoutControlMsg, LayoutMsg as Cons use script_traits::{ScrollState, UntrustedNodeAddress, WindowSizeData}; use servo_arc::Arc as ServoArc; use servo_atoms::Atom; -use servo_url::ServoUrl; +use servo_url::{ImmutableOrigin, ServoUrl}; use std::sync::atomic::AtomicBool; use std::sync::Arc; use style::context::QuirksMode; @@ -216,6 +216,8 @@ pub struct ScriptReflow { pub reflow_goal: ReflowGoal, /// The number of objects in the dom #10110 pub dom_count: u32, + /// The current window origin + pub origin: ImmutableOrigin, } pub struct LayoutThreadInit {