diff options
author | Nazım Can Altınova <canaltinova@gmail.com> | 2016-12-02 01:19:20 +0300 |
---|---|---|
committer | Nazım Can Altınova <canaltinova@gmail.com> | 2016-12-02 23:46:40 +0300 |
commit | c05283528164ddca1052727e2073e4a9dc2765ae (patch) | |
tree | 8ce550481ae50d44a667c366326744dcefdac78c /components/script/dom/cssmediarule.rs | |
parent | 5abbc9f69668f23469a9c01937c68e305fa36cd8 (diff) | |
download | servo-c05283528164ddca1052727e2073e4a9dc2765ae.tar.gz servo-c05283528164ddca1052727e2073e4a9dc2765ae.zip |
Implement MediaList interface
Diffstat (limited to 'components/script/dom/cssmediarule.rs')
-rw-r--r-- | components/script/dom/cssmediarule.rs | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/components/script/dom/cssmediarule.rs b/components/script/dom/cssmediarule.rs index e42c1bc0021..7f4f43f3d5b 100644 --- a/components/script/dom/cssmediarule.rs +++ b/components/script/dom/cssmediarule.rs @@ -3,12 +3,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::codegen::Bindings::CSSMediaRuleBinding; -use dom::bindings::js::Root; -use dom::bindings::reflector::reflect_dom_object; +use dom::bindings::codegen::Bindings::CSSMediaRuleBinding::CSSMediaRuleMethods; +use dom::bindings::js::{JS, MutNullableHeap, Root}; +use dom::bindings::reflector::{Reflectable, reflect_dom_object}; use dom::bindings::str::DOMString; use dom::cssgroupingrule::CSSGroupingRule; use dom::cssrule::SpecificCSSRule; use dom::cssstylesheet::CSSStyleSheet; +use dom::medialist::MediaList; use dom::window::Window; use parking_lot::RwLock; use std::sync::Arc; @@ -20,6 +22,7 @@ pub struct CSSMediaRule { cssrule: CSSGroupingRule, #[ignore_heap_size_of = "Arc"] mediarule: Arc<RwLock<MediaRule>>, + medialist: MutNullableHeap<JS<MediaList>>, } impl CSSMediaRule { @@ -29,6 +32,7 @@ impl CSSMediaRule { CSSMediaRule { cssrule: CSSGroupingRule::new_inherited(parent_stylesheet, list), mediarule: mediarule, + medialist: MutNullableHeap::new(None), } } @@ -39,6 +43,11 @@ impl CSSMediaRule { window, CSSMediaRuleBinding::Wrap) } + + fn medialist(&self) -> Root<MediaList> { + self.medialist.or_init(|| MediaList::new(self.global().as_window(), + self.mediarule.read().media_queries.clone())) + } } impl SpecificCSSRule for CSSMediaRule { @@ -51,3 +60,10 @@ impl SpecificCSSRule for CSSMediaRule { self.mediarule.read().to_css_string().into() } } + +impl CSSMediaRuleMethods for CSSMediaRule { + // https://drafts.csswg.org/cssom/#dom-cssgroupingrule-media + fn Media(&self) -> Root<MediaList> { + self.medialist() + } +} |