From 2ff18b6b95b869acc365986dccc257b6a9ed0cab Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sun, 10 May 2015 11:45:45 +0200 Subject: [PATCH] Stop using TElement's unsound get_attr in link/style code. --- components/script/dom/htmllinkelement.rs | 8 ++++++-- components/script/dom/htmlstyleelement.rs | 13 +++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index 1189b21af46..7d944a46016 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -22,7 +22,6 @@ use dom::window::WindowHelpers; use layout_interface::{LayoutChan, Msg}; use util::str::{DOMString, HTML_SPACE_CHARACTERS}; use style::media_queries::parse_media_query_list; -use style::node::TElement; use cssparser::Parser as CssParser; use std::ascii::AsciiExt; @@ -145,7 +144,12 @@ impl<'a> PrivateHTMLLinkElementHelpers for JSRef<'a, HTMLLinkElement> { Ok(url) => { let element: JSRef = ElementCast::from_ref(self); - let mq_str = element.get_attr(&ns!(""), &atom!("media")).unwrap_or(""); + let mq_attribute = element.get_attribute(&ns!(""), &atom!("media")).root(); + let value = mq_attribute.r().map(|a| a.value()); + let mq_str = match value { + Some(ref value) => &***value, + None => "", + }; let mut css_parser = CssParser::new(&mq_str); let media = parse_media_query_list(&mut css_parser); diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs index 93886218a62..572c7df38eb 100644 --- a/components/script/dom/htmlstyleelement.rs +++ b/components/script/dom/htmlstyleelement.rs @@ -2,13 +2,14 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +use dom::attr::AttrHelpers; use dom::bindings::codegen::Bindings::HTMLStyleElementBinding; use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, HTMLStyleElementDerived, NodeCast}; -use dom::bindings::js::{JSRef, OptionalRootable, Rootable, Temporary}; +use dom::bindings::js::{JSRef, OptionalRootable, Rootable, Temporary, RootedReference}; use dom::document::Document; use dom::eventtarget::{EventTarget, EventTargetTypeId}; -use dom::element::{Element, ElementTypeId}; +use dom::element::{Element, ElementTypeId, AttributeHandlers}; use dom::htmlelement::{HTMLElement, HTMLElementTypeId}; use dom::node::{Node, NodeHelpers, NodeTypeId, window_from_node}; use dom::virtualmethods::VirtualMethods; @@ -17,7 +18,6 @@ use layout_interface::{LayoutChan, Msg}; use util::str::DOMString; use style::stylesheets::{Origin, Stylesheet}; use style::media_queries::parse_media_query_list; -use style::node::TElement; use cssparser::Parser as CssParser; #[dom_struct] @@ -59,7 +59,12 @@ impl<'a> StyleElementHelpers for JSRef<'a, HTMLStyleElement> { let win = win.r(); let url = win.get_url(); - let mq_str = element.get_attr(&ns!(""), &atom!("media")).unwrap_or(""); + let mq_attribute = element.get_attribute(&ns!(""), &atom!("media")).root(); + let value = mq_attribute.r().map(|a| a.value()); + let mq_str = match value { + Some(ref value) => &***value, + None => "", + }; let mut css_parser = CssParser::new(&mq_str); let media = parse_media_query_list(&mut css_parser);