aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/layout_task.rs
diff options
context:
space:
mode:
authorMichael Howell <michael@notriddle.com>2015-10-29 14:39:58 -0700
committerMichael Howell <michael@notriddle.com>2015-11-10 15:01:46 -0700
commitd32a2d6cfc2c3e86f2f744381e6198b470eed429 (patch)
tree76b981672a50584806cf13430487dea9b398d5f9 /components/layout/layout_task.rs
parent13226f847234cd0130820338d5a272277780d278 (diff)
downloadservo-d32a2d6cfc2c3e86f2f744381e6198b470eed429.tar.gz
servo-d32a2d6cfc2c3e86f2f744381e6198b470eed429.zip
Write reflow results, even with no root node.
Fixes #8240
Diffstat (limited to 'components/layout/layout_task.rs')
-rw-r--r--components/layout/layout_task.rs32
1 files changed, 28 insertions, 4 deletions
diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs
index d650a927ad3..603a08491d0 100644
--- a/components/layout/layout_task.rs
+++ b/components/layout/layout_task.rs
@@ -1082,21 +1082,45 @@ impl LayoutTask {
let document = unsafe { LayoutNode::new(&data.document) };
let document = document.as_document().unwrap();
+
+ debug!("layout: received layout request for: {}", self.url.serialize());
+
+ let mut rw_data = possibly_locked_rw_data.lock();
+
let node: LayoutNode = match document.root_node() {
- None => return,
+ None => {
+ // Since we cannot compute anything, give spec-required placeholders.
+ debug!("layout: No root node: bailing");
+ match data.query_type {
+ ReflowQueryType::ContentBoxQuery(_) => {
+ rw_data.content_box_response = Rect::zero();
+ },
+ ReflowQueryType::ContentBoxesQuery(_) => {
+ rw_data.content_boxes_response = Vec::new();
+ },
+ ReflowQueryType::NodeGeometryQuery(_) => {
+ rw_data.client_rect_response = Rect::zero();
+ },
+ ReflowQueryType::ResolvedStyleQuery(_, _, _) => {
+ rw_data.resolved_style_response = None;
+ },
+ ReflowQueryType::OffsetParentQuery(_) => {
+ rw_data.offset_parent_response = OffsetParentResponse::empty();
+ },
+ ReflowQueryType::NoQuery => {}
+ }
+ return;
+ },
Some(x) => x,
};
- debug!("layout: received layout request for: {}", self.url.serialize());
if log_enabled!(log::LogLevel::Debug) {
node.dump();
}
- let mut rw_data = possibly_locked_rw_data.lock();
let stylesheets: Vec<&Stylesheet> = data.document_stylesheets.iter().map(|entry| &**entry)
.collect();
let stylesheets_changed = data.stylesheets_changed;
-
let initial_viewport = data.window_size.initial_viewport;
let old_viewport_size = self.viewport_size;
let current_screen_size = Size2D::new(Au::from_f32_px(initial_viewport.width.get()),