Auto merge of #8256 - notriddle:master, r=eefriedman

Write reflow results, even with no root node.

Fixes #8240

Test in w3c/csswg-test#928.

<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/8256)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2015-11-11 04:49:49 +05:30
commit 532f9a053a

View file

@ -1082,21 +1082,45 @@ impl LayoutTask {
let document = unsafe { LayoutNode::new(&data.document) }; let document = unsafe { LayoutNode::new(&data.document) };
let document = document.as_document().unwrap(); 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() { 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, Some(x) => x,
}; };
debug!("layout: received layout request for: {}", self.url.serialize());
if log_enabled!(log::LogLevel::Debug) { if log_enabled!(log::LogLevel::Debug) {
node.dump(); node.dump();
} }
let mut rw_data = possibly_locked_rw_data.lock();
let stylesheets: Vec<&Stylesheet> = data.document_stylesheets.iter().map(|entry| &**entry) let stylesheets: Vec<&Stylesheet> = data.document_stylesheets.iter().map(|entry| &**entry)
.collect(); .collect();
let stylesheets_changed = data.stylesheets_changed; let stylesheets_changed = data.stylesheets_changed;
let initial_viewport = data.window_size.initial_viewport; let initial_viewport = data.window_size.initial_viewport;
let old_viewport_size = self.viewport_size; let old_viewport_size = self.viewport_size;
let current_screen_size = Size2D::new(Au::from_f32_px(initial_viewport.width.get()), let current_screen_size = Size2D::new(Au::from_f32_px(initial_viewport.width.get()),