diff options
author | Michael Howell <michael@notriddle.com> | 2015-10-29 14:39:58 -0700 |
---|---|---|
committer | Michael Howell <michael@notriddle.com> | 2015-11-10 15:01:46 -0700 |
commit | d32a2d6cfc2c3e86f2f744381e6198b470eed429 (patch) | |
tree | 76b981672a50584806cf13430487dea9b398d5f9 /components/layout/layout_task.rs | |
parent | 13226f847234cd0130820338d5a272277780d278 (diff) | |
download | servo-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.rs | 32 |
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()), |