aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/cssrulelist.rs
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2016-11-16 17:31:37 -0800
committerManish Goregaokar <manishsmail@gmail.com>2016-11-23 09:32:40 -0800
commit53c99662bce82d9975c1a91e66cfdf1197ff53a2 (patch)
tree6cd50acdb6edc9da4d7b43e4e7c5547536e88082 /components/script/dom/cssrulelist.rs
parent52a3a71be3d025f080bb5fe4603f517a5523aa5d (diff)
downloadservo-53c99662bce82d9975c1a91e66cfdf1197ff53a2.tar.gz
servo-53c99662bce82d9975c1a91e66cfdf1197ff53a2.zip
Make parent stylesheet optional for CSSRules
Diffstat (limited to 'components/script/dom/cssrulelist.rs')
-rw-r--r--components/script/dom/cssrulelist.rs19
1 files changed, 12 insertions, 7 deletions
diff --git a/components/script/dom/cssrulelist.rs b/components/script/dom/cssrulelist.rs
index 902f3c8a189..ebdea9f2ca0 100644
--- a/components/script/dom/cssrulelist.rs
+++ b/components/script/dom/cssrulelist.rs
@@ -24,7 +24,7 @@ no_jsmanaged_fields!(RulesSource);
#[dom_struct]
pub struct CSSRuleList {
reflector_: Reflector,
- sheet: JS<CSSStyleSheet>,
+ sheet: MutNullableHeap<JS<CSSStyleSheet>>,
#[ignore_heap_size_of = "Arc"]
rules: RulesSource,
dom_rules: DOMRefCell<Vec<MutNullableHeap<JS<CSSRule>>>>
@@ -37,7 +37,7 @@ pub enum RulesSource {
impl CSSRuleList {
#[allow(unrooted_must_root)]
- pub fn new_inherited(sheet: &CSSStyleSheet, rules: RulesSource) -> CSSRuleList {
+ pub fn new_inherited(sheet: Option<&CSSStyleSheet>, rules: RulesSource) -> CSSRuleList {
let dom_rules = match rules {
RulesSource::Rules(ref rules) => {
rules.0.read().iter().map(|_| MutNullableHeap::new(None)).collect()
@@ -49,14 +49,15 @@ impl CSSRuleList {
CSSRuleList {
reflector_: Reflector::new(),
- sheet: JS::from_ref(sheet),
+ sheet: MutNullableHeap::new(sheet),
rules: rules,
dom_rules: DOMRefCell::new(dom_rules),
}
}
#[allow(unrooted_must_root)]
- pub fn new(window: &Window, sheet: &CSSStyleSheet, rules: RulesSource) -> Root<CSSRuleList> {
+ pub fn new(window: &Window, sheet: Option<&CSSStyleSheet>,
+ rules: RulesSource) -> Root<CSSRuleList> {
reflect_dom_object(box CSSRuleList::new_inherited(sheet, rules),
window,
CSSRuleListBinding::Wrap)
@@ -132,7 +133,9 @@ impl CSSRuleList {
};
insert(&mut css_rules.0.write(), index, new_rule.clone());
- let dom_rule = CSSRule::new_specific(&window, &self.sheet, new_rule);
+ let sheet = self.sheet.get();
+ let sheet = sheet.as_ref().map(|sheet| &**sheet);
+ let dom_rule = CSSRule::new_specific(&window, sheet, new_rule);
insert(&mut self.dom_rules.borrow_mut(),
index, MutNullableHeap::new(Some(&*dom_rule)));
Ok((idx))
@@ -174,15 +177,17 @@ impl CSSRuleListMethods for CSSRuleList {
fn Item(&self, idx: u32) -> Option<Root<CSSRule>> {
self.dom_rules.borrow().get(idx as usize).map(|rule| {
rule.or_init(|| {
+ let sheet = self.sheet.get();
+ let sheet = sheet.as_ref().map(|sheet| &**sheet);
match self.rules {
RulesSource::Rules(ref rules) => {
CSSRule::new_specific(self.global().as_window(),
- &self.sheet,
+ sheet,
rules.0.read()[idx as usize].clone())
}
RulesSource::Keyframes(ref rules) => {
Root::upcast(CSSKeyframeRule::new(self.global().as_window(),
- &self.sheet,
+ sheet,
rules.read()
.keyframes[idx as usize]
.clone()))