diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/cssstyledeclaration.rs | 19 | ||||
-rw-r--r-- | components/script/dom/window.rs | 13 |
2 files changed, 15 insertions, 17 deletions
diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs index c119f8a70e6..c8be4f560a6 100644 --- a/components/script/dom/cssstyledeclaration.rs +++ b/components/script/dom/cssstyledeclaration.rs @@ -12,7 +12,6 @@ use dom::element::Element; use dom::node::{Node, NodeDamage, window_from_node}; use dom::window::Window; use parking_lot::RwLock; -use servo_atoms::Atom; use std::ascii::AsciiExt; use std::sync::Arc; use style::parser::ParserContextExtraData; @@ -74,12 +73,12 @@ impl CSSStyleDeclaration { CSSStyleDeclarationBinding::Wrap) } - fn get_computed_style(&self, property: &Atom) -> Option<DOMString> { + fn get_computed_style(&self, property: PropertyId) -> DOMString { let node = self.owner.upcast::<Node>(); if !node.is_in_doc() { // TODO: Node should be matched against the style rules of this window. // Firefox is currently the only browser to implement this. - return None; + return DOMString::new(); } let addr = node.to_trusted_node_address(); window_from_node(&*self.owner).resolved_style_query(addr, self.pseudo.clone(), property) @@ -103,14 +102,7 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration { } // https://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-getpropertyvalue - fn GetPropertyValue(&self, mut property: DOMString) -> DOMString { - if self.readonly { - // Readonly style declarations are used for getComputedStyle. - property.make_ascii_lowercase(); - let property = Atom::from(property); - return self.get_computed_style(&property).unwrap_or(DOMString::new()); - } - + fn GetPropertyValue(&self, property: DOMString) -> DOMString { let id = if let Ok(id) = PropertyId::parse(property.into()) { id } else { @@ -118,6 +110,11 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration { return DOMString::new() }; + if self.readonly { + // Readonly style declarations are used for getComputedStyle. + return self.get_computed_style(id); + } + let style_attribute = self.owner.style_attribute().borrow(); let style_attribute = if let Some(ref lock) = *style_attribute { lock.read() diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 282979dc7bf..db6490b41fd 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -92,6 +92,7 @@ use std::sync::mpsc::TryRecvError::{Disconnected, Empty}; use style::context::ReflowGoal; use style::error_reporting::ParseErrorReporter; use style::media_queries; +use style::properties::PropertyId; use style::properties::longhands::overflow_x; use style::selector_parser::PseudoElement; use style::str::HTML_SPACE_CHARACTERS; @@ -1295,16 +1296,16 @@ impl Window { } pub fn resolved_style_query(&self, - element: TrustedNodeAddress, - pseudo: Option<PseudoElement>, - property: &Atom) -> Option<DOMString> { + element: TrustedNodeAddress, + pseudo: Option<PseudoElement>, + property: PropertyId) -> DOMString { if !self.reflow(ReflowGoal::ForScriptQuery, - ReflowQueryType::ResolvedStyleQuery(element, pseudo, property.clone()), + ReflowQueryType::ResolvedStyleQuery(element, pseudo, property), ReflowReason::Query) { - return None; + return DOMString::new(); } let ResolvedStyleResponse(resolved) = self.layout_rpc.resolved_style(); - resolved.map(DOMString::from) + DOMString::from(resolved) } pub fn offset_parent_query(&self, node: TrustedNodeAddress) -> (Option<Root<Element>>, Rect<Au>) { |