<!DOCTYPE html>
<meta charset="utf-8">
<meta name="flags" content="dom">
<title>CSS Test: CSSOM View MediaQueryList::{add,remove}Listener</title>
<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com">
<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#the-mediaquerylist-interface">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/matchMedia.js"></script>
<div id="log"></div>
<script>
"use strict";

test(() => {
    const mql = window.matchMedia("(min-width: 100px)");

    mql.addListener(null);
    mql.addListener(undefined);

    mql.removeListener(null);
    mql.removeListener(undefined);
}, "EventListener parameter is optional");

promise_test(async t => {
    const iframe = await createIFrame(t, 200, 100);
    const heightMQL = iframe.contentWindow.matchMedia("(max-height: 50px)");
    const widthMQL = iframe.contentWindow.matchMedia("(min-width: 150px)");

    let heightEvent;
    let widthEvent;

    heightMQL.addListener(event => {
        heightEvent = event;
    });
    widthMQL.addListener(event => {
        widthEvent = event;
    });

    assert_false(heightMQL.matches);
    assert_true(widthMQL.matches);

    iframe.height = "50"; // 200x100 => 200x50
    await waitForChangesReported();

    assert_equals(heightEvent.media, heightMQL.media);
    assert_true(heightEvent.matches);
    assert_true(heightMQL.matches);
    assert_true(widthMQL.matches);

    iframe.width = "100"; // 200x50 => 100x50
    await waitForChangesReported();

    assert_equals(widthEvent.media, widthMQL.media);
    assert_false(widthEvent.matches);
    assert_false(widthMQL.matches);
    assert_true(heightMQL.matches);
}, "listeners are called when <iframe> is resized");

promise_test(async t => {
    const mql = await createMQL(t);

    let eventsCount = 0;
    mql.addListener(() => {
        eventsCount++;
    });

    for (let i = 1; i <= 10; i++) {
        triggerMQLEvent(mql);
        await waitForChangesReported();
        assert_equals(eventsCount, i);
    }
}, "listeners are called correct number of times");

promise_test(async t => {
    const mql = await createMQL(t);
    const calls = [];

    mql.addListener(() => {
        calls.push("1st");
    });
    mql.addListener(() => {
        calls.push("2nd");
    });

    triggerMQLEvent(mql);
    await waitForChangesReported();

    assert_array_equals(calls, ["1st", "2nd"]);
}, "listeners are called in order they were added");

promise_test(async t => {
    const mql = await createMQL(t);

    let called = 0;
    const listener = () => {
        called++;
    };

    mql.addListener(listener);
    mql.addListener(listener);

    triggerMQLEvent(mql);
    await waitForChangesReported();

    assert_equals(called, 1);
}, "listener that was added twice is called only once");

promise_test(async t => {
    const iframe = await createIFrame(t, 100);
    const media = `(min-width: 200px)`;

    const mql1 = iframe.contentWindow.matchMedia(media);
    const mql2 = iframe.contentWindow.matchMedia(media);
    const calls = [];

    mql2.addListener(() => {
        calls.push("mql2");
    });

    mql1.addListener(() => {
        calls.push("mql1");
    });

    iframe.width = "200"; // 100x100 => 200x100
    await waitForChangesReported();

    assert_array_equals(calls, ["mql1", "mql2"]);
}, "listeners are called in order their MQLs were created");

promise_test(async t => {
    const iframe = await createIFrame(t, 200);
    const media = `(max-height: 150px)`;

    const mql1 = iframe.contentWindow.matchMedia(media);
    const mql2 = iframe.contentWindow.matchMedia(media);

    let calls = 0;
    const listener = () => {
        calls++;
    };

    mql1.addListener(listener);
    mql2.removeListener(listener);

    iframe.height = "50"; // 200x200 => 200x50
    await waitForChangesReported();

    assert_equals(calls, 1);
}, "removing listener from one MQL doesn't remove it from all MQLs");

promise_test(async t => {
    const mql = await createMQL(t);
    const listener = t.unreached_func("should not be called");

    mql.addListener(listener);
    mql.removeListener(listener);

    triggerMQLEvent(mql);
    await waitForChangesReported();
}, "MediaQueryList::removeListener removes added listener");
</script>
