<!doctype html>
<title>MediaQueryList.changed is correct for all lists in the document even during a change event handler</title>
<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
<link rel="author" href="https://mozilla.org" title="Mozilla">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1648839">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#evaluate-media-queries-and-report-changes">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/matchMedia.js"></script>
<body>
<script>
  promise_test(async t => {
    // Create two identical media queries.
    let mql = await createMQL(t);
    let mql2 = getWindow(mql).matchMedia(mql.media);

    let changeEvents = 0;

    let check = t.step_func(function() {
      changeEvents++;
      assert_equals(mql.matches, mql2.matches, "Value of .matches should match"); // No pun intended
    });

    mql.addListener(check);
    mql2.addListener(check);

    triggerMQLEvent(mql);
    await waitForChangesReported();

    assert_equals(changeEvents, 2, "Should've fired the change event in both MediaQueryLists");
  });
</script>
