From 16b6e812a24f8bb57fdd8d673461f384f0de4c23 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 26 Oct 2015 09:16:48 +0100 Subject: [PATCH 1/5] Return the result from process_offset_parent_query. --- components/layout/layout_task.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs index 7d2e31ce217..3551fb218c0 100644 --- a/components/layout/layout_task.rs +++ b/components/layout/layout_task.rs @@ -1013,10 +1013,10 @@ impl LayoutTask { }; } - fn process_offset_parent_query<'a>(&'a self, - requested_node: TrustedNodeAddress, - layout_root: &mut FlowRef, - rw_data: &mut RWGuard<'a>) { + fn process_offset_parent_query(&self, + requested_node: TrustedNodeAddress, + layout_root: &mut FlowRef) + -> OffsetParentResponse { let requested_node: OpaqueNode = OpaqueNodeMethods::from_script_node(requested_node); let mut iterator = ParentOffsetBorderBoxIterator::new(requested_node); sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); @@ -1026,13 +1026,13 @@ impl LayoutTask { let parent = iterator.parent_nodes[parent_info_index].as_ref().unwrap(); let origin = iterator.node_border_box.origin - parent.border_box.origin; let size = iterator.node_border_box.size; - rw_data.offset_parent_response = OffsetParentResponse { + OffsetParentResponse { node_address: Some(parent.node_address.to_untrusted_node_address()), rect: Rect::new(origin, size), - }; + } } None => { - rw_data.offset_parent_response = OffsetParentResponse::empty(); + OffsetParentResponse::empty() } } } @@ -1244,7 +1244,7 @@ impl LayoutTask { &mut rw_data) } ReflowQueryType::OffsetParentQuery(node) => - self.process_offset_parent_query(node, &mut root_flow, &mut rw_data), + rw_data.offset_parent_response = self.process_offset_parent_query(node, &mut root_flow), ReflowQueryType::NoQuery => {} } } From 9754bfc330ce6716ed5f85f382d7408ec2deb141 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 26 Oct 2015 09:28:41 +0100 Subject: [PATCH 2/5] Return the result from process_resolved_style_request. --- components/layout/layout_task.rs | 39 +++++++++++++++----------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs index 3551fb218c0..39f100eb20c 100644 --- a/components/layout/layout_task.rs +++ b/components/layout/layout_task.rs @@ -887,15 +887,14 @@ impl LayoutTask { rw_data.client_rect_response = iterator.client_rect; } - // Compute the resolved value of property for a given (pseudo)element. - // Stores the result in rw_data.resolved_style_response. - // https://drafts.csswg.org/cssom/#resolved-value - fn process_resolved_style_request<'a>(&'a self, - requested_node: TrustedNodeAddress, - pseudo: &Option, - property: &Atom, - layout_root: &mut FlowRef, - rw_data: &mut RWGuard<'a>) { + /// Return the resolved value of property for a given (pseudo)element. + /// https://drafts.csswg.org/cssom/#resolved-value + fn process_resolved_style_request(&self, + requested_node: TrustedNodeAddress, + pseudo: &Option, + property: &Atom, + layout_root: &mut FlowRef) + -> Option { // FIXME: Isolate this transmutation into a "bridge" module. // FIXME(rust#16366): The following line had to be moved because of a // rustc bug. It should be in the next unsafe block. @@ -918,8 +917,7 @@ impl LayoutTask { // The pseudo doesn't exist, return nothing. Chrome seems to query // the element itself in this case, Firefox uses the resolved value. // https://www.w3.org/Bugs/Public/show_bug.cgi?id=29006 - rw_data.resolved_style_response = None; - return; + return None; } Some(layout_node) => layout_node }; @@ -970,7 +968,7 @@ impl LayoutTask { style.writing_mode); sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); - rw_data.resolved_style_response = iterator.result.map(|r| r.to_css_string()); + iterator.result.map(|r| r.to_css_string()) }, atom!("bottom") | atom!("top") | atom!("right") | @@ -1003,14 +1001,13 @@ impl LayoutTask { position); sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); - rw_data.resolved_style_response = iterator.result.map(|r| r.to_css_string()); + iterator.result.map(|r| r.to_css_string()) }, // FIXME: implement used value computation for line-height ref property => { - rw_data.resolved_style_response = - style.computed_value_to_string(property.as_slice()).ok(); + style.computed_value_to_string(property.as_slice()).ok() } - }; + } } fn process_offset_parent_query(&self, @@ -1237,11 +1234,11 @@ impl LayoutTask { 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) + rw_data.resolved_style_response = + self.process_resolved_style_request(node, + pseudo, + property, + &mut root_flow) } ReflowQueryType::OffsetParentQuery(node) => rw_data.offset_parent_response = self.process_offset_parent_query(node, &mut root_flow), From a84055d8fe4d27981f8ff18991c29ae692360a93 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 26 Oct 2015 10:18:46 +0100 Subject: [PATCH 3/5] Return the result from process_node_geometry_request. --- components/layout/layout_task.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs index 39f100eb20c..890c64ff85b 100644 --- a/components/layout/layout_task.rs +++ b/components/layout/layout_task.rs @@ -877,14 +877,14 @@ impl LayoutTask { traversal); } - fn process_node_geometry_request<'a>(&'a self, - requested_node: TrustedNodeAddress, - layout_root: &mut FlowRef, - rw_data: &mut RWGuard<'a>) { + fn process_node_geometry_request(&self, + requested_node: TrustedNodeAddress, + layout_root: &mut FlowRef) + -> Rect { let requested_node: OpaqueNode = OpaqueNodeMethods::from_script_node(requested_node); let mut iterator = FragmentLocatingFragmentIterator::new(requested_node); sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); - rw_data.client_rect_response = iterator.client_rect; + iterator.client_rect } /// Return the resolved value of property for a given (pseudo)element. @@ -1232,7 +1232,7 @@ impl LayoutTask { 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), + rw_data.client_rect_response = self.process_node_geometry_request(node, &mut root_flow), ReflowQueryType::ResolvedStyleQuery(node, ref pseudo, ref property) => { rw_data.resolved_style_response = self.process_resolved_style_request(node, From 60e60b6f8aadf2f8dac5974e679078e1eb5e5427 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 26 Oct 2015 10:24:05 +0100 Subject: [PATCH 4/5] Return the result from process_content_boxes_request. --- components/layout/layout_task.rs | 2 +- components/layout/query.rs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs index 890c64ff85b..db9188a680f 100644 --- a/components/layout/layout_task.rs +++ b/components/layout/layout_task.rs @@ -1230,7 +1230,7 @@ impl LayoutTask { 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), + rw_data.content_boxes_response = process_content_boxes_request(node, &mut root_flow), ReflowQueryType::NodeGeometryQuery(node) => rw_data.client_rect_response = self.process_node_geometry_request(node, &mut root_flow), ReflowQueryType::ResolvedStyleQuery(node, ref pseudo, ref property) => { diff --git a/components/layout/query.rs b/components/layout/query.rs index 024d3022288..a6742815f17 100644 --- a/components/layout/query.rs +++ b/components/layout/query.rs @@ -295,13 +295,13 @@ pub fn process_content_box_request<'a>(requested_node: TrustedNodeAddress, }; } -pub fn process_content_boxes_request<'a>(requested_node: TrustedNodeAddress, - layout_root: &mut FlowRef, - rw_data: &mut RWGuard<'a>) { +pub fn process_content_boxes_request(requested_node: TrustedNodeAddress, + layout_root: &mut FlowRef) + -> Vec> { // FIXME(pcwalton): This has not been updated to handle the stacking context relative // stuff. So the position is wrong in most cases. let requested_node: OpaqueNode = OpaqueNodeMethods::from_script_node(requested_node); let mut iterator = CollectingFragmentBorderBoxIterator::new(requested_node); sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); - rw_data.content_boxes_response = iterator.rects; + iterator.rects } From 68830ed66f74146d76fecfe3da568478fbe78ffe Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 26 Oct 2015 10:32:49 +0100 Subject: [PATCH 5/5] Return the result from process_content_box_request. --- components/layout/layout_task.rs | 2 +- components/layout/query.rs | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs index db9188a680f..9c3a3e7ea4c 100644 --- a/components/layout/layout_task.rs +++ b/components/layout/layout_task.rs @@ -1228,7 +1228,7 @@ impl LayoutTask { 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), + rw_data.content_box_response = process_content_box_request(node, &mut root_flow), ReflowQueryType::ContentBoxesQuery(node) => rw_data.content_boxes_response = process_content_boxes_request(node, &mut root_flow), ReflowQueryType::NodeGeometryQuery(node) => diff --git a/components/layout/query.rs b/components/layout/query.rs index a6742815f17..d50e150d0ae 100644 --- a/components/layout/query.rs +++ b/components/layout/query.rs @@ -10,7 +10,7 @@ use euclid::rect::Rect; use flow_ref::FlowRef; use fragment::{Fragment, FragmentBorderBoxIterator}; use gfx::display_list::{DisplayItemMetadata, OpaqueNode}; -use layout_task::{LayoutTaskData, RWGuard}; +use layout_task::LayoutTaskData; use msg::constellation_msg::ConstellationChan; use msg::constellation_msg::Msg as ConstellationMsg; use opaque_node::OpaqueNodeMethods; @@ -281,18 +281,18 @@ impl FragmentBorderBoxIterator for MarginRetrievingFragmentBorderBoxIterator { } } -pub fn process_content_box_request<'a>(requested_node: TrustedNodeAddress, - layout_root: &mut FlowRef, - rw_data: &mut RWGuard<'a>) { +pub fn process_content_box_request(requested_node: TrustedNodeAddress, + layout_root: &mut FlowRef) + -> Rect { // FIXME(pcwalton): This has not been updated to handle the stacking context relative // stuff. So the position is wrong in most cases. let requested_node: OpaqueNode = OpaqueNodeMethods::from_script_node(requested_node); let mut iterator = UnioningFragmentBorderBoxIterator::new(requested_node); sequential::iterate_through_flow_tree_fragment_border_boxes(layout_root, &mut iterator); - rw_data.content_box_response = match iterator.rect { + match iterator.rect { Some(rect) => rect, None => Rect::zero() - }; + } } pub fn process_content_boxes_request(requested_node: TrustedNodeAddress,