aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout/Cargo.toml2
-rw-r--r--components/script/Cargo.toml2
-rw-r--r--components/script/dom/element.rs6
-rw-r--r--components/script/dom/node.rs6
-rw-r--r--components/script_layout_interface/Cargo.toml2
-rw-r--r--components/servo/Cargo.lock14
-rw-r--r--components/style/Cargo.toml2
-rw-r--r--components/style/matching.rs8
-rw-r--r--components/style/restyle_hints.rs8
-rw-r--r--components/style/selector_matching.rs74
-rw-r--r--ports/cef/Cargo.lock12
-rw-r--r--ports/geckolib/Cargo.lock10
-rw-r--r--ports/geckolib/Cargo.toml2
-rw-r--r--ports/geckolib/string_cache/Cargo.toml2
-rw-r--r--tests/unit/style/Cargo.toml2
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json24
-rw-r--r--tests/wpt/mozilla/tests/css/restyle-nth-child-ref.html17
-rw-r--r--tests/wpt/mozilla/tests/css/restyle-nth-child.html24
18 files changed, 153 insertions, 64 deletions
diff --git a/components/layout/Cargo.toml b/components/layout/Cargo.toml
index e974cfa9b1d..460cd5f0c07 100644
--- a/components/layout/Cargo.toml
+++ b/components/layout/Cargo.toml
@@ -33,7 +33,7 @@ range = {path = "../range"}
rustc-serialize = "0.3"
script_layout_interface = {path = "../script_layout_interface"}
script_traits = {path = "../script_traits"}
-selectors = {version = "0.12", features = ["heap_size"]}
+selectors = {version = "0.13", features = ["heap_size"]}
serde_macros = "0.8"
smallvec = "0.1"
string_cache = {version = "0.2.26", features = ["heap_size"]}
diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml
index b573f182547..3e8e216c986 100644
--- a/components/script/Cargo.toml
+++ b/components/script/Cargo.toml
@@ -61,7 +61,7 @@ regex = "0.1.43"
rustc-serialize = "0.3"
script_layout_interface = {path = "../script_layout_interface"}
script_traits = {path = "../script_traits"}
-selectors = {version = "0.12", features = ["heap_size"]}
+selectors = {version = "0.13", features = ["heap_size"]}
serde = "0.8"
smallvec = "0.1"
string_cache = {version = "0.2.26", features = ["heap_size", "unstable"]}
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index e0342ebc3a6..193fb16b937 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -70,7 +70,7 @@ use html5ever::serialize::SerializeOpts;
use html5ever::serialize::TraversalScope;
use html5ever::serialize::TraversalScope::{ChildrenOnly, IncludeNode};
use html5ever::tree_builder::{LimitedQuirks, NoQuirks, Quirks};
-use selectors::matching::{ElementFlags, matches};
+use selectors::matching::{ElementFlags, MatchingReason, matches};
use selectors::matching::{HAS_SLOW_SELECTOR, HAS_EDGE_CHILD_SELECTOR, HAS_SLOW_SELECTOR_LATER_SIBLINGS};
use selectors::parser::{AttrSelector, NamespaceConstraint, parse_author_origin_selector_list_from_str};
use std::ascii::AsciiExt;
@@ -2006,7 +2006,7 @@ impl ElementMethods for Element {
match parse_author_origin_selector_list_from_str(&selectors) {
Err(()) => Err(Error::Syntax),
Ok(ref selectors) => {
- Ok(matches(selectors, &Root::from_ref(self), None))
+ Ok(matches(selectors, &Root::from_ref(self), None, MatchingReason::Other))
}
}
}
@@ -2024,7 +2024,7 @@ impl ElementMethods for Element {
let root = self.upcast::<Node>();
for element in root.inclusive_ancestors() {
if let Some(element) = Root::downcast::<Element>(element) {
- if matches(selectors, &element, None) {
+ if matches(selectors, &element, None, MatchingReason::Other) {
return Ok(Some(element));
}
}
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 49aa8242b34..555c7719fb1 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -63,7 +63,7 @@ use script_layout_interface::message::Msg;
use script_layout_interface::{HTMLCanvasData, OpaqueStyleAndLayoutData};
use script_layout_interface::{LayoutNodeType, LayoutElementType, TrustedNodeAddress};
use script_traits::UntrustedNodeAddress;
-use selectors::matching::matches;
+use selectors::matching::{MatchingReason, matches};
use selectors::parser::Selector;
use selectors::parser::parse_author_origin_selector_list_from_str;
use std::borrow::ToOwned;
@@ -319,7 +319,7 @@ impl<'a> Iterator for QuerySelectorIterator {
// (instead of passing `None`)? Probably.
self.iterator.by_ref().filter_map(|node| {
if let Some(element) = Root::downcast(node) {
- if matches(selectors, &element, None) {
+ if matches(selectors, &element, None, MatchingReason::Other) {
return Some(Root::upcast(element));
}
}
@@ -711,7 +711,7 @@ impl Node {
// Step 3.
Ok(ref selectors) => {
Ok(self.traverse_preorder().filter_map(Root::downcast).find(|element| {
- matches(selectors, element, None)
+ matches(selectors, element, None, MatchingReason::Other)
}))
}
}
diff --git a/components/script_layout_interface/Cargo.toml b/components/script_layout_interface/Cargo.toml
index 93a240680d4..ad051d4a9ae 100644
--- a/components/script_layout_interface/Cargo.toml
+++ b/components/script_layout_interface/Cargo.toml
@@ -27,7 +27,7 @@ plugins = {path = "../plugins"}
profile_traits = {path = "../profile_traits"}
range = {path = "../range"}
script_traits = {path = "../script_traits"}
-selectors = {version = "0.12", features = ["heap_size"]}
+selectors = {version = "0.13", features = ["heap_size"]}
string_cache = {version = "0.2.26", features = ["heap_size"]}
style = {path = "../style"}
url = {version = "1.2", features = ["heap_size"]}
diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock
index 05d1e246005..1c96d6f4469 100644
--- a/components/servo/Cargo.lock
+++ b/components/servo/Cargo.lock
@@ -1164,7 +1164,7 @@ dependencies = [
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
"script_layout_interface 0.0.1",
"script_traits 0.0.1",
- "selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1929,7 +1929,7 @@ dependencies = [
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
"script_layout_interface 0.0.1",
"script_traits 0.0.1",
- "selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1965,7 +1965,7 @@ dependencies = [
"profile_traits 0.0.1",
"range 0.0.1",
"script_traits 0.0.1",
- "selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)",
"style 0.0.1",
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2014,7 +2014,7 @@ dependencies = [
[[package]]
name = "selectors"
-version = "0.12.0"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2236,7 +2236,7 @@ dependencies = [
"quickersort 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2256,7 +2256,7 @@ dependencies = [
"cssparser 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"euclid 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)",
"style 0.0.1",
"style_traits 0.0.1",
@@ -2867,7 +2867,7 @@ dependencies = [
"checksum rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "6159e4e6e559c81bd706afe9c8fd68f547d3e851ce12e76b1de7914bab61691b"
"checksum rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "c5f5376ea5e30ce23c03eb77cbe4962b988deead10910c372b226388b594c084"
"checksum scoped_threadpool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "3ef399c8893e8cb7aa9696e895427fab3a6bf265977bb96e126f24ddd2cda85a"
-"checksum selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cdd81c2af3eba55ccc7048696c517a0e594ae9a4045b8fb3cc6ad80cd6d65ca5"
+"checksum selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9eee17ca1807581fc4cf0bfddda311dc421f295a71314b9276ecc787cc63ed6f"
"checksum semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac"
"checksum serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bfdad8985ce7708e21ada7f3f188a0079de4f8e239155348a024e31f13cddf86"
"checksum serde_codegen 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5ae9f0068a5f3266ac4d69eb0c1f9f048a2ac24a42af3db567bcd9a3ffe9d47e"
diff --git a/components/style/Cargo.toml b/components/style/Cargo.toml
index 41d56af8379..f782f62d70a 100644
--- a/components/style/Cargo.toml
+++ b/components/style/Cargo.toml
@@ -40,7 +40,7 @@ ordered-float = "0.2.2"
quickersort = "2.0.0"
rand = "0.3"
rustc-serialize = "0.3"
-selectors = "0.12"
+selectors = "0.13"
serde = {version = "0.8", optional = true}
serde_macros = {version = "0.8", optional = true}
smallvec = "0.1"
diff --git a/components/style/matching.rs b/components/style/matching.rs
index 749187fa58d..aba47943e2d 100644
--- a/components/style/matching.rs
+++ b/components/style/matching.rs
@@ -18,7 +18,7 @@ use properties::{ComputedValues, cascade, PropertyDeclarationBlock};
use selector_impl::{TheSelectorImpl, PseudoElement};
use selector_matching::{DeclarationBlock, Stylist};
use selectors::bloom::BloomFilter;
-use selectors::matching::{StyleRelations, AFFECTED_BY_PSEUDO_ELEMENTS};
+use selectors::matching::{MatchingReason, StyleRelations, AFFECTED_BY_PSEUDO_ELEMENTS};
use selectors::{Element, MatchAttr};
use sink::ForgetfulSink;
use smallvec::SmallVec;
@@ -658,7 +658,8 @@ pub trait ElementMatchMethods : TElement {
parent_bf,
style_attribute,
None,
- &mut applicable_declarations.normal);
+ &mut applicable_declarations.normal,
+ MatchingReason::ForStyling);
applicable_declarations.normal_shareable = relations_are_shareable(&relations);
@@ -667,7 +668,8 @@ pub trait ElementMatchMethods : TElement {
parent_bf,
None,
Some(&pseudo.clone()),
- applicable_declarations.per_pseudo.entry(pseudo).or_insert(vec![]));
+ applicable_declarations.per_pseudo.entry(pseudo).or_insert(vec![]),
+ MatchingReason::ForStyling);
});
let has_pseudos =
diff --git a/components/style/restyle_hints.rs b/components/style/restyle_hints.rs
index c150f1802dc..2801b17e368 100644
--- a/components/style/restyle_hints.rs
+++ b/components/style/restyle_hints.rs
@@ -8,8 +8,8 @@ use element_state::*;
#[cfg(feature = "servo")]
use heapsize::HeapSizeOf;
use selector_impl::{ElementExt, TheSelectorImpl, NonTSPseudoClass, AttrValue};
-use selectors::matching::StyleRelations;
use selectors::matching::matches_complex_selector;
+use selectors::matching::{MatchingReason, StyleRelations};
use selectors::parser::{AttrSelector, Combinator, ComplexSelector, SimpleSelector, SelectorImpl};
use selectors::{Element, MatchAttr};
use std::clone::Clone;
@@ -476,10 +476,12 @@ impl DependencySet {
if (attrs_changed || state_changes.intersects(dep.sensitivities.states)) && !hint.intersects(dep.hint) {
let matched_then =
matches_complex_selector(&dep.selector, snapshot, None,
- &mut StyleRelations::empty());
+ &mut StyleRelations::empty(),
+ MatchingReason::Other);
let matches_now =
matches_complex_selector(&dep.selector, element, None,
- &mut StyleRelations::empty());
+ &mut StyleRelations::empty(),
+ MatchingReason::Other);
if matched_then != matches_now {
hint.insert(dep.hint);
}
diff --git a/components/style/selector_matching.rs b/components/style/selector_matching.rs
index 0fd1d01453e..db082f5d480 100644
--- a/components/style/selector_matching.rs
+++ b/components/style/selector_matching.rs
@@ -16,7 +16,7 @@ use selector_impl::{ElementExt, TheSelectorImpl, PseudoElement};
use selectors::Element;
use selectors::bloom::BloomFilter;
use selectors::matching::{AFFECTED_BY_STYLE_ATTRIBUTE, AFFECTED_BY_PRESENTATIONAL_HINTS};
-use selectors::matching::{StyleRelations, matches_complex_selector};
+use selectors::matching::{MatchingReason, StyleRelations, matches_complex_selector};
use selectors::parser::{Selector, SimpleSelector, LocalName, ComplexSelector};
use sink::Push;
use smallvec::VecLike;
@@ -293,7 +293,8 @@ impl Stylist {
None,
None,
Some(pseudo),
- &mut declarations);
+ &mut declarations,
+ MatchingReason::ForStyling);
let (computed, _) =
properties::cascade(self.device.au_viewport_size(),
@@ -344,7 +345,8 @@ impl Stylist {
parent_bf: Option<&BloomFilter>,
style_attribute: Option<&Arc<PropertyDeclarationBlock>>,
pseudo_element: Option<&PseudoElement>,
- applicable_declarations: &mut V) -> StyleRelations
+ applicable_declarations: &mut V,
+ reason: MatchingReason) -> StyleRelations
where E: Element<Impl=TheSelectorImpl> +
fmt::Debug +
PresentationalHintsSynthetizer,
@@ -370,6 +372,7 @@ impl Stylist {
parent_bf,
applicable_declarations,
&mut relations,
+ reason,
Importance::Normal);
debug!("UA normal: {:?}", relations);
@@ -387,12 +390,14 @@ impl Stylist {
parent_bf,
applicable_declarations,
&mut relations,
+ reason,
Importance::Normal);
debug!("user normal: {:?}", relations);
map.author.normal.get_all_matching_rules(element,
parent_bf,
applicable_declarations,
&mut relations,
+ reason,
Importance::Normal);
debug!("author normal: {:?}", relations);
@@ -413,6 +418,7 @@ impl Stylist {
parent_bf,
applicable_declarations,
&mut relations,
+ reason,
Importance::Important);
debug!("author important: {:?}", relations);
@@ -434,6 +440,7 @@ impl Stylist {
parent_bf,
applicable_declarations,
&mut relations,
+ reason,
Importance::Important);
debug!("user important: {:?}", relations);
@@ -442,6 +449,7 @@ impl Stylist {
parent_bf,
applicable_declarations,
&mut relations,
+ reason,
Importance::Important);
debug!("UA important: {:?}", relations);
@@ -468,19 +476,22 @@ impl Stylist {
{
use selectors::matching::StyleRelations;
use selectors::matching::matches_complex_selector;
- // XXX we can probably do better, the candidate should already know what
- // rules it matches.
+ // TODO(emilio): we can probably do better, the candidate should already
+ // know what rules it matches. Also, we should only match until we find
+ // a descendant combinator, the rest should be ok, since the parent is
+ // the same.
//
- // XXX Could the bloom filter help here? Should be available.
+ // TODO(emilio): Use the bloom filter, since they contain the element's
+ // ancestor chain and it's correct for the candidate too.
for ref selector in self.non_common_style_affecting_attributes_selectors.iter() {
- let element_matches = matches_complex_selector(&selector.complex_selector,
- element,
- None,
- &mut StyleRelations::empty());
- let candidate_matches = matches_complex_selector(&selector.complex_selector,
- candidate,
- None,
- &mut StyleRelations::empty());
+ let element_matches =
+ matches_complex_selector(&selector.complex_selector, element,
+ None, &mut StyleRelations::empty(),
+ MatchingReason::Other);
+ let candidate_matches =
+ matches_complex_selector(&selector.complex_selector, candidate,
+ None, &mut StyleRelations::empty(),
+ MatchingReason::Other);
if element_matches != candidate_matches {
return false;
@@ -497,20 +508,21 @@ impl Stylist {
{
use selectors::matching::StyleRelations;
use selectors::matching::matches_complex_selector;
- // XXX we can probably do better, the candidate should already know what
- // rules it matches.
+ // TODO(emilio): we can probably do better, the candidate should already
+ // know what rules it matches.
//
- // XXX The bloom filter would help here, and should be available.
+ // TODO(emilio): Use the bloom filter, since they contain the element's
+ // ancestor chain and it's correct for the candidate too.
for ref selector in self.sibling_affecting_selectors.iter() {
- let element_matches = matches_complex_selector(&selector.complex_selector,
- element,
- None,
- &mut StyleRelations::empty());
+ let element_matches =
+ matches_complex_selector(&selector.complex_selector, element,
+ None, &mut StyleRelations::empty(),
+ MatchingReason::Other);
- let candidate_matches = matches_complex_selector(&selector.complex_selector,
- candidate,
- None,
- &mut StyleRelations::empty());
+ let candidate_matches =
+ matches_complex_selector(&selector.complex_selector, candidate,
+ None, &mut StyleRelations::empty(),
+ MatchingReason::Other);
if element_matches != candidate_matches {
debug!("match_same_sibling_affecting_rules: Failure due to {:?}",
@@ -650,6 +662,7 @@ impl SelectorMap {
parent_bf: Option<&BloomFilter>,
matching_rules_list: &mut V,
relations: &mut StyleRelations,
+ reason: MatchingReason,
importance: Importance)
where E: Element<Impl=TheSelectorImpl>,
V: VecLike<DeclarationBlock>
@@ -667,6 +680,7 @@ impl SelectorMap {
&id,
matching_rules_list,
relations,
+ reason,
importance)
}
@@ -677,6 +691,7 @@ impl SelectorMap {
class,
matching_rules_list,
relations,
+ reason,
importance);
});
@@ -691,6 +706,7 @@ impl SelectorMap {
element.get_local_name(),
matching_rules_list,
relations,
+ reason,
importance);
SelectorMap::get_matching_rules(element,
@@ -698,6 +714,7 @@ impl SelectorMap {
&self.other_rules,
matching_rules_list,
relations,
+ reason,
importance);
// Sort only the rules we just added.
@@ -735,6 +752,7 @@ impl SelectorMap {
key: &BorrowedStr,
matching_rules: &mut Vector,
relations: &mut StyleRelations,
+ reason: MatchingReason,
importance: Importance)
where E: Element<Impl=TheSelectorImpl>,
Str: Borrow<BorrowedStr> + Eq + Hash,
@@ -747,6 +765,7 @@ impl SelectorMap {
rules,
matching_rules,
relations,
+ reason,
importance)
}
}
@@ -757,6 +776,7 @@ impl SelectorMap {
rules: &[Rule],
matching_rules: &mut V,
relations: &mut StyleRelations,
+ reason: MatchingReason,
importance: Importance)
where E: Element<Impl=TheSelectorImpl>,
V: VecLike<DeclarationBlock>
@@ -769,8 +789,8 @@ impl SelectorMap {
block.any_normal()
};
if any_declaration_for_importance &&
- matches_complex_selector(&*rule.selector,
- element, parent_bf, relations) {
+ matches_complex_selector(&*rule.selector, element, parent_bf,
+ relations, reason) {
matching_rules.push(rule.declarations.clone());
}
}
diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock
index fedb1baa68f..21f902244ed 100644
--- a/ports/cef/Cargo.lock
+++ b/ports/cef/Cargo.lock
@@ -1072,7 +1072,7 @@ dependencies = [
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
"script_layout_interface 0.0.1",
"script_traits 0.0.1",
- "selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1781,7 +1781,7 @@ dependencies = [
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
"script_layout_interface 0.0.1",
"script_traits 0.0.1",
- "selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1817,7 +1817,7 @@ dependencies = [
"profile_traits 0.0.1",
"range 0.0.1",
"script_traits 0.0.1",
- "selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache 0.2.26 (registry+https://github.com/rust-lang/crates.io-index)",
"style 0.0.1",
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1856,7 +1856,7 @@ dependencies = [
[[package]]
name = "selectors"
-version = "0.12.0"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2119,7 +2119,7 @@ dependencies = [
"quickersort 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_macros 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2721,7 +2721,7 @@ dependencies = [
"checksum rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "6159e4e6e559c81bd706afe9c8fd68f547d3e851ce12e76b1de7914bab61691b"
"checksum rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "c5f5376ea5e30ce23c03eb77cbe4962b988deead10910c372b226388b594c084"
"checksum scoped_threadpool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "3ef399c8893e8cb7aa9696e895427fab3a6bf265977bb96e126f24ddd2cda85a"
-"checksum selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cdd81c2af3eba55ccc7048696c517a0e594ae9a4045b8fb3cc6ad80cd6d65ca5"
+"checksum selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9eee17ca1807581fc4cf0bfddda311dc421f295a71314b9276ecc787cc63ed6f"
"checksum semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac"
"checksum serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bfdad8985ce7708e21ada7f3f188a0079de4f8e239155348a024e31f13cddf86"
"checksum serde_codegen 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5ae9f0068a5f3266ac4d69eb0c1f9f048a2ac24a42af3db567bcd9a3ffe9d47e"
diff --git a/ports/geckolib/Cargo.lock b/ports/geckolib/Cargo.lock
index cc15eff2405..6f489176f8d 100644
--- a/ports/geckolib/Cargo.lock
+++ b/ports/geckolib/Cargo.lock
@@ -11,7 +11,7 @@ dependencies = [
"libc 0.2.15 (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.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"style 0.0.1",
"style_traits 0.0.1",
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -169,7 +169,7 @@ dependencies = [
"gecko_bindings 0.0.1",
"heapsize 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)",
- "selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -318,7 +318,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "selectors"
-version = "0.12.0"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -374,7 +374,7 @@ dependencies = [
"quickersort 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"style_traits 0.0.1",
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -538,7 +538,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
"checksum regex 0.1.73 (registry+https://github.com/rust-lang/crates.io-index)" = "56b7ee9f764ecf412c6e2fff779bca4b22980517ae335a21aeaf4e32625a5df2"
"checksum regex-syntax 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "31040aad7470ad9d8c46302dcffba337bb4289ca5da2e3cd6e37b64109a85199"
"checksum rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "6159e4e6e559c81bd706afe9c8fd68f547d3e851ce12e76b1de7914bab61691b"
-"checksum selectors 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cdd81c2af3eba55ccc7048696c517a0e594ae9a4045b8fb3cc6ad80cd6d65ca5"
+"checksum selectors 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9eee17ca1807581fc4cf0bfddda311dc421f295a71314b9276ecc787cc63ed6f"
"checksum serde 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bfdad8985ce7708e21ada7f3f188a0079de4f8e239155348a024e31f13cddf86"
"checksum smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "fcc8d19212aacecf95e4a7a2179b26f7aeb9732a915cf01f05b0d3e044865410"
"checksum string_cache 0.2.25 (registry+https://github.com/rust-lang/crates.io-index)" = "32e79c75e2fc7bbe0cd0bafa9eeacef16a09e269e8518382a7283904c105c20e"
diff --git a/ports/geckolib/Cargo.toml b/ports/geckolib/Cargo.toml
index 47b65234ff2..bcf38096e85 100644
--- a/ports/geckolib/Cargo.toml
+++ b/ports/geckolib/Cargo.toml
@@ -19,7 +19,7 @@ lazy_static = "0.2"
libc = "0.2"
log = {version = "0.3.5", features = ["release_max_level_info"]}
num_cpus = "0.2.2"
-selectors = "0.12"
+selectors = "0.13"
style = {path = "../../components/style", features = ["gecko"]}
style_traits = {path = "../../components/style_traits"}
url = "1.2"
diff --git a/ports/geckolib/string_cache/Cargo.toml b/ports/geckolib/string_cache/Cargo.toml
index 01cf743520e..4ababf8adcc 100644
--- a/ports/geckolib/string_cache/Cargo.toml
+++ b/ports/geckolib/string_cache/Cargo.toml
@@ -14,5 +14,5 @@ cfg-if = "0.1.0"
gecko_bindings = {version = "0.0.1", path = "../gecko_bindings"}
heapsize = "0.3.5"
libc = "0.2"
-selectors = "0.12"
+selectors = "0.13"
serde = "0.8"
diff --git a/tests/unit/style/Cargo.toml b/tests/unit/style/Cargo.toml
index 05b96695ccc..41a70dd9964 100644
--- a/tests/unit/style/Cargo.toml
+++ b/tests/unit/style/Cargo.toml
@@ -14,7 +14,7 @@ app_units = "0.3"
cssparser = {version = "0.6", features = ["heap_size"]}
euclid = "0.10.1"
rustc-serialize = "0.3"
-selectors = {version = "0.12", features = ["heap_size"]}
+selectors = {version = "0.13", features = ["heap_size"]}
string_cache = {version = "0.2.26", features = ["heap_size"]}
style = {path = "../../../components/style"}
style_traits = {path = "../../../components/style_traits"}
diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json
index d94defbd2d7..3297053b159 100644
--- a/tests/wpt/mozilla/meta/MANIFEST.json
+++ b/tests/wpt/mozilla/meta/MANIFEST.json
@@ -4636,6 +4636,18 @@
"url": "/_mozilla/css/removeproperty.html"
}
],
+ "css/restyle-nth-child.html": [
+ {
+ "path": "css/restyle-nth-child.html",
+ "references": [
+ [
+ "/_mozilla/css/restyle-nth-child-ref.html",
+ "=="
+ ]
+ ],
+ "url": "/_mozilla/css/restyle-nth-child.html"
+ }
+ ],
"css/restyle_hints_attr.html": [
{
"path": "css/restyle_hints_attr.html",
@@ -14006,6 +14018,18 @@
"url": "/_mozilla/css/removeproperty.html"
}
],
+ "css/restyle-nth-child.html": [
+ {
+ "path": "css/restyle-nth-child.html",
+ "references": [
+ [
+ "/_mozilla/css/restyle-nth-child-ref.html",
+ "=="
+ ]
+ ],
+ "url": "/_mozilla/css/restyle-nth-child.html"
+ }
+ ],
"css/restyle_hints_attr.html": [
{
"path": "css/restyle_hints_attr.html",
diff --git a/tests/wpt/mozilla/tests/css/restyle-nth-child-ref.html b/tests/wpt/mozilla/tests/css/restyle-nth-child-ref.html
new file mode 100644
index 00000000000..c59c9fde35c
--- /dev/null
+++ b/tests/wpt/mozilla/tests/css/restyle-nth-child-ref.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS test reference.</title>
+<style>
+ .container div {
+ width: 50px;
+ height: 50px;
+ background: blue;
+ }
+ .container div:nth-child(2) {
+ background: green;
+ }
+</style>
+<div class="container">
+ <div></div>
+ <div></div>
+</div>
diff --git a/tests/wpt/mozilla/tests/css/restyle-nth-child.html b/tests/wpt/mozilla/tests/css/restyle-nth-child.html
new file mode 100644
index 00000000000..b7e1fb4b461
--- /dev/null
+++ b/tests/wpt/mozilla/tests/css/restyle-nth-child.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>Restyling of a child of a parent that didn't match nth-child but now
+ does should be correct.</title>
+<link rel="match" href="restyle-nth-child-ref.html">
+<style>
+ .container div {
+ width: 50px;
+ height: 50px;
+ background: blue;
+ }
+ .container div:nth-child(2) {
+ background: green;
+ }
+</style>
+<div class="container">
+ <div></div>
+</div>
+<script>
+ let container = document.querySelector('.container');
+ window.onload = function() {
+ container.insertBefore(document.createElement('div'), container.firstChild);
+ }
+</script>