From 7e6fd297ff44e1fb34c5278492075a5a80e66e93 Mon Sep 17 00:00:00 2001 From: Alan Jeffrey Date: Tue, 25 Jul 2017 15:59:00 -0500 Subject: [PATCH] Implement getProperties for StylePropertyMap. --- .../script/dom/stylepropertymapreadonly.rs | 26 +++++++++++++++++++ .../webidls/StylePropertyMapReadOnly.webidl | 3 ++- .../style-background-image.html.ini | 2 +- .../style-before-pseudo.html.ini | 2 +- .../style-first-letter-pseudo.html.ini | 2 +- 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/components/script/dom/stylepropertymapreadonly.rs b/components/script/dom/stylepropertymapreadonly.rs index 323f5dae5a9..38632f3e6e9 100644 --- a/components/script/dom/stylepropertymapreadonly.rs +++ b/components/script/dom/stylepropertymapreadonly.rs @@ -13,6 +13,7 @@ use dom::cssstylevalue::CSSStyleValue; use dom::globalscope::GlobalScope; use dom_struct::dom_struct; use servo_atoms::Atom; +use std::cmp::Ordering; use std::collections::HashMap; use std::iter::Iterator; @@ -63,4 +64,29 @@ impl StylePropertyMapReadOnlyMethods for StylePropertyMapReadOnly { // TODO: avoid constructing an Atom self.entries.contains_key(&Atom::from(property)) } + + /// https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymapreadonly-getproperties + fn GetProperties(&self) -> Vec { + let mut result: Vec = self.entries.keys() + .map(|key| DOMString::from(&**key)) + .collect(); + // https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-getproperties + // requires this sort order + result.sort_by(|key1, key2| { + if key1.starts_with("-") { + if key2.starts_with("-") { + key1.cmp(key2) + } else { + Ordering::Greater + } + } else { + if key2.starts_with("-") { + Ordering::Less + } else { + key1.cmp(key2) + } + } + }); + result + } } diff --git a/components/script/dom/webidls/StylePropertyMapReadOnly.webidl b/components/script/dom/webidls/StylePropertyMapReadOnly.webidl index 7557a0d6071..360e3af909d 100644 --- a/components/script/dom/webidls/StylePropertyMapReadOnly.webidl +++ b/components/script/dom/webidls/StylePropertyMapReadOnly.webidl @@ -10,6 +10,7 @@ interface StylePropertyMapReadOnly { // sequence getAll(DOMString property); boolean has(DOMString property); // iterable)>; - // sequence getProperties(); + sequence getProperties(); + // https://github.com/w3c/css-houdini-drafts/issues/268 // stringifier; }; diff --git a/tests/wpt/mozilla/meta/mozilla/css-paint-api/style-background-image.html.ini b/tests/wpt/mozilla/meta/mozilla/css-paint-api/style-background-image.html.ini index 5632e4c5931..b5b74284aa0 100644 --- a/tests/wpt/mozilla/meta/mozilla/css-paint-api/style-background-image.html.ini +++ b/tests/wpt/mozilla/meta/mozilla/css-paint-api/style-background-image.html.ini @@ -1,4 +1,4 @@ [style-background-image.html] type: reftest expected: FAIL - bug: https://github.com/servo/servo/issues/17579 + bug: https://github.com/servo/servo/issues/17378 diff --git a/tests/wpt/mozilla/meta/mozilla/css-paint-api/style-before-pseudo.html.ini b/tests/wpt/mozilla/meta/mozilla/css-paint-api/style-before-pseudo.html.ini index c3ae11d8b7c..8e3e18c50ad 100644 --- a/tests/wpt/mozilla/meta/mozilla/css-paint-api/style-before-pseudo.html.ini +++ b/tests/wpt/mozilla/meta/mozilla/css-paint-api/style-before-pseudo.html.ini @@ -1,4 +1,4 @@ [style-before-pseudo.html] type: reftest expected: FAIL - bug: https://github.com/servo/servo/issues/17579 + bug: https://github.com/servo/servo/issues/17854 diff --git a/tests/wpt/mozilla/meta/mozilla/css-paint-api/style-first-letter-pseudo.html.ini b/tests/wpt/mozilla/meta/mozilla/css-paint-api/style-first-letter-pseudo.html.ini index 521e635bece..55518de2716 100644 --- a/tests/wpt/mozilla/meta/mozilla/css-paint-api/style-first-letter-pseudo.html.ini +++ b/tests/wpt/mozilla/meta/mozilla/css-paint-api/style-first-letter-pseudo.html.ini @@ -1,4 +1,4 @@ [style-first-letter-pseudo.html] type: reftest expected: FAIL - bug: https://github.com/servo/servo/issues/17579 + bug: https://github.com/servo/servo/issues/17854