aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/mediaquerylist.rs
diff options
context:
space:
mode:
authorPrudhvi Rampey <gergteg777@gmail.com>2017-02-10 19:49:25 +0530
committerPrudhvi Rampey <gergteg777@gmail.com>2017-02-18 20:12:19 +0530
commit0c213337774575605a8d171bc1a2d7cc05747aac (patch)
tree2e10b684bc9560096cc2a280de15c35899e0df83 /components/script/dom/mediaquerylist.rs
parent216a89f7766dd366c4afbeae42cf6e1fb4f67349 (diff)
downloadservo-0c213337774575605a8d171bc1a2d7cc05747aac.tar.gz
servo-0c213337774575605a8d171bc1a2d7cc05747aac.zip
Calling matchMedia during a MQL change event will not panic
Diffstat (limited to 'components/script/dom/mediaquerylist.rs')
-rw-r--r--components/script/dom/mediaquerylist.rs18
1 files changed, 12 insertions, 6 deletions
diff --git a/components/script/dom/mediaquerylist.rs b/components/script/dom/mediaquerylist.rs
index c6e569b5e42..2545b911c7a 100644
--- a/components/script/dom/mediaquerylist.rs
+++ b/components/script/dom/mediaquerylist.rs
@@ -138,17 +138,23 @@ impl WeakMediaQueryListVec {
/// Evaluate media query lists and report changes
/// https://drafts.csswg.org/cssom-view/#evaluate-media-queries-and-report-changes
pub fn evaluate_and_report_changes(&self) {
+ rooted_vec!(let mut mql_list);
self.cell.borrow_mut().update(|mql| {
let mql = mql.root().unwrap();
if let MediaQueryListMatchState::Changed(_) = mql.evaluate_changes() {
- let event = MediaQueryListEvent::new(&mql.global(),
- atom!("change"),
- false, false,
- mql.Media(),
- mql.Matches());
- event.upcast::<Event>().fire(mql.upcast::<EventTarget>());
+ // Recording list of changed Media Queries
+ mql_list.push(JS::from_ref(&*mql));
}
});
+ // Sending change events for all changed Media Queries
+ for mql in mql_list.iter() {
+ let event = MediaQueryListEvent::new(&mql.global(),
+ atom!("change"),
+ false, false,
+ mql.Media(),
+ mql.Matches());
+ event.upcast::<Event>().fire(mql.upcast::<EventTarget>());
+ }
}
}