aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/compositing/compositor.rs5
-rw-r--r--components/constellation/constellation.rs13
-rw-r--r--components/constellation/session_history.rs5
-rw-r--r--components/layout_thread/lib.rs31
-rw-r--r--components/layout_thread_2020/lib.rs28
-rw-r--r--components/layout_traits/lib.rs7
-rw-r--r--components/script/dom/htmliframeelement.rs2
-rw-r--r--components/script/script_thread.rs1
-rw-r--r--components/script_layout_interface/message.rs1
-rw-r--r--components/script_traits/lib.rs4
10 files changed, 41 insertions, 56 deletions
diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs
index 37cbea1df4f..3df7e1a8a0c 100644
--- a/components/compositing/compositor.rs
+++ b/components/compositing/compositor.rs
@@ -346,9 +346,6 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
// Set the size of the root layer.
compositor.update_zoom_transform();
- // Tell the constellation about the initial window size.
- compositor.send_window_size(WindowSizeType::Initial);
-
compositor
}
@@ -638,8 +635,6 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
self.create_pipeline_details_for_frame_tree(&frame_tree);
- self.send_window_size(WindowSizeType::Initial);
-
self.frame_tree_id.next();
}
diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs
index 1607eea424f..807495ff3f1 100644
--- a/components/constellation/constellation.rs
+++ b/components/constellation/constellation.rs
@@ -2216,6 +2216,7 @@ where
new_pipeline_id: new_pipeline_id,
replace: None,
new_browsing_context_info: None,
+ window_size,
});
}
@@ -2360,6 +2361,7 @@ where
is_private: is_private,
is_visible: is_visible,
}),
+ window_size,
});
}
@@ -2531,6 +2533,10 @@ where
// https://github.com/rust-lang/rust/issues/59159
let browsing_context_size = browsing_context.size;
let browsing_context_is_visible = browsing_context.is_visible;
+ debug_assert_eq!(
+ browsing_context_size,
+ load_info.window_size.initial_viewport
+ );
// Create the new pipeline, attached to the parent and push to pending changes
self.new_pipeline(
@@ -2552,6 +2558,7 @@ where
replace: replace,
// Browsing context for iframe already exists.
new_browsing_context_info: None,
+ window_size: load_info.window_size.initial_viewport,
});
}
@@ -2610,6 +2617,7 @@ where
is_private: is_private,
is_visible: is_parent_visible,
}),
+ window_size: load_info.window_size.initial_viewport,
});
}
@@ -2698,6 +2706,7 @@ where
is_private: is_opener_private,
is_visible: is_opener_visible,
}),
+ window_size: self.window_size.initial_viewport,
});
}
@@ -2901,6 +2910,7 @@ where
replace,
// `load_url` is always invoked on an existing browsing context.
new_browsing_context_info: None,
+ window_size,
});
Some(new_pipeline_id)
},
@@ -3220,6 +3230,7 @@ where
replace: Some(NeedsToReload::Yes(pipeline_id, load_data)),
// Browsing context must exist at this point.
new_browsing_context_info: None,
+ window_size,
});
return;
},
@@ -3977,7 +3988,7 @@ where
change.top_level_browsing_context_id,
change.new_pipeline_id,
new_context_info.parent_pipeline_id,
- self.window_size.initial_viewport, //XXXjdm is this valid?
+ change.window_size,
new_context_info.is_private,
new_context_info.is_visible,
);
diff --git a/components/constellation/session_history.rs b/components/constellation/session_history.rs
index 0fdcd129baa..3e15591215e 100644
--- a/components/constellation/session_history.rs
+++ b/components/constellation/session_history.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use crate::browsingcontext::NewBrowsingContextInfo;
+use euclid::Size2D;
use msg::constellation_msg::{
BrowsingContextId, HistoryStateId, PipelineId, TopLevelBrowsingContextId,
};
@@ -10,6 +11,7 @@ use script_traits::LoadData;
use servo_url::ServoUrl;
use std::cmp::PartialEq;
use std::{fmt, mem};
+use style_traits::CSSPixel;
/// Represents the joint session history
/// https://html.spec.whatwg.org/multipage/#joint-session-history
@@ -122,6 +124,9 @@ pub struct SessionHistoryChange {
/// Holds data for not-yet constructed browsing contexts that are not
/// easily available when they need to be constructed.
pub new_browsing_context_info: Option<NewBrowsingContextInfo>,
+
+ /// The size of the viewport for the browsing context.
+ pub window_size: Size2D<f32, CSSPixel>,
}
/// Represents a pipeline or discarded pipeline in a history entry.
diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs
index 6c94c34e99b..48b7591c242 100644
--- a/components/layout_thread/lib.rs
+++ b/components/layout_thread/lib.rs
@@ -86,13 +86,13 @@ use script_layout_interface::wrapper_traits::LayoutNode;
use script_traits::Painter;
use script_traits::{ConstellationControlMsg, LayoutControlMsg, LayoutMsg as ConstellationMsg};
use script_traits::{DrawAPaintImageResult, IFrameSizeMsg, PaintWorkletError, WindowSizeType};
-use script_traits::{ScrollState, UntrustedNodeAddress};
+use script_traits::{ScrollState, UntrustedNodeAddress, WindowSizeData};
use selectors::Element;
use servo_arc::Arc as ServoArc;
use servo_atoms::Atom;
use servo_config::opts;
use servo_config::pref;
-use servo_geometry::{DeviceIndependentPixel, MaxRect};
+use servo_geometry::MaxRect;
use servo_url::ServoUrl;
use std::borrow::ToOwned;
use std::cell::{Cell, RefCell};
@@ -254,13 +254,6 @@ pub struct LayoutThread {
/// Load web fonts synchronously to avoid non-deterministic network-driven reflows.
load_webfonts_synchronously: bool,
- /// The initial request size of the window
- initial_window_size: Size2D<u32, DeviceIndependentPixel>,
-
- /// The ratio of device pixels per px at the default scale.
- /// If unspecified, will use the platform default setting.
- device_pixels_per_px: Option<f32>,
-
/// Dumps the display list form after a layout.
dump_display_list: bool,
@@ -311,8 +304,7 @@ impl LayoutThreadFactory for LayoutThread {
paint_time_metrics: PaintTimeMetrics,
busy: Arc<AtomicBool>,
load_webfonts_synchronously: bool,
- initial_window_size: Size2D<u32, DeviceIndependentPixel>,
- device_pixels_per_px: Option<f32>,
+ window_size: WindowSizeData,
dump_display_list: bool,
dump_display_list_json: bool,
dump_style_tree: bool,
@@ -360,8 +352,7 @@ impl LayoutThreadFactory for LayoutThread {
paint_time_metrics,
busy,
load_webfonts_synchronously,
- initial_window_size,
- device_pixels_per_px,
+ window_size,
dump_display_list,
dump_display_list_json,
dump_style_tree,
@@ -531,8 +522,7 @@ impl LayoutThread {
paint_time_metrics: PaintTimeMetrics,
busy: Arc<AtomicBool>,
load_webfonts_synchronously: bool,
- initial_window_size: Size2D<u32, DeviceIndependentPixel>,
- device_pixels_per_px: Option<f32>,
+ window_size: WindowSizeData,
dump_display_list: bool,
dump_display_list_json: bool,
dump_style_tree: bool,
@@ -542,12 +532,10 @@ impl LayoutThread {
trace_layout: bool,
dump_flow_tree: bool,
) -> LayoutThread {
- // The device pixel ratio is incorrect (it does not have the hidpi value),
- // but it will be set correctly when the initial reflow takes place.
let device = Device::new(
MediaType::screen(),
- initial_window_size.to_f32() * Scale::new(1.0),
- Scale::new(device_pixels_per_px.unwrap_or(1.0)),
+ window_size.initial_viewport,
+ window_size.device_pixel_ratio,
);
// Create the channel on which new animations can be sent.
@@ -622,8 +610,6 @@ impl LayoutThread {
last_iframe_sizes: Default::default(),
busy,
load_webfonts_synchronously,
- initial_window_size,
- device_pixels_per_px,
dump_display_list,
dump_display_list_json,
dump_style_tree,
@@ -954,8 +940,7 @@ impl LayoutThread {
info.paint_time_metrics,
info.layout_is_busy,
self.load_webfonts_synchronously,
- self.initial_window_size,
- self.device_pixels_per_px,
+ info.window_size,
self.dump_display_list,
self.dump_display_list_json,
self.dump_style_tree,
diff --git a/components/layout_thread_2020/lib.rs b/components/layout_thread_2020/lib.rs
index 6ab5768ad02..106dace088b 100644
--- a/components/layout_thread_2020/lib.rs
+++ b/components/layout_thread_2020/lib.rs
@@ -67,13 +67,12 @@ use script_layout_interface::rpc::{LayoutRPC, OffsetParentResponse, StyleRespons
use script_traits::Painter;
use script_traits::{ConstellationControlMsg, LayoutControlMsg, LayoutMsg as ConstellationMsg};
use script_traits::{DrawAPaintImageResult, PaintWorkletError};
-use script_traits::{ScrollState, UntrustedNodeAddress};
+use script_traits::{ScrollState, UntrustedNodeAddress, WindowSizeData};
use selectors::Element;
use servo_arc::Arc as ServoArc;
use servo_atoms::Atom;
use servo_config::opts;
use servo_config::pref;
-use servo_geometry::DeviceIndependentPixel;
use servo_url::ServoUrl;
use std::cell::{Cell, RefCell};
use std::collections::HashMap;
@@ -212,13 +211,6 @@ pub struct LayoutThread {
/// Load web fonts synchronously to avoid non-deterministic network-driven reflows.
load_webfonts_synchronously: bool,
- /// The initial request size of the window
- initial_window_size: Size2D<u32, DeviceIndependentPixel>,
-
- /// The ratio of device pixels per px at the default scale.
- /// If unspecified, will use the platform default setting.
- device_pixels_per_px: Option<f32>,
-
/// Emits notifications when there is a relayout.
relayout_event: bool,
}
@@ -246,8 +238,7 @@ impl LayoutThreadFactory for LayoutThread {
paint_time_metrics: PaintTimeMetrics,
busy: Arc<AtomicBool>,
load_webfonts_synchronously: bool,
- initial_window_size: Size2D<u32, DeviceIndependentPixel>,
- device_pixels_per_px: Option<f32>,
+ window_size: WindowSizeData,
_dump_display_list: bool,
_dump_display_list_json: bool,
_dump_style_tree: bool,
@@ -294,8 +285,7 @@ impl LayoutThreadFactory for LayoutThread {
paint_time_metrics,
busy,
load_webfonts_synchronously,
- initial_window_size,
- device_pixels_per_px,
+ window_size,
relayout_event,
);
@@ -457,16 +447,15 @@ impl LayoutThread {
paint_time_metrics: PaintTimeMetrics,
busy: Arc<AtomicBool>,
load_webfonts_synchronously: bool,
- initial_window_size: Size2D<u32, DeviceIndependentPixel>,
- device_pixels_per_px: Option<f32>,
+ window_size: WindowSizeData,
relayout_event: bool,
) -> LayoutThread {
// The device pixel ratio is incorrect (it does not have the hidpi value),
// but it will be set correctly when the initial reflow takes place.
let device = Device::new(
MediaType::screen(),
- initial_window_size.to_f32() * Scale::new(1.0),
- Scale::new(device_pixels_per_px.unwrap_or(1.0)),
+ window_size.initial_viewport,
+ window_size.device_pixel_ratio,
);
// Create the channel on which new animations can be sent.
@@ -533,8 +522,6 @@ impl LayoutThread {
paint_time_metrics: paint_time_metrics,
busy,
load_webfonts_synchronously,
- initial_window_size,
- device_pixels_per_px,
relayout_event,
}
}
@@ -820,8 +807,7 @@ impl LayoutThread {
info.paint_time_metrics,
info.layout_is_busy,
self.load_webfonts_synchronously,
- self.initial_window_size,
- self.device_pixels_per_px,
+ info.window_size,
false, // dump_display_list
false, // dump_display_list_json
false, // dump_style_tree
diff --git a/components/layout_traits/lib.rs b/components/layout_traits/lib.rs
index cfb824f6c98..b499bef85c6 100644
--- a/components/layout_traits/lib.rs
+++ b/components/layout_traits/lib.rs
@@ -10,7 +10,6 @@
// that these modules won't have to depend on layout.
use crossbeam_channel::{Receiver, Sender};
-use euclid::Size2D;
use gfx::font_cache_thread::FontCacheThread;
use ipc_channel::ipc::{IpcReceiver, IpcSender};
use metrics::PaintTimeMetrics;
@@ -19,8 +18,7 @@ use msg::constellation_msg::{BackgroundHangMonitorRegister, PipelineId};
use net_traits::image_cache::ImageCache;
use profile_traits::{mem, time};
use script_traits::LayoutMsg as ConstellationMsg;
-use script_traits::{ConstellationControlMsg, LayoutControlMsg};
-use servo_geometry::DeviceIndependentPixel;
+use script_traits::{ConstellationControlMsg, LayoutControlMsg, WindowSizeData};
use servo_url::ServoUrl;
use std::sync::atomic::AtomicBool;
use std::sync::Arc;
@@ -48,8 +46,7 @@ pub trait LayoutThreadFactory {
paint_time_metrics: PaintTimeMetrics,
busy: Arc<AtomicBool>,
load_webfonts_synchronously: bool,
- initial_window_size: Size2D<u32, DeviceIndependentPixel>,
- device_pixels_per_px: Option<f32>,
+ window_size: WindowSizeData,
dump_display_list: bool,
dump_display_list_json: bool,
dump_style_tree: bool,
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs
index 41ac20cc2ed..e58e65ea5bb 100644
--- a/components/script/dom/htmliframeelement.rs
+++ b/components/script/dom/htmliframeelement.rs
@@ -190,6 +190,7 @@ impl HTMLIFrameElement {
load_data: load_data.clone(),
old_pipeline_id: old_pipeline_id,
sandbox: sandboxed,
+ window_size,
};
global_scope
.script_to_constellation_chan()
@@ -216,6 +217,7 @@ impl HTMLIFrameElement {
load_data: load_data,
old_pipeline_id: old_pipeline_id,
sandbox: sandboxed,
+ window_size,
};
global_scope
.script_to_constellation_chan()
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index fec8c878012..191df335ec5 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -2392,6 +2392,7 @@ impl ScriptThread {
load_data.url.clone(),
),
layout_is_busy: layout_is_busy.clone(),
+ window_size,
});
// Pick a layout thread, any layout thread
diff --git a/components/script_layout_interface/message.rs b/components/script_layout_interface/message.rs
index 66e0e446cfa..fb2bac65d07 100644
--- a/components/script_layout_interface/message.rs
+++ b/components/script_layout_interface/message.rs
@@ -230,4 +230,5 @@ pub struct LayoutThreadInit {
pub image_cache: Arc<dyn ImageCache>,
pub paint_time_metrics: PaintTimeMetrics,
pub layout_is_busy: Arc<AtomicBool>,
+ pub window_size: WindowSizeData,
}
diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs
index 9dd0ba04134..468cfb19fb3 100644
--- a/components/script_traits/lib.rs
+++ b/components/script_traits/lib.rs
@@ -739,6 +739,8 @@ pub struct IFrameLoadInfoWithData {
pub old_pipeline_id: Option<PipelineId>,
/// Sandbox type of this iframe
pub sandbox: IFrameSandboxState,
+ /// The initial viewport size for this iframe.
+ pub window_size: WindowSizeData,
}
/// Specifies whether the script or layout thread needs to be ticked for animation.
@@ -760,7 +762,7 @@ pub struct ScrollState {
}
/// Data about the window size.
-#[derive(Clone, Copy, Debug, Deserialize, MallocSizeOf, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub struct WindowSizeData {
/// The size of the initial layout viewport, before parsing an
/// <http://www.w3.org/TR/css-device-adapt/#initial-viewport>