aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout/block.rs6
-rw-r--r--components/layout/layout_task.rs183
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/root-box-003.htm.ini2
-rw-r--r--tests/wpt/metadata/dom/nodes/Document-createElement-namespace.html.ini103
4 files changed, 197 insertions, 97 deletions
diff --git a/components/layout/block.rs b/components/layout/block.rs
index a9532d6ab1a..a12d3d1bc3a 100644
--- a/components/layout/block.rs
+++ b/components/layout/block.rs
@@ -2436,7 +2436,7 @@ pub trait ISizeAndMarginsComputer {
// Invariant: inline-start_margin + inline-size + inline-end_margin ==
// available_inline-size
- let (inline_start_margin, mut inline_size, inline_end_margin) =
+ let (inline_start_margin, inline_size, inline_end_margin) =
match (inline_start_margin, computed_inline_size, inline_end_margin) {
// If all have a computed value other than 'auto', the system is over-constrained.
(MaybeAuto::Specified(margin_start),
@@ -2922,7 +2922,7 @@ impl ISizeAndMarginsComputer for InlineBlockNonReplaced {
block: &mut BlockFlow,
input: &ISizeConstraintInput)
-> ISizeConstraintSolution {
- let (mut computed_inline_size,
+ let (computed_inline_size,
inline_start_margin,
inline_end_margin,
available_inline_size) =
@@ -2963,7 +2963,7 @@ impl ISizeAndMarginsComputer for InlineBlockReplaced {
MaybeAuto::Auto => false,
});
- let (mut computed_inline_size,
+ let (computed_inline_size,
inline_start_margin,
inline_end_margin,
available_inline_size) =
diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs
index 0bf61466e83..41f895215d9 100644
--- a/components/layout/layout_task.rs
+++ b/components/layout/layout_task.rs
@@ -156,6 +156,14 @@ pub struct LayoutTaskData {
pub visible_rects: Arc<HashMap<LayerId, Rect<Au>, DefaultState<FnvHasher>>>,
}
+impl LayoutTaskData {
+ pub fn layout_root(&self) -> Option<FlowRef> {
+ self.root_flow.as_ref().map(|root_flow| {
+ root_flow.clone()
+ })
+ }
+}
+
/// Information needed by the layout task.
pub struct LayoutTask {
/// The ID of the pipeline that we belong to.
@@ -786,10 +794,6 @@ impl LayoutTask {
Some(flow)
}
- fn get_layout_root(&self, node: LayoutNode) -> FlowRef {
- self.try_get_layout_root(node).expect("no layout root")
- }
-
/// Performs layout constraint solving.
///
/// This corresponds to `Reflow()` in Gecko and `layout()` in WebKit/Blink and should be
@@ -1161,7 +1165,7 @@ impl LayoutTask {
});
// Retrieve the (possibly rebuilt) root flow.
- rw_data.root_flow = Some(self.get_layout_root((*node).clone()));
+ rw_data.root_flow = self.try_get_layout_root((*node).clone());
// Kick off animations if any were triggered.
animation::process_new_animations(&mut *rw_data, self.id);
@@ -1178,22 +1182,22 @@ impl LayoutTask {
&mut rw_data,
&mut shared_layout_context);
- let mut root_flow = (*rw_data.root_flow.as_ref().unwrap()).clone();
- match data.query_type {
- ReflowQueryType::ContentBoxQuery(node) =>
- process_content_box_request(node, &mut root_flow, &mut rw_data),
- ReflowQueryType::ContentBoxesQuery(node) =>
- process_content_boxes_request(node, &mut root_flow, &mut rw_data),
- ReflowQueryType::NodeGeometryQuery(node) =>
- self.process_node_geometry_request(node, &mut root_flow, &mut rw_data),
- ReflowQueryType::ResolvedStyleQuery(node, ref pseudo, ref property) =>
- self.process_resolved_style_request(node, pseudo, property, &mut root_flow, &mut rw_data),
- ReflowQueryType::OffsetParentQuery(node) =>
- self.process_offset_parent_query(node, &mut root_flow, &mut rw_data),
- ReflowQueryType::NoQuery => {}
+ if let Some(mut root_flow) = rw_data.layout_root() {
+ match data.query_type {
+ ReflowQueryType::ContentBoxQuery(node) =>
+ process_content_box_request(node, &mut root_flow, &mut rw_data),
+ ReflowQueryType::ContentBoxesQuery(node) =>
+ process_content_boxes_request(node, &mut root_flow, &mut rw_data),
+ ReflowQueryType::NodeGeometryQuery(node) =>
+ self.process_node_geometry_request(node, &mut root_flow, &mut rw_data),
+ ReflowQueryType::ResolvedStyleQuery(node, ref pseudo, ref property) =>
+ self.process_resolved_style_request(node, pseudo, property, &mut root_flow, &mut rw_data),
+ ReflowQueryType::OffsetParentQuery(node) =>
+ self.process_offset_parent_query(node, &mut root_flow, &mut rw_data),
+ ReflowQueryType::NoQuery => {}
+ }
}
-
// Tell script that we're done.
//
// FIXME(pcwalton): This should probably be *one* channel, but we can't fix this without
@@ -1279,23 +1283,16 @@ impl LayoutTask {
&self.url,
reflow_info.goal);
- match rw_data.root_flow.as_ref() {
- None => {
- // We haven't performed a single layout yet! Do nothing.
- return
- }
- Some(ref root_flow) => {
- // Perform an abbreviated style recalc that operates without access to the DOM.
- let mut root_flow = (*root_flow).clone();
- let animations = &*rw_data.running_animations;
- profile(time::ProfilerCategory::LayoutStyleRecalc,
- self.profiler_metadata(),
- self.time_profiler_chan.clone(),
- || {
- animation::recalc_style_for_animations(flow_ref::deref_mut(&mut root_flow),
- animations)
- });
- }
+ if let Some(mut root_flow) = rw_data.layout_root() {
+ // Perform an abbreviated style recalc that operates without access to the DOM.
+ let animations = &*rw_data.running_animations;
+ profile(time::ProfilerCategory::LayoutStyleRecalc,
+ self.profiler_metadata(),
+ self.time_profiler_chan.clone(),
+ || {
+ animation::recalc_style_for_animations(flow_ref::deref_mut(&mut root_flow),
+ animations)
+ });
}
self.perform_post_style_recalc_layout_passes(&reflow_info,
@@ -1307,54 +1304,55 @@ impl LayoutTask {
data: &Reflow,
rw_data: &mut LayoutTaskData,
layout_context: &mut SharedLayoutContext) {
- let mut root_flow = (*rw_data.root_flow.as_ref().unwrap()).clone();
- profile(time::ProfilerCategory::LayoutRestyleDamagePropagation,
- self.profiler_metadata(),
- self.time_profiler_chan.clone(),
- || {
- if opts::get().nonincremental_layout || flow_ref::deref_mut(&mut root_flow)
- .compute_layout_damage()
- .contains(REFLOW_ENTIRE_DOCUMENT) {
- flow_ref::deref_mut(&mut root_flow).reflow_entire_document()
- }
- });
+ if let Some(mut root_flow) = rw_data.layout_root() {
+ profile(time::ProfilerCategory::LayoutRestyleDamagePropagation,
+ self.profiler_metadata(),
+ self.time_profiler_chan.clone(),
+ || {
+ if opts::get().nonincremental_layout || flow_ref::deref_mut(&mut root_flow)
+ .compute_layout_damage()
+ .contains(REFLOW_ENTIRE_DOCUMENT) {
+ flow_ref::deref_mut(&mut root_flow).reflow_entire_document()
+ }
+ });
- // Verification of the flow tree, which ensures that all nodes were either marked as leaves
- // or as non-leaves. This becomes a no-op in release builds. (It is inconsequential to
- // memory safety but is a useful debugging tool.)
- self.verify_flow_tree(&mut root_flow);
+ // Verification of the flow tree, which ensures that all nodes were either marked as leaves
+ // or as non-leaves. This becomes a no-op in release builds. (It is inconsequential to
+ // memory safety but is a useful debugging tool.)
+ self.verify_flow_tree(&mut root_flow);
- if opts::get().trace_layout {
- layout_debug::begin_trace(root_flow.clone());
- }
+ if opts::get().trace_layout {
+ layout_debug::begin_trace(root_flow.clone());
+ }
- // Resolve generated content.
- profile(time::ProfilerCategory::LayoutGeneratedContent,
- self.profiler_metadata(),
- self.time_profiler_chan.clone(),
- || sequential::resolve_generated_content(&mut root_flow, &layout_context));
+ // Resolve generated content.
+ profile(time::ProfilerCategory::LayoutGeneratedContent,
+ self.profiler_metadata(),
+ self.time_profiler_chan.clone(),
+ || sequential::resolve_generated_content(&mut root_flow, &layout_context));
- // Perform the primary layout passes over the flow tree to compute the locations of all
- // the boxes.
- profile(time::ProfilerCategory::LayoutMain,
- self.profiler_metadata(),
- self.time_profiler_chan.clone(),
- || {
- match rw_data.parallel_traversal {
- None => {
- // Sequential mode.
- self.solve_constraints(&mut root_flow, &layout_context)
- }
- Some(ref mut parallel) => {
- // Parallel mode.
- self.solve_constraints_parallel(parallel,
- &mut root_flow,
- &mut *layout_context);
+ // Perform the primary layout passes over the flow tree to compute the locations of all
+ // the boxes.
+ profile(time::ProfilerCategory::LayoutMain,
+ self.profiler_metadata(),
+ self.time_profiler_chan.clone(),
+ || {
+ match rw_data.parallel_traversal {
+ None => {
+ // Sequential mode.
+ self.solve_constraints(&mut root_flow, &layout_context)
+ }
+ Some(ref mut parallel) => {
+ // Parallel mode.
+ self.solve_constraints_parallel(parallel,
+ &mut root_flow,
+ &mut *layout_context);
+ }
}
- }
- });
+ });
- self.perform_post_main_layout_passes(data, rw_data, layout_context);
+ self.perform_post_main_layout_passes(data, rw_data, layout_context);
+ }
}
fn perform_post_main_layout_passes<'a>(&'a self,
@@ -1362,22 +1360,23 @@ impl LayoutTask {
rw_data: &mut LayoutTaskData,
layout_context: &mut SharedLayoutContext) {
// Build the display list if necessary, and send it to the painter.
- let mut root_flow = (*rw_data.root_flow.as_ref().unwrap()).clone();
- self.compute_abs_pos_and_build_display_list(data,
- &mut root_flow,
- &mut *layout_context,
- rw_data);
- self.first_reflow.set(false);
-
- if opts::get().trace_layout {
- layout_debug::end_trace();
- }
+ if let Some(mut root_flow) = rw_data.layout_root() {
+ self.compute_abs_pos_and_build_display_list(data,
+ &mut root_flow,
+ &mut *layout_context,
+ rw_data);
+ self.first_reflow.set(false);
+
+ if opts::get().trace_layout {
+ layout_debug::end_trace();
+ }
- if opts::get().dump_flow_tree {
- root_flow.dump();
- }
+ if opts::get().dump_flow_tree {
+ root_flow.dump();
+ }
- rw_data.generation += 1;
+ rw_data.generation += 1;
+ }
}
unsafe fn dirty_all_nodes(node: &mut LayoutNode) {
diff --git a/tests/wpt/metadata-css/css21_dev/html4/root-box-003.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/root-box-003.htm.ini
index c06cb4a8347..3143cf72d07 100644
--- a/tests/wpt/metadata-css/css21_dev/html4/root-box-003.htm.ini
+++ b/tests/wpt/metadata-css/css21_dev/html4/root-box-003.htm.ini
@@ -1,3 +1,3 @@
[root-box-003.htm]
type: reftest
- expected: CRASH
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/dom/nodes/Document-createElement-namespace.html.ini b/tests/wpt/metadata/dom/nodes/Document-createElement-namespace.html.ini
index 61402943791..cc3fa616c7c 100644
--- a/tests/wpt/metadata/dom/nodes/Document-createElement-namespace.html.ini
+++ b/tests/wpt/metadata/dom/nodes/Document-createElement-namespace.html.ini
@@ -1,3 +1,104 @@
[Document-createElement-namespace.html]
type: testharness
- disabled: Issue 6386
+ [Created element's namespace in created XML document]
+ expected: FAIL
+
+ [Created element's namespace in created XHTML document]
+ expected: FAIL
+
+ [Created element's namespace in created SVG document]
+ expected: FAIL
+
+ [Created element's namespace in created MathML document]
+ expected: FAIL
+
+ [Created element's namespace in empty.xhtml]
+ expected: FAIL
+
+ [Created element's namespace in empty.xml]
+ expected: FAIL
+
+ [Created element's namespace in empty.svg]
+ expected: FAIL
+
+ [Created element's namespace in minimal_html.xhtml]
+ expected: FAIL
+
+ [Created element's namespace in minimal_html.xml]
+ expected: FAIL
+
+ [Created element's namespace in minimal_html.svg]
+ expected: FAIL
+
+ [Created element's namespace in xhtml.xhtml]
+ expected: FAIL
+
+ [Created element's namespace in xhtml.xml]
+ expected: FAIL
+
+ [Created element's namespace in xhtml.svg]
+ expected: FAIL
+
+ [Created element's namespace in svg.xhtml]
+ expected: FAIL
+
+ [Created element's namespace in svg.xml]
+ expected: FAIL
+
+ [Created element's namespace in svg.svg]
+ expected: FAIL
+
+ [Created element's namespace in mathml.xhtml]
+ expected: FAIL
+
+ [Created element's namespace in mathml.xml]
+ expected: FAIL
+
+ [Created element's namespace in mathml.svg]
+ expected: FAIL
+
+ [Created element's namespace in bare_xhtml.xhtml]
+ expected: FAIL
+
+ [Created element's namespace in bare_xhtml.xml]
+ expected: FAIL
+
+ [Created element's namespace in bare_xhtml.svg]
+ expected: FAIL
+
+ [Created element's namespace in bare_svg.xhtml]
+ expected: FAIL
+
+ [Created element's namespace in bare_svg.xml]
+ expected: FAIL
+
+ [Created element's namespace in bare_svg.svg]
+ expected: FAIL
+
+ [Created element's namespace in bare_mathml.xhtml]
+ expected: FAIL
+
+ [Created element's namespace in bare_mathml.xml]
+ expected: FAIL
+
+ [Created element's namespace in bare_mathml.svg]
+ expected: FAIL
+
+ [Created element's namespace in xhtml_ns_removed.xhtml]
+ expected: FAIL
+
+ [Created element's namespace in xhtml_ns_removed.xml]
+ expected: FAIL
+
+ [Created element's namespace in xhtml_ns_removed.svg]
+ expected: FAIL
+
+ [Created element's namespace in xhtml_ns_changed.xhtml]
+ expected: FAIL
+
+ [Created element's namespace in xhtml_ns_changed.xml]
+ expected: FAIL
+
+ [Created element's namespace in xhtml_ns_changed.svg]
+ expected: FAIL
+