From 0c213337774575605a8d171bc1a2d7cc05747aac Mon Sep 17 00:00:00 2001 From: Prudhvi Rampey Date: Fri, 10 Feb 2017 19:49:25 +0530 Subject: [PATCH] Calling matchMedia during a MQL change event will not panic --- components/script/dom/mediaquerylist.rs | 18 ++++++++---- tests/wpt/mozilla/meta/MANIFEST.json | 10 +++++++ .../wpt/mozilla/tests/mozilla/mql_borrow.html | 29 +++++++++++++++++++ 3 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 tests/wpt/mozilla/tests/mozilla/mql_borrow.html 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::().fire(mql.upcast::()); + // 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::().fire(mql.upcast::()); + } } } diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index c73fdd4a390..ea5d1628d99 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -13261,6 +13261,12 @@ {} ] ], + "mozilla/mql_borrow.html": [ + [ + "/_mozilla/mozilla/mql_borrow.html", + {} + ] + ], "mozilla/navigator.html": [ [ "/_mozilla/mozilla/navigator.html", @@ -25842,6 +25848,10 @@ "5513229f79ab37de67eb4d60ea9dd23cd31d133f", "support" ], + "mozilla/mql_borrow.html": [ + "f8f9adebe09f9473a52e5ec4f075540b10b32d7e", + "testharness" + ], "mozilla/navigator.html": [ "939f453fecfb28a36cb93057382b56439b00b136", "testharness" diff --git a/tests/wpt/mozilla/tests/mozilla/mql_borrow.html b/tests/wpt/mozilla/tests/mozilla/mql_borrow.html new file mode 100644 index 00000000000..17ee0dc48a3 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/mql_borrow.html @@ -0,0 +1,29 @@ + + + + + + + + +