aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout/css/matching.rs68
-rw-r--r--components/layout/fragment.rs1
-rw-r--r--components/layout/traversal.rs4
-rw-r--r--components/layout/wrapper.rs97
-rw-r--r--components/script/dom/element.rs51
-rw-r--r--components/script/dom/node.rs65
-rw-r--r--components/servo/Cargo.lock2
-rw-r--r--components/style/legacy.rs18
-rw-r--r--components/style/node.rs1
-rw-r--r--components/style/selector_matching.rs10
-rw-r--r--ports/cef/Cargo.lock2
-rw-r--r--ports/gonk/Cargo.lock2
12 files changed, 153 insertions, 168 deletions
diff --git a/components/layout/css/matching.rs b/components/layout/css/matching.rs
index eae14f6a460..68ccf3c5cd7 100644
--- a/components/layout/css/matching.rs
+++ b/components/layout/css/matching.rs
@@ -17,6 +17,7 @@ use wrapper::{LayoutElement, LayoutNode};
use script::dom::characterdata::CharacterDataTypeId;
use script::dom::node::NodeTypeId;
use script::layout_interface::Animation;
+use selectors::{Node, Element};
use selectors::bloom::BloomFilter;
use selectors::matching::{CommonStyleAffectingAttributeMode, CommonStyleAffectingAttributes};
use selectors::matching::{common_style_affecting_attributes, rare_style_affecting_attributes};
@@ -28,7 +29,7 @@ use std::slice::Iter;
use std::sync::Arc;
use std::sync::mpsc::Sender;
use string_cache::{Atom, Namespace};
-use style::node::{TElement, TElementAttributes, TNode};
+use style::node::TElementAttributes;
use style::properties::{ComputedValues, cascade};
use style::selector_matching::{Stylist, DeclarationBlock};
use util::arc_ptr_eq;
@@ -226,9 +227,10 @@ impl StyleSharingCandidate {
None => return None,
Some(parent_node) => parent_node,
};
- if !parent_node.is_element() {
- return None
- }
+ let element = match parent_node.as_element() {
+ Some(element) => element,
+ None => return None
+ };
let style = unsafe {
match *node.borrow_layout_data_unchecked() {
@@ -253,7 +255,6 @@ impl StyleSharingCandidate {
}
};
- let element = node.as_element();
if element.style_attribute().is_some() {
return None
}
@@ -504,10 +505,10 @@ impl<'ln> PrivateMatchMethods for LayoutNode<'ln> {
parent_node: Option<LayoutNode>,
candidate: &StyleSharingCandidate)
-> Option<Arc<ComputedValues>> {
- assert!(self.is_element());
+ let element = self.as_element().unwrap();
let parent_node = match parent_node {
- Some(ref parent_node) if parent_node.is_element() => parent_node,
+ Some(ref parent_node) if parent_node.as_element().is_some() => parent_node,
Some(_) | None => return None,
};
@@ -523,7 +524,7 @@ impl<'ln> PrivateMatchMethods for LayoutNode<'ln> {
}
// Check tag names, classes, etc.
- if !candidate.can_share_style_with(&self.as_element()) {
+ if !candidate.can_share_style_with(&element) {
return None
}
@@ -542,20 +543,21 @@ impl<'ln> MatchMethods for LayoutNode<'ln> {
parent_bf: &Option<Box<BloomFilter>>,
applicable_declarations: &mut ApplicableDeclarations,
shareable: &mut bool) {
- let style_attribute = self.as_element().style_attribute().as_ref();
+ let element = self.as_element().unwrap();
+ let style_attribute = element.style_attribute().as_ref();
applicable_declarations.normal_shareable =
- stylist.push_applicable_declarations(self,
+ stylist.push_applicable_declarations(&element,
parent_bf,
style_attribute,
None,
&mut applicable_declarations.normal);
- stylist.push_applicable_declarations(self,
+ stylist.push_applicable_declarations(&element,
parent_bf,
None,
Some(PseudoElement::Before),
&mut applicable_declarations.before);
- stylist.push_applicable_declarations(self,
+ stylist.push_applicable_declarations(&element,
parent_bf,
None,
Some(PseudoElement::After),
@@ -574,13 +576,13 @@ impl<'ln> MatchMethods for LayoutNode<'ln> {
if opts::get().disable_share_style_cache {
return StyleSharingResult::CannotShare(false)
}
- if !self.is_element() {
- return StyleSharingResult::CannotShare(false)
- }
let ok = {
- let element = self.as_element();
- element.style_attribute().is_none() &&
- element.get_attr(&ns!(""), &atom!("id")).is_none()
+ if let Some(element) = self.as_element() {
+ element.style_attribute().is_none() &&
+ element.get_attr(&ns!(""), &atom!("id")).is_none()
+ } else {
+ false
+ }
};
if !ok {
return StyleSharingResult::CannotShare(false)
@@ -621,28 +623,26 @@ impl<'ln> MatchMethods for LayoutNode<'ln> {
fn insert_into_bloom_filter(&self, bf: &mut BloomFilter) {
// Only elements are interesting.
- if !self.is_element() { return; }
- let element = self.as_element();
-
- bf.insert(element.get_local_name());
- bf.insert(element.get_namespace());
- element.get_id().map(|id| bf.insert(&id));
+ if let Some(element) = self.as_element() {
+ bf.insert(element.get_local_name());
+ bf.insert(element.get_namespace());
+ element.get_id().map(|id| bf.insert(&id));
- // TODO: case-sensitivity depends on the document type and quirks mode
- element.each_class(|class| bf.insert(class));
+ // TODO: case-sensitivity depends on the document type and quirks mode
+ element.each_class(|class| bf.insert(class));
+ }
}
fn remove_from_bloom_filter(&self, bf: &mut BloomFilter) {
// Only elements are interesting.
- if !self.is_element() { return; }
- let element = self.as_element();
+ if let Some(element) = self.as_element() {
+ bf.remove(element.get_local_name());
+ bf.remove(element.get_namespace());
+ element.get_id().map(|id| bf.remove(&id));
- bf.remove(element.get_local_name());
- bf.remove(element.get_namespace());
- element.get_id().map(|id| bf.remove(&id));
-
- // TODO: case-sensitivity depends on the document type and quirks mode
- element.each_class(|class| bf.remove(class));
+ // TODO: case-sensitivity depends on the document type and quirks mode
+ element.each_class(|class| bf.remove(class));
+ }
}
unsafe fn cascade_node(&self,
diff --git a/components/layout/fragment.rs b/components/layout/fragment.rs
index c3d471b6c3a..6f33dd5be17 100644
--- a/components/layout/fragment.rs
+++ b/components/layout/fragment.rs
@@ -41,7 +41,6 @@ use style::computed_values::content::ContentItem;
use style::computed_values::{border_collapse, clear, mix_blend_mode, overflow_wrap, position};
use style::computed_values::{text_align, text_decoration, white_space, word_break};
use style::computed_values::transform_style;
-use style::node::TNode;
use style::properties::{self, ComputedValues, cascade_anonymous};
use style::values::computed::{LengthOrPercentage, LengthOrPercentageOrAuto};
use style::values::computed::{LengthOrPercentageOrNone};
diff --git a/components/layout/traversal.rs b/components/layout/traversal.rs
index a1e6011e3d8..dcfd4ef19bb 100644
--- a/components/layout/traversal.rs
+++ b/components/layout/traversal.rs
@@ -19,9 +19,9 @@ use wrapper::{PostorderNodeMutTraversal, ThreadSafeLayoutNode, UnsafeLayoutNode}
use wrapper::{PreorderDomTraversal, PostorderDomTraversal};
use selectors::bloom::BloomFilter;
+use selectors::Node;
use util::opts;
use util::tid::tid;
-use style::node::TNode;
use std::cell::RefCell;
use std::mem;
@@ -164,7 +164,7 @@ impl<'a> PreorderDomTraversal for RecalcStyleForNode<'a> {
StyleSharingResult::CannotShare(mut shareable) => {
let mut applicable_declarations = ApplicableDeclarations::new();
- if node.is_element() {
+ if node.as_element().is_some() {
// Perform the CSS selector matching.
let stylist = unsafe { &*self.layout_context.shared.stylist };
node.match_node(stylist,
diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs
index 561d750a754..f027c61ab8e 100644
--- a/components/layout/wrapper.rs
+++ b/components/layout/wrapper.rs
@@ -43,7 +43,7 @@ use script::dom::bindings::codegen::InheritTypes::{CharacterDataCast, ElementCas
use script::dom::bindings::codegen::InheritTypes::{HTMLIFrameElementCast, HTMLCanvasElementCast};
use script::dom::bindings::codegen::InheritTypes::{HTMLImageElementCast, HTMLInputElementCast};
use script::dom::bindings::codegen::InheritTypes::{HTMLTextAreaElementCast, NodeCast, TextCast};
-use script::dom::bindings::js::LayoutJS;
+use script::dom::bindings::js::{JS, LayoutJS};
use script::dom::characterdata::{CharacterDataTypeId, LayoutCharacterDataHelpers};
use script::dom::element::{Element, ElementTypeId};
use script::dom::element::{LayoutElementHelpers, RawLayoutElementHelpers};
@@ -68,10 +68,11 @@ use std::sync::mpsc::Sender;
use string_cache::{Atom, Namespace};
use style::computed_values::content::ContentItem;
use style::computed_values::{content, display, white_space};
+use selectors::Node as SelectorsNode;
use selectors::matching::DeclarationBlock;
use selectors::parser::{NamespaceConstraint, AttrSelector};
use style::legacy::UnsignedIntegerAttribute;
-use style::node::{TElement, TElementAttributes, TNode};
+use style::node::TElementAttributes;
use style::properties::{PropertyDeclaration, PropertyDeclarationBlock};
use url::Url;
@@ -216,9 +217,7 @@ impl<'ln> LayoutNode<'ln> {
}
}
-impl<'ln> TNode for LayoutNode<'ln> {
- type Element = LayoutElement<'ln>;
-
+impl<'ln> ::selectors::Node<LayoutElement<'ln>> for LayoutNode<'ln> {
fn parent_node(&self) -> Option<LayoutNode<'ln>> {
unsafe {
self.node.parent_node_ref().map(|node| self.new_with_this_lifetime(&node))
@@ -249,25 +248,15 @@ impl<'ln> TNode for LayoutNode<'ln> {
}
}
- /// If this is an element, accesses the element data. Fails if this is not an element node.
+ /// If this is an element, accesses the element data.
#[inline]
- fn as_element(&self) -> LayoutElement<'ln> {
+ fn as_element(&self) -> Option<LayoutElement<'ln>> {
unsafe {
- let elem: LayoutJS<Element> = match ElementCast::to_layout_js(&self.node) {
- Some(elem) => elem,
- None => panic!("not an element")
- };
-
- LayoutElement {
- element: &*elem.unsafe_get(),
- }
- }
- }
-
- fn is_element(&self) -> bool {
- match self.type_id() {
- NodeTypeId::Element(..) => true,
- _ => false
+ ElementCast::to_layout_js(&self.node).map(|element| {
+ LayoutElement {
+ element: &*element.unsafe_get(),
+ }
+ })
}
}
@@ -277,34 +266,6 @@ impl<'ln> TNode for LayoutNode<'ln> {
_ => false
}
}
-
- fn match_attr<F>(&self, attr: &AttrSelector, test: F) -> bool where F: Fn(&str) -> bool {
- assert!(self.is_element());
- let name = if self.is_html_element_in_html_document() {
- &attr.lower_name
- } else {
- &attr.name
- };
- match attr.namespace {
- NamespaceConstraint::Specific(ref ns) => {
- let element = self.as_element();
- element.get_attr(ns, name).map_or(false, |attr| test(attr))
- },
- NamespaceConstraint::Any => {
- let element = self.as_element();
- element.get_attrs(name).iter().any(|attr| test(*attr))
- }
- }
- }
-
- fn is_html_element_in_html_document(&self) -> bool {
- unsafe {
- match ElementCast::to_layout_js(&self.node) {
- Some(elem) => elem.html_element_in_html_document_for_layout(),
- None => false
- }
- }
- }
}
impl<'ln> LayoutNode<'ln> {
@@ -424,7 +385,19 @@ impl<'le> LayoutElement<'le> {
}
}
-impl<'le> TElement for LayoutElement<'le> {
+impl<'le> ::selectors::Element for LayoutElement<'le> {
+ type Node = LayoutNode<'le>;
+
+ #[inline]
+ fn as_node(&self) -> LayoutNode<'le> {
+ LayoutNode {
+ node: NodeCast::from_layout_js(unsafe {
+ &JS::from_ref(self.element).to_layout()
+ }),
+ chain: PhantomData,
+ }
+ }
+
#[inline]
fn get_local_name<'a>(&'a self) -> &'a Atom {
self.element.local_name()
@@ -545,6 +518,28 @@ impl<'le> TElement for LayoutElement<'le> {
}
}
}
+
+ fn match_attr<F>(&self, attr: &AttrSelector, test: F) -> bool where F: Fn(&str) -> bool {
+ let name = if self.is_html_element_in_html_document() {
+ &attr.lower_name
+ } else {
+ &attr.name
+ };
+ match attr.namespace {
+ NamespaceConstraint::Specific(ref ns) => {
+ self.get_attr(ns, name).map_or(false, |attr| test(attr))
+ },
+ NamespaceConstraint::Any => {
+ self.get_attrs(name).iter().any(|attr| test(*attr))
+ }
+ }
+ }
+
+ fn is_html_element_in_html_document(&self) -> bool {
+ unsafe {
+ JS::from_ref(self.element).to_layout().html_element_in_html_document_for_layout()
+ }
+ }
}
impl<'le> TElementAttributes for LayoutElement<'le> {
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index 1b78b67cbd9..445fd05bed3 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -79,6 +79,7 @@ use html5ever::serialize::TraversalScope::{IncludeNode, ChildrenOnly};
use html5ever::tree_builder::{NoQuirks, LimitedQuirks, Quirks};
use selectors::matching::{matches, DeclarationBlock};
use selectors::parser::parse_author_origin_selector_list_from_str;
+use selectors::parser::{AttrSelector, NamespaceConstraint};
use string_cache::{Atom, Namespace, QualName};
use url::UrlParser;
@@ -1454,8 +1455,7 @@ impl<'a> ElementMethods for &'a Element {
match parse_author_origin_selector_list_from_str(&selectors) {
Err(()) => Err(Syntax),
Ok(ref selectors) => {
- let root = NodeCast::from_ref(self);
- Ok(matches(selectors, &root, &mut None))
+ Ok(matches(selectors, &self, &mut None))
}
}
}
@@ -1468,7 +1468,7 @@ impl<'a> ElementMethods for &'a Element {
let root = NodeCast::from_ref(self);
for element in root.inclusive_ancestors() {
if let Some(element) = ElementCast::to_ref(element.r()) {
- if matches(selectors, &NodeCast::from_ref(element), &mut None) {
+ if matches(selectors, &element, &mut None) {
return Ok(Some(Root::from_ref(element)));
}
}
@@ -1621,7 +1621,13 @@ impl<'a> VirtualMethods for &'a Element {
}
}
-impl<'a> style::node::TElement for &'a Element {
+impl<'a> ::selectors::Element for &'a Element {
+ type Node = &'a Node;
+
+ fn as_node(&self) -> &'a Node {
+ NodeCast::from_ref(*self)
+ }
+
fn is_link(&self) -> bool {
// FIXME: This is HTML only.
let node = NodeCast::from_ref(*self);
@@ -1740,6 +1746,43 @@ impl<'a> style::node::TElement for &'a Element {
}
}
}
+
+ fn match_attr<F>(&self, attr: &AttrSelector, test: F) -> bool
+ where F: Fn(&str) -> bool
+ {
+ let local_name = {
+ if self.is_html_element_in_html_document() {
+ &attr.lower_name
+ } else {
+ &attr.name
+ }
+ };
+ match attr.namespace {
+ NamespaceConstraint::Specific(ref ns) => {
+ self.get_attribute(ns, local_name)
+ .map_or(false, |attr| {
+ // FIXME(https://github.com/rust-lang/rust/issues/23338)
+ let attr = attr.r();
+ let value = attr.value();
+ test(&value)
+ })
+ },
+ NamespaceConstraint::Any => {
+ let mut attributes: RootedVec<JS<Attr>> = RootedVec::new();
+ self.get_attributes(local_name, &mut attributes);
+ attributes.iter().any(|attr| {
+ // FIXME(https://github.com/rust-lang/rust/issues/23338)
+ let attr = attr.root();
+ let value = attr.r().value();
+ test(&value)
+ })
+ }
+ }
+ }
+
+ fn is_html_element_in_html_document(&self) -> bool {
+ self.html_element_in_html_document()
+ }
}
pub trait ActivationElementHelpers<'a> {
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 919136a4afd..b8282ce1de0 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -54,7 +54,7 @@ use util::geometry::Au;
use util::namespace;
use util::str::DOMString;
use util::task_state;
-use selectors::parser::{Selector, AttrSelector, NamespaceConstraint};
+use selectors::parser::Selector;
use selectors::parser::parse_author_origin_selector_list_from_str;
use selectors::matching::matches;
use style::properties::ComputedValues;
@@ -423,7 +423,11 @@ impl<'a> Iterator for QuerySelectorIterator {
// TODO(cgaebel): Is it worth it to build a bloom filter here
// (instead of passing `None`)? Probably.
self.iterator.find(|node| {
- node.r().is_element() && matches(selectors, &node.r(), &mut None)
+ if let Some(element) = ElementCast::to_ref(node.r()) {
+ matches(selectors, &element, &mut None)
+ } else {
+ false
+ }
})
}
}
@@ -896,7 +900,7 @@ impl<'a> NodeHelpers for &'a Node {
let root = self.ancestors().last();
let root = root.r().unwrap_or(self.clone());
Ok(root.traverse_preorder().filter_map(ElementCast::to_root).find(|element| {
- matches(selectors, &NodeCast::from_ref(element.r()), &mut None)
+ matches(selectors, &element.r(), &mut None)
}))
}
}
@@ -2506,9 +2510,7 @@ impl<'a> VirtualMethods for &'a Node {
}
}
-impl<'a> style::node::TNode for &'a Node {
- type Element = &'a Element;
-
+impl<'a> ::selectors::Node<&'a Element> for &'a Node {
fn parent_node(&self) -> Option<&'a Node> {
(*self).parent_node.get()
.map(|node| node.root().get_unsound_ref_forever())
@@ -2544,55 +2546,8 @@ impl<'a> style::node::TNode for &'a Node {
is_document(*self)
}
- fn is_element(&self) -> bool {
- // FIXME(zwarich): Remove this when UFCS lands and there is a better way
- // of disambiguating methods.
- fn is_element<'a, T: ElementDerived>(this: &T) -> bool {
- this.is_element()
- }
-
- is_element(*self)
- }
-
- fn as_element(&self) -> &'a Element {
- ElementCast::to_ref(*self).unwrap()
- }
-
- fn match_attr<F>(&self, attr: &AttrSelector, test: F) -> bool
- where F: Fn(&str) -> bool
- {
- let local_name = {
- if self.is_html_element_in_html_document() {
- &attr.lower_name
- } else {
- &attr.name
- }
- };
- match attr.namespace {
- NamespaceConstraint::Specific(ref ns) => {
- self.as_element().get_attribute(ns, local_name)
- .map_or(false, |attr| {
- // FIXME(https://github.com/rust-lang/rust/issues/23338)
- let attr = attr.r();
- let value = attr.value();
- test(&value)
- })
- },
- NamespaceConstraint::Any => {
- let mut attributes: RootedVec<JS<Attr>> = RootedVec::new();
- self.as_element().get_attributes(local_name, &mut attributes);
- attributes.iter().any(|attr| {
- // FIXME(https://github.com/rust-lang/rust/issues/23338)
- let attr = attr.root();
- let value = attr.r().value();
- test(&value)
- })
- }
- }
- }
-
- fn is_html_element_in_html_document(&self) -> bool {
- self.as_element().html_element_in_html_document()
+ fn as_element(&self) -> Option<&'a Element> {
+ ElementCast::to_ref(*self)
}
}
diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock
index 2bf5a47a8a4..d346d3724ab 100644
--- a/components/servo/Cargo.lock
+++ b/components/servo/Cargo.lock
@@ -1116,7 +1116,7 @@ dependencies = [
[[package]]
name = "selectors"
version = "0.1.0"
-source = "git+https://github.com/servo/rust-selectors#9c920bfff7e55dd67e8af45943270bcd71fd46c9"
+source = "git+https://github.com/servo/rust-selectors#a16e32540845548d46857f2896248c382ef34393"
dependencies = [
"bitflags 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"cssparser 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
diff --git a/components/style/legacy.rs b/components/style/legacy.rs
index 340b404c7d9..dd751b161b3 100644
--- a/components/style/legacy.rs
+++ b/components/style/legacy.rs
@@ -7,7 +7,7 @@
use std::sync::Arc;
-use selectors::tree::TNode;
+use selectors::Element;
use selectors::matching::DeclarationBlock;
use node::TElementAttributes;
use properties::PropertyDeclaration;
@@ -32,21 +32,17 @@ pub trait PresentationalHintSynthesis {
/// `common_style_affecting_attributes` or `rare_style_affecting_attributes` as appropriate. If
/// you don't, you risk strange random nondeterministic failures due to false positives in
/// style sharing.
- fn synthesize_presentational_hints_for_legacy_attributes<N,V>(
- &self, node: &N, matching_rules_list: &mut V, shareable: &mut bool)
- where N: TNode,
- N::Element: TElementAttributes,
+ fn synthesize_presentational_hints_for_legacy_attributes<E,V>(
+ &self, element: &E, matching_rules_list: &mut V, shareable: &mut bool)
+ where E: Element + TElementAttributes,
V: VecLike<DeclarationBlock<Vec<PropertyDeclaration>>>;
}
impl PresentationalHintSynthesis for Stylist {
- fn synthesize_presentational_hints_for_legacy_attributes<N,V>(
- &self, node: &N, matching_rules_list: &mut V, shareable: &mut bool)
- where N: TNode,
- N::Element: TElementAttributes,
+ fn synthesize_presentational_hints_for_legacy_attributes<E,V>(
+ &self, element: &E, matching_rules_list: &mut V, shareable: &mut bool)
+ where E: Element + TElementAttributes,
V: VecLike<DeclarationBlock<Vec<PropertyDeclaration>>> {
- let element = node.as_element();
-
let length = matching_rules_list.len();
element.synthesize_presentational_hints_for_legacy_attributes(matching_rules_list);
if matching_rules_list.len() != length {
diff --git a/components/style/node.rs b/components/style/node.rs
index 633bbda591f..fa422e2b5db 100644
--- a/components/style/node.rs
+++ b/components/style/node.rs
@@ -10,7 +10,6 @@ use properties::PropertyDeclaration;
use smallvec::VecLike;
use selectors::matching::DeclarationBlock;
-pub use selectors::tree::{TNode, TElement};
use string_cache::{Atom, Namespace};
pub trait TElementAttributes {
diff --git a/components/style/selector_matching.rs b/components/style/selector_matching.rs
index 014ef24e307..8f56827b34e 100644
--- a/components/style/selector_matching.rs
+++ b/components/style/selector_matching.rs
@@ -8,7 +8,7 @@ use selectors::bloom::BloomFilter;
use selectors::matching::{SelectorMap, Rule};
use selectors::matching::DeclarationBlock as GenericDeclarationBlock;
use selectors::parser::PseudoElement;
-use selectors::tree::TNode;
+use selectors::Element;
use std::process;
use smallvec::VecLike;
use util::resource_files::read_resource_file;
@@ -190,19 +190,17 @@ impl Stylist {
/// The returned boolean indicates whether the style is *shareable*; that is, whether the
/// matched selectors are simple enough to allow the matching logic to be reduced to the logic
/// in `css::matching::PrivateMatchMethods::candidate_element_allows_for_style_sharing`.
- pub fn push_applicable_declarations<N,V>(
+ pub fn push_applicable_declarations<E,V>(
&self,
- element: &N,
+ element: &E,
parent_bf: &Option<Box<BloomFilter>>,
style_attribute: Option<&PropertyDeclarationBlock>,
pseudo_element: Option<PseudoElement>,
applicable_declarations: &mut V)
-> bool
- where N: TNode,
- N::Element: TElementAttributes,
+ where E: Element + TElementAttributes,
V: VecLike<DeclarationBlock> {
assert!(!self.is_dirty);
- assert!(element.is_element());
assert!(style_attribute.is_none() || pseudo_element.is_none(),
"Style attributes do not apply to pseudo-elements");
diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock
index c82366204ff..74af6723ee6 100644
--- a/ports/cef/Cargo.lock
+++ b/ports/cef/Cargo.lock
@@ -1088,7 +1088,7 @@ dependencies = [
[[package]]
name = "selectors"
version = "0.1.0"
-source = "git+https://github.com/servo/rust-selectors#9c920bfff7e55dd67e8af45943270bcd71fd46c9"
+source = "git+https://github.com/servo/rust-selectors#a16e32540845548d46857f2896248c382ef34393"
dependencies = [
"bitflags 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"cssparser 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
diff --git a/ports/gonk/Cargo.lock b/ports/gonk/Cargo.lock
index 0f5a25d1412..2701758c5d3 100644
--- a/ports/gonk/Cargo.lock
+++ b/ports/gonk/Cargo.lock
@@ -996,7 +996,7 @@ dependencies = [
[[package]]
name = "selectors"
version = "0.1.0"
-source = "git+https://github.com/servo/rust-selectors#9c920bfff7e55dd67e8af45943270bcd71fd46c9"
+source = "git+https://github.com/servo/rust-selectors#a16e32540845548d46857f2896248c382ef34393"
dependencies = [
"bitflags 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"cssparser 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",