diff options
author | Patrick Walton <pcwalton@mimiga.net> | 2016-03-14 19:14:21 -0700 |
---|---|---|
committer | Patrick Walton <pcwalton@mimiga.net> | 2016-03-15 21:32:16 -0700 |
commit | d59dee0c6541c4ad7cc93d94fb0ee7a31a9779d0 (patch) | |
tree | ad5373dc11cf1ed220e9a56791d8dc8d3b819a1e | |
parent | aea8d8959dcb157a8cc381f1403246ce8ca1ca00 (diff) | |
download | servo-d59dee0c6541c4ad7cc93d94fb0ee7a31a9779d0.tar.gz servo-d59dee0c6541c4ad7cc93d94fb0ee7a31a9779d0.zip |
style: Compute damage for text nodes.
They have styles just like elements do.
Allows a dynamic change of `display: none` to `display: inline` to work.
Closes #9868.
-rw-r--r-- | components/style/matching.rs | 11 | ||||
-rw-r--r-- | tests/wpt/metadata-css/css21_dev/html4/run-in-display-none-between-003.htm.ini | 3 | ||||
-rw-r--r-- | tests/wpt/mozilla/meta/MANIFEST.json | 24 | ||||
-rw-r--r-- | tests/wpt/mozilla/tests/css/text_damage_a.html | 14 | ||||
-rw-r--r-- | tests/wpt/mozilla/tests/css/text_damage_ref.html | 6 |
5 files changed, 52 insertions, 6 deletions
diff --git a/components/style/matching.rs b/components/style/matching.rs index 211f04acbab..1c158505e97 100644 --- a/components/style/matching.rs +++ b/components/style/matching.rs @@ -655,6 +655,7 @@ pub trait MatchMethods : TNode { } }; + let damage; if self.is_text_node() { // Text nodes get a copy of the parent style. This ensures // that during fragment construction any non-inherited @@ -663,9 +664,11 @@ pub trait MatchMethods : TNode { let mut data_ref = self.mutate_data().unwrap(); let mut data = &mut *data_ref; let cloned_parent_style = parent_style.unwrap().clone(); + damage = Self::ConcreteRestyleDamage::compute(data.style.as_ref(), + &*cloned_parent_style); data.style = Some(cloned_parent_style); } else { - let damage = { + damage = { let mut data_ref = self.mutate_data().unwrap(); let mut data = &mut *data_ref; let (mut damage, final_style) = self.cascade_node_pseudo_element( @@ -706,13 +709,15 @@ pub trait MatchMethods : TNode { // This method needs to borrow the data as mutable, so make sure data_ref goes out of // scope first. - self.set_restyle_damage(damage); - self.set_can_be_fragmented(parent.map_or(false, |p| { p.can_be_fragmented() || parent_style.as_ref().unwrap().is_multicol() })); } + + // This method needs to borrow the data as mutable, so make sure data_ref goes out of + // scope first. + self.set_restyle_damage(damage); } } diff --git a/tests/wpt/metadata-css/css21_dev/html4/run-in-display-none-between-003.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/run-in-display-none-between-003.htm.ini deleted file mode 100644 index ec1d723ee59..00000000000 --- a/tests/wpt/metadata-css/css21_dev/html4/run-in-display-none-between-003.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[run-in-display-none-between-003.htm] - type: reftest - expected: FAIL diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 7ea42099e65..b214e9e3e77 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -4560,6 +4560,18 @@ "url": "/_mozilla/css/text_align_start_end.html" } ], + "css/text_damage_a.html": [ + { + "path": "css/text_damage_a.html", + "references": [ + [ + "/_mozilla/css/text_damage_ref.html", + "==" + ] + ], + "url": "/_mozilla/css/text_damage_a.html" + } + ], "css/text_decoration_cached.html": [ { "path": "css/text_decoration_cached.html", @@ -10760,6 +10772,18 @@ "url": "/_mozilla/css/text_align_start_end.html" } ], + "css/text_damage_a.html": [ + { + "path": "css/text_damage_a.html", + "references": [ + [ + "/_mozilla/css/text_damage_ref.html", + "==" + ] + ], + "url": "/_mozilla/css/text_damage_a.html" + } + ], "css/text_decoration_cached.html": [ { "path": "css/text_decoration_cached.html", diff --git a/tests/wpt/mozilla/tests/css/text_damage_a.html b/tests/wpt/mozilla/tests/css/text_damage_a.html new file mode 100644 index 00000000000..428e804c119 --- /dev/null +++ b/tests/wpt/mozilla/tests/css/text_damage_a.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<meta charset="utf-8"> +<title></title> +<link rel="match" href="text_damage_ref.html"> +<span class="lock" style="display: none">foo</span><span>bar</span> +<script> +window.onload = function() { + document.querySelector(".lock").style.display = "inline"; + document.documentElement.classList.remove("reftest-wait"); +}; +</script> + + diff --git a/tests/wpt/mozilla/tests/css/text_damage_ref.html b/tests/wpt/mozilla/tests/css/text_damage_ref.html new file mode 100644 index 00000000000..3cf8ef2b20c --- /dev/null +++ b/tests/wpt/mozilla/tests/css/text_damage_ref.html @@ -0,0 +1,6 @@ +<!DOCTYPE html> +<html> +<meta charset="utf-8"> +<title></title> +<span class="lock" style="display: inline">foo</span><span>bar</span> + |