diff options
author | Prudhvi Rampey <gergteg777@gmail.com> | 2017-02-10 19:49:25 +0530 |
---|---|---|
committer | Prudhvi Rampey <gergteg777@gmail.com> | 2017-02-18 20:12:19 +0530 |
commit | 0c213337774575605a8d171bc1a2d7cc05747aac (patch) | |
tree | 2e10b684bc9560096cc2a280de15c35899e0df83 /components/script/dom/mediaquerylist.rs | |
parent | 216a89f7766dd366c4afbeae42cf6e1fb4f67349 (diff) | |
download | servo-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.rs | 18 |
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>()); + } } } |