diff options
Diffstat (limited to 'components/script/dom/htmlmetaelement.rs')
-rw-r--r-- | components/script/dom/htmlmetaelement.rs | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/components/script/dom/htmlmetaelement.rs b/components/script/dom/htmlmetaelement.rs index 29135ee933a..c948dde4ab8 100644 --- a/components/script/dom/htmlmetaelement.rs +++ b/components/script/dom/htmlmetaelement.rs @@ -8,13 +8,14 @@ use dom::bindings::codegen::Bindings::HTMLMetaElementBinding; use dom::bindings::codegen::Bindings::HTMLMetaElementBinding::HTMLMetaElementMethods; use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use dom::bindings::inheritance::Castable; -use dom::bindings::js::{Root, RootedReference}; +use dom::bindings::js::{JS, MutNullableHeap, Root, RootedReference}; use dom::bindings::str::DOMString; +use dom::cssstylesheet::CSSStyleSheet; use dom::document::Document; use dom::element::{AttributeMutation, Element}; use dom::htmlelement::HTMLElement; use dom::htmlheadelement::HTMLHeadElement; -use dom::node::{Node, UnbindContext, document_from_node}; +use dom::node::{Node, UnbindContext, document_from_node, window_from_node}; use dom::virtualmethods::VirtualMethods; use html5ever_atoms::LocalName; use parking_lot::RwLock; @@ -30,6 +31,7 @@ pub struct HTMLMetaElement { htmlelement: HTMLElement, #[ignore_heap_size_of = "Arc"] stylesheet: DOMRefCell<Option<Arc<Stylesheet>>>, + cssom_stylesheet: MutNullableHeap<JS<CSSStyleSheet>>, } impl HTMLMetaElement { @@ -39,6 +41,7 @@ impl HTMLMetaElement { HTMLMetaElement { htmlelement: HTMLElement::new_inherited(local_name, prefix, document), stylesheet: DOMRefCell::new(None), + cssom_stylesheet: MutNullableHeap::new(None), } } @@ -55,6 +58,18 @@ impl HTMLMetaElement { self.stylesheet.borrow().clone() } + pub fn get_cssom_stylesheet(&self) -> Option<Root<CSSStyleSheet>> { + self.get_stylesheet().map(|sheet| { + self.cssom_stylesheet.or_init(|| { + CSSStyleSheet::new(&window_from_node(self), + "text/css".into(), + None, // todo handle location + None, // todo handle title + sheet) + }) + }) + } + fn process_attributes(&self) { let element = self.upcast::<Element>(); if let Some(name) = element.get_attribute(&ns!(), &local_name!("name")).r() { |