diff options
56 files changed, 1979 insertions, 1363 deletions
diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index 36688456333..4c3a3505b62 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -504,8 +504,10 @@ impl<Window: WindowMethods> IOCompositor<Window> { fn handle_browser_message(&mut self, msg: Msg) -> bool { match (msg, self.shutdown_state) { - (_, ShutdownState::FinishedShuttingDown) => - panic!("compositor shouldn't be handling messages after shutting down"), + (_, ShutdownState::FinishedShuttingDown) => { + error!("compositor shouldn't be handling messages after shutting down"); + return false + } (Msg::Exit(channel), _) => { self.start_shutting_down(); @@ -780,7 +782,10 @@ impl<Window: WindowMethods> IOCompositor<Window> { pub fn pipeline(&self, pipeline_id: PipelineId) -> Option<&CompositionPipeline> { match self.pipeline_details.get(&pipeline_id) { Some(ref details) => details.pipeline.as_ref(), - None => panic!("Compositor layer has an unknown pipeline ({:?}).", pipeline_id), + None => { + warn!("Compositor layer has an unknown pipeline ({:?}).", pipeline_id); + None + } } } @@ -881,7 +886,8 @@ impl<Window: WindowMethods> IOCompositor<Window> { fn find_pipeline_root_layer(&self, pipeline_id: PipelineId) -> Option<Rc<Layer<CompositorData>>> { if !self.pipeline_details.contains_key(&pipeline_id) { - panic!("Tried to create or update layer for unknown pipeline") + warn!("Tried to create or update layer for unknown pipeline"); + return None; } self.find_layer_with_pipeline_and_layer_id(pipeline_id, LayerId::null()) } @@ -1119,7 +1125,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { layer_id: LayerId) { if let Some(point) = self.fragment_point.take() { if !self.move_layer(pipeline_id, layer_id, Point2D::from_untyped(&point)) { - panic!("Compositor: Tried to scroll to fragment with unknown layer."); + return warn!("Compositor: Tried to scroll to fragment with unknown layer."); } self.perform_updates_after_scroll(); diff --git a/components/compositing/constellation.rs b/components/compositing/constellation.rs index 1c4f6544ddc..6e09fc4b15d 100644 --- a/components/compositing/constellation.rs +++ b/components/compositing/constellation.rs @@ -505,7 +505,8 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> #[cfg(target_os = "windows")] fn spawn_multiprocess(&mut self, _: PipelineId, _: UnprivilegedPipelineContent) { - panic!("Multiprocess is not supported on Windows."); + error!("Multiprocess is not supported on Windows."); + process::exit(1); } // Push a new (loading) pipeline to the list of pending frame changes diff --git a/components/layout/construct.rs b/components/layout/construct.rs index cc34642466a..873be2b2743 100644 --- a/components/layout/construct.rs +++ b/components/layout/construct.rs @@ -47,6 +47,7 @@ use style::computed_values::content::ContentItem; use style::computed_values::{caption_side, display, empty_cells, float, list_style_position}; use style::computed_values::{position}; use style::properties::{self, ComputedValues, ServoComputedValues}; +use style::servo::SharedStyleContext; use table::TableFlow; use table_caption::TableCaptionFlow; use table_cell::TableCellFlow; @@ -210,15 +211,15 @@ impl InlineFragmentsAccumulator { } } - fn from_inline_node<N>(node: &N) -> InlineFragmentsAccumulator + fn from_inline_node<N>(node: &N, style_context: &SharedStyleContext) -> InlineFragmentsAccumulator where N: ThreadSafeLayoutNode { InlineFragmentsAccumulator { fragments: IntermediateInlineFragments::new(), enclosing_node: Some(InlineFragmentNodeInfo { address: node.opaque(), pseudo: node.get_pseudo_element_type().strip(), - style: node.style().clone(), - selected_style: node.selected_style().clone(), + style: node.style(style_context).clone(), + selected_style: node.selected_style(style_context).clone(), flags: InlineFragmentNodeFlags::empty(), }), bidi_control_chars: None, @@ -288,6 +289,11 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> } #[inline] + fn style_context(&self) -> &SharedStyleContext { + self.layout_context.style_context() + } + + #[inline] fn set_flow_construction_result(&self, node: &ConcreteThreadSafeLayoutNode, result: ConstructionResult) { @@ -336,7 +342,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> Some(NodeTypeId::Element(ElementTypeId::HTMLElement( HTMLElementTypeId::HTMLCanvasElement))) => { let data = node.canvas_data().unwrap(); - SpecificFragmentInfo::Canvas(box CanvasFragmentInfo::new(node, data)) + SpecificFragmentInfo::Canvas(box CanvasFragmentInfo::new(node, data, self.layout_context)) } _ => { // This includes pseudo-elements. @@ -344,7 +350,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> } }; - Fragment::new(node, specific_fragment_info) + Fragment::new(node, specific_fragment_info, self.layout_context) } /// Generates anonymous table objects per CSS 2.1 § 17.2.1. @@ -356,13 +362,14 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> return } + let style_context = self.style_context(); if child.is_table_cell() { - let mut style = child_node.style().clone(); + let mut style = child_node.style(style_context).clone(); properties::modify_style_for_anonymous_table_object(&mut style, display::T::table_row); let fragment = Fragment::from_opaque_node_and_style(child_node.opaque(), PseudoElementType::Normal, style, - child_node.selected_style().clone(), + child_node.selected_style(style_context).clone(), child_node.restyle_damage(), SpecificFragmentInfo::TableRow); let mut new_child: FlowRef = Arc::new(TableRowFlow::from_fragment(fragment)); @@ -371,12 +378,12 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> *child = new_child } if child.is_table_row() || child.is_table_rowgroup() { - let mut style = child_node.style().clone(); + let mut style = child_node.style(style_context).clone(); properties::modify_style_for_anonymous_table_object(&mut style, display::T::table); let fragment = Fragment::from_opaque_node_and_style(child_node.opaque(), PseudoElementType::Normal, style, - child_node.selected_style().clone(), + child_node.selected_style(style_context).clone(), child_node.restyle_damage(), SpecificFragmentInfo::Table); let mut new_child: FlowRef = Arc::new(TableFlow::from_fragment(fragment)); @@ -385,13 +392,13 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> *child = new_child } if child.is_table() { - let mut style = child_node.style().clone(); + let mut style = child_node.style(style_context).clone(); properties::modify_style_for_anonymous_table_object(&mut style, display::T::table); let fragment = Fragment::from_opaque_node_and_style(child_node.opaque(), PseudoElementType::Normal, style, - child_node.selected_style().clone(), + child_node.selected_style(style_context).clone(), child_node.restyle_damage(), SpecificFragmentInfo::TableWrapper); let mut new_child: FlowRef = Arc::new(TableWrapperFlow::from_fragment(fragment, None)); @@ -449,7 +456,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> TextRunScanner::new().scan_for_runs(&mut self.layout_context.font_context(), fragments.fragments); let mut inline_flow_ref: FlowRef = Arc::new( - InlineFlow::from_fragments(scanned_fragments, node.style().writing_mode)); + InlineFlow::from_fragments(scanned_fragments, node.style(self.style_context()).writing_mode)); // Add all the inline-block fragments as children of the inline flow. for inline_block_flow in &inline_block_flows { @@ -479,7 +486,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> let (ascent, descent) = inline_flow.compute_minimum_ascent_and_descent(&mut self.layout_context .font_context(), - &**node.style()); + &**node.style(self.style_context())); inline_flow.minimum_block_size_above_baseline = ascent; inline_flow.minimum_depth_below_baseline = descent; } @@ -587,10 +594,11 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> box UnscannedTextFragmentInfo::new(" ".to_owned(), None)); properties::modify_style_for_replaced_content(&mut whitespace_style); properties::modify_style_for_text(&mut whitespace_style); + let style_context = self.style_context(); let fragment = Fragment::from_opaque_node_and_style(whitespace_node, whitespace_pseudo, whitespace_style, - node.selected_style().clone(), + node.selected_style(style_context).clone(), whitespace_damage, fragment_info); inline_fragment_accumulator.fragments.fragments.push_back(fragment); @@ -696,7 +704,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> } } - let mut style = node.style().clone(); + let mut style = node.style(self.style_context()).clone(); if node_is_input_or_text_area { properties::modify_style_for_input_text(&mut style); } @@ -722,7 +730,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> let mut style = (*style).clone(); properties::modify_style_for_text(&mut style); - let selected_style = node.selected_style(); + let selected_style = node.selected_style(self.style_context()); match text_content { TextContent::Text(string) => { @@ -765,7 +773,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> /// to happen. fn build_flow_for_block(&mut self, node: &ConcreteThreadSafeLayoutNode, float_kind: Option<FloatKind>) -> ConstructionResult { - if node.style().is_multicol() { + if node.style(self.style_context()).is_multicol() { return self.build_flow_for_multicol(node, float_kind) } @@ -791,7 +799,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> predecessors: mem::replace( fragment_accumulator, InlineFragmentsAccumulator::from_inline_node( - node)).to_intermediate_inline_fragments(), + node, self.style_context())).to_intermediate_inline_fragments(), flow: kid_flow, }; opt_inline_block_splits.push_back(split) @@ -805,8 +813,8 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> fn build_fragments_for_nonreplaced_inline_content(&mut self, node: &ConcreteThreadSafeLayoutNode) -> ConstructionResult { let mut opt_inline_block_splits: LinkedList<InlineBlockSplit> = LinkedList::new(); - let mut fragment_accumulator = InlineFragmentsAccumulator::from_inline_node(node); - fragment_accumulator.bidi_control_chars = bidi_control_chars(&*node.style()); + let mut fragment_accumulator = InlineFragmentsAccumulator::from_inline_node(node, self.style_context()); + fragment_accumulator.bidi_control_chars = bidi_control_chars(&*node.style(self.style_context())); let mut abs_descendants = AbsoluteDescendants::new(); @@ -828,7 +836,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> mem::replace( &mut fragment_accumulator, InlineFragmentsAccumulator::from_inline_node( - node)).to_intermediate_inline_fragments(), + node, self.style_context())).to_intermediate_inline_fragments(), flow: flow, }; opt_inline_block_splits.push_back(split); @@ -879,12 +887,13 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> box UnscannedTextFragmentInfo::new(" ".to_owned(), None)); properties::modify_style_for_replaced_content(&mut whitespace_style); properties::modify_style_for_text(&mut whitespace_style); - let fragment = Fragment::from_opaque_node_and_style(whitespace_node, - whitespace_pseudo, - whitespace_style, - node.selected_style().clone(), - whitespace_damage, - fragment_info); + let fragment = + Fragment::from_opaque_node_and_style(whitespace_node, + whitespace_pseudo, + whitespace_style, + node.selected_style(self.style_context()).clone(), + whitespace_damage, + fragment_info); fragment_accumulator.fragments.fragments.push_back(fragment) } ConstructionResult::ConstructionItem(ConstructionItem::TableColumnFragment(_)) => { @@ -894,17 +903,18 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> } } - if is_empty && node.style().has_padding_or_border() { + let node_style = node.style(self.style_context()); + if is_empty && node_style.has_padding_or_border() { // An empty inline box needs at least one fragment to draw its background and borders. let info = SpecificFragmentInfo::UnscannedText( box UnscannedTextFragmentInfo::new(String::new(), None)); - let mut modified_style = node.style().clone(); + let mut modified_style = node_style.clone(); properties::modify_style_for_replaced_content(&mut modified_style); properties::modify_style_for_text(&mut modified_style); let fragment = Fragment::from_opaque_node_and_style(node.opaque(), node.get_pseudo_element_type().strip(), modified_style, - node.selected_style().clone(), + node.selected_style(self.style_context()).clone(), node.restyle_damage(), info); fragment_accumulator.fragments.fragments.push_back(fragment) @@ -917,7 +927,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> // If the node is positioned, then it's the containing block for all absolutely- // positioned descendants. - if node.style().get_box().position != position::T::static_ { + if node_style.get_box().position != position::T::static_ { fragment_accumulator.fragments .absolute_descendants .mark_as_having_reached_containing_block(); @@ -944,17 +954,17 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> } // If this node is ignorable whitespace, bail out now. - if node.is_ignorable_whitespace() { + if node.is_ignorable_whitespace(self.style_context()) { return ConstructionResult::ConstructionItem(ConstructionItem::Whitespace( node.opaque(), node.get_pseudo_element_type().strip(), - node.style().clone(), + node.style(self.style_context()).clone(), node.restyle_damage())) } // Modify the style as necessary. (See the comment in // `properties::modify_style_for_replaced_content()`.) - let mut style = (*node.style()).clone(); + let mut style = (*node.style(self.style_context())).clone(); properties::modify_style_for_replaced_content(&mut style); // If this is generated content, then we need to initialize the accumulator with the @@ -987,14 +997,15 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> _ => unreachable!() }; - let mut modified_style = (*node.style()).clone(); + let style_context = self.style_context(); + let mut modified_style = (*node.style(self.style_context())).clone(); properties::modify_style_for_outer_inline_block_fragment(&mut modified_style); let fragment_info = SpecificFragmentInfo::InlineBlock(InlineBlockFragmentInfo::new( block_flow)); let fragment = Fragment::from_opaque_node_and_style(node.opaque(), node.get_pseudo_element_type().strip(), modified_style, - node.selected_style().clone(), + node.selected_style(style_context).clone(), node.restyle_damage(), fragment_info); @@ -1022,16 +1033,17 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> let fragment_info = SpecificFragmentInfo::InlineAbsoluteHypothetical( InlineAbsoluteHypotheticalFragmentInfo::new(block_flow)); - let mut style = node.style().clone(); + let style_context = self.style_context(); + let mut style = node.style(style_context).clone(); properties::modify_style_for_inline_absolute_hypothetical_fragment(&mut style); let fragment = Fragment::from_opaque_node_and_style(node.opaque(), PseudoElementType::Normal, style, - node.selected_style().clone(), + node.selected_style(style_context).clone(), node.restyle_damage(), fragment_info); - let mut fragment_accumulator = InlineFragmentsAccumulator::from_inline_node(node); + let mut fragment_accumulator = InlineFragmentsAccumulator::from_inline_node(node, self.style_context()); fragment_accumulator.fragments.fragments.push_back(fragment); fragment_accumulator.fragments.absolute_descendants.push_descendants(abs_descendants); @@ -1087,7 +1099,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> child_flows: Vec<FlowRef>, flow: &mut FlowRef, node: &ConcreteThreadSafeLayoutNode) { - let mut anonymous_flow = flow.generate_missing_child_flow(node); + let mut anonymous_flow = flow.generate_missing_child_flow(node, self.layout_context); let mut consecutive_siblings = vec!(); for kid_flow in child_flows { if anonymous_flow.need_anonymous_flow(&*kid_flow) { @@ -1115,10 +1127,10 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> fn build_flow_for_multicol(&mut self, node: &ConcreteThreadSafeLayoutNode, float_kind: Option<FloatKind>) -> ConstructionResult { - let fragment = Fragment::new(node, SpecificFragmentInfo::Multicol); + let fragment = Fragment::new(node, SpecificFragmentInfo::Multicol, self.layout_context); let mut flow: FlowRef = Arc::new(MulticolFlow::from_fragment(fragment, float_kind)); - let column_fragment = Fragment::new(node, SpecificFragmentInfo::MulticolColumn); + let column_fragment = Fragment::new(node, SpecificFragmentInfo::MulticolColumn, self.layout_context); let column_flow = Arc::new(MulticolColumnFlow::from_fragment(column_fragment)); // First populate the column flow with its children. @@ -1156,11 +1168,11 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> /// possibly other `TableCaptionFlow`s or `TableFlow`s underneath it. fn build_flow_for_table_wrapper(&mut self, node: &ConcreteThreadSafeLayoutNode, float_value: float::T) -> ConstructionResult { - let fragment = Fragment::new(node, SpecificFragmentInfo::TableWrapper); + let fragment = Fragment::new(node, SpecificFragmentInfo::TableWrapper, self.layout_context); let mut wrapper_flow: FlowRef = Arc::new( TableWrapperFlow::from_fragment(fragment, FloatKind::from_property(float_value))); - let table_fragment = Fragment::new(node, SpecificFragmentInfo::Table); + let table_fragment = Fragment::new(node, SpecificFragmentInfo::Table, self.layout_context); let table_flow = Arc::new(TableFlow::from_fragment(table_fragment)); // First populate the table flow with its children. @@ -1218,7 +1230,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> /// with possibly other `TableRowFlow`s underneath it. fn build_flow_for_table_rowgroup(&mut self, node: &ConcreteThreadSafeLayoutNode) -> ConstructionResult { - let fragment = Fragment::new(node, SpecificFragmentInfo::TableRow); + let fragment = Fragment::new(node, SpecificFragmentInfo::TableRow, self.layout_context); let flow = Arc::new(TableRowGroupFlow::from_fragment(fragment)); self.build_flow_for_block_like(flow, node) } @@ -1226,7 +1238,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> /// Builds a flow for a node with `display: table-row`. This yields a `TableRowFlow` with /// possibly other `TableCellFlow`s underneath it. fn build_flow_for_table_row(&mut self, node: &ConcreteThreadSafeLayoutNode) -> ConstructionResult { - let fragment = Fragment::new(node, SpecificFragmentInfo::TableRow); + let fragment = Fragment::new(node, SpecificFragmentInfo::TableRow, self.layout_context); let flow = Arc::new(TableRowFlow::from_fragment(fragment)); self.build_flow_for_block_like(flow, node) } @@ -1234,14 +1246,14 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> /// Builds a flow for a node with `display: table-cell`. This yields a `TableCellFlow` with /// possibly other `BlockFlow`s or `InlineFlow`s underneath it. fn build_flow_for_table_cell(&mut self, node: &ConcreteThreadSafeLayoutNode) -> ConstructionResult { - let fragment = Fragment::new(node, SpecificFragmentInfo::TableCell); + let fragment = Fragment::new(node, SpecificFragmentInfo::TableCell, self.layout_context); // Determine if the table cell should be hidden. Per CSS 2.1 § 17.6.1.1, this will be true // if the cell has any in-flow elements (even empty ones!) and has `empty-cells` set to // `hide`. - let hide = node.style().get_inheritedtable().empty_cells == empty_cells::T::hide && + let hide = node.style(self.style_context()).get_inheritedtable().empty_cells == empty_cells::T::hide && node.children().all(|kid| { - let position = kid.style().get_box().position; + let position = kid.style(self.style_context()).get_box().position; !kid.is_content() || position == position::T::absolute || position == position::T::fixed @@ -1257,15 +1269,15 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> fn build_flow_for_list_item(&mut self, node: &ConcreteThreadSafeLayoutNode, flotation: float::T) -> ConstructionResult { let flotation = FloatKind::from_property(flotation); - let marker_fragments = match node.style().get_list().list_style_image.0 { + let marker_fragments = match node.style(self.style_context()).get_list().list_style_image.0 { Some(ref url) => { let image_info = box ImageFragmentInfo::new(node, Some((*url).clone()), &self.layout_context); - vec![Fragment::new(node, SpecificFragmentInfo::Image(image_info))] + vec![Fragment::new(node, SpecificFragmentInfo::Image(image_info), self.layout_context)] } None => { - match ListStyleTypeContent::from_list_style_type(node.style() + match ListStyleTypeContent::from_list_style_type(node.style(self.style_context()) .get_list() .list_style_type) { ListStyleTypeContent::None => Vec::new(), @@ -1275,14 +1287,15 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> unscanned_marker_fragments.push_back(Fragment::new( node, SpecificFragmentInfo::UnscannedText( - box UnscannedTextFragmentInfo::new(text, None)))); + box UnscannedTextFragmentInfo::new(text, None)), + self.layout_context)); let marker_fragments = TextRunScanner::new().scan_for_runs( &mut self.layout_context.font_context(), unscanned_marker_fragments); marker_fragments.fragments } ListStyleTypeContent::GeneratedContent(info) => { - vec![Fragment::new(node, SpecificFragmentInfo::GeneratedContent(info))] + vec![Fragment::new(node, SpecificFragmentInfo::GeneratedContent(info), self.layout_context)] } } } @@ -1295,7 +1308,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> // there. let mut initial_fragments = IntermediateInlineFragments::new(); let main_fragment = self.build_fragment_for_block(node); - let flow = match node.style().get_list().list_style_position { + let flow = match node.style(self.style_context()).get_list().list_style_position { list_style_position::T::outside => { Arc::new(ListItemFlow::from_fragments_and_flotation( main_fragment, marker_fragments, flotation)) @@ -1322,7 +1335,8 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> let specific = SpecificFragmentInfo::TableColumn(TableColumnFragmentInfo::new(node)); let construction_item = ConstructionItem::TableColumnFragment(Fragment::new(node, - specific)); + specific, + self.layout_context)); ConstructionResult::ConstructionItem(construction_item) } @@ -1332,7 +1346,8 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> -> ConstructionResult { let fragment = Fragment::new(node, - SpecificFragmentInfo::TableColumn(TableColumnFragmentInfo::new(node))); + SpecificFragmentInfo::TableColumn(TableColumnFragmentInfo::new(node)), + self.layout_context); let mut col_fragments = vec!(); for kid in node.children() { // CSS 2.1 § 17.2.1. Treat all non-column child fragments of `table-column-group` @@ -1345,7 +1360,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> if col_fragments.is_empty() { debug!("add SpecificFragmentInfo::TableColumn for empty colgroup"); let specific = SpecificFragmentInfo::TableColumn(TableColumnFragmentInfo::new(node)); - col_fragments.push(Fragment::new(node, specific)); + col_fragments.push(Fragment::new(node, specific, self.layout_context)); } let mut flow: FlowRef = Arc::new(TableColGroupFlow::from_fragments(fragment, col_fragments)); flow.finish(); @@ -1387,11 +1402,11 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> return false } - if node.can_be_fragmented() || node.style().is_multicol() { + if node.can_be_fragmented() || node.style(self.style_context()).is_multicol() { return false } - let mut style = node.style().clone(); + let mut style = node.style(self.style_context()).clone(); let mut data = node.mutate_layout_data().unwrap(); let damage = data.restyle_damage; match *node.construction_result_mut(&mut *data) { @@ -1490,18 +1505,20 @@ impl<'a, ConcreteThreadSafeLayoutNode> PostorderNodeMutTraversal<ConcreteThreadS let (display, float, positioning) = match node.type_id() { None => { // Pseudo-element. - let style = node.style(); + let style = node.style(self.style_context()); let display = match node.get_pseudo_element_type() { - PseudoElementType::Normal => display::T::inline, - PseudoElementType::Before(display) => display, - PseudoElementType::After(display) => display, - PseudoElementType::DetailsContent(display) => display, - PseudoElementType::DetailsSummary(display) => display, + PseudoElementType::Normal + => display::T::inline, + PseudoElementType::Before(maybe_display) | + PseudoElementType::After(maybe_display) | + PseudoElementType::DetailsContent(maybe_display) | + PseudoElementType::DetailsSummary(maybe_display) + => maybe_display.unwrap_or(style.get_box().display), }; (display, style.get_box().float, style.get_box().position) } Some(NodeTypeId::Element(_)) => { - let style = node.style(); + let style = node.style(self.style_context()); let munged_display = if style.get_box()._servo_display_for_hypothetical_box == display::T::inline { display::T::inline diff --git a/components/layout/context.rs b/components/layout/context.rs index 169c2f38082..9c752645513 100644 --- a/components/layout/context.rs +++ b/components/layout/context.rs @@ -108,7 +108,7 @@ pub struct LayoutContext<'a> { cached_local_layout_context: Rc<LocalLayoutContext>, } -impl<'a> StyleContext<'a, ServoSelectorImpl, ServoComputedValues> for LayoutContext<'a> { +impl<'a> StyleContext<'a, ServoSelectorImpl> for LayoutContext<'a> { fn shared_context(&self) -> &'a SharedStyleContext { &self.shared.style_context } @@ -130,6 +130,11 @@ impl<'a> LayoutContext<'a> { } #[inline(always)] + pub fn style_context(&self) -> &SharedStyleContext { + &self.shared.style_context + } + + #[inline(always)] pub fn font_context(&self) -> RefMut<FontContext> { self.cached_local_layout_context.font_context.borrow_mut() } diff --git a/components/layout/data.rs b/components/layout/data.rs index f582ec71ffb..4e5c8339157 100644 --- a/components/layout/data.rs +++ b/components/layout/data.rs @@ -17,8 +17,9 @@ pub struct PrivateLayoutData { /// Description of how to account for recent style changes. pub restyle_damage: RestyleDamage, - /// The current results of flow construction for this node. This is either a flow or a - /// `ConstructionItem`. See comments in `construct.rs` for more details. + /// The current results of flow construction for this node. This is either a + /// flow or a `ConstructionItem`. See comments in `construct.rs` for more + /// details. pub flow_construction_result: ConstructionResult, pub before_flow_construction_result: ConstructionResult, diff --git a/components/layout/flow.rs b/components/layout/flow.rs index 2dfcc05ab06..79ab2fc2c07 100644 --- a/components/layout/flow.rs +++ b/components/layout/flow.rs @@ -483,7 +483,7 @@ pub trait ImmutableFlowUtils { fn need_anonymous_flow(self, child: &Flow) -> bool; /// Generates missing child flow of this flow. - fn generate_missing_child_flow<N: ThreadSafeLayoutNode>(self, node: &N) -> FlowRef; + fn generate_missing_child_flow<N: ThreadSafeLayoutNode>(self, node: &N, ctx: &LayoutContext) -> FlowRef; /// Returns true if this flow contains fragments that are roots of an absolute flow tree. fn contains_roots_of_absolute_flow_tree(&self) -> bool; @@ -1275,8 +1275,9 @@ impl<'a> ImmutableFlowUtils for &'a Flow { /// FIXME(pcwalton): This duplicates some logic in /// `generate_anonymous_table_flows_if_necessary()`. We should remove this function eventually, /// as it's harder to understand. - fn generate_missing_child_flow<N: ThreadSafeLayoutNode>(self, node: &N) -> FlowRef { - let mut style = node.style().clone(); + fn generate_missing_child_flow<N: ThreadSafeLayoutNode>(self, node: &N, ctx: &LayoutContext) -> FlowRef { + let style_context = ctx.style_context(); + let mut style = node.style(style_context).clone(); match self.class() { FlowClass::Table | FlowClass::TableRowGroup => { properties::modify_style_for_anonymous_table_object( @@ -1286,7 +1287,7 @@ impl<'a> ImmutableFlowUtils for &'a Flow { node.opaque(), PseudoElementType::Normal, style, - node.selected_style().clone(), + node.selected_style(style_context).clone(), node.restyle_damage(), SpecificFragmentInfo::TableRow); Arc::new(TableRowFlow::from_fragment(fragment)) @@ -1299,10 +1300,10 @@ impl<'a> ImmutableFlowUtils for &'a Flow { node.opaque(), PseudoElementType::Normal, style, - node.selected_style().clone(), + node.selected_style(style_context).clone(), node.restyle_damage(), SpecificFragmentInfo::TableCell); - let hide = node.style().get_inheritedtable().empty_cells == empty_cells::T::hide; + let hide = node.style(style_context).get_inheritedtable().empty_cells == empty_cells::T::hide; Arc::new(TableCellFlow::from_node_fragment_and_visibility_flag(node, fragment, !hide)) }, FlowClass::Flex => { @@ -1310,7 +1311,7 @@ impl<'a> ImmutableFlowUtils for &'a Flow { Fragment::from_opaque_node_and_style(node.opaque(), PseudoElementType::Normal, style, - node.selected_style().clone(), + node.selected_style(style_context).clone(), node.restyle_damage(), SpecificFragmentInfo::Generic); Arc::new(BlockFlow::from_fragment(fragment, None)) diff --git a/components/layout/fragment.rs b/components/layout/fragment.rs index ce9e55496c7..4dda58364aa 100644 --- a/components/layout/fragment.rs +++ b/components/layout/fragment.rs @@ -319,9 +319,9 @@ pub struct CanvasFragmentInfo { } impl CanvasFragmentInfo { - pub fn new<N: ThreadSafeLayoutNode>(node: &N, data: HTMLCanvasData) -> CanvasFragmentInfo { + pub fn new<N: ThreadSafeLayoutNode>(node: &N, data: HTMLCanvasData, ctx: &LayoutContext) -> CanvasFragmentInfo { CanvasFragmentInfo { - replaced_image_fragment_info: ReplacedImageFragmentInfo::new(node), + replaced_image_fragment_info: ReplacedImageFragmentInfo::new(node, ctx), ipc_renderer: data.ipc_renderer .map(|renderer| Arc::new(Mutex::new(renderer))), dom_width: Au::from_px(data.width as i32), @@ -382,7 +382,7 @@ impl ImageFragmentInfo { }; ImageFragmentInfo { - replaced_image_fragment_info: ReplacedImageFragmentInfo::new(node), + replaced_image_fragment_info: ReplacedImageFragmentInfo::new(node, layout_context), image: image, metadata: metadata, } @@ -441,9 +441,9 @@ pub struct ReplacedImageFragmentInfo { } impl ReplacedImageFragmentInfo { - pub fn new<N>(node: &N) -> ReplacedImageFragmentInfo + pub fn new<N>(node: &N, ctx: &LayoutContext) -> ReplacedImageFragmentInfo where N: ThreadSafeLayoutNode { - let is_vertical = node.style().writing_mode.is_vertical(); + let is_vertical = node.style(ctx.style_context()).writing_mode.is_vertical(); ReplacedImageFragmentInfo { computed_inline_size: None, computed_block_size: None, @@ -789,8 +789,9 @@ impl TableColumnFragmentInfo { impl Fragment { /// Constructs a new `Fragment` instance. - pub fn new<N: ThreadSafeLayoutNode>(node: &N, specific: SpecificFragmentInfo) -> Fragment { - let style = node.style().clone(); + pub fn new<N: ThreadSafeLayoutNode>(node: &N, specific: SpecificFragmentInfo, ctx: &LayoutContext) -> Fragment { + let style_context = ctx.style_context(); + let style = node.style(style_context).clone(); let writing_mode = style.writing_mode; let mut restyle_damage = node.restyle_damage(); @@ -799,7 +800,7 @@ impl Fragment { Fragment { node: node.opaque(), style: style, - selected_style: node.selected_style().clone(), + selected_style: node.selected_style(style_context).clone(), restyle_damage: restyle_damage, border_box: LogicalRect::zero(writing_mode), border_padding: LogicalMargin::zero(writing_mode), @@ -2020,8 +2021,7 @@ impl Fragment { return false } - let length = first_unscanned_text.text.len(); - if length != 0 && first_unscanned_text.text.char_at_reverse(length) == '\n' { + if first_unscanned_text.text.ends_with('\n') { return false } diff --git a/components/layout/layout_thread.rs b/components/layout/layout_thread.rs index 64779f8e031..bf325b8dbdd 100644 --- a/components/layout/layout_thread.rs +++ b/components/layout/layout_thread.rs @@ -67,14 +67,13 @@ use std::sync::mpsc::{channel, Sender, Receiver}; use std::sync::{Arc, Mutex, MutexGuard, RwLock}; use style::animation::Animation; use style::computed_values::{filter, mix_blend_mode}; -use style::context::{ReflowGoal, StylistWrapper}; +use style::context::{ReflowGoal}; use style::dom::{TDocument, TElement, TNode}; use style::error_reporting::ParseErrorReporter; use style::logical_geometry::LogicalPoint; use style::media_queries::{Device, MediaType}; use style::parallel::WorkQueueData; use style::properties::ComputedValues; -use style::selector_impl::ServoSelectorImpl; use style::selector_matching::USER_OR_USER_AGENT_STYLESHEETS; use style::servo::{SharedStyleContext, Stylesheet, Stylist}; use style::stylesheets::CSSRuleIteratorExt; @@ -107,7 +106,7 @@ pub struct LayoutThreadData { pub display_list: Option<Arc<DisplayList>>, /// Performs CSS selector matching and style resolution. - pub stylist: Box<Stylist>, + pub stylist: Arc<Stylist>, /// A queued response for the union of the content boxes of a node. pub content_box_response: Rect<Au>, @@ -421,7 +420,7 @@ impl LayoutThread { let font_cache_receiver = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_font_cache_receiver); - let stylist = box Stylist::new(device); + let stylist = Arc::new(Stylist::new(device)); let outstanding_web_fonts_counter = Arc::new(AtomicUsize::new(0)); for stylesheet in &*USER_OR_USER_AGENT_STYLESHEETS { add_font_face_rules(stylesheet, @@ -510,7 +509,7 @@ impl LayoutThread { style_context: SharedStyleContext { viewport_size: self.viewport_size.clone(), screen_size_changed: screen_size_changed, - stylist: StylistWrapper::<ServoSelectorImpl>(&*rw_data.stylist), + stylist: rw_data.stylist.clone(), generation: self.generation, goal: goal, new_animations_sender: Mutex::new(self.new_animations_sender.clone()), @@ -809,7 +808,7 @@ impl LayoutThread { /// Sets quirks mode for the document, causing the quirks mode stylesheet to be used. fn handle_set_quirks_mode<'a, 'b>(&self, possibly_locked_rw_data: &mut RwData<'a, 'b>) { let mut rw_data = possibly_locked_rw_data.lock(); - rw_data.stylist.set_quirks_mode(true); + Arc::get_mut(&mut rw_data.stylist).unwrap().set_quirks_mode(true); possibly_locked_rw_data.block(rw_data); } @@ -1060,7 +1059,7 @@ impl LayoutThread { // Calculate the actual viewport as per DEVICE-ADAPT § 6 let device = Device::new(MediaType::Screen, initial_viewport); - rw_data.stylist.set_device(device, &data.document_stylesheets); + Arc::get_mut(&mut rw_data.stylist).unwrap().set_device(device, &data.document_stylesheets); let constraints = rw_data.stylist.viewport_constraints().clone(); self.viewport_size = match constraints { @@ -1092,8 +1091,8 @@ impl LayoutThread { } // If the entire flow tree is invalid, then it will be reflowed anyhow. - needs_dirtying |= rw_data.stylist.update(&data.document_stylesheets, - data.stylesheets_changed); + needs_dirtying |= Arc::get_mut(&mut rw_data.stylist).unwrap().update(&data.document_stylesheets, + data.stylesheets_changed); let needs_reflow = viewport_size_changed && !needs_dirtying; unsafe { if needs_dirtying { diff --git a/components/layout/lib.rs b/components/layout/lib.rs index f4978023d76..88f08610eba 100644 --- a/components/layout/lib.rs +++ b/components/layout/lib.rs @@ -11,7 +11,6 @@ #![feature(plugin)] #![feature(raw)] #![feature(step_by)] -#![feature(str_char)] #![feature(unsafe_no_drop_flag)] #![deny(unsafe_code)] @@ -103,3 +102,4 @@ mod wrapper; // For unit tests: pub use fragment::Fragment; +pub use wrapper::ServoThreadSafeLayoutNode; diff --git a/components/layout/query.rs b/components/layout/query.rs index 5b28acfa462..df94ed0024e 100644 --- a/components/layout/query.rs +++ b/components/layout/query.rs @@ -574,8 +574,8 @@ pub fn process_resolved_style_request<N: LayoutNode>( let layout_node = match *pseudo { Some(PseudoElement::Before) => layout_node.get_before_pseudo(), Some(PseudoElement::After) => layout_node.get_after_pseudo(), - Some(PseudoElement::DetailsSummary) => layout_node.get_details_summary_pseudo(), - Some(PseudoElement::DetailsContent) => layout_node.get_details_content_pseudo(), + Some(PseudoElement::DetailsSummary) | + Some(PseudoElement::DetailsContent) | Some(PseudoElement::Selection) => None, _ => Some(layout_node) }; @@ -590,7 +590,7 @@ pub fn process_resolved_style_request<N: LayoutNode>( Some(layout_node) => layout_node }; - let style = &*layout_node.style(); + let style = &*layout_node.resolved_style(); let positioned = match style.get_box().position { position::computed_value::T::relative | @@ -711,7 +711,7 @@ pub fn process_offset_parent_query<N: LayoutNode>(requested_node: N, layout_root pub fn process_node_overflow_request<N: LayoutNode>(requested_node: N) -> NodeOverflowResponse { let layout_node = requested_node.to_threadsafe(); - let style = &*layout_node.style(); + let style = &*layout_node.resolved_style(); let style_box = style.get_box(); NodeOverflowResponse(Some((Point2D::new(style_box.overflow_x, style_box.overflow_y.0)))) @@ -720,7 +720,7 @@ pub fn process_node_overflow_request<N: LayoutNode>(requested_node: N) -> NodeOv pub fn process_margin_style_query<N: LayoutNode>(requested_node: N) -> MarginStyleResponse { let layout_node = requested_node.to_threadsafe(); - let style = &*layout_node.style(); + let style = &*layout_node.resolved_style(); let margin = style.get_margin(); MarginStyleResponse { diff --git a/components/layout/text.rs b/components/layout/text.rs index b7729608ce7..2ee93282822 100644 --- a/components/layout/text.rs +++ b/components/layout/text.rs @@ -339,15 +339,15 @@ impl TextRunScanner { break; } }; - let mut mapping = mappings.next().unwrap(); + let mapping = mappings.next().unwrap(); let scanned_run = runs[mapping.text_run_index].clone(); let mut byte_range = Range::new(ByteIndex(mapping.byte_range.begin() as isize), ByteIndex(mapping.byte_range.length() as isize)); let requires_line_break_afterward_if_wrapping_on_newlines = - !mapping.byte_range.is_empty() && - scanned_run.run.text.char_at_reverse(mapping.byte_range.end()) == '\n'; + scanned_run.run.text[mapping.byte_range.begin()..mapping.byte_range.end()] + .ends_with('\n'); if requires_line_break_afterward_if_wrapping_on_newlines { byte_range.extend_by(ByteIndex(-1)); // Trim the '\n' } diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs index a94203cbf21..e9215f8717f 100644 --- a/components/layout/wrapper.rs +++ b/components/layout/wrapper.rs @@ -72,7 +72,7 @@ use style::properties::{ComputedValues, ServoComputedValues}; use style::properties::{PropertyDeclaration, PropertyDeclarationBlock}; use style::restyle_hints::ElementSnapshot; use style::selector_impl::{NonTSPseudoClass, PseudoElement, ServoSelectorImpl}; -use style::servo::PrivateStyleData; +use style::servo::{PrivateStyleData, SharedStyleContext}; use url::Url; use util::str::is_whitespace; @@ -428,14 +428,14 @@ impl<'le> TElement for ServoLayoutElement<'le> { } #[inline] - fn get_attr<'a>(&'a self, namespace: &Namespace, name: &Atom) -> Option<&'a str> { + fn get_attr(&self, namespace: &Namespace, name: &Atom) -> Option<&str> { unsafe { (*self.element.unsafe_get()).get_attr_val_for_layout(namespace, name) } } #[inline] - fn get_attrs<'a>(&'a self, name: &Atom) -> Vec<&'a str> { + fn get_attrs(&self, name: &Atom) -> Vec<&str> { unsafe { (*self.element.unsafe_get()).get_attr_vals_for_layout(name) } @@ -650,6 +650,16 @@ impl<T> PseudoElementType<T> { PseudoElementType::DetailsContent(_) => PseudoElementType::DetailsContent(()), } } + + pub fn style_pseudo_element(&self) -> PseudoElement { + match *self { + PseudoElementType::Normal => unreachable!("style_pseudo_element called with PseudoElementType::Normal"), + PseudoElementType::Before(_) => PseudoElement::Before, + PseudoElementType::After(_) => PseudoElement::After, + PseudoElementType::DetailsSummary(_) => PseudoElement::DetailsSummary, + PseudoElementType::DetailsContent(_) => PseudoElement::DetailsContent, + } + } } /// A thread-safe version of `LayoutNode`, used during flow construction. This type of layout @@ -661,7 +671,7 @@ pub trait ThreadSafeLayoutNode : Clone + Copy + Sized + PartialEq { /// Creates a new `ThreadSafeLayoutNode` for the same `LayoutNode` /// with a different pseudo-element type. - fn with_pseudo(&self, pseudo: PseudoElementType<display::T>) -> Self; + fn with_pseudo(&self, pseudo: PseudoElementType<Option<display::T>>) -> Self; /// Converts self into an `OpaqueNode`. fn opaque(&self) -> OpaqueNode; @@ -685,42 +695,36 @@ pub trait ThreadSafeLayoutNode : Clone + Copy + Sized + PartialEq { fn as_element(&self) -> Self::ConcreteThreadSafeLayoutElement; #[inline] - fn get_pseudo_element_type(&self) -> PseudoElementType<display::T>; + fn get_pseudo_element_type(&self) -> PseudoElementType<Option<display::T>>; #[inline] fn get_before_pseudo(&self) -> Option<Self> { - self.borrow_layout_data().unwrap() - .style_data.per_pseudo - .get(&PseudoElement::Before) - .map(|style| { - self.with_pseudo(PseudoElementType::Before(style.get_box().display)) - }) + if self.borrow_layout_data().unwrap() + .style_data.per_pseudo + .contains_key(&PseudoElement::Before) { + Some(self.with_pseudo(PseudoElementType::Before(None))) + } else { + None + } } #[inline] fn get_after_pseudo(&self) -> Option<Self> { - self.borrow_layout_data().unwrap() - .style_data.per_pseudo - .get(&PseudoElement::After) - .map(|style| { - self.with_pseudo(PseudoElementType::After(style.get_box().display)) - }) + if self.borrow_layout_data().unwrap() + .style_data.per_pseudo + .contains_key(&PseudoElement::After) { + Some(self.with_pseudo(PseudoElementType::After(None))) + } else { + None + } } - // TODO(emilio): Since the ::-details-* pseudos are internal, just affecting one element, and - // only changing `display` property when the element `open` attribute changes, this should be - // eligible for not being cascaded eagerly, reading the display property from layout instead. #[inline] fn get_details_summary_pseudo(&self) -> Option<Self> { if self.is_element() && self.as_element().get_local_name() == &atom!("details") && self.as_element().get_namespace() == &ns!(html) { - self.borrow_layout_data().unwrap() - .style_data.per_pseudo - .get(&PseudoElement::DetailsSummary) - .map(|style| { - self.with_pseudo(PseudoElementType::DetailsSummary(style.get_box().display)) - }) + Some(self.with_pseudo(PseudoElementType::DetailsSummary(None))) } else { None } @@ -731,12 +735,12 @@ pub trait ThreadSafeLayoutNode : Clone + Copy + Sized + PartialEq { if self.is_element() && self.as_element().get_local_name() == &atom!("details") && self.as_element().get_namespace() == &ns!(html) { - self.borrow_layout_data().unwrap() - .style_data.per_pseudo - .get(&PseudoElement::DetailsContent) - .map(|style| { - self.with_pseudo(PseudoElementType::DetailsContent(style.get_box().display)) - }) + let display = if self.as_element().get_attr(&ns!(), &atom!("open")).is_some() { + None // Specified by the stylesheet + } else { + Some(display::T::none) + }; + Some(self.with_pseudo(PseudoElementType::DetailsContent(display))) } else { None } @@ -759,23 +763,58 @@ pub trait ThreadSafeLayoutNode : Clone + Copy + Sized + PartialEq { /// /// Unlike the version on TNode, this handles pseudo-elements. #[inline] - fn style(&self) -> Ref<Arc<ServoComputedValues>> { + fn style(&self, context: &SharedStyleContext) -> Ref<Arc<ServoComputedValues>> { + match self.get_pseudo_element_type() { + PseudoElementType::Normal => { + Ref::map(self.borrow_layout_data().unwrap(), |data| { + data.style_data.style.as_ref().unwrap() + }) + }, + other => { + // Precompute non-eagerly-cascaded pseudo-element styles if not + // cached before. + let style_pseudo = other.style_pseudo_element(); + if !style_pseudo.is_eagerly_cascaded() && + !self.borrow_layout_data().unwrap().style_data.per_pseudo.contains_key(&style_pseudo) { + let mut data = self.mutate_layout_data().unwrap(); + let new_style = context.stylist + .computed_values_for_pseudo(&style_pseudo, + data.style_data.style.as_ref()); + data.style_data.per_pseudo.insert(style_pseudo.clone(), new_style.unwrap()); + } + + Ref::map(self.borrow_layout_data().unwrap(), |data| { + data.style_data.per_pseudo.get(&style_pseudo).unwrap() + }) + } + } + } + + /// Returns the already resolved style of the node. + /// + /// This differs from `style(ctx)` in that if the pseudo-element has not yet + /// been computed it would panic. + /// + /// This should be used just for querying layout, or when we know the + /// element style is precomputed, not from general layout itself. + #[inline] + fn resolved_style(&self) -> Ref<Arc<ServoComputedValues>> { Ref::map(self.borrow_layout_data().unwrap(), |data| { - let style = match self.get_pseudo_element_type() { - PseudoElementType::Before(_) => data.style_data.per_pseudo.get(&PseudoElement::Before), - PseudoElementType::After(_) => data.style_data.per_pseudo.get(&PseudoElement::After), - PseudoElementType::DetailsSummary(_) => data.style_data.per_pseudo.get(&PseudoElement::DetailsSummary), - PseudoElementType::DetailsContent(_) => data.style_data.per_pseudo.get(&PseudoElement::DetailsContent), - PseudoElementType::Normal => data.style_data.style.as_ref(), - }; - style.unwrap() + match self.get_pseudo_element_type() { + PseudoElementType::Normal + => data.style_data.style.as_ref().unwrap(), + other + => data.style_data.per_pseudo.get(&other.style_pseudo_element()).unwrap(), + } }) } #[inline] - fn selected_style(&self) -> Ref<Arc<ServoComputedValues>> { + fn selected_style(&self, _context: &SharedStyleContext) -> Ref<Arc<ServoComputedValues>> { Ref::map(self.borrow_layout_data().unwrap(), |data| { - data.style_data.per_pseudo.get(&PseudoElement::Selection).unwrap_or(data.style_data.style.as_ref().unwrap()) + data.style_data.per_pseudo + .get(&PseudoElement::Selection) + .unwrap_or(data.style_data.style.as_ref().unwrap()) }) } @@ -786,26 +825,16 @@ pub trait ThreadSafeLayoutNode : Clone + Copy + Sized + PartialEq { let mut data = self.mutate_layout_data().unwrap(); match self.get_pseudo_element_type() { - PseudoElementType::Before(_) => { - data.style_data.per_pseudo.remove(&PseudoElement::Before); - } - PseudoElementType::After(_) => { - data.style_data.per_pseudo.remove(&PseudoElement::After); - } - PseudoElementType::DetailsSummary(_) => { - data.style_data.per_pseudo.remove(&PseudoElement::DetailsSummary); - } - PseudoElementType::DetailsContent(_) => { - data.style_data.per_pseudo.remove(&PseudoElement::DetailsContent); - } - PseudoElementType::Normal => { data.style_data.style = None; } + other => { + data.style_data.per_pseudo.remove(&other.style_pseudo_element()); + } }; } - fn is_ignorable_whitespace(&self) -> bool; + fn is_ignorable_whitespace(&self, context: &SharedStyleContext) -> bool; fn restyle_damage(self) -> RestyleDamage; @@ -884,7 +913,7 @@ pub trait ThreadSafeLayoutElement: Clone + Copy + Sized { type ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode<ConcreteThreadSafeLayoutElement = Self>; #[inline] - fn get_attr<'a>(&'a self, namespace: &Namespace, name: &Atom) -> Option<&'a str>; + fn get_attr(&self, namespace: &Namespace, name: &Atom) -> Option<&str>; #[inline] fn get_local_name(&self) -> &Atom; @@ -898,7 +927,9 @@ pub struct ServoThreadSafeLayoutNode<'ln> { /// The wrapped node. node: ServoLayoutNode<'ln>, - pseudo: PseudoElementType<display::T>, + /// The pseudo-element type, with (optionally), + /// an specified display value to override the stylesheet. + pseudo: PseudoElementType<Option<display::T>>, } impl<'a> PartialEq for ServoThreadSafeLayoutNode<'a> { @@ -948,7 +979,8 @@ impl<'ln> ThreadSafeLayoutNode for ServoThreadSafeLayoutNode<'ln> { type ConcreteThreadSafeLayoutElement = ServoThreadSafeLayoutElement<'ln>; type ChildrenIterator = ThreadSafeLayoutNodeChildrenIterator<Self>; - fn with_pseudo(&self, pseudo: PseudoElementType<display::T>) -> ServoThreadSafeLayoutNode<'ln> { + fn with_pseudo(&self, + pseudo: PseudoElementType<Option<display::T>>) -> ServoThreadSafeLayoutNode<'ln> { ServoThreadSafeLayoutNode { node: self.node.clone(), pseudo: pseudo, @@ -993,7 +1025,7 @@ impl<'ln> ThreadSafeLayoutNode for ServoThreadSafeLayoutNode<'ln> { } } - fn get_pseudo_element_type(&self) -> PseudoElementType<display::T> { + fn get_pseudo_element_type(&self) -> PseudoElementType<Option<display::T>> { self.pseudo } @@ -1005,7 +1037,7 @@ impl<'ln> ThreadSafeLayoutNode for ServoThreadSafeLayoutNode<'ln> { self.node.mutate_layout_data() } - fn is_ignorable_whitespace(&self) -> bool { + fn is_ignorable_whitespace(&self, context: &SharedStyleContext) -> bool { unsafe { let text: LayoutJS<Text> = match self.get_jsmanaged().downcast() { Some(text) => text, @@ -1022,7 +1054,7 @@ impl<'ln> ThreadSafeLayoutNode for ServoThreadSafeLayoutNode<'ln> { // // If you implement other values for this property, you will almost certainly // want to update this check. - !self.style().get_inheritedtext().white_space.preserve_newlines() + !self.style(context).get_inheritedtext().white_space.preserve_newlines() } } @@ -1046,13 +1078,7 @@ impl<'ln> ThreadSafeLayoutNode for ServoThreadSafeLayoutNode<'ln> { fn text_content(&self) -> TextContent { if self.pseudo.is_replaced_content() { - let data = &self.borrow_layout_data().unwrap().style_data; - - let style = if self.pseudo.is_before() { - data.per_pseudo.get(&PseudoElement::Before).unwrap() - } else { - data.per_pseudo.get(&PseudoElement::After).unwrap() - }; + let style = self.resolved_style(); return match style.as_ref().get_counters().content { content::T::Content(ref value) if !value.is_empty() => { @@ -1078,7 +1104,7 @@ impl<'ln> ThreadSafeLayoutNode for ServoThreadSafeLayoutNode<'ln> { return TextContent::Text(data); } - panic!("not text!") + unreachable!("not text!") } fn selection(&self) -> Option<Range<ByteIndex>> { @@ -1164,8 +1190,8 @@ impl<ConcreteNode> Iterator for ThreadSafeLayoutNodeChildrenIterator<ConcreteNod loop { let next_node = if let Some(ref node) = current_node { if node.is_element() && - node.as_element().get_local_name() == &atom!("summary") && - node.as_element().get_namespace() == &ns!(html) { + node.as_element().get_local_name() == &atom!("summary") && + node.as_element().get_namespace() == &ns!(html) { self.current_node = None; return Some(node.clone()); } diff --git a/components/net/cookie_storage.rs b/components/net/cookie_storage.rs index 092cdd4882f..0698b8e46cd 100644 --- a/components/net/cookie_storage.rs +++ b/components/net/cookie_storage.rs @@ -7,7 +7,7 @@ use cookie::Cookie; use net_traits::CookieSource; -use rustc_serialize::{Encodable, Encoder}; +use rustc_serialize::Encoder; use std::cmp::Ordering; use url::Url; diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index 868d284707f..1b4c43195ea 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -14,6 +14,7 @@ use hyper::header::{IfNoneMatch, Pragma, Location, QualityItem, Referer as Refer use hyper::method::Method; use hyper::mime::{Mime, SubLevel, TopLevel}; use hyper::status::StatusCode; +use mime_guess::guess_mime_type; use net_traits::AsyncFetchListener; use net_traits::request::{CacheMode, CredentialsMode, Type, Origin, Window}; use net_traits::request::{RedirectMode, Referer, Request, RequestMode, ResponseTainting}; @@ -21,6 +22,7 @@ use net_traits::response::{HttpsState, TerminationReason}; use net_traits::response::{Response, ResponseBody, ResponseType}; use resource_thread::CancellationListener; use std::collections::HashSet; +use std::fs::File; use std::io::Read; use std::iter::FromIterator; use std::rc::Rc; @@ -157,6 +159,7 @@ fn main_fetch(request: Rc<Request>, cache: &mut CORSCache, cors_flag: bool, recu if (same_origin && !cors_flag ) || (current_url.scheme() == "data" && request.same_origin_data.get()) || + (current_url.scheme() == "file" && request.same_origin_data.get()) || current_url.scheme() == "about" || request.mode == RequestMode::Navigate { @@ -317,7 +320,29 @@ fn basic_fetch(request: Rc<Request>, cache: &mut CORSCache) -> Response { } }, - "blob" | "file" | "ftp" => { + "file" => { + if *request.method.borrow() == Method::Get { + match url.to_file_path() { + Ok(file_path) => { + File::open(file_path.clone()).ok().map_or(Response::network_error(), |mut file| { + let mut bytes = vec![]; + let _ = file.read_to_end(&mut bytes); + let mime = guess_mime_type(file_path); + + let mut response = Response::new(); + *response.body.lock().unwrap() = ResponseBody::Done(bytes); + response.headers.set(ContentType(mime)); + response + }) + }, + _ => Response::network_error() + } + } else { + Response::network_error() + } + }, + + "blob" | "ftp" => { // XXXManishearth handle these panic!("Unimplemented scheme for Fetch") }, diff --git a/components/net/lib.rs b/components/net/lib.rs index 90ffd0e0926..97b978f1725 100644 --- a/components/net/lib.rs +++ b/components/net/lib.rs @@ -19,7 +19,7 @@ extern crate hyper; extern crate immeta; extern crate ipc_channel; #[macro_use] extern crate log; -#[macro_use] extern crate matches; +#[macro_use] #[no_link] extern crate matches; #[macro_use] extern crate mime; extern crate mime_guess; diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index a60608fa175..72d2d8949df 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -11,7 +11,7 @@ dependencies = [ "compositing 0.0.1", "devtools 0.0.1", "devtools_traits 0.0.1", - "env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gaol 0.0.1 (git+https://github.com/servo/gaol)", "gfx 0.0.1", @@ -23,8 +23,8 @@ dependencies = [ "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout 0.0.1", "layout_tests 0.0.1", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net 0.0.1", "net_tests 0.0.1", @@ -65,7 +65,7 @@ name = "angle" version = "0.1.0" source = "git+https://github.com/emilio/angle?branch=servo#eefe3506ae13e8ace811ca544fd6b4a5f0db0a04" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -107,7 +107,7 @@ dependencies = [ "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -125,7 +125,7 @@ dependencies = [ "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -134,7 +134,7 @@ name = "backtrace-sys" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -159,6 +159,11 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] +name = "bitflags" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] name = "block" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -188,7 +193,7 @@ dependencies = [ "gfx_traits 0.0.1", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", @@ -233,7 +238,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -268,12 +273,12 @@ dependencies = [ [[package]] name = "cocoa" -version = "0.3.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "objc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -294,7 +299,7 @@ name = "compiletest_rs" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -316,7 +321,7 @@ dependencies = [ "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout_traits 0.0.1", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", @@ -352,7 +357,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -360,7 +365,7 @@ name = "core-foundation-sys" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -369,7 +374,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -380,7 +385,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -481,7 +486,7 @@ name = "dylib" version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -553,7 +558,7 @@ source = "git+https://github.com/energymon/energymon-rust.git#7b30c4d88ac1fcfaf7 dependencies = [ "energy-monitor 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "energymon-default-sys 0.2.0 (git+https://github.com/energymon/energymon-sys.git)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -571,7 +576,7 @@ source = "git+https://github.com/energymon/energymon-sys.git#a0fb99b0312372958b1 dependencies = [ "energymon-builder 0.2.0 (git+https://github.com/energymon/energymon-sys.git)", "energymon-sys 0.2.0 (git+https://github.com/energymon/energymon-sys.git)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -579,7 +584,7 @@ name = "energymon-sys" version = "0.2.0" source = "git+https://github.com/energymon/energymon-sys.git#a0fb99b0312372958b110ae6378b5c89c2287172" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -592,10 +597,10 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -606,7 +611,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -627,7 +632,7 @@ name = "flate2" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "miniz-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -641,7 +646,7 @@ name = "freetype" version = "0.1.0" source = "git+https://github.com/servo/rust-freetype#d564ff90a3c69d987f5c015d7ec034cfaee21aff" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -650,7 +655,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -668,8 +673,8 @@ name = "gaol" version = "0.0.1" source = "git+https://github.com/servo/gaol#cbb2518029901f078f871a87ebe05cf96d727713" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -711,8 +716,8 @@ dependencies = [ "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", @@ -727,7 +732,7 @@ dependencies = [ "servo-skia 0.20130412.6 (registry+https://github.com/rust-lang/crates.io-index)", "simd 0.1.0 (git+https://github.com/huonw/simd)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", @@ -776,7 +781,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "xml-rs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -790,7 +795,7 @@ dependencies = [ [[package]] name = "glob" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -806,7 +811,7 @@ dependencies = [ "net_traits 0.0.1", "script_traits 0.0.1", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "servo-glutin 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)", + "servo-glutin 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", @@ -820,7 +825,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gl_generator 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -828,7 +833,7 @@ name = "harfbuzz-sys" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -846,7 +851,7 @@ name = "hbs-common-sys" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -855,7 +860,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hbs-pow-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -865,7 +870,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hbs-builder 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "hbs-common-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -886,7 +891,7 @@ name = "hpack" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -896,12 +901,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -919,7 +924,7 @@ dependencies = [ "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -951,10 +956,10 @@ dependencies = [ "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "enum_primitive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "gif 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glob 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "jpeg-decoder 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "jpeg-decoder 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "png 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "png 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -969,7 +974,7 @@ dependencies = [ [[package]] name = "inflate" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -982,7 +987,7 @@ dependencies = [ "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "leaky-cow 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -993,7 +998,7 @@ dependencies = [ "bincode 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1002,12 +1007,12 @@ dependencies = [ [[package]] name = "jpeg-decoder" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1017,8 +1022,8 @@ version = "0.1.2" source = "git+https://github.com/servo/rust-mozjs#efe805affa75d776316e9ea6113f85cdad1e82ed" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mozjs_sys 0.0.0 (git+https://github.com/servo/mozjs)", "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1057,8 +1062,8 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "io-surface 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "servo-skia 0.20130412.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1082,8 +1087,8 @@ dependencies = [ "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layout_traits 0.0.1", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "plugins 0.0.1", @@ -1092,11 +1097,11 @@ dependencies = [ "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "script 0.0.1", "script_traits 0.0.1", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1151,7 +1156,7 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.4" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1178,17 +1183,14 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "log" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "lzw" @@ -1210,7 +1212,7 @@ name = "malloc_buf" version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1223,7 +1225,7 @@ name = "memchr" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1233,7 +1235,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fs2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1242,7 +1244,7 @@ name = "mime" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1262,7 +1264,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1270,7 +1272,7 @@ name = "mozjs_sys" version = "0.0.0" source = "git+https://github.com/servo/mozjs#3122a1e1a80b78377ae1ce8e7edd4ad3bcbb3d65" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "libz-sys 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1306,7 +1308,7 @@ dependencies = [ "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "immeta 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1333,7 +1335,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1367,7 +1369,7 @@ dependencies = [ "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1464,7 +1466,7 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1510,7 +1512,7 @@ dependencies = [ "gl_generator 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "x11 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1524,7 +1526,7 @@ dependencies = [ "bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "gcc 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys-extras 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1535,7 +1537,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gdi32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "libressl-pnacl-sys 2.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "user32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1547,7 +1549,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1556,7 +1558,7 @@ name = "osmesa-sys" version = "0.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "shared_library 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1631,14 +1633,14 @@ dependencies = [ [[package]] name = "png" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "inflate 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "inflate 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1647,8 +1649,8 @@ version = "0.0.1" dependencies = [ "hbs-pow 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "profile_traits 0.0.1", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1716,7 +1718,7 @@ name = "rand" version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1811,8 +1813,8 @@ dependencies = [ "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "js 0.1.2 (git+https://github.com/servo/rust-mozjs)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1827,10 +1829,10 @@ dependencies = [ "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "script_traits 0.0.1", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1865,7 +1867,7 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1881,10 +1883,10 @@ dependencies = [ [[package]] name = "selectors" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1892,7 +1894,7 @@ dependencies = [ "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "quickersort 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1937,7 +1939,7 @@ name = "servo-egl" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1945,7 +1947,7 @@ name = "servo-fontconfig" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "servo-fontconfig-sys 2.11.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1969,12 +1971,12 @@ dependencies = [ [[package]] name = "servo-glutin" -version = "0.4.15" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "android_glue 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "cocoa 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cocoa 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "dwmapi-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1982,7 +1984,7 @@ dependencies = [ "gl_generator 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "objc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "osmesa-sys 0.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "shared_library 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2006,11 +2008,11 @@ dependencies = [ "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "io-surface 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "servo-fontconfig 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "servo-freetype-sys 2.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "servo-glutin 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)", + "servo-glutin 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", "x11 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2020,7 +2022,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2048,12 +2050,12 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hpack 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "string_cache" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "debug_unreachable 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2078,16 +2080,16 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2104,8 +2106,8 @@ dependencies = [ "msg 0.0.1", "plugins 0.0.1", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "style_traits 0.0.1", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2121,10 +2123,10 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2152,7 +2154,7 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2185,7 +2187,7 @@ version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2195,7 +2197,7 @@ name = "tinyfiledialogs" version = "0.1.0" source = "git+https://github.com/jdm/tinyfiledialogs#2d2285985db1168da4d516000f24842aba46fd94" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2297,8 +2299,8 @@ dependencies = [ "js 0.1.2 (git+https://github.com/servo/rust-mozjs)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", @@ -2307,7 +2309,7 @@ dependencies = [ "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2317,7 +2319,7 @@ version = "0.0.1" dependencies = [ "app_units 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "util 0.0.1", ] @@ -2342,7 +2344,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "wayland-scanner 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)", "wayland-sys 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2392,7 +2394,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2405,7 +2407,7 @@ dependencies = [ "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "plugins 0.0.1", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2431,7 +2433,7 @@ dependencies = [ "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "scoped_threadpool 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2495,7 +2497,7 @@ name = "x11" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2505,7 +2507,7 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dylib 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2529,12 +2531,12 @@ name = "xml5ever" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/components/style/context.rs b/components/style/context.rs index f5bf81274ee..76c2f1ece0c 100644 --- a/components/style/context.rs +++ b/components/style/context.rs @@ -16,12 +16,6 @@ use std::collections::HashMap; use std::sync::mpsc::Sender; use std::sync::{Arc, Mutex, RwLock}; -pub struct StylistWrapper<Impl: SelectorImplExt>(pub *const Stylist<Impl>); - -// FIXME(#6569) This implementation is unsound. -#[allow(unsafe_code)] -unsafe impl<Impl: SelectorImplExt> Sync for StylistWrapper<Impl> {} - pub struct SharedStyleContext<Impl: SelectorImplExt> { /// The current viewport size. pub viewport_size: Size2D<Au>, @@ -30,9 +24,7 @@ pub struct SharedStyleContext<Impl: SelectorImplExt> { pub screen_size_changed: bool, /// The CSS selector stylist. - /// - /// FIXME(#2604): Make this no longer an unsafe pointer once we have fast `RWArc`s. - pub stylist: StylistWrapper<Impl>, + pub stylist: Arc<Stylist<Impl>>, /// Starts at zero, and increased by one every time a layout completes. /// This can be used to easily check for invalid stale data. @@ -60,10 +52,9 @@ pub struct LocalStyleContext<C: ComputedValues> { pub style_sharing_candidate_cache: RefCell<StyleSharingCandidateCache<C>>, } -pub trait StyleContext<'a, Impl: SelectorImplExt, C: ComputedValues> { - +pub trait StyleContext<'a, Impl: SelectorImplExt> { fn shared_context(&self) -> &'a SharedStyleContext<Impl>; - fn local_context(&self) -> &LocalStyleContext<C>; + fn local_context(&self) -> &LocalStyleContext<Impl::ComputedValues>; } /// Why we're doing reflow. @@ -74,4 +65,3 @@ pub enum ReflowGoal { /// We're reflowing in order to satisfy a script query. No display list will be created. ForScriptQuery, } - diff --git a/components/style/dom.rs b/components/style/dom.rs index d0ba545798c..fed1597c627 100644 --- a/components/style/dom.rs +++ b/components/style/dom.rs @@ -4,11 +4,12 @@ #![allow(unsafe_code)] +use context::SharedStyleContext; use data::PrivateStyleData; use element_state::ElementState; use properties::{ComputedValues, PropertyDeclaration, PropertyDeclarationBlock}; use restyle_hints::{ElementSnapshot, RESTYLE_DESCENDANTS, RESTYLE_LATER_SIBLINGS, RESTYLE_SELF, RestyleHint}; -use selector_impl::ElementExt; +use selector_impl::{ElementExt, SelectorImplExt}; use selectors::Element; use selectors::matching::DeclarationBlock; use smallvec::VecLike; @@ -137,19 +138,19 @@ pub trait TNode : Sized + Copy + Clone { #[inline(always)] unsafe fn borrow_data_unchecked(&self) -> Option<*const PrivateStyleData<<Self::ConcreteElement as Element>::Impl, - Self::ConcreteComputedValues>>; + Self::ConcreteComputedValues>>; /// Borrows the PrivateStyleData immutably. Fails on a conflicting borrow. #[inline(always)] fn borrow_data(&self) -> Option<Ref<PrivateStyleData<<Self::ConcreteElement as Element>::Impl, - Self::ConcreteComputedValues>>>; + Self::ConcreteComputedValues>>>; /// Borrows the PrivateStyleData mutably. Fails on a conflicting borrow. #[inline(always)] fn mutate_data(&self) -> Option<RefMut<PrivateStyleData<<Self::ConcreteElement as Element>::Impl, - Self::ConcreteComputedValues>>>; + Self::ConcreteComputedValues>>>; /// Get the description of how to account for recent style changes. fn restyle_damage(self) -> Self::ConcreteRestyleDamage; @@ -170,7 +171,10 @@ pub trait TNode : Sized + Copy + Clone { /// Returns the style results for the given node. If CSS selector matching /// has not yet been performed, fails. - fn style(&self) -> Ref<Arc<Self::ConcreteComputedValues>> { + fn style(&self, + _context: &SharedStyleContext<<Self::ConcreteElement as Element>::Impl>) + -> Ref<Arc<Self::ConcreteComputedValues>> + where <Self::ConcreteElement as Element>::Impl: SelectorImplExt<ComputedValues=Self::ConcreteComputedValues> { Ref::map(self.borrow_data().unwrap(), |data| data.style.as_ref().unwrap()) } diff --git a/components/style/properties/helpers.mako.rs b/components/style/properties/helpers.mako.rs index 8f1a7820e1f..73ff84cadd5 100644 --- a/components/style/properties/helpers.mako.rs +++ b/components/style/properties/helpers.mako.rs @@ -189,3 +189,82 @@ } </%call> </%def> + +<%def name="shorthand(name, sub_properties, experimental=False)"> +<% + shorthand = data.declare_shorthand(name, sub_properties.split(), experimental=experimental) +%> + pub mod ${shorthand.ident} { + use cssparser::Parser; + use parser::ParserContext; + use properties::{longhands, PropertyDeclaration, DeclaredValue, Shorthand}; + + pub struct Longhands { + % for sub_property in shorthand.sub_properties: + pub ${sub_property.ident}: + Option<longhands::${sub_property.ident}::SpecifiedValue>, + % endfor + } + + pub fn parse(context: &ParserContext, input: &mut Parser, + declarations: &mut Vec<PropertyDeclaration>) + -> Result<(), ()> { + input.look_for_var_functions(); + let start = input.position(); + let value = input.parse_entirely(|input| parse_value(context, input)); + if value.is_err() { + while let Ok(_) = input.next() {} // Look for var() after the error. + } + let var = input.seen_var_functions(); + if let Ok(value) = value { + % for sub_property in shorthand.sub_properties: + declarations.push(PropertyDeclaration::${sub_property.camel_case}( + match value.${sub_property.ident} { + Some(value) => DeclaredValue::Value(value), + None => DeclaredValue::Initial, + } + )); + % endfor + Ok(()) + } else if var { + input.reset(start); + let (first_token_type, css) = try!( + ::custom_properties::parse_non_custom_with_var(input)); + % for sub_property in shorthand.sub_properties: + declarations.push(PropertyDeclaration::${sub_property.camel_case}( + DeclaredValue::WithVariables { + css: css.clone().into_owned(), + first_token_type: first_token_type, + base_url: context.base_url.clone(), + from_shorthand: Some(Shorthand::${shorthand.camel_case}), + } + )); + % endfor + Ok(()) + } else { + Err(()) + } + } + + #[allow(unused_variables)] + pub fn parse_value(context: &ParserContext, input: &mut Parser) -> Result<Longhands, ()> { + ${caller.body()} + } + } +</%def> + +<%def name="four_sides_shorthand(name, sub_property_pattern, parser_function)"> + <%self:shorthand name="${name}" sub_properties="${ + ' '.join(sub_property_pattern % side + for side in ['top', 'right', 'bottom', 'left'])}"> + use super::parse_four_sides; + use values::specified; + let _unused = context; + let (top, right, bottom, left) = try!(parse_four_sides(input, ${parser_function})); + Ok(Longhands { + % for side in ["top", "right", "bottom", "left"]: + ${to_rust_ident(sub_property_pattern % side)}: Some(${side}), + % endfor + }) + </%self:shorthand> +</%def> diff --git a/components/style/properties/properties.mako.rs b/components/style/properties/properties.mako.rs index 1717f9ae1b7..6582d5a6020 100644 --- a/components/style/properties/properties.mako.rs +++ b/components/style/properties/properties.mako.rs @@ -72,75 +72,11 @@ pub mod longhands { <%include file="/longhand/xul.mako.rs" /> } - pub mod shorthands { use cssparser::Parser; use parser::ParserContext; use values::specified; - <%def name="shorthand(name, sub_properties, experimental=False)"> - <% - shorthand = data.declare_shorthand(name, sub_properties.split(), experimental=experimental) - %> - pub mod ${shorthand.ident} { - use cssparser::Parser; - use parser::ParserContext; - use properties::{longhands, PropertyDeclaration, DeclaredValue, Shorthand}; - - pub struct Longhands { - % for sub_property in shorthand.sub_properties: - pub ${sub_property.ident}: - Option<longhands::${sub_property.ident}::SpecifiedValue>, - % endfor - } - - pub fn parse(context: &ParserContext, input: &mut Parser, - declarations: &mut Vec<PropertyDeclaration>) - -> Result<(), ()> { - input.look_for_var_functions(); - let start = input.position(); - let value = input.parse_entirely(|input| parse_value(context, input)); - if value.is_err() { - while let Ok(_) = input.next() {} // Look for var() after the error. - } - let var = input.seen_var_functions(); - if let Ok(value) = value { - % for sub_property in shorthand.sub_properties: - declarations.push(PropertyDeclaration::${sub_property.camel_case}( - match value.${sub_property.ident} { - Some(value) => DeclaredValue::Value(value), - None => DeclaredValue::Initial, - } - )); - % endfor - Ok(()) - } else if var { - input.reset(start); - let (first_token_type, css) = try!( - ::custom_properties::parse_non_custom_with_var(input)); - % for sub_property in shorthand.sub_properties: - declarations.push(PropertyDeclaration::${sub_property.camel_case}( - DeclaredValue::WithVariables { - css: css.clone().into_owned(), - first_token_type: first_token_type, - base_url: context.base_url.clone(), - from_shorthand: Some(Shorthand::${shorthand.camel_case}), - } - )); - % endfor - Ok(()) - } else { - Err(()) - } - } - - #[allow(unused_variables)] - pub fn parse_value(context: &ParserContext, input: &mut Parser) -> Result<Longhands, ()> { - ${caller.body()} - } - } - </%def> - fn parse_four_sides<F, T>(input: &mut Parser, parse_one: F) -> Result<(T, T, T, T), ()> where F: Fn(&mut Parser) -> Result<T, ()>, F: Copy, T: Clone { // zero or more than four values is invalid. @@ -184,606 +120,16 @@ pub mod shorthands { Ok((top, right, bottom, left)) } - <%def name="four_sides_shorthand(name, sub_property_pattern, parser_function)"> - <%self:shorthand name="${name}" sub_properties="${ - ' '.join(sub_property_pattern % side - for side in ['top', 'right', 'bottom', 'left'])}"> - use super::parse_four_sides; - use values::specified; - let _unused = context; - let (top, right, bottom, left) = try!(parse_four_sides(input, ${parser_function})); - Ok(Longhands { - % for side in ["top", "right", "bottom", "left"]: - ${to_rust_ident(sub_property_pattern % side)}: Some(${side}), - % endfor - }) - </%self:shorthand> - </%def> - - // TODO: other background-* properties - <%self:shorthand name="background" - sub_properties="background-color background-position background-repeat background-attachment - background-image background-size background-origin background-clip"> - use properties::longhands::{background_color, background_position, background_repeat, background_attachment}; - use properties::longhands::{background_image, background_size, background_origin, background_clip}; - - let mut color = None; - let mut image = None; - let mut position = None; - let mut repeat = None; - let mut size = None; - let mut attachment = None; - let mut any = false; - let mut origin = None; - let mut clip = None; - - loop { - if position.is_none() { - if let Ok(value) = input.try(|input| background_position::parse(context, input)) { - position = Some(value); - any = true; - - // Parse background size, if applicable. - size = input.try(|input| { - try!(input.expect_delim('/')); - background_size::parse(context, input) - }).ok(); - - continue - } - } - if color.is_none() { - if let Ok(value) = input.try(|input| background_color::parse(context, input)) { - color = Some(value); - any = true; - continue - } - } - if image.is_none() { - if let Ok(value) = input.try(|input| background_image::parse(context, input)) { - image = Some(value); - any = true; - continue - } - } - if repeat.is_none() { - if let Ok(value) = input.try(|input| background_repeat::parse(context, input)) { - repeat = Some(value); - any = true; - continue - } - } - if attachment.is_none() { - if let Ok(value) = input.try(|input| background_attachment::parse(context, input)) { - attachment = Some(value); - any = true; - continue - } - } - if origin.is_none() { - if let Ok(value) = input.try(|input| background_origin::parse(context, input)) { - origin = Some(value); - any = true; - continue - } - } - if clip.is_none() { - if let Ok(value) = input.try(|input| background_clip::parse(context, input)) { - clip = Some(value); - any = true; - continue - } - } - break - } - - if any { - Ok(Longhands { - background_color: color, - background_image: image, - background_position: position, - background_repeat: repeat, - background_attachment: attachment, - background_size: size, - background_origin: origin, - background_clip: clip, - }) - } else { - Err(()) - } - </%self:shorthand> - - ${four_sides_shorthand("margin", "margin-%s", "specified::LengthOrPercentageOrAuto::parse")} - ${four_sides_shorthand("padding", "padding-%s", "specified::LengthOrPercentage::parse")} - - ${four_sides_shorthand("border-color", "border-%s-color", "specified::CSSColor::parse")} - ${four_sides_shorthand("border-style", "border-%s-style", - "specified::BorderStyle::parse")} - <%self:shorthand name="border-width" sub_properties="${ - ' '.join('border-%s-width' % side - for side in ['top', 'right', 'bottom', 'left'])}"> - use super::parse_four_sides; - use values::specified; - let _unused = context; - let (top, right, bottom, left) = try!(parse_four_sides(input, specified::parse_border_width)); - Ok(Longhands { - % for side in ["top", "right", "bottom", "left"]: - ${to_rust_ident('border-%s-width' % side)}: - Some(longhands::${to_rust_ident('border-%s-width' % side)}::SpecifiedValue(${side})), - % endfor - }) - </%self:shorthand> - - - pub fn parse_border(context: &ParserContext, input: &mut Parser) - -> Result<(Option<specified::CSSColor>, - Option<specified::BorderStyle>, - Option<specified::Length>), ()> { - use values::specified; - let _unused = context; - let mut color = None; - let mut style = None; - let mut width = None; - let mut any = false; - loop { - if color.is_none() { - if let Ok(value) = input.try(specified::CSSColor::parse) { - color = Some(value); - any = true; - continue - } - } - if style.is_none() { - if let Ok(value) = input.try(specified::BorderStyle::parse) { - style = Some(value); - any = true; - continue - } - } - if width.is_none() { - if let Ok(value) = input.try(specified::parse_border_width) { - width = Some(value); - any = true; - continue - } - } - break - } - if any { Ok((color, style, width)) } else { Err(()) } - } - - - % for side in ["top", "right", "bottom", "left"]: - <%self:shorthand name="border-${side}" sub_properties="${' '.join( - 'border-%s-%s' % (side, prop) - for prop in ['color', 'style', 'width'] - )}"> - let (color, style, width) = try!(super::parse_border(context, input)); - Ok(Longhands { - border_${side}_color: color, - border_${side}_style: style, - border_${side}_width: - width.map(longhands::${to_rust_ident('border-%s-width' % side)}::SpecifiedValue), - }) - </%self:shorthand> - % endfor - - <%self:shorthand name="border" sub_properties="${' '.join( - 'border-%s-%s' % (side, prop) - for side in ['top', 'right', 'bottom', 'left'] - for prop in ['color', 'style', 'width'] - )}"> - let (color, style, width) = try!(super::parse_border(context, input)); - Ok(Longhands { - % for side in ["top", "right", "bottom", "left"]: - border_${side}_color: color.clone(), - border_${side}_style: style, - border_${side}_width: - width.map(longhands::${to_rust_ident('border-%s-width' % side)}::SpecifiedValue), - % endfor - }) - </%self:shorthand> - - <%self:shorthand name="border-radius" sub_properties="${' '.join( - 'border-%s-radius' % (corner) - for corner in ['top-left', 'top-right', 'bottom-right', 'bottom-left'] - )}"> - use app_units::Au; - use values::specified::{Length, LengthOrPercentage}; - use values::specified::BorderRadiusSize; - - let _ignored = context; - - fn parse_one_set_of_border_values(mut input: &mut Parser) - -> Result<[LengthOrPercentage; 4], ()> { - let mut count = 0; - let mut values = [LengthOrPercentage::Length(Length::Absolute(Au(0))); 4]; - while count < 4 { - if let Ok(value) = input.try(LengthOrPercentage::parse) { - values[count] = value; - count += 1; - } else { - break - } - } - - match count { - 1 => Ok([values[0], values[0], values[0], values[0]]), - 2 => Ok([values[0], values[1], values[0], values[1]]), - 3 => Ok([values[0], values[1], values[2], values[1]]), - 4 => Ok([values[0], values[1], values[2], values[3]]), - _ => Err(()), - } - } - - fn parse_one_set_of_border_radii(mut input: &mut Parser) - -> Result<[BorderRadiusSize; 4], ()> { - let widths = try!(parse_one_set_of_border_values(input)); - let mut heights = widths.clone(); - let mut radii_values = [BorderRadiusSize::zero(); 4]; - if input.try(|input| input.expect_delim('/')).is_ok() { - heights = try!(parse_one_set_of_border_values(input)); - } - for i in 0..radii_values.len() { - radii_values[i] = BorderRadiusSize::new(widths[i], heights[i]); - } - Ok(radii_values) - } - - let radii = try!(parse_one_set_of_border_radii(input)); - Ok(Longhands { - border_top_left_radius: Some(radii[0]), - border_top_right_radius: Some(radii[1]), - border_bottom_right_radius: Some(radii[2]), - border_bottom_left_radius: Some(radii[3]), - }) - </%self:shorthand> - - <%self:shorthand name="outline" sub_properties="outline-color outline-style outline-width"> - use properties::longhands::outline_width; - use values::specified; - - let _unused = context; - let mut color = None; - let mut style = None; - let mut width = None; - let mut any = false; - loop { - if color.is_none() { - if let Ok(value) = input.try(specified::CSSColor::parse) { - color = Some(value); - any = true; - continue - } - } - if style.is_none() { - if let Ok(value) = input.try(specified::BorderStyle::parse) { - style = Some(value); - any = true; - continue - } - } - if width.is_none() { - if let Ok(value) = input.try(|input| outline_width::parse(context, input)) { - width = Some(value); - any = true; - continue - } - } - break - } - if any { - Ok(Longhands { - outline_color: color, - outline_style: style, - outline_width: width, - }) - } else { - Err(()) - } - </%self:shorthand> - - <%self:shorthand name="font" sub_properties="font-style font-variant font-weight - font-size line-height font-family"> - use properties::longhands::{font_style, font_variant, font_weight, font_size, - line_height, font_family}; - let mut nb_normals = 0; - let mut style = None; - let mut variant = None; - let mut weight = None; - let size; - loop { - // Special-case 'normal' because it is valid in each of - // font-style, font-weight and font-variant. - // Leaves the values to None, 'normal' is the initial value for each of them. - if input.try(|input| input.expect_ident_matching("normal")).is_ok() { - nb_normals += 1; - continue; - } - if style.is_none() { - if let Ok(value) = input.try(|input| font_style::parse(context, input)) { - style = Some(value); - continue - } - } - if weight.is_none() { - if let Ok(value) = input.try(|input| font_weight::parse(context, input)) { - weight = Some(value); - continue - } - } - if variant.is_none() { - if let Ok(value) = input.try(|input| font_variant::parse(context, input)) { - variant = Some(value); - continue - } - } - size = Some(try!(font_size::parse(context, input))); - break - } - #[inline] - fn count<T>(opt: &Option<T>) -> u8 { - if opt.is_some() { 1 } else { 0 } - } - if size.is_none() || (count(&style) + count(&weight) + count(&variant) + nb_normals) > 3 { - return Err(()) - } - let line_height = if input.try(|input| input.expect_delim('/')).is_ok() { - Some(try!(line_height::parse(context, input))) - } else { - None - }; - let family = try!(input.parse_comma_separated(font_family::parse_one_family)); - Ok(Longhands { - font_style: style, - font_variant: variant, - font_weight: weight, - font_size: size, - line_height: line_height, - font_family: Some(font_family::SpecifiedValue(family)) - }) - </%self:shorthand> - - // Per CSS-TEXT 6.2, "for legacy reasons, UAs must treat `word-wrap` as an alternate name for - // the `overflow-wrap` property, as if it were a shorthand of `overflow-wrap`." - <%self:shorthand name="word-wrap" sub_properties="overflow-wrap"> - use properties::longhands::overflow_wrap; - Ok(Longhands { - overflow_wrap: Some(try!(overflow_wrap::parse(context, input))), - }) - </%self:shorthand> - - <%self:shorthand name="list-style" - sub_properties="list-style-image list-style-position list-style-type"> - use properties::longhands::{list_style_image, list_style_position, list_style_type}; - - // `none` is ambiguous until we've finished parsing the shorthands, so we count the number - // of times we see it. - let mut nones = 0u8; - let (mut image, mut position, mut list_style_type, mut any) = (None, None, None, false); - loop { - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - nones = nones + 1; - if nones > 2 { - return Err(()) - } - any = true; - continue - } - - if list_style_type.is_none() { - if let Ok(value) = input.try(|input| list_style_type::parse(context, input)) { - list_style_type = Some(value); - any = true; - continue - } - } - - if image.is_none() { - if let Ok(value) = input.try(|input| list_style_image::parse(context, input)) { - image = Some(value); - any = true; - continue - } - } - - if position.is_none() { - if let Ok(value) = input.try(|input| list_style_position::parse(context, input)) { - position = Some(value); - any = true; - continue - } - } - break - } - - // If there are two `none`s, then we can't have a type or image; if there is one `none`, - // then we can't have both a type *and* an image; if there is no `none` then we're fine as - // long as we parsed something. - match (any, nones, list_style_type, image) { - (true, 2, None, None) => { - Ok(Longhands { - list_style_position: position, - list_style_image: Some(list_style_image::SpecifiedValue::None), - list_style_type: Some(list_style_type::SpecifiedValue::none), - }) - } - (true, 1, None, Some(image)) => { - Ok(Longhands { - list_style_position: position, - list_style_image: Some(image), - list_style_type: Some(list_style_type::SpecifiedValue::none), - }) - } - (true, 1, Some(list_style_type), None) => { - Ok(Longhands { - list_style_position: position, - list_style_image: Some(list_style_image::SpecifiedValue::None), - list_style_type: Some(list_style_type), - }) - } - (true, 1, None, None) => { - Ok(Longhands { - list_style_position: position, - list_style_image: Some(list_style_image::SpecifiedValue::None), - list_style_type: Some(list_style_type::SpecifiedValue::none), - }) - } - (true, 0, list_style_type, image) => { - Ok(Longhands { - list_style_position: position, - list_style_image: image, - list_style_type: list_style_type, - }) - } - _ => Err(()), - } - </%self:shorthand> - - <%self:shorthand name="columns" sub_properties="column-count column-width" experimental="True"> - use properties::longhands::{column_count, column_width}; - let mut column_count = None; - let mut column_width = None; - let mut autos = 0; - - loop { - if input.try(|input| input.expect_ident_matching("auto")).is_ok() { - // Leave the options to None, 'auto' is the initial value. - autos += 1; - continue - } - - if column_count.is_none() { - if let Ok(value) = input.try(|input| column_count::parse(context, input)) { - column_count = Some(value); - continue - } - } - - if column_width.is_none() { - if let Ok(value) = input.try(|input| column_width::parse(context, input)) { - column_width = Some(value); - continue - } - } - - break - } - - let values = autos + column_count.iter().len() + column_width.iter().len(); - if values == 0 || values > 2 { - Err(()) - } else { - Ok(Longhands { - column_count: column_count, - column_width: column_width, - }) - } - </%self:shorthand> - - <%self:shorthand name="overflow" sub_properties="overflow-x overflow-y"> - use properties::longhands::{overflow_x, overflow_y}; - - let overflow = try!(overflow_x::parse(context, input)); - Ok(Longhands { - overflow_x: Some(overflow), - overflow_y: Some(overflow_y::SpecifiedValue(overflow)), - }) - </%self:shorthand> - - <%self:shorthand name="transition" - sub_properties="transition-property transition-duration transition-timing-function - transition-delay"> - use properties::longhands::{transition_delay, transition_duration, transition_property}; - use properties::longhands::{transition_timing_function}; - - struct SingleTransition { - transition_property: transition_property::SingleSpecifiedValue, - transition_duration: transition_duration::SingleSpecifiedValue, - transition_timing_function: transition_timing_function::SingleSpecifiedValue, - transition_delay: transition_delay::SingleSpecifiedValue, - } - - fn parse_one_transition(input: &mut Parser) -> Result<SingleTransition,()> { - let (mut property, mut duration) = (None, None); - let (mut timing_function, mut delay) = (None, None); - loop { - if property.is_none() { - if let Ok(value) = input.try(|input| transition_property::parse_one(input)) { - property = Some(value); - continue - } - } - - if duration.is_none() { - if let Ok(value) = input.try(|input| transition_duration::parse_one(input)) { - duration = Some(value); - continue - } - } - - if timing_function.is_none() { - if let Ok(value) = input.try(|input| { - transition_timing_function::parse_one(input) - }) { - timing_function = Some(value); - continue - } - } - - if delay.is_none() { - if let Ok(value) = input.try(|input| transition_delay::parse_one(input)) { - delay = Some(value); - continue; - } - } - - break - } - - if let Some(property) = property { - Ok(SingleTransition { - transition_property: property, - transition_duration: - duration.unwrap_or(transition_duration::get_initial_single_value()), - transition_timing_function: - timing_function.unwrap_or( - transition_timing_function::get_initial_single_value()), - transition_delay: - delay.unwrap_or(transition_delay::get_initial_single_value()), - }) - } else { - Err(()) - } - } - - if input.try(|input| input.expect_ident_matching("none")).is_ok() { - return Ok(Longhands { - transition_property: None, - transition_duration: None, - transition_timing_function: None, - transition_delay: None, - }) - } - - let results = try!(input.parse_comma_separated(parse_one_transition)); - let (mut properties, mut durations) = (Vec::new(), Vec::new()); - let (mut timing_functions, mut delays) = (Vec::new(), Vec::new()); - for result in results { - properties.push(result.transition_property); - durations.push(result.transition_duration); - timing_functions.push(result.transition_timing_function); - delays.push(result.transition_delay); - } - - Ok(Longhands { - transition_property: Some(transition_property::SpecifiedValue(properties)), - transition_duration: Some(transition_duration::SpecifiedValue(durations)), - transition_timing_function: - Some(transition_timing_function::SpecifiedValue(timing_functions)), - transition_delay: Some(transition_delay::SpecifiedValue(delays)), - }) - </%self:shorthand> + <%include file="/shorthand/background.mako.rs" /> + <%include file="/shorthand/border.mako.rs" /> + <%include file="/shorthand/box.mako.rs" /> + <%include file="/shorthand/column.mako.rs" /> + <%include file="/shorthand/font.mako.rs" /> + <%include file="/shorthand/inherited_text.mako.rs" /> + <%include file="/shorthand/list.mako.rs" /> + <%include file="/shorthand/margin.mako.rs" /> + <%include file="/shorthand/outline.mako.rs" /> + <%include file="/shorthand/padding.mako.rs" /> } diff --git a/components/style/properties/shorthand/background.mako.rs b/components/style/properties/shorthand/background.mako.rs new file mode 100644 index 00000000000..4d6e3c8821a --- /dev/null +++ b/components/style/properties/shorthand/background.mako.rs @@ -0,0 +1,99 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +// TODO: other background-* properties +<%helpers:shorthand name="background" + sub_properties="background-color background-position background-repeat background-attachment + background-image background-size background-origin background-clip"> + use properties::longhands::{background_color, background_position, background_repeat, background_attachment}; + use properties::longhands::{background_image, background_size, background_origin, background_clip}; + + let mut color = None; + let mut image = None; + let mut position = None; + let mut repeat = None; + let mut size = None; + let mut attachment = None; + let mut any = false; + let mut origin = None; + let mut clip = None; + + loop { + if position.is_none() { + if let Ok(value) = input.try(|input| background_position::parse(context, input)) { + position = Some(value); + any = true; + + // Parse background size, if applicable. + size = input.try(|input| { + try!(input.expect_delim('/')); + background_size::parse(context, input) + }).ok(); + + continue + } + } + if color.is_none() { + if let Ok(value) = input.try(|input| background_color::parse(context, input)) { + color = Some(value); + any = true; + continue + } + } + if image.is_none() { + if let Ok(value) = input.try(|input| background_image::parse(context, input)) { + image = Some(value); + any = true; + continue + } + } + if repeat.is_none() { + if let Ok(value) = input.try(|input| background_repeat::parse(context, input)) { + repeat = Some(value); + any = true; + continue + } + } + if attachment.is_none() { + if let Ok(value) = input.try(|input| background_attachment::parse(context, input)) { + attachment = Some(value); + any = true; + continue + } + } + if origin.is_none() { + if let Ok(value) = input.try(|input| background_origin::parse(context, input)) { + origin = Some(value); + any = true; + continue + } + } + if clip.is_none() { + if let Ok(value) = input.try(|input| background_clip::parse(context, input)) { + clip = Some(value); + any = true; + continue + } + } + break + } + + if any { + Ok(Longhands { + background_color: color, + background_image: image, + background_position: position, + background_repeat: repeat, + background_attachment: attachment, + background_size: size, + background_origin: origin, + background_clip: clip, + }) + } else { + Err(()) + } +</%helpers:shorthand> + diff --git a/components/style/properties/shorthand/border.mako.rs b/components/style/properties/shorthand/border.mako.rs new file mode 100644 index 00000000000..f884708e76c --- /dev/null +++ b/components/style/properties/shorthand/border.mako.rs @@ -0,0 +1,149 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> +<% from data import to_rust_ident %> + +${helpers.four_sides_shorthand("border-color", "border-%s-color", "specified::CSSColor::parse")} +${helpers.four_sides_shorthand("border-style", "border-%s-style", + "specified::BorderStyle::parse")} +<%helpers:shorthand name="border-width" sub_properties="${ + ' '.join('border-%s-width' % side + for side in ['top', 'right', 'bottom', 'left'])}"> + use super::parse_four_sides; + use values::specified; + let _unused = context; + let (top, right, bottom, left) = try!(parse_four_sides(input, specified::parse_border_width)); + Ok(Longhands { + % for side in ["top", "right", "bottom", "left"]: + ${to_rust_ident('border-%s-width' % side)}: + Some(longhands::${to_rust_ident('border-%s-width' % side)}::SpecifiedValue(${side})), + % endfor + }) +</%helpers:shorthand> + + +pub fn parse_border(context: &ParserContext, input: &mut Parser) + -> Result<(Option<specified::CSSColor>, + Option<specified::BorderStyle>, + Option<specified::Length>), ()> { + use values::specified; + let _unused = context; + let mut color = None; + let mut style = None; + let mut width = None; + let mut any = false; + loop { + if color.is_none() { + if let Ok(value) = input.try(specified::CSSColor::parse) { + color = Some(value); + any = true; + continue + } + } + if style.is_none() { + if let Ok(value) = input.try(specified::BorderStyle::parse) { + style = Some(value); + any = true; + continue + } + } + if width.is_none() { + if let Ok(value) = input.try(specified::parse_border_width) { + width = Some(value); + any = true; + continue + } + } + break + } + if any { Ok((color, style, width)) } else { Err(()) } +} + + +% for side in ["top", "right", "bottom", "left"]: + <%helpers:shorthand name="border-${side}" sub_properties="${' '.join( + 'border-%s-%s' % (side, prop) + for prop in ['color', 'style', 'width'] + )}"> + let (color, style, width) = try!(super::parse_border(context, input)); + Ok(Longhands { + border_${side}_color: color, + border_${side}_style: style, + border_${side}_width: + width.map(longhands::${to_rust_ident('border-%s-width' % side)}::SpecifiedValue), + }) + </%helpers:shorthand> +% endfor + +<%helpers:shorthand name="border" sub_properties="${' '.join( + 'border-%s-%s' % (side, prop) + for side in ['top', 'right', 'bottom', 'left'] + for prop in ['color', 'style', 'width'] +)}"> + let (color, style, width) = try!(super::parse_border(context, input)); + Ok(Longhands { + % for side in ["top", "right", "bottom", "left"]: + border_${side}_color: color.clone(), + border_${side}_style: style, + border_${side}_width: + width.map(longhands::${to_rust_ident('border-%s-width' % side)}::SpecifiedValue), + % endfor + }) +</%helpers:shorthand> + +<%helpers:shorthand name="border-radius" sub_properties="${' '.join( + 'border-%s-radius' % (corner) + for corner in ['top-left', 'top-right', 'bottom-right', 'bottom-left'] +)}"> + use app_units::Au; + use values::specified::{Length, LengthOrPercentage}; + use values::specified::BorderRadiusSize; + + let _ignored = context; + + fn parse_one_set_of_border_values(mut input: &mut Parser) + -> Result<[LengthOrPercentage; 4], ()> { + let mut count = 0; + let mut values = [LengthOrPercentage::Length(Length::Absolute(Au(0))); 4]; + while count < 4 { + if let Ok(value) = input.try(LengthOrPercentage::parse) { + values[count] = value; + count += 1; + } else { + break + } + } + + match count { + 1 => Ok([values[0], values[0], values[0], values[0]]), + 2 => Ok([values[0], values[1], values[0], values[1]]), + 3 => Ok([values[0], values[1], values[2], values[1]]), + 4 => Ok([values[0], values[1], values[2], values[3]]), + _ => Err(()), + } + } + + fn parse_one_set_of_border_radii(mut input: &mut Parser) + -> Result<[BorderRadiusSize; 4], ()> { + let widths = try!(parse_one_set_of_border_values(input)); + let mut heights = widths.clone(); + let mut radii_values = [BorderRadiusSize::zero(); 4]; + if input.try(|input| input.expect_delim('/')).is_ok() { + heights = try!(parse_one_set_of_border_values(input)); + } + for i in 0..radii_values.len() { + radii_values[i] = BorderRadiusSize::new(widths[i], heights[i]); + } + Ok(radii_values) + } + + let radii = try!(parse_one_set_of_border_radii(input)); + Ok(Longhands { + border_top_left_radius: Some(radii[0]), + border_top_right_radius: Some(radii[1]), + border_bottom_right_radius: Some(radii[2]), + border_bottom_left_radius: Some(radii[3]), + }) +</%helpers:shorthand> diff --git a/components/style/properties/shorthand/box.mako.rs b/components/style/properties/shorthand/box.mako.rs new file mode 100644 index 00000000000..48b49ca4811 --- /dev/null +++ b/components/style/properties/shorthand/box.mako.rs @@ -0,0 +1,109 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<%helpers:shorthand name="overflow" sub_properties="overflow-x overflow-y"> + use properties::longhands::{overflow_x, overflow_y}; + + let overflow = try!(overflow_x::parse(context, input)); + Ok(Longhands { + overflow_x: Some(overflow), + overflow_y: Some(overflow_y::SpecifiedValue(overflow)), + }) +</%helpers:shorthand> + +<%helpers:shorthand name="transition" + sub_properties="transition-property transition-duration transition-timing-function + transition-delay"> + use properties::longhands::{transition_delay, transition_duration, transition_property}; + use properties::longhands::{transition_timing_function}; + + struct SingleTransition { + transition_property: transition_property::SingleSpecifiedValue, + transition_duration: transition_duration::SingleSpecifiedValue, + transition_timing_function: transition_timing_function::SingleSpecifiedValue, + transition_delay: transition_delay::SingleSpecifiedValue, + } + + fn parse_one_transition(input: &mut Parser) -> Result<SingleTransition,()> { + let (mut property, mut duration) = (None, None); + let (mut timing_function, mut delay) = (None, None); + loop { + if property.is_none() { + if let Ok(value) = input.try(|input| transition_property::parse_one(input)) { + property = Some(value); + continue + } + } + + if duration.is_none() { + if let Ok(value) = input.try(|input| transition_duration::parse_one(input)) { + duration = Some(value); + continue + } + } + + if timing_function.is_none() { + if let Ok(value) = input.try(|input| { + transition_timing_function::parse_one(input) + }) { + timing_function = Some(value); + continue + } + } + + if delay.is_none() { + if let Ok(value) = input.try(|input| transition_delay::parse_one(input)) { + delay = Some(value); + continue; + } + } + + break + } + + if let Some(property) = property { + Ok(SingleTransition { + transition_property: property, + transition_duration: + duration.unwrap_or(transition_duration::get_initial_single_value()), + transition_timing_function: + timing_function.unwrap_or( + transition_timing_function::get_initial_single_value()), + transition_delay: + delay.unwrap_or(transition_delay::get_initial_single_value()), + }) + } else { + Err(()) + } + } + + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + return Ok(Longhands { + transition_property: None, + transition_duration: None, + transition_timing_function: None, + transition_delay: None, + }) + } + + let results = try!(input.parse_comma_separated(parse_one_transition)); + let (mut properties, mut durations) = (Vec::new(), Vec::new()); + let (mut timing_functions, mut delays) = (Vec::new(), Vec::new()); + for result in results { + properties.push(result.transition_property); + durations.push(result.transition_duration); + timing_functions.push(result.transition_timing_function); + delays.push(result.transition_delay); + } + + Ok(Longhands { + transition_property: Some(transition_property::SpecifiedValue(properties)), + transition_duration: Some(transition_duration::SpecifiedValue(durations)), + transition_timing_function: + Some(transition_timing_function::SpecifiedValue(timing_functions)), + transition_delay: Some(transition_delay::SpecifiedValue(delays)), + }) +</%helpers:shorthand> diff --git a/components/style/properties/shorthand/column.mako.rs b/components/style/properties/shorthand/column.mako.rs new file mode 100644 index 00000000000..8b3e91628da --- /dev/null +++ b/components/style/properties/shorthand/column.mako.rs @@ -0,0 +1,46 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<%helpers:shorthand name="columns" sub_properties="column-count column-width" experimental="True"> + use properties::longhands::{column_count, column_width}; + let mut column_count = None; + let mut column_width = None; + let mut autos = 0; + + loop { + if input.try(|input| input.expect_ident_matching("auto")).is_ok() { + // Leave the options to None, 'auto' is the initial value. + autos += 1; + continue + } + + if column_count.is_none() { + if let Ok(value) = input.try(|input| column_count::parse(context, input)) { + column_count = Some(value); + continue + } + } + + if column_width.is_none() { + if let Ok(value) = input.try(|input| column_width::parse(context, input)) { + column_width = Some(value); + continue + } + } + + break + } + + let values = autos + column_count.iter().len() + column_width.iter().len(); + if values == 0 || values > 2 { + Err(()) + } else { + Ok(Longhands { + column_count: column_count, + column_width: column_width, + }) + } +</%helpers:shorthand> diff --git a/components/style/properties/shorthand/font.mako.rs b/components/style/properties/shorthand/font.mako.rs new file mode 100644 index 00000000000..2268f2ff5d2 --- /dev/null +++ b/components/style/properties/shorthand/font.mako.rs @@ -0,0 +1,66 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<%helpers:shorthand name="font" sub_properties="font-style font-variant font-weight + font-size line-height font-family"> + use properties::longhands::{font_style, font_variant, font_weight, font_size, + line_height, font_family}; + let mut nb_normals = 0; + let mut style = None; + let mut variant = None; + let mut weight = None; + let size; + loop { + // Special-case 'normal' because it is valid in each of + // font-style, font-weight and font-variant. + // Leaves the values to None, 'normal' is the initial value for each of them. + if input.try(|input| input.expect_ident_matching("normal")).is_ok() { + nb_normals += 1; + continue; + } + if style.is_none() { + if let Ok(value) = input.try(|input| font_style::parse(context, input)) { + style = Some(value); + continue + } + } + if weight.is_none() { + if let Ok(value) = input.try(|input| font_weight::parse(context, input)) { + weight = Some(value); + continue + } + } + if variant.is_none() { + if let Ok(value) = input.try(|input| font_variant::parse(context, input)) { + variant = Some(value); + continue + } + } + size = Some(try!(font_size::parse(context, input))); + break + } + #[inline] + fn count<T>(opt: &Option<T>) -> u8 { + if opt.is_some() { 1 } else { 0 } + } + if size.is_none() || (count(&style) + count(&weight) + count(&variant) + nb_normals) > 3 { + return Err(()) + } + let line_height = if input.try(|input| input.expect_delim('/')).is_ok() { + Some(try!(line_height::parse(context, input))) + } else { + None + }; + let family = try!(input.parse_comma_separated(font_family::parse_one_family)); + Ok(Longhands { + font_style: style, + font_variant: variant, + font_weight: weight, + font_size: size, + line_height: line_height, + font_family: Some(font_family::SpecifiedValue(family)) + }) +</%helpers:shorthand> diff --git a/components/style/properties/shorthand/inherited_text.mako.rs b/components/style/properties/shorthand/inherited_text.mako.rs new file mode 100644 index 00000000000..85aac33930d --- /dev/null +++ b/components/style/properties/shorthand/inherited_text.mako.rs @@ -0,0 +1,14 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +// Per CSS-TEXT 6.2, "for legacy reasons, UAs must treat `word-wrap` as an alternate name for +// the `overflow-wrap` property, as if it were a shorthand of `overflow-wrap`." +<%helpers:shorthand name="word-wrap" sub_properties="overflow-wrap"> + use properties::longhands::overflow_wrap; + Ok(Longhands { + overflow_wrap: Some(try!(overflow_wrap::parse(context, input))), + }) +</%helpers:shorthand> diff --git a/components/style/properties/shorthand/list.mako.rs b/components/style/properties/shorthand/list.mako.rs new file mode 100644 index 00000000000..2b0f61b3a8c --- /dev/null +++ b/components/style/properties/shorthand/list.mako.rs @@ -0,0 +1,92 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<%helpers:shorthand name="list-style" + sub_properties="list-style-image list-style-position list-style-type"> + use properties::longhands::{list_style_image, list_style_position, list_style_type}; + + // `none` is ambiguous until we've finished parsing the shorthands, so we count the number + // of times we see it. + let mut nones = 0u8; + let (mut image, mut position, mut list_style_type, mut any) = (None, None, None, false); + loop { + if input.try(|input| input.expect_ident_matching("none")).is_ok() { + nones = nones + 1; + if nones > 2 { + return Err(()) + } + any = true; + continue + } + + if list_style_type.is_none() { + if let Ok(value) = input.try(|input| list_style_type::parse(context, input)) { + list_style_type = Some(value); + any = true; + continue + } + } + + if image.is_none() { + if let Ok(value) = input.try(|input| list_style_image::parse(context, input)) { + image = Some(value); + any = true; + continue + } + } + + if position.is_none() { + if let Ok(value) = input.try(|input| list_style_position::parse(context, input)) { + position = Some(value); + any = true; + continue + } + } + break + } + + // If there are two `none`s, then we can't have a type or image; if there is one `none`, + // then we can't have both a type *and* an image; if there is no `none` then we're fine as + // long as we parsed something. + match (any, nones, list_style_type, image) { + (true, 2, None, None) => { + Ok(Longhands { + list_style_position: position, + list_style_image: Some(list_style_image::SpecifiedValue::None), + list_style_type: Some(list_style_type::SpecifiedValue::none), + }) + } + (true, 1, None, Some(image)) => { + Ok(Longhands { + list_style_position: position, + list_style_image: Some(image), + list_style_type: Some(list_style_type::SpecifiedValue::none), + }) + } + (true, 1, Some(list_style_type), None) => { + Ok(Longhands { + list_style_position: position, + list_style_image: Some(list_style_image::SpecifiedValue::None), + list_style_type: Some(list_style_type), + }) + } + (true, 1, None, None) => { + Ok(Longhands { + list_style_position: position, + list_style_image: Some(list_style_image::SpecifiedValue::None), + list_style_type: Some(list_style_type::SpecifiedValue::none), + }) + } + (true, 0, list_style_type, image) => { + Ok(Longhands { + list_style_position: position, + list_style_image: image, + list_style_type: list_style_type, + }) + } + _ => Err(()), + } +</%helpers:shorthand> diff --git a/components/style/properties/shorthand/margin.mako.rs b/components/style/properties/shorthand/margin.mako.rs new file mode 100644 index 00000000000..f83ccb54023 --- /dev/null +++ b/components/style/properties/shorthand/margin.mako.rs @@ -0,0 +1,7 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +${helpers.four_sides_shorthand("margin", "margin-%s", "specified::LengthOrPercentageOrAuto::parse")} diff --git a/components/style/properties/shorthand/outline.mako.rs b/components/style/properties/shorthand/outline.mako.rs new file mode 100644 index 00000000000..57481dfcb02 --- /dev/null +++ b/components/style/properties/shorthand/outline.mako.rs @@ -0,0 +1,49 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +<%helpers:shorthand name="outline" sub_properties="outline-color outline-style outline-width"> + use properties::longhands::outline_width; + use values::specified; + + let _unused = context; + let mut color = None; + let mut style = None; + let mut width = None; + let mut any = false; + loop { + if color.is_none() { + if let Ok(value) = input.try(specified::CSSColor::parse) { + color = Some(value); + any = true; + continue + } + } + if style.is_none() { + if let Ok(value) = input.try(specified::BorderStyle::parse) { + style = Some(value); + any = true; + continue + } + } + if width.is_none() { + if let Ok(value) = input.try(|input| outline_width::parse(context, input)) { + width = Some(value); + any = true; + continue + } + } + break + } + if any { + Ok(Longhands { + outline_color: color, + outline_style: style, + outline_width: width, + }) + } else { + Err(()) + } +</%helpers:shorthand> diff --git a/components/style/properties/shorthand/padding.mako.rs b/components/style/properties/shorthand/padding.mako.rs new file mode 100644 index 00000000000..09363b950eb --- /dev/null +++ b/components/style/properties/shorthand/padding.mako.rs @@ -0,0 +1,7 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +<%namespace name="helpers" file="/helpers.mako.rs" /> + +${helpers.four_sides_shorthand("padding", "padding-%s", "specified::LengthOrPercentage::parse")} diff --git a/components/style/restyle_hints.rs b/components/style/restyle_hints.rs index b5dbdc37a3f..e116594b02f 100644 --- a/components/style/restyle_hints.rs +++ b/components/style/restyle_hints.rs @@ -136,7 +136,7 @@ impl<'a, E> Element for ElementWrapper<'a, E> fn get_local_name(&self) -> &Atom { self.element.get_local_name() } - fn get_namespace<'b>(&self) -> &Namespace { + fn get_namespace(&self) -> &Namespace { self.element.get_namespace() } fn get_id(&self) -> Option<Atom> { diff --git a/components/style/selector_impl.rs b/components/style/selector_impl.rs index d70287f9ddf..b7faff4c028 100644 --- a/components/style/selector_impl.rs +++ b/components/style/selector_impl.rs @@ -2,6 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use element_state::ElementState; +use properties::{self, ServoComputedValues}; use selector_matching::{USER_OR_USER_AGENT_STYLESHEETS, QUIRKS_MODE_STYLESHEET}; use selectors::Element; use selectors::parser::{ParserContext, SelectorImpl}; @@ -12,9 +13,51 @@ pub trait ElementExt: Element { } pub trait SelectorImplExt : SelectorImpl + Sized { - fn each_eagerly_cascaded_pseudo_element<F>(mut fun: F) + type ComputedValues: properties::ComputedValues; + + fn each_pseudo_element<F>(mut fun: F) where F: FnMut(<Self as SelectorImpl>::PseudoElement); + /// This function determines if a pseudo-element is eagerly cascaded or not. + /// + /// Eagerly cascaded pseudo-elements are "normal" pseudo-elements (i.e. + /// `::before` and `::after`). They inherit styles normally as another + /// selector would do. + /// + /// Non-eagerly cascaded ones skip the cascade process entirely, mostly as + /// an optimisation since they are private pseudo-elements (like + /// `::-servo-details-content`). This pseudo-elements are resolved on the + /// fly using global rules (rules of the form `*|*`), and applying them to + /// the parent style. + /// + /// If you're implementing a public selector that the end-user might + /// customize, then you probably need doing the whole cascading process and + /// return true in this function for that pseudo. + /// + /// But if you are implementing a private pseudo-element, please consider if + /// it might be possible to skip the cascade for it. + fn is_eagerly_cascaded_pseudo_element(pseudo: &<Self as SelectorImpl>::PseudoElement) -> bool; + + #[inline] + fn each_eagerly_cascaded_pseudo_element<F>(mut fun: F) + where F: FnMut(<Self as SelectorImpl>::PseudoElement) { + Self::each_pseudo_element(|pseudo| { + if Self::is_eagerly_cascaded_pseudo_element(&pseudo) { + fun(pseudo) + } + }) + } + + #[inline] + fn each_non_eagerly_cascaded_pseudo_element<F>(mut fun: F) + where F: FnMut(<Self as SelectorImpl>::PseudoElement) { + Self::each_pseudo_element(|pseudo| { + if !Self::is_eagerly_cascaded_pseudo_element(&pseudo) { + fun(pseudo) + } + }) + } + fn pseudo_class_state_flag(pc: &Self::NonTSPseudoClass) -> ElementState; fn get_user_or_user_agent_stylesheets() -> &'static [Stylesheet<Self>]; @@ -31,6 +74,19 @@ pub enum PseudoElement { DetailsContent, } +impl PseudoElement { + #[inline] + pub fn is_eagerly_cascaded(&self) -> bool { + match *self { + PseudoElement::Before | + PseudoElement::After | + PseudoElement::Selection | + PseudoElement::DetailsSummary => true, + PseudoElement::DetailsContent => false, + } + } +} + #[derive(Clone, Debug, PartialEq, Eq, HeapSizeOf, Hash)] pub enum NonTSPseudoClass { AnyLink, @@ -112,15 +168,17 @@ impl SelectorImpl for ServoSelectorImpl { "before" => Before, "after" => After, "selection" => Selection, - "-servo-details-summary" => if context.in_user_agent_stylesheet { + "-servo-details-summary" => { + if !context.in_user_agent_stylesheet { + return Err(()) + } DetailsSummary - } else { - return Err(()) }, - "-servo-details-content" => if context.in_user_agent_stylesheet { + "-servo-details-content" => { + if !context.in_user_agent_stylesheet { + return Err(()) + } DetailsContent - } else { - return Err(()) }, _ => return Err(()) }; @@ -129,15 +187,16 @@ impl SelectorImpl for ServoSelectorImpl { } } -impl<E: Element<Impl=ServoSelectorImpl>> ElementExt for E { - fn is_link(&self) -> bool { - self.match_non_ts_pseudo_class(NonTSPseudoClass::AnyLink) +impl SelectorImplExt for ServoSelectorImpl { + type ComputedValues = ServoComputedValues; + + #[inline] + fn is_eagerly_cascaded_pseudo_element(pseudo: &PseudoElement) -> bool { + pseudo.is_eagerly_cascaded() } -} -impl SelectorImplExt for ServoSelectorImpl { #[inline] - fn each_eagerly_cascaded_pseudo_element<F>(mut fun: F) + fn each_pseudo_element<F>(mut fun: F) where F: FnMut(PseudoElement) { fun(PseudoElement::Before); fun(PseudoElement::After); @@ -161,3 +220,9 @@ impl SelectorImplExt for ServoSelectorImpl { Some(&*QUIRKS_MODE_STYLESHEET) } } + +impl<E: Element<Impl=ServoSelectorImpl>> ElementExt for E { + fn is_link(&self) -> bool { + self.match_non_ts_pseudo_class(NonTSPseudoClass::AnyLink) + } +} diff --git a/components/style/selector_matching.rs b/components/style/selector_matching.rs index 167d3277c42..72fdec38e43 100644 --- a/components/style/selector_matching.rs +++ b/components/style/selector_matching.rs @@ -8,8 +8,9 @@ use dom::TElement; use element_state::*; use error_reporting::{ParseErrorReporter, StdoutErrorReporter}; +use euclid::Size2D; use media_queries::{Device, MediaType}; -use properties::{PropertyDeclaration, PropertyDeclarationBlock}; +use properties::{self, ComputedValues, PropertyDeclaration, PropertyDeclarationBlock}; use restyle_hints::{ElementSnapshot, RestyleHint, DependencySet}; use selector_impl::{SelectorImplExt, ServoSelectorImpl}; use selectors::Element; @@ -116,11 +117,20 @@ pub struct Stylist<Impl: SelectorImplExt> { /// The current selector maps, after evaluating media /// rules against the current device. element_map: PerPseudoElementSelectorMap<Impl>, + /// The selector maps corresponding to a given pseudo-element /// (depending on the implementation) pseudos_map: HashMap<Impl::PseudoElement, PerPseudoElementSelectorMap<Impl>, BuildHasherDefault<::fnv::FnvHasher>>, + + /// Applicable declarations for a given non-eagerly cascaded pseudo-element. + /// These are eagerly computed once, and then used to resolve the new + /// computed values on the fly on layout. + non_eagerly_cascaded_pseudo_element_decls: HashMap<Impl::PseudoElement, + Vec<DeclarationBlock>, + BuildHasherDefault<::fnv::FnvHasher>>, + rules_source_order: usize, /// Selector dependencies used to compute restyle hints. @@ -138,6 +148,7 @@ impl<Impl: SelectorImplExt> Stylist<Impl> { element_map: PerPseudoElementSelectorMap::new(), pseudos_map: HashMap::with_hasher(Default::default()), + non_eagerly_cascaded_pseudo_element_decls: HashMap::with_hasher(Default::default()), rules_source_order: 0, state_deps: DependencySet::new(), }; @@ -160,6 +171,11 @@ impl<Impl: SelectorImplExt> Stylist<Impl> { self.element_map = PerPseudoElementSelectorMap::new(); self.pseudos_map = HashMap::with_hasher(Default::default()); + Impl::each_eagerly_cascaded_pseudo_element(|pseudo| { + self.pseudos_map.insert(pseudo, PerPseudoElementSelectorMap::new()); + }); + + self.non_eagerly_cascaded_pseudo_element_decls = HashMap::with_hasher(Default::default()); self.rules_source_order = 0; self.state_deps.clear(); @@ -182,8 +198,7 @@ impl<Impl: SelectorImplExt> Stylist<Impl> { } fn add_stylesheet(&mut self, stylesheet: &Stylesheet<Impl>) { - let device = &self.device; - if !stylesheet.is_effective_for_device(device) { + if !stylesheet.is_effective_for_device(&self.device) { return; } let mut rules_source_order = self.rules_source_order; @@ -195,20 +210,21 @@ impl<Impl: SelectorImplExt> Stylist<Impl> { if !$style_rule.declarations.$priority.is_empty() { for selector in &$style_rule.selectors { let map = if let Some(ref pseudo) = selector.pseudo_element { - self.pseudos_map.entry(pseudo.clone()) - .or_insert_with(PerPseudoElementSelectorMap::new) - .borrow_for_origin(&stylesheet.origin) + self.pseudos_map + .entry(pseudo.clone()) + .or_insert_with(PerPseudoElementSelectorMap::new) + .borrow_for_origin(&stylesheet.origin) } else { self.element_map.borrow_for_origin(&stylesheet.origin) }; map.$priority.insert(Rule { - selector: selector.compound_selectors.clone(), - declarations: DeclarationBlock { - specificity: selector.specificity, - declarations: $style_rule.declarations.$priority.clone(), - source_order: rules_source_order, - }, + selector: selector.compound_selectors.clone(), + declarations: DeclarationBlock { + specificity: selector.specificity, + declarations: $style_rule.declarations.$priority.clone(), + source_order: rules_source_order, + }, }); } } @@ -223,7 +239,40 @@ impl<Impl: SelectorImplExt> Stylist<Impl> { self.state_deps.note_selector(selector.compound_selectors.clone()); } } + self.rules_source_order = rules_source_order; + + Impl::each_non_eagerly_cascaded_pseudo_element(|pseudo| { + // TODO: Don't precompute this, compute it on demand instead and + // cache it. + // + // This is actually kind of hard, because the stylist is shared + // between threads. + if let Some(map) = self.pseudos_map.remove(&pseudo) { + let mut declarations = vec![]; + + map.user_agent.normal.get_universal_rules(&mut declarations); + map.user_agent.important.get_universal_rules(&mut declarations); + + self.non_eagerly_cascaded_pseudo_element_decls.insert(pseudo, declarations); + } + }) + } + + pub fn computed_values_for_pseudo(&self, + pseudo: &Impl::PseudoElement, + parent: Option<&Arc<Impl::ComputedValues>>) -> Option<Arc<Impl::ComputedValues>> { + debug_assert!(!Impl::is_eagerly_cascaded_pseudo_element(pseudo)); + if let Some(declarations) = self.non_eagerly_cascaded_pseudo_element_decls.get(pseudo) { + let (computed, _) = + properties::cascade::<Impl::ComputedValues>(Size2D::zero(), + &declarations, false, + parent.map(|p| &**p), None, + box StdoutErrorReporter); + Some(Arc::new(computed)) + } else { + parent.map(|p| p.clone()) + } } pub fn compute_restyle_hint<E>(&self, element: &E, @@ -284,20 +333,16 @@ impl<Impl: SelectorImplExt> Stylist<Impl> { assert!(!self.is_device_dirty); assert!(style_attribute.is_none() || pseudo_element.is_none(), "Style attributes do not apply to pseudo-elements"); + debug_assert!(pseudo_element.is_none() || + Impl::is_eagerly_cascaded_pseudo_element(pseudo_element.as_ref().unwrap())); let map = match pseudo_element { - Some(ref pseudo) => match self.pseudos_map.get(pseudo) { - Some(map) => map, - // TODO(emilio): get non eagerly-cascaded pseudo-element rules here. - // Actually assume there are no rules applicable. - None => return true, - }, + Some(ref pseudo) => self.pseudos_map.get(pseudo).unwrap(), None => &self.element_map, }; let mut shareable = true; - // Step 1: Normal user-agent rules. map.user_agent.normal.get_all_matching_rules(element, parent_bf, diff --git a/components/style/servo.rs b/components/style/servo.rs index ec7044ad4a5..f5ce9d608b0 100644 --- a/components/style/servo.rs +++ b/components/style/servo.rs @@ -12,5 +12,4 @@ use stylesheets; pub type Stylesheet = stylesheets::Stylesheet<ServoSelectorImpl>; pub type PrivateStyleData = data::PrivateStyleData<ServoSelectorImpl, ServoComputedValues>; pub type Stylist = selector_matching::Stylist<ServoSelectorImpl>; -pub type StylistWrapper = context::StylistWrapper<ServoSelectorImpl>; pub type SharedStyleContext = context::SharedStyleContext<ServoSelectorImpl>; diff --git a/components/style/traversal.rs b/components/style/traversal.rs index f39347e83ab..c7ba825acbd 100644 --- a/components/style/traversal.rs +++ b/components/style/traversal.rs @@ -123,8 +123,8 @@ pub fn recalc_style_at<'a, N, C>(context: &'a C, root: OpaqueNode, node: N) where N: TNode, - C: StyleContext<'a, <N::ConcreteElement as Element>::Impl, N::ConcreteComputedValues>, - <N::ConcreteElement as Element>::Impl: SelectorImplExt + 'a { + C: StyleContext<'a, <N::ConcreteElement as Element>::Impl>, + <N::ConcreteElement as Element>::Impl: SelectorImplExt<ComputedValues=N::ConcreteComputedValues> + 'a { // Initialize layout data. // // FIXME(pcwalton): Stop allocating here. Ideally this should just be done by the HTML @@ -167,8 +167,9 @@ pub fn recalc_style_at<'a, N, C>(context: &'a C, let shareable_element = match node.as_element() { Some(element) => { // Perform the CSS selector matching. - let stylist = unsafe { &*context.shared_context().stylist.0 }; - if element.match_element(stylist, + let stylist = &context.shared_context().stylist; + + if element.match_element(&**stylist, Some(&*bf), &mut applicable_declarations) { Some(element) diff --git a/etc/ci/chaos_monkey_test.py b/etc/ci/chaos_monkey_test.py new file mode 100644 index 00000000000..124ecea1fbe --- /dev/null +++ b/etc/ci/chaos_monkey_test.py @@ -0,0 +1,50 @@ +# Copyright 2013 The Servo Project Developers. See the COPYRIGHT +# file at the top-level directory of this distribution. +# +# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +# option. This file may not be copied, modified, or distributed +# except according to those terms. + +from __future__ import absolute_import, print_function + +import json +import sys +from subprocess import Popen, PIPE + + +TEST_CMD = [ + "./mach", + "test-wpt", + "--release", + "--processes=24", + "--binary-arg=--random-pipeline-closure-probability=0.1", + "--binary-arg=--random-pipeline-closure-seed=123", + "--binary-arg=--multiprocess", + "--binary-arg=--soft-fail", + "--log-raw=-", + # We run the content-security-policy test because it creates + # cross-origin iframes, which are good for stress-testing pipelines + "content-security-policy" +] + +# Note that there will probably be test failures caused +# by random pipeline closure, so we ignore the status code +# returned by the test command (which is why we can't use check_output). + +test_results = Popen(TEST_CMD, stdout=PIPE) +any_crashes = False + +for line in test_results.stdout: + report = json.loads(line.decode('utf-8')) + if report.get("action") == "process_output": + print("{} - {}".format(report.get("thread"), report.get("data"))) + status = report.get("status") + if status: + print("{} - {} - {}".format(report.get("thread"), status, report.get("test"))) + if status == "CRASH": + any_crashes = True + +if any_crashes: + sys.exit(1) diff --git a/etc/ci/check_no_unwrap.sh b/etc/ci/check_no_unwrap.sh index bbf5eabce88..c2a35d06674 100755 --- a/etc/ci/check_no_unwrap.sh +++ b/etc/ci/check_no_unwrap.sh @@ -12,4 +12,4 @@ FILES=("components/compositing/compositor.rs" "components/compositing/pipeline.rs" "components/compositing/constellation.rs") -! grep -n "unwrap(" "${FILES[@]}" +! grep -n "unwrap(\|panic!(" "${FILES[@]}" diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index dd47a33ba88..f457cea3789 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -4,7 +4,7 @@ version = "0.0.1" dependencies = [ "azure 0.4.3 (git+https://github.com/servo/rust-azure)", "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "cocoa 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cocoa 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "compositing 0.0.1", "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -16,8 +16,8 @@ dependencies = [ "glutin_app 0.0.1", "js 0.1.2 (git+https://github.com/servo/rust-mozjs)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "objc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -50,7 +50,7 @@ name = "angle" version = "0.1.0" source = "git+https://github.com/emilio/angle?branch=servo#eefe3506ae13e8ace811ca544fd6b4a5f0db0a04" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -92,7 +92,7 @@ dependencies = [ "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -110,7 +110,7 @@ dependencies = [ "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -119,7 +119,7 @@ name = "backtrace-sys" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -144,6 +144,11 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] +name = "bitflags" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] name = "block" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -173,7 +178,7 @@ dependencies = [ "gfx_traits 0.0.1", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", @@ -218,7 +223,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -253,12 +258,12 @@ dependencies = [ [[package]] name = "cocoa" -version = "0.3.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "objc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -286,7 +291,7 @@ dependencies = [ "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout_traits 0.0.1", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", @@ -322,7 +327,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -330,7 +335,7 @@ name = "core-foundation-sys" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -339,7 +344,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -350,7 +355,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -451,7 +456,7 @@ name = "dylib" version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -521,10 +526,10 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -535,7 +540,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -556,7 +561,7 @@ name = "flate2" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "miniz-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -570,7 +575,7 @@ name = "freetype" version = "0.1.0" source = "git+https://github.com/servo/rust-freetype#d564ff90a3c69d987f5c015d7ec034cfaee21aff" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -579,7 +584,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -597,8 +602,8 @@ name = "gaol" version = "0.0.1" source = "git+https://github.com/servo/gaol#cbb2518029901f078f871a87ebe05cf96d727713" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -640,8 +645,8 @@ dependencies = [ "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", @@ -656,7 +661,7 @@ dependencies = [ "servo-skia 0.20130412.6 (registry+https://github.com/rust-lang/crates.io-index)", "simd 0.1.0 (git+https://github.com/huonw/simd)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", @@ -696,7 +701,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "xml-rs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -710,7 +715,7 @@ dependencies = [ [[package]] name = "glob" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -726,7 +731,7 @@ dependencies = [ "net_traits 0.0.1", "script_traits 0.0.1", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "servo-glutin 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)", + "servo-glutin 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", @@ -740,7 +745,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gl_generator 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -748,7 +753,7 @@ name = "harfbuzz-sys" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -766,7 +771,7 @@ name = "hbs-common-sys" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -775,7 +780,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hbs-pow-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -785,7 +790,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hbs-builder 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "hbs-common-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -806,7 +811,7 @@ name = "hpack" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -816,12 +821,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -839,7 +844,7 @@ dependencies = [ "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -871,10 +876,10 @@ dependencies = [ "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "enum_primitive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "gif 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glob 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "jpeg-decoder 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "jpeg-decoder 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "png 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "png 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -889,7 +894,7 @@ dependencies = [ [[package]] name = "inflate" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -902,7 +907,7 @@ dependencies = [ "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "leaky-cow 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -913,7 +918,7 @@ dependencies = [ "bincode 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -922,12 +927,12 @@ dependencies = [ [[package]] name = "jpeg-decoder" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -937,8 +942,8 @@ version = "0.1.2" source = "git+https://github.com/servo/rust-mozjs#efe805affa75d776316e9ea6113f85cdad1e82ed" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mozjs_sys 0.0.0 (git+https://github.com/servo/mozjs)", "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -977,8 +982,8 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "io-surface 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "servo-skia 0.20130412.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1002,8 +1007,8 @@ dependencies = [ "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layout_traits 0.0.1", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "plugins 0.0.1", @@ -1012,11 +1017,11 @@ dependencies = [ "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "script 0.0.1", "script_traits 0.0.1", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1064,7 +1069,7 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.4" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1091,17 +1096,14 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "log" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "lzw" @@ -1123,7 +1125,7 @@ name = "malloc_buf" version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1136,7 +1138,7 @@ name = "memchr" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1146,7 +1148,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fs2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1155,7 +1157,7 @@ name = "mime" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1175,7 +1177,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1183,7 +1185,7 @@ name = "mozjs_sys" version = "0.0.0" source = "git+https://github.com/servo/mozjs#3122a1e1a80b78377ae1ce8e7edd4ad3bcbb3d65" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "libz-sys 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1219,7 +1221,7 @@ dependencies = [ "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "immeta 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1246,7 +1248,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1261,7 +1263,7 @@ dependencies = [ "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1351,7 +1353,7 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1397,7 +1399,7 @@ dependencies = [ "gl_generator 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "x11 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1411,7 +1413,7 @@ dependencies = [ "bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "gcc 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys-extras 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1422,7 +1424,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gdi32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "libressl-pnacl-sys 2.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "user32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1434,7 +1436,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1443,7 +1445,7 @@ name = "osmesa-sys" version = "0.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "shared_library 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1509,14 +1511,14 @@ dependencies = [ [[package]] name = "png" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "inflate 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "inflate 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1525,8 +1527,8 @@ version = "0.0.1" dependencies = [ "hbs-pow 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "profile_traits 0.0.1", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1584,7 +1586,7 @@ name = "rand" version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1679,8 +1681,8 @@ dependencies = [ "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "js 0.1.2 (git+https://github.com/servo/rust-mozjs)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1695,10 +1697,10 @@ dependencies = [ "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "script_traits 0.0.1", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1722,7 +1724,7 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1738,10 +1740,10 @@ dependencies = [ [[package]] name = "selectors" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1749,7 +1751,7 @@ dependencies = [ "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "quickersort 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1800,7 +1802,7 @@ dependencies = [ "compositing 0.0.1", "devtools 0.0.1", "devtools_traits 0.0.1", - "env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gaol 0.0.1 (git+https://github.com/servo/gaol)", "gfx 0.0.1", @@ -1809,8 +1811,8 @@ dependencies = [ "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout 0.0.1", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net 0.0.1", "net_traits 0.0.1", @@ -1831,7 +1833,7 @@ name = "servo-egl" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1839,7 +1841,7 @@ name = "servo-fontconfig" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "servo-fontconfig-sys 2.11.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1863,12 +1865,12 @@ dependencies = [ [[package]] name = "servo-glutin" -version = "0.4.15" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "android_glue 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "cocoa 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cocoa 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "dwmapi-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1876,7 +1878,7 @@ dependencies = [ "gl_generator 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "objc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "osmesa-sys 0.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "shared_library 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1900,11 +1902,11 @@ dependencies = [ "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "io-surface 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "servo-fontconfig 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "servo-freetype-sys 2.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "servo-glutin 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)", + "servo-glutin 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", "x11 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1914,7 +1916,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1942,12 +1944,12 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hpack 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "string_cache" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "debug_unreachable 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1972,16 +1974,16 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1997,10 +1999,10 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2028,7 +2030,7 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2061,7 +2063,7 @@ version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2071,7 +2073,7 @@ name = "tinyfiledialogs" version = "0.1.0" source = "git+https://github.com/jdm/tinyfiledialogs#2d2285985db1168da4d516000f24842aba46fd94" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2173,8 +2175,8 @@ dependencies = [ "js 0.1.2 (git+https://github.com/servo/rust-mozjs)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", @@ -2183,7 +2185,7 @@ dependencies = [ "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2207,7 +2209,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "wayland-scanner 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)", "wayland-sys 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2257,7 +2259,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2270,7 +2272,7 @@ dependencies = [ "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "plugins 0.0.1", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2296,7 +2298,7 @@ dependencies = [ "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "scoped_threadpool 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2360,7 +2362,7 @@ name = "x11" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2370,7 +2372,7 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dylib 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2394,12 +2396,12 @@ name = "xml5ever" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/ports/geckolib/Cargo.lock b/ports/geckolib/Cargo.lock index aca096bd784..bdb596ceafa 100644 --- a/ports/geckolib/Cargo.lock +++ b/ports/geckolib/Cargo.lock @@ -9,13 +9,13 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", @@ -48,7 +48,7 @@ dependencies = [ "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -57,7 +57,7 @@ name = "backtrace-sys" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -82,6 +82,11 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] +name = "bitflags" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] name = "byteorder" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -193,7 +198,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -241,7 +246,7 @@ dependencies = [ "bincode 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -264,16 +269,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" -version = "0.2.4" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "log" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "matches" @@ -352,7 +354,7 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -412,7 +414,7 @@ name = "rand" version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -422,10 +424,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "selectors" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -433,7 +435,7 @@ dependencies = [ "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "quickersort 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -466,7 +468,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "string_cache" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "debug_unreachable 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -491,16 +493,16 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -516,10 +518,10 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -537,7 +539,7 @@ version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -590,8 +592,8 @@ dependencies = [ "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", @@ -600,7 +602,7 @@ dependencies = [ "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/ports/geckolib/bindings.rs b/ports/geckolib/bindings.rs index a3640f775bd..16724678a80 100644 --- a/ports/geckolib/bindings.rs +++ b/ports/geckolib/bindings.rs @@ -1,5 +1,6 @@ /* automatically generated by rust-bindgen */ +use gecko_style_structs::SheetParsingMode; use gecko_style_structs::nsStyleFont; use gecko_style_structs::nsStyleColor; use gecko_style_structs::nsStyleList; @@ -68,7 +69,8 @@ extern "C" { pub fn Gecko_SetNodeData(node: *mut RawGeckoNode, data: *mut ServoNodeData); pub fn Servo_DropNodeData(data: *mut ServoNodeData); - pub fn Servo_StylesheetFromUTF8Bytes(bytes: *const u8, length: u32) + pub fn Servo_StylesheetFromUTF8Bytes(bytes: *const u8, length: u32, + parsing_mode: SheetParsingMode) -> *mut RawServoStyleSheet; pub fn Servo_AddRefStyleSheet(sheet: *mut RawServoStyleSheet); pub fn Servo_ReleaseStyleSheet(sheet: *mut RawServoStyleSheet); @@ -96,6 +98,8 @@ extern "C" { pub fn Gecko_GetAttrAsUTF8(element: *mut RawGeckoElement, ns: *const u8, name: *const u8, length: *mut u32) -> *const ::std::os::raw::c_char; + pub fn Gecko_GetAtomAsUTF16(atom: *mut nsIAtom, length: *mut u32) + -> *const u16; pub fn Gecko_LocalName(element: *mut RawGeckoElement, length: *mut u32) -> *const u16; pub fn Gecko_Namespace(element: *mut RawGeckoElement, length: *mut u32) @@ -106,23 +110,33 @@ extern "C" { pub fn Gecko_CopyConstruct_nsStyleFont(ptr: *mut nsStyleFont, other: *const nsStyleFont); pub fn Gecko_Destroy_nsStyleFont(ptr: *mut nsStyleFont); + pub fn Servo_GetStyleFont(computedValues: *mut ServoComputedValues) + -> *const nsStyleFont; pub fn Gecko_Construct_nsStyleColor(ptr: *mut nsStyleColor); pub fn Gecko_CopyConstruct_nsStyleColor(ptr: *mut nsStyleColor, other: *const nsStyleColor); pub fn Gecko_Destroy_nsStyleColor(ptr: *mut nsStyleColor); + pub fn Servo_GetStyleColor(computedValues: *mut ServoComputedValues) + -> *const nsStyleColor; pub fn Gecko_Construct_nsStyleList(ptr: *mut nsStyleList); pub fn Gecko_CopyConstruct_nsStyleList(ptr: *mut nsStyleList, other: *const nsStyleList); pub fn Gecko_Destroy_nsStyleList(ptr: *mut nsStyleList); + pub fn Servo_GetStyleList(computedValues: *mut ServoComputedValues) + -> *const nsStyleList; pub fn Gecko_Construct_nsStyleText(ptr: *mut nsStyleText); pub fn Gecko_CopyConstruct_nsStyleText(ptr: *mut nsStyleText, other: *const nsStyleText); pub fn Gecko_Destroy_nsStyleText(ptr: *mut nsStyleText); + pub fn Servo_GetStyleText(computedValues: *mut ServoComputedValues) + -> *const nsStyleText; pub fn Gecko_Construct_nsStyleVisibility(ptr: *mut nsStyleVisibility); pub fn Gecko_CopyConstruct_nsStyleVisibility(ptr: *mut nsStyleVisibility, other: *const nsStyleVisibility); pub fn Gecko_Destroy_nsStyleVisibility(ptr: *mut nsStyleVisibility); + pub fn Servo_GetStyleVisibility(computedValues: *mut ServoComputedValues) + -> *const nsStyleVisibility; pub fn Gecko_Construct_nsStyleUserInterface(ptr: *mut nsStyleUserInterface); pub fn Gecko_CopyConstruct_nsStyleUserInterface(ptr: @@ -130,81 +144,120 @@ extern "C" { other: *const nsStyleUserInterface); pub fn Gecko_Destroy_nsStyleUserInterface(ptr: *mut nsStyleUserInterface); + pub fn Servo_GetStyleUserInterface(computedValues: + *mut ServoComputedValues) + -> *const nsStyleUserInterface; pub fn Gecko_Construct_nsStyleTableBorder(ptr: *mut nsStyleTableBorder); pub fn Gecko_CopyConstruct_nsStyleTableBorder(ptr: *mut nsStyleTableBorder, other: *const nsStyleTableBorder); pub fn Gecko_Destroy_nsStyleTableBorder(ptr: *mut nsStyleTableBorder); + pub fn Servo_GetStyleTableBorder(computedValues: *mut ServoComputedValues) + -> *const nsStyleTableBorder; pub fn Gecko_Construct_nsStyleSVG(ptr: *mut nsStyleSVG); pub fn Gecko_CopyConstruct_nsStyleSVG(ptr: *mut nsStyleSVG, other: *const nsStyleSVG); pub fn Gecko_Destroy_nsStyleSVG(ptr: *mut nsStyleSVG); + pub fn Servo_GetStyleSVG(computedValues: *mut ServoComputedValues) + -> *const nsStyleSVG; pub fn Gecko_Construct_nsStyleVariables(ptr: *mut nsStyleVariables); pub fn Gecko_CopyConstruct_nsStyleVariables(ptr: *mut nsStyleVariables, other: *const nsStyleVariables); pub fn Gecko_Destroy_nsStyleVariables(ptr: *mut nsStyleVariables); + pub fn Servo_GetStyleVariables(computedValues: *mut ServoComputedValues) + -> *const nsStyleVariables; pub fn Gecko_Construct_nsStyleBackground(ptr: *mut nsStyleBackground); pub fn Gecko_CopyConstruct_nsStyleBackground(ptr: *mut nsStyleBackground, other: *const nsStyleBackground); pub fn Gecko_Destroy_nsStyleBackground(ptr: *mut nsStyleBackground); + pub fn Servo_GetStyleBackground(computedValues: *mut ServoComputedValues) + -> *const nsStyleBackground; pub fn Gecko_Construct_nsStylePosition(ptr: *mut nsStylePosition); pub fn Gecko_CopyConstruct_nsStylePosition(ptr: *mut nsStylePosition, other: *const nsStylePosition); pub fn Gecko_Destroy_nsStylePosition(ptr: *mut nsStylePosition); + pub fn Servo_GetStylePosition(computedValues: *mut ServoComputedValues) + -> *const nsStylePosition; pub fn Gecko_Construct_nsStyleTextReset(ptr: *mut nsStyleTextReset); pub fn Gecko_CopyConstruct_nsStyleTextReset(ptr: *mut nsStyleTextReset, other: *const nsStyleTextReset); pub fn Gecko_Destroy_nsStyleTextReset(ptr: *mut nsStyleTextReset); + pub fn Servo_GetStyleTextReset(computedValues: *mut ServoComputedValues) + -> *const nsStyleTextReset; pub fn Gecko_Construct_nsStyleDisplay(ptr: *mut nsStyleDisplay); pub fn Gecko_CopyConstruct_nsStyleDisplay(ptr: *mut nsStyleDisplay, other: *const nsStyleDisplay); pub fn Gecko_Destroy_nsStyleDisplay(ptr: *mut nsStyleDisplay); + pub fn Servo_GetStyleDisplay(computedValues: *mut ServoComputedValues) + -> *const nsStyleDisplay; pub fn Gecko_Construct_nsStyleContent(ptr: *mut nsStyleContent); pub fn Gecko_CopyConstruct_nsStyleContent(ptr: *mut nsStyleContent, other: *const nsStyleContent); pub fn Gecko_Destroy_nsStyleContent(ptr: *mut nsStyleContent); + pub fn Servo_GetStyleContent(computedValues: *mut ServoComputedValues) + -> *const nsStyleContent; pub fn Gecko_Construct_nsStyleUIReset(ptr: *mut nsStyleUIReset); pub fn Gecko_CopyConstruct_nsStyleUIReset(ptr: *mut nsStyleUIReset, other: *const nsStyleUIReset); pub fn Gecko_Destroy_nsStyleUIReset(ptr: *mut nsStyleUIReset); + pub fn Servo_GetStyleUIReset(computedValues: *mut ServoComputedValues) + -> *const nsStyleUIReset; pub fn Gecko_Construct_nsStyleTable(ptr: *mut nsStyleTable); pub fn Gecko_CopyConstruct_nsStyleTable(ptr: *mut nsStyleTable, other: *const nsStyleTable); pub fn Gecko_Destroy_nsStyleTable(ptr: *mut nsStyleTable); + pub fn Servo_GetStyleTable(computedValues: *mut ServoComputedValues) + -> *const nsStyleTable; pub fn Gecko_Construct_nsStyleMargin(ptr: *mut nsStyleMargin); pub fn Gecko_CopyConstruct_nsStyleMargin(ptr: *mut nsStyleMargin, other: *const nsStyleMargin); pub fn Gecko_Destroy_nsStyleMargin(ptr: *mut nsStyleMargin); + pub fn Servo_GetStyleMargin(computedValues: *mut ServoComputedValues) + -> *const nsStyleMargin; pub fn Gecko_Construct_nsStylePadding(ptr: *mut nsStylePadding); pub fn Gecko_CopyConstruct_nsStylePadding(ptr: *mut nsStylePadding, other: *const nsStylePadding); pub fn Gecko_Destroy_nsStylePadding(ptr: *mut nsStylePadding); + pub fn Servo_GetStylePadding(computedValues: *mut ServoComputedValues) + -> *const nsStylePadding; pub fn Gecko_Construct_nsStyleBorder(ptr: *mut nsStyleBorder); pub fn Gecko_CopyConstruct_nsStyleBorder(ptr: *mut nsStyleBorder, other: *const nsStyleBorder); pub fn Gecko_Destroy_nsStyleBorder(ptr: *mut nsStyleBorder); + pub fn Servo_GetStyleBorder(computedValues: *mut ServoComputedValues) + -> *const nsStyleBorder; pub fn Gecko_Construct_nsStyleOutline(ptr: *mut nsStyleOutline); pub fn Gecko_CopyConstruct_nsStyleOutline(ptr: *mut nsStyleOutline, other: *const nsStyleOutline); pub fn Gecko_Destroy_nsStyleOutline(ptr: *mut nsStyleOutline); + pub fn Servo_GetStyleOutline(computedValues: *mut ServoComputedValues) + -> *const nsStyleOutline; pub fn Gecko_Construct_nsStyleXUL(ptr: *mut nsStyleXUL); pub fn Gecko_CopyConstruct_nsStyleXUL(ptr: *mut nsStyleXUL, other: *const nsStyleXUL); pub fn Gecko_Destroy_nsStyleXUL(ptr: *mut nsStyleXUL); + pub fn Servo_GetStyleXUL(computedValues: *mut ServoComputedValues) + -> *const nsStyleXUL; pub fn Gecko_Construct_nsStyleSVGReset(ptr: *mut nsStyleSVGReset); pub fn Gecko_CopyConstruct_nsStyleSVGReset(ptr: *mut nsStyleSVGReset, other: *const nsStyleSVGReset); pub fn Gecko_Destroy_nsStyleSVGReset(ptr: *mut nsStyleSVGReset); + pub fn Servo_GetStyleSVGReset(computedValues: *mut ServoComputedValues) + -> *const nsStyleSVGReset; pub fn Gecko_Construct_nsStyleColumn(ptr: *mut nsStyleColumn); pub fn Gecko_CopyConstruct_nsStyleColumn(ptr: *mut nsStyleColumn, other: *const nsStyleColumn); pub fn Gecko_Destroy_nsStyleColumn(ptr: *mut nsStyleColumn); + pub fn Servo_GetStyleColumn(computedValues: *mut ServoComputedValues) + -> *const nsStyleColumn; pub fn Gecko_Construct_nsStyleEffects(ptr: *mut nsStyleEffects); pub fn Gecko_CopyConstruct_nsStyleEffects(ptr: *mut nsStyleEffects, other: *const nsStyleEffects); pub fn Gecko_Destroy_nsStyleEffects(ptr: *mut nsStyleEffects); + pub fn Servo_GetStyleEffects(computedValues: *mut ServoComputedValues) + -> *const nsStyleEffects; } diff --git a/ports/geckolib/data.rs b/ports/geckolib/data.rs index bc1c398e6c0..733d5e4f83f 100644 --- a/ports/geckolib/data.rs +++ b/ports/geckolib/data.rs @@ -22,7 +22,7 @@ use util::workqueue::WorkQueue; pub struct PerDocumentStyleData { /// Rule processor. - pub stylist: Stylist, + pub stylist: Arc<Stylist>, /// List of stylesheets, mirrored from Gecko. pub stylesheets: Vec<Arc<Stylesheet>>, @@ -50,8 +50,8 @@ impl PerDocumentStyleData { let num_threads = cmp::max(num_cpus::get() * 3 / 4, 1); PerDocumentStyleData { - stylist: Stylist::new(device), - stylesheets: Vec::new(), + stylist: Arc::new(Stylist::new(device)), + stylesheets: vec![], stylesheets_changed: true, new_animations_sender: new_anims_sender, new_animations_receiver: new_anims_receiver, diff --git a/ports/geckolib/gecko_style_structs.rs b/ports/geckolib/gecko_style_structs.rs index 114fe03b2b6..f5807afd5e9 100644 --- a/ports/geckolib/gecko_style_structs.rs +++ b/ports/geckolib/gecko_style_structs.rs @@ -3986,6 +3986,34 @@ fn bindgen_test_layout_CounterStyleManager() { assert_eq!(::std::mem::size_of::<CounterStyleManager>() , 72usize); assert_eq!(::std::mem::align_of::<CounterStyleManager>() , 8usize); } +/** + * Enum defining the mode in which a sheet is to be parsed. This is + * usually, but not always, the same as the cascade level at which the + * sheet will apply (see nsStyleSet.h). Most of the Loader APIs only + * support loading of author sheets. + * + * Author sheets are the normal case: styles embedded in or linked + * from HTML pages. They are also the most restricted. + * + * User sheets can do anything author sheets can do, and also get + * access to a few CSS extensions that are not yet suitable for + * exposure on the public Web, but are very useful for expressing + * user style overrides, such as @-moz-document rules. + * + * Agent sheets have access to all author- and user-sheet features + * plus more extensions that are necessary for internal use but, + * again, not yet suitable for exposure on the public Web. Some of + * these are outright unsafe to expose; in particular, incorrect + * styling of anonymous box pseudo-elements can violate layout + * invariants. + */ +#[repr(u32)] +#[derive(Debug, Copy, Clone)] +pub enum SheetParsingMode { + eAuthorSheetFeatures = 0, + eUserSheetFeatures = 1, + eAgentSheetFeatures = 2, +} pub type nsLoadFlags = u32; #[repr(C)] #[derive(Debug, Copy)] diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index d4bfc62b9d6..27edf4ed357 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -10,16 +10,17 @@ use bindings::{RawServoStyleSet, RawServoStyleSheet, ServoComputedValues, ServoN use bindings::{nsIAtom}; use data::PerDocumentStyleData; use euclid::Size2D; +use gecko_style_structs::SheetParsingMode; use properties::GeckoComputedValues; -use selector_impl::{SharedStyleContext, Stylesheet}; +use selector_impl::{GeckoSelectorImpl, PseudoElement, SharedStyleContext, Stylesheet}; use std::marker::PhantomData; use std::mem::{forget, transmute}; use std::ptr; use std::slice; use std::str::from_utf8_unchecked; use std::sync::{Arc, Mutex}; -use style::context::{ReflowGoal, StylistWrapper}; -use style::dom::{TDocument, TElement, TNode}; +use style::context::{ReflowGoal}; +use style::dom::{TDocument, TNode}; use style::error_reporting::StdoutErrorReporter; use style::parallel; use style::properties::ComputedValues; @@ -27,7 +28,30 @@ use style::stylesheets::Origin; use traversal::RecalcStyleOnly; use url::Url; use util::arc_ptr_eq; -use wrapper::{GeckoDocument, GeckoElement, GeckoNode, NonOpaqueStyleData}; +use wrapper::{GeckoDocument, GeckoNode, NonOpaqueStyleData}; + +// TODO: This is ugly and should go away once we get an atom back-end. +pub fn pseudo_element_from_atom(pseudo: *mut nsIAtom, + in_ua_stylesheet: bool) -> Result<PseudoElement, String> { + use bindings::Gecko_GetAtomAsUTF16; + use selectors::parser::{ParserContext, SelectorImpl}; + + let pseudo_string = unsafe { + let mut length = 0; + let mut buff = Gecko_GetAtomAsUTF16(pseudo, &mut length); + + // Handle the annoying preceding colon in front of everything in nsCSSAnonBoxList.h. + debug_assert!(length >= 2 && *buff == ':' as u16 && *buff.offset(1) != ':' as u16); + buff = buff.offset(1); + length -= 1; + + String::from_utf16(slice::from_raw_parts(buff, length as usize)).unwrap() + }; + + let mut context = ParserContext::new(); + context.in_user_agent_stylesheet = in_ua_stylesheet; + GeckoSelectorImpl::parse_pseudo_element(&context, &pseudo_string).map_err(|_| pseudo_string) +} /* * For Gecko->Servo function calls, we need to redeclare the same signature that was declared in @@ -51,7 +75,8 @@ pub extern "C" fn Servo_RestyleDocument(doc: *mut RawGeckoDocument, raw_data: *m // into a runtime-wide init hook at some point. GeckoComputedValues::initial_values(); - let _needs_dirtying = data.stylist.update(&data.stylesheets, data.stylesheets_changed); + let _needs_dirtying = Arc::get_mut(&mut data.stylist).unwrap() + .update(&data.stylesheets, data.stylesheets_changed); data.stylesheets_changed = false; let shared_style_context = SharedStyleContext { @@ -59,7 +84,7 @@ pub extern "C" fn Servo_RestyleDocument(doc: *mut RawGeckoDocument, raw_data: *m screen_size_changed: false, generation: 0, goal: ReflowGoal::ForScriptQuery, - stylist: StylistWrapper(&data.stylist), + stylist: data.stylist.clone(), new_animations_sender: Mutex::new(data.new_animations_sender.clone()), running_animations: data.running_animations.clone(), expired_animations: data.expired_animations.clone(), @@ -80,13 +105,20 @@ pub extern "C" fn Servo_DropNodeData(data: *mut ServoNodeData) -> () { #[no_mangle] pub extern "C" fn Servo_StylesheetFromUTF8Bytes(bytes: *const u8, - length: u32) -> *mut RawServoStyleSheet { + length: u32, + mode: SheetParsingMode) -> *mut RawServoStyleSheet { let input = unsafe { from_utf8_unchecked(slice::from_raw_parts(bytes, length as usize)) }; - // FIXME(heycam): Pass in the real base URL and sheet origin to use. + let origin = match mode { + SheetParsingMode::eAuthorSheetFeatures => Origin::Author, + SheetParsingMode::eUserSheetFeatures => Origin::User, + SheetParsingMode::eAgentSheetFeatures => Origin::UserAgent, + }; + + // FIXME(heycam): Pass in the real base URL. let url = Url::parse("about:none").unwrap(); - let sheet = Arc::new(Stylesheet::from_str(input, url, Origin::Author, Box::new(StdoutErrorReporter))); + let sheet = Arc::new(Stylesheet::from_str(input, url, origin, Box::new(StdoutErrorReporter))); unsafe { transmute(sheet) } @@ -97,19 +129,40 @@ pub struct ArcHelpers<GeckoType, ServoType> { phantom2: PhantomData<ServoType>, } + impl<GeckoType, ServoType> ArcHelpers<GeckoType, ServoType> { pub fn with<F, Output>(raw: *mut GeckoType, cb: F) -> Output where F: FnOnce(&Arc<ServoType>) -> Output { + debug_assert!(!raw.is_null()); + let owned = unsafe { Self::into(raw) }; let result = cb(&owned); forget(owned); result } + pub fn maybe_with<F, Output>(maybe_raw: *mut GeckoType, cb: F) -> Output + where F: FnOnce(Option<&Arc<ServoType>>) -> Output { + let owned = if maybe_raw.is_null() { + None + } else { + Some(unsafe { Self::into(maybe_raw) }) + }; + + let result = cb(owned.as_ref()); + forget(owned); + + result + } + pub unsafe fn into(ptr: *mut GeckoType) -> Arc<ServoType> { transmute(ptr) } + pub fn from(owned: Arc<ServoType>) -> *mut GeckoType { + unsafe { transmute(owned) } + } + pub unsafe fn addref(ptr: *mut GeckoType) { Self::with(ptr, |arc| forget(arc.clone())); } @@ -197,12 +250,26 @@ pub extern "C" fn Servo_GetComputedValues(node: *mut RawGeckoNode) } #[no_mangle] -pub extern "C" fn Servo_GetComputedValuesForAnonymousBox(_parentStyleOrNull: *mut ServoComputedValues, - _pseudoTag: *mut nsIAtom, +pub extern "C" fn Servo_GetComputedValuesForAnonymousBox(parent_style_or_null: *mut ServoComputedValues, + pseudo_tag: *mut nsIAtom, raw_data: *mut RawServoStyleSet) -> *mut ServoComputedValues { - let _data = PerDocumentStyleData::borrow_mut_from_raw(raw_data); - unimplemented!(); + let data = PerDocumentStyleData::borrow_mut_from_raw(raw_data); + + let pseudo = match pseudo_element_from_atom(pseudo_tag, true) { + Ok(pseudo) => pseudo, + Err(pseudo) => { + warn!("stylo: Unable to parse anonymous-box pseudo-element: {}", pseudo); + return ptr::null_mut(); + } + }; + + type Helpers = ArcHelpers<ServoComputedValues, GeckoComputedValues>; + + Helpers::maybe_with(parent_style_or_null, |maybe_parent| { + let new_computed = data.stylist.computed_values_for_pseudo(&pseudo, maybe_parent); + new_computed.map_or(ptr::null_mut(), |c| Helpers::from(c)) + }) } #[no_mangle] diff --git a/ports/geckolib/selector_impl.rs b/ports/geckolib/selector_impl.rs index d892b68ca31..03803563443 100644 --- a/ports/geckolib/selector_impl.rs +++ b/ports/geckolib/selector_impl.rs @@ -151,14 +151,24 @@ impl SelectorImpl for GeckoSelectorImpl { Ok(pseudo_class) } - fn parse_pseudo_element(_context: &ParserContext, + fn parse_pseudo_element(context: &ParserContext, name: &str) -> Result<PseudoElement, ()> { use self::PseudoElement::*; - let pseudo_element = match_ignore_ascii_case! { name, - "before" => Before, - "after" => After, - "first-line" => FirstLine, + // The braces here are unfortunate, but they're needed for + // match_ignore_ascii_case! to work as expected. + match_ignore_ascii_case! { name, + "before" => { return Ok(Before) }, + "after" => { return Ok(After) }, + "first-line" => { return Ok(FirstLine) }, + _ => {} + } + + if !context.in_user_agent_stylesheet { + return Err(()) + } + + Ok(match_ignore_ascii_case! { name, "-moz-non-element" => MozNonElement, "-moz-anonymous-block" => MozAnonymousBlock, @@ -225,19 +235,94 @@ impl SelectorImpl for GeckoSelectorImpl { "-moz-svg-text" => MozSVGText, _ => return Err(()) - }; - - Ok(pseudo_element) + }) } } impl SelectorImplExt for GeckoSelectorImpl { + type ComputedValues = GeckoComputedValues; + + #[inline] + fn is_eagerly_cascaded_pseudo_element(pseudo: &PseudoElement) -> bool { + match *pseudo { + PseudoElement::Before | + PseudoElement::After | + PseudoElement::FirstLine => true, + _ => false, + } + } + #[inline] - fn each_eagerly_cascaded_pseudo_element<F>(mut fun: F) + fn each_pseudo_element<F>(mut fun: F) where F: FnMut(PseudoElement) { fun(PseudoElement::Before); fun(PseudoElement::After); - // TODO: probably a lot more are missing here + fun(PseudoElement::FirstLine); + + fun(PseudoElement::MozNonElement); + fun(PseudoElement::MozAnonymousBlock); + fun(PseudoElement::MozAnonymousPositionedBlock); + fun(PseudoElement::MozMathMLAnonymousBlock); + fun(PseudoElement::MozXULAnonymousBlock); + + fun(PseudoElement::MozHorizontalFramesetBorder); + fun(PseudoElement::MozVerticalFramesetBorder); + fun(PseudoElement::MozLineFrame); + fun(PseudoElement::MozButtonContent); + fun(PseudoElement::MozButtonLabel); + fun(PseudoElement::MozCellContent); + fun(PseudoElement::MozDropdownList); + fun(PseudoElement::MozFieldsetContent); + fun(PseudoElement::MozFramesetBlank); + fun(PseudoElement::MozDisplayComboboxControlFrame); + + fun(PseudoElement::MozHTMLCanvasContent); + fun(PseudoElement::MozInlineTable); + fun(PseudoElement::MozTable); + fun(PseudoElement::MozTableCell); + fun(PseudoElement::MozTableColumnGroup); + fun(PseudoElement::MozTableColumn); + fun(PseudoElement::MozTableOuter); + fun(PseudoElement::MozTableRowGroup); + fun(PseudoElement::MozTableRow); + + fun(PseudoElement::MozCanvas); + fun(PseudoElement::MozPageBreak); + fun(PseudoElement::MozPage); + fun(PseudoElement::MozPageContent); + fun(PseudoElement::MozPageSequence); + fun(PseudoElement::MozScrolledContent); + fun(PseudoElement::MozScrolledCanvas); + fun(PseudoElement::MozScrolledPageSequence); + fun(PseudoElement::MozColumnContent); + fun(PseudoElement::MozViewport); + fun(PseudoElement::MozViewportScroll); + fun(PseudoElement::MozAnonymousFlexItem); + fun(PseudoElement::MozAnonymousGridItem); + + fun(PseudoElement::MozRuby); + fun(PseudoElement::MozRubyBase); + fun(PseudoElement::MozRubyBaseContainer); + fun(PseudoElement::MozRubyText); + fun(PseudoElement::MozRubyTextContainer); + + fun(PseudoElement::MozTreeColumn); + fun(PseudoElement::MozTreeRow); + fun(PseudoElement::MozTreeSeparator); + fun(PseudoElement::MozTreeCell); + fun(PseudoElement::MozTreeIndentation); + fun(PseudoElement::MozTreeLine); + fun(PseudoElement::MozTreeTwisty); + fun(PseudoElement::MozTreeImage); + fun(PseudoElement::MozTreeCellText); + fun(PseudoElement::MozTreeCheckbox); + fun(PseudoElement::MozTreeProgressMeter); + fun(PseudoElement::MozTreeDropFeedback); + + fun(PseudoElement::MozSVGMarkerAnonChild); + fun(PseudoElement::MozSVGOuterSVGAnonChild); + fun(PseudoElement::MozSVGForeignContent); + fun(PseudoElement::MozSVGText); } #[inline] diff --git a/ports/geckolib/tools/regen_bindings.sh b/ports/geckolib/tools/regen_bindings.sh index 5529dd95234..cff58117d91 100755 --- a/ports/geckolib/tools/regen_bindings.sh +++ b/ports/geckolib/tools/regen_bindings.sh @@ -28,17 +28,17 @@ else LIBCLANG_PATH=`brew --prefix llvm38`/lib/llvm-3.8/lib; fi -# Prevent bindgen from generating opaque types for the gecko style structs. -export MAP_GECKO_STRUCTS="" -for STRUCT in nsStyleFont nsStyleColor nsStyleList nsStyleText \ +# Prevent bindgen from generating opaque types for common gecko types +export MAP_GECKO_TYPES="" +for STRUCT in SheetParsingMode nsStyleFont nsStyleColor nsStyleList nsStyleText \ nsStyleVisibility nsStyleUserInterface nsStyleTableBorder \ nsStyleSVG nsStyleVariables nsStyleBackground nsStylePosition \ nsStyleTextReset nsStyleDisplay nsStyleContent nsStyleUIReset \ nsStyleTable nsStyleMargin nsStylePadding nsStyleBorder \ nsStyleOutline nsStyleXUL nsStyleSVGReset nsStyleColumn nsStyleEffects do - MAP_GECKO_STRUCTS=$MAP_GECKO_STRUCTS"-blacklist-type $STRUCT " - MAP_GECKO_STRUCTS=$MAP_GECKO_STRUCTS"-raw-line 'use gecko_style_structs::$STRUCT;' " + MAP_GECKO_TYPES=$MAP_GECKO_TYPES"-blacklist-type $STRUCT " + MAP_GECKO_TYPES=$MAP_GECKO_TYPES"-raw-line 'use gecko_style_structs::$STRUCT;' " done # Check for the include directory. @@ -50,7 +50,7 @@ fi export RUST_BACKTRACE=1 -# We need to use 'eval' here to make MAP_GECKO_STRUCTS evaluate properly as +# We need to use 'eval' here to make MAP_GECKO_TYPES evaluate properly as # multiple arguments. eval ./rust-bindgen/target/debug/bindgen \ -x c++ -std=gnu++0x \ @@ -61,4 +61,4 @@ eval ./rust-bindgen/target/debug/bindgen \ "$DIST_INCLUDE/mozilla/ServoBindings.h" \ -match "ServoBindings.h" \ -match "nsStyleStructList.h" \ - $MAP_GECKO_STRUCTS + $MAP_GECKO_TYPES diff --git a/ports/geckolib/tools/regen_style_structs.sh b/ports/geckolib/tools/regen_style_structs.sh index dc4690fc188..95833f88a16 100755 --- a/ports/geckolib/tools/regen_style_structs.sh +++ b/ports/geckolib/tools/regen_style_structs.sh @@ -95,6 +95,7 @@ export RUST_BACKTRACE=1 -match "nsDataHashtable.h" \ -match "nsCSSScanner.h" \ -match "Types.h" \ + -match "SheetParsingMode.h" \ -blacklist-type "IsDestructibleFallbackImpl" \ -blacklist-type "IsDestructibleFallback" \ -opaque-type "nsIntMargin" \ diff --git a/ports/geckolib/traversal.rs b/ports/geckolib/traversal.rs index 33fc1fd322e..4e10d8c8fc8 100644 --- a/ports/geckolib/traversal.rs +++ b/ports/geckolib/traversal.rs @@ -52,7 +52,7 @@ impl<'a> StandaloneStyleContext<'a> { } } -impl<'a> StyleContext<'a, GeckoSelectorImpl, GeckoComputedValues> for StandaloneStyleContext<'a> { +impl<'a> StyleContext<'a, GeckoSelectorImpl> for StandaloneStyleContext<'a> { fn shared_context(&self) -> &'a SharedStyleContext { &self.shared } diff --git a/ports/glutin/window.rs b/ports/glutin/window.rs index 1a130a43d2c..6ae14334f51 100644 --- a/ports/glutin/window.rs +++ b/ports/glutin/window.rs @@ -13,6 +13,8 @@ use euclid::size::TypedSize2D; use euclid::{Size2D, Point2D}; use gleam::gl; use glutin; +#[cfg(target_os = "macos")] +use glutin::os::macos::{ActivationPolicy, WindowBuilderExt}; use glutin::{Api, ElementState, Event, GlRequest, MouseButton, VirtualKeyCode, MouseScrollDelta}; use glutin::{TouchPhase}; use layers::geometry::DevicePixel; @@ -65,6 +67,22 @@ const LINE_HEIGHT: f32 = 38.0; const MULTISAMPLES: u16 = 16; +#[cfg(target_os = "macos")] +fn builder_with_platform_options(mut builder: glutin::WindowBuilder) -> glutin::WindowBuilder { + if opts::get().headless || opts::get().output_file.is_some() { + // Prevent the window from showing in Dock.app, stealing focus, + // or appearing at all when running in headless mode or generating an + // output file. + builder = builder.with_activation_policy(ActivationPolicy::Prohibited) + } + builder +} + +#[cfg(not(target_os = "macos"))] +fn builder_with_platform_options(builder: glutin::WindowBuilder) -> glutin::WindowBuilder { + builder +} + /// The type of a window. pub struct Window { window: glutin::Window, @@ -113,6 +131,8 @@ impl Window { builder = builder.with_multisampling(MULTISAMPLES) } + builder = builder_with_platform_options(builder); + let mut glutin_window = builder.build().unwrap(); unsafe { glutin_window.make_current().expect("Failed to make context current!") } diff --git a/ports/gonk/Cargo.lock b/ports/gonk/Cargo.lock index 450791ad071..cdb33f58307 100644 --- a/ports/gonk/Cargo.lock +++ b/ports/gonk/Cargo.lock @@ -4,14 +4,14 @@ version = "0.0.1" dependencies = [ "compositing 0.0.1", "devtools 0.0.1", - "env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "errno 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gfx 0.0.1", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout 0.0.1", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "profile 0.0.1", @@ -43,7 +43,7 @@ name = "angle" version = "0.1.0" source = "git+https://github.com/emilio/angle?branch=servo#eefe3506ae13e8ace811ca544fd6b4a5f0db0a04" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -85,7 +85,7 @@ dependencies = [ "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -103,7 +103,7 @@ dependencies = [ "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -112,7 +112,7 @@ name = "backtrace-sys" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -137,6 +137,11 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] +name = "bitflags" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] name = "block" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -166,7 +171,7 @@ dependencies = [ "gfx_traits 0.0.1", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", @@ -211,7 +216,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -246,12 +251,12 @@ dependencies = [ [[package]] name = "cocoa" -version = "0.3.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "objc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -279,7 +284,7 @@ dependencies = [ "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout_traits 0.0.1", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", @@ -315,7 +320,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -323,7 +328,7 @@ name = "core-foundation-sys" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -332,7 +337,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -343,7 +348,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -444,7 +449,7 @@ name = "dylib" version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -514,10 +519,10 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -527,7 +532,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -538,7 +543,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -559,7 +564,7 @@ name = "flate2" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "miniz-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -573,7 +578,7 @@ name = "freetype" version = "0.1.0" source = "git+https://github.com/servo/rust-freetype#d564ff90a3c69d987f5c015d7ec034cfaee21aff" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -582,7 +587,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -600,8 +605,8 @@ name = "gaol" version = "0.0.1" source = "git+https://github.com/servo/gaol#cbb2518029901f078f871a87ebe05cf96d727713" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -643,8 +648,8 @@ dependencies = [ "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", @@ -659,7 +664,7 @@ dependencies = [ "servo-skia 0.20130412.6 (registry+https://github.com/rust-lang/crates.io-index)", "simd 0.1.0 (git+https://github.com/huonw/simd)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", @@ -699,7 +704,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "xml-rs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -713,7 +718,7 @@ dependencies = [ [[package]] name = "glob" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -723,7 +728,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gl_generator 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -731,7 +736,7 @@ name = "harfbuzz-sys" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -749,7 +754,7 @@ name = "hbs-common-sys" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -758,7 +763,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hbs-pow-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -768,7 +773,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hbs-builder 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "hbs-common-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -789,7 +794,7 @@ name = "hpack" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -799,12 +804,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -822,7 +827,7 @@ dependencies = [ "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -854,10 +859,10 @@ dependencies = [ "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "enum_primitive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "gif 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glob 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "jpeg-decoder 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "jpeg-decoder 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "png 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "png 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -872,7 +877,7 @@ dependencies = [ [[package]] name = "inflate" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -885,7 +890,7 @@ dependencies = [ "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "leaky-cow 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -896,7 +901,7 @@ dependencies = [ "bincode 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -905,12 +910,12 @@ dependencies = [ [[package]] name = "jpeg-decoder" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -920,8 +925,8 @@ version = "0.1.2" source = "git+https://github.com/servo/rust-mozjs#efe805affa75d776316e9ea6113f85cdad1e82ed" dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mozjs_sys 0.0.0 (git+https://github.com/servo/mozjs)", "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", @@ -960,8 +965,8 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "io-surface 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "servo-skia 0.20130412.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -985,8 +990,8 @@ dependencies = [ "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layout_traits 0.0.1", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "plugins 0.0.1", @@ -995,11 +1000,11 @@ dependencies = [ "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "script 0.0.1", "script_traits 0.0.1", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1047,7 +1052,7 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.4" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1074,17 +1079,14 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "log" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "lzw" @@ -1106,7 +1108,7 @@ name = "malloc_buf" version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1119,7 +1121,7 @@ name = "memchr" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1129,7 +1131,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fs2 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1138,7 +1140,7 @@ name = "mime" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1158,7 +1160,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1166,7 +1168,7 @@ name = "mozjs_sys" version = "0.0.0" source = "git+https://github.com/servo/mozjs#3122a1e1a80b78377ae1ce8e7edd4ad3bcbb3d65" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "libz-sys 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1202,7 +1204,7 @@ dependencies = [ "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "immeta 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1229,7 +1231,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1244,7 +1246,7 @@ dependencies = [ "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "plugins 0.0.1", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1334,7 +1336,7 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1380,7 +1382,7 @@ dependencies = [ "gl_generator 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "x11 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1394,7 +1396,7 @@ dependencies = [ "bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "gcc 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys-extras 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1405,7 +1407,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gdi32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "libressl-pnacl-sys 2.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "user32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1417,7 +1419,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1426,7 +1428,7 @@ name = "osmesa-sys" version = "0.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "shared_library 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1492,14 +1494,14 @@ dependencies = [ [[package]] name = "png" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "inflate 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "inflate 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1508,8 +1510,8 @@ version = "0.0.1" dependencies = [ "hbs-pow 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "profile_traits 0.0.1", "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1567,7 +1569,7 @@ name = "rand" version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1662,8 +1664,8 @@ dependencies = [ "image 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "js 0.1.2 (git+https://github.com/servo/rust-mozjs)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1678,10 +1680,10 @@ dependencies = [ "regex 0.1.55 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "script_traits 0.0.1", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1705,7 +1707,7 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1721,10 +1723,10 @@ dependencies = [ [[package]] name = "selectors" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1732,7 +1734,7 @@ dependencies = [ "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "quickersort 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1783,7 +1785,7 @@ dependencies = [ "compositing 0.0.1", "devtools 0.0.1", "devtools_traits 0.0.1", - "env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "euclid 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "gaol 0.0.1 (git+https://github.com/servo/gaol)", "gfx 0.0.1", @@ -1791,8 +1793,8 @@ dependencies = [ "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "layers 0.2.4 (git+https://github.com/servo/rust-layers)", "layout 0.0.1", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net 0.0.1", "net_traits 0.0.1", @@ -1812,7 +1814,7 @@ name = "servo-egl" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1820,7 +1822,7 @@ name = "servo-fontconfig" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "servo-fontconfig-sys 2.11.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1844,12 +1846,12 @@ dependencies = [ [[package]] name = "servo-glutin" -version = "0.4.15" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "android_glue 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "cocoa 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cocoa 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "dwmapi-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1857,7 +1859,7 @@ dependencies = [ "gl_generator 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "objc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "osmesa-sys 0.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "shared_library 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1881,11 +1883,11 @@ dependencies = [ "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "io-surface 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "servo-fontconfig 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "servo-freetype-sys 2.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "servo-glutin 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)", + "servo-glutin 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", "x11 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1895,7 +1897,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1923,12 +1925,12 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hpack 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "string_cache" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "debug_unreachable 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1953,16 +1955,16 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "style_traits 0.0.1", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1978,10 +1980,10 @@ dependencies = [ "heapsize 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_plugin 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "selectors 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2009,7 +2011,7 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2042,7 +2044,7 @@ version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2052,7 +2054,7 @@ name = "tinyfiledialogs" version = "0.1.0" source = "git+https://github.com/jdm/tinyfiledialogs#2d2285985db1168da4d516000f24842aba46fd94" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2154,8 +2156,8 @@ dependencies = [ "js 0.1.2 (git+https://github.com/servo/rust-mozjs)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "plugins 0.0.1", @@ -2164,7 +2166,7 @@ dependencies = [ "serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2188,7 +2190,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "wayland-scanner 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)", "wayland-sys 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2247,7 +2249,7 @@ dependencies = [ "gleam 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.2.2 (git+https://github.com/servo/ipc-channel)", "lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "scoped_threadpool 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2311,7 +2313,7 @@ name = "x11" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2321,7 +2323,7 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dylib 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2345,12 +2347,12 @@ name = "xml5ever" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.13 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/python/servo/bootstrap_commands.py b/python/servo/bootstrap_commands.py index d49c1e431c9..5630b778771 100644 --- a/python/servo/bootstrap_commands.py +++ b/python/servo/bootstrap_commands.py @@ -63,11 +63,14 @@ def download(desc, src, writer, start_byte=0): if not dumb: print() - except urllib2.URLError: - print("Error downloading Rust compiler; are you connected to the internet?") - sys.exit(1) except urllib2.HTTPError, e: print("Download failed (%d): %s - %s" % (e.code, e.reason, src)) + if e.code == 403: + print("No Rust compiler binary available for this platform. " + "Please see https://github.com/servo/servo/#prerequisites") + sys.exit(1) + except urllib2.URLError: + print("Error downloading Rust compiler; are you connected to the internet?") sys.exit(1) except KeyboardInterrupt: writer.flush() @@ -316,7 +319,10 @@ class MachCommands(CommandBase): name = path.join(base, name) if force: print("Removing " + name) - shutil.rmtree(name) + if os.path.isdir(name): + shutil.rmtree(name) + else: + os.remove(name) else: print("Would remove " + name) if not removing_anything: diff --git a/resources/servo.css b/resources/servo.css index 5fe1b27bf46..0ef23b8f86d 100644 --- a/resources/servo.css +++ b/resources/servo.css @@ -51,15 +51,11 @@ details::-servo-details-summary { details[open]::-servo-details-summary { list-style: disclosure-open; } -details::-servo-details-content { +*|*::-servo-details-content { margin-left: 40px; overflow: hidden; - display: none; -} -details[open]::-servo-details-content { display: block; } - /* * Until servo supports svg properly, make sure to at least prevent svg * children from being layed out and rendered like usual html. diff --git a/tests/unit/layout/size_of.rs b/tests/unit/layout/size_of.rs index f79e352cdc9..87f1dcb3d44 100644 --- a/tests/unit/layout/size_of.rs +++ b/tests/unit/layout/size_of.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use layout::Fragment; +use layout::ServoThreadSafeLayoutNode; use std::mem::size_of; #[test] @@ -12,7 +13,7 @@ fn test_size_of_fragment() { if actual < expected { panic!("Your changes have decreased the stack size of layout::fragment::Fragment \ - from {} to {}. Good work! Please update the size in tests/layout/size_of.rs", + from {} to {}. Good work! Please update the size in tests/unit/layout/size_of.rs", expected, actual); } @@ -20,7 +21,27 @@ fn test_size_of_fragment() { panic!("Your changes have increased the stack size of layout::fragment::Fragment \ from {} to {}. Please consider choosing a design which avoids this increase. \ If you feel that the increase is necessary, update the size in \ - tests/layout/size_of.rs.", + tests/unit/layout/size_of.rs.", + expected, actual); + } +} + +#[test] +fn test_size_of_layout_node() { + let expected = 16; + let actual = size_of::<ServoThreadSafeLayoutNode>(); + + if actual < expected { + panic!("Your changes have decreased the stack size of layout::wrapper::ServoThreadSafeLayoutNode \ + from {} to {}. Good work! Please update the size in tests/layout/unit/size_of.rs", + expected, actual); + } + + if actual > expected { + panic!("Your changes have increased the stack size of layout::wrapper::ServoThreadSafeLayoutNode \ + from {} to {}. Please consider choosing a design which avoids this increase. \ + If you feel that the increase is necessary, update the size in \ + tests/unit/layout/size_of.rs.", expected, actual); } } diff --git a/tests/unit/net/fetch.rs b/tests/unit/net/fetch.rs index 98b15fd8b8c..d880e3937c0 100644 --- a/tests/unit/net/fetch.rs +++ b/tests/unit/net/fetch.rs @@ -18,6 +18,8 @@ use net::fetch::methods::{fetch, fetch_async, fetch_with_cors_cache}; use net_traits::AsyncFetchListener; use net_traits::request::{Origin, RedirectMode, Referer, Request, RequestMode}; use net_traits::response::{CacheState, Response, ResponseBody, ResponseType}; +use std::fs::File; +use std::io::Read; use std::rc::Rc; use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::mpsc::{Sender, channel}; @@ -25,6 +27,7 @@ use std::sync::{Arc, Mutex}; use time::{self, Duration}; use unicase::UniCase; use url::{Origin as UrlOrigin, Url}; +use util::resource_files::resources_dir_path; // TODO write a struct that impls Handler for storing test values @@ -141,6 +144,36 @@ fn test_fetch_data() { } #[test] +fn test_fetch_file() { + + let mut path = resources_dir_path(); + path.push("servo.css"); + + let url = Url::from_file_path(path.clone()).unwrap(); + let origin = Origin::Origin(url.origin()); + let request = Request::new(url, Some(origin), false); + request.same_origin_data.set(true); + + let fetch_response = fetch(Rc::new(request)); + assert!(!fetch_response.is_network_error()); + assert_eq!(fetch_response.headers.len(), 1); + let content_type: &ContentType = fetch_response.headers.get().unwrap(); + assert!(**content_type == Mime(TopLevel::Text, SubLevel::Css, vec![])); + + let resp_body = fetch_response.body.lock().unwrap(); + let mut file = File::open(path).unwrap(); + let mut bytes = vec![]; + let _ = file.read_to_end(&mut bytes); + + match *resp_body { + ResponseBody::Done(ref val) => { + assert_eq!(val, &bytes); + }, + _ => panic!() + } +} + +#[test] fn test_cors_preflight_fetch() { static ACK: &'static [u8] = b"ACK"; let state = Arc::new(AtomicUsize::new(0)); diff --git a/tests/unit/style/Cargo.toml b/tests/unit/style/Cargo.toml index f4e635cf076..91c3d5d4f64 100644 --- a/tests/unit/style/Cargo.toml +++ b/tests/unit/style/Cargo.toml @@ -18,6 +18,6 @@ app_units = {version = "0.2.3", features = ["plugins"]} cssparser = {version = "0.5.4", features = ["heap_size"]} euclid = {version = "0.6.4", features = ["plugins"]} selectors = {version = "0.5", features = ["heap_size"]} -string_cache = {version = "0.2.12", features = ["heap_size"]} +string_cache = {version = "0.2", features = ["heap_size"]} url = {version = "1.0.0", features = ["heap_size"]} rustc-serialize = "0.3" diff --git a/tests/unit/style/stylesheets.rs b/tests/unit/style/stylesheets.rs index 53e891f5dd1..91822093ea2 100644 --- a/tests/unit/style/stylesheets.rs +++ b/tests/unit/style/stylesheets.rs @@ -8,7 +8,7 @@ use selectors::parser::*; use std::borrow::ToOwned; use std::sync::Arc; use std::sync::Mutex; -use string_cache::Atom; +use string_cache::{Atom, Namespace}; use style::properties::{PropertyDeclaration, PropertyDeclarationBlock, DeclaredValue, longhands}; use style::stylesheets::{CSSRule, StyleRule, Origin}; use style::error_reporting::ParseErrorReporter; @@ -32,13 +32,13 @@ fn test_parse_stylesheet() { media: None, dirty_on_viewport_size_change: false, rules: vec![ - CSSRule::Namespace(None, ns!(html)), + CSSRule::Namespace(None, Namespace(Atom::from("http://www.w3.org/1999/xhtml"))), CSSRule::Style(StyleRule { selectors: vec![ Selector { compound_selectors: Arc::new(CompoundSelector { simple_selectors: vec![ - SimpleSelector::Namespace(ns!(html)), + SimpleSelector::Namespace(Namespace(Atom::from("http://www.w3.org/1999/xhtml"))), SimpleSelector::LocalName(LocalName { name: atom!("input"), lower_name: atom!("input"), @@ -68,7 +68,7 @@ fn test_parse_stylesheet() { Selector { compound_selectors: Arc::new(CompoundSelector { simple_selectors: vec![ - SimpleSelector::Namespace(ns!(html)), + SimpleSelector::Namespace(Namespace(Atom::from("http://www.w3.org/1999/xhtml"))), SimpleSelector::LocalName(LocalName { name: atom!("html"), lower_name: atom!("html"), @@ -82,7 +82,7 @@ fn test_parse_stylesheet() { Selector { compound_selectors: Arc::new(CompoundSelector { simple_selectors: vec![ - SimpleSelector::Namespace(ns!(html)), + SimpleSelector::Namespace(Namespace(Atom::from("http://www.w3.org/1999/xhtml"))), SimpleSelector::LocalName(LocalName { name: atom!("body"), lower_name: atom!("body"), @@ -107,10 +107,12 @@ fn test_parse_stylesheet() { Selector { compound_selectors: Arc::new(CompoundSelector { simple_selectors: vec![ + SimpleSelector::Namespace(Namespace(Atom::from("http://www.w3.org/1999/xhtml"))), SimpleSelector::Class(Atom::from("ok")), ], next: Some((Arc::new(CompoundSelector { simple_selectors: vec![ + SimpleSelector::Namespace(Namespace(Atom::from("http://www.w3.org/1999/xhtml"))), SimpleSelector::ID(Atom::from("d1")), ], next: None, @@ -145,7 +147,6 @@ fn test_parse_stylesheet() { }); } - struct CSSError { pub line: usize, pub column: usize, diff --git a/tests/wpt/mozilla/tests/mozilla/details_ui_opened.html b/tests/wpt/mozilla/tests/mozilla/details_ui_opened.html index 10e65e98d81..2d9b13aad0a 100644 --- a/tests/wpt/mozilla/tests/mozilla/details_ui_opened.html +++ b/tests/wpt/mozilla/tests/mozilla/details_ui_opened.html @@ -6,4 +6,3 @@ <summary>Test</summary> Contents </details> - |