tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

MediaQueryList-extends-EventTarget-interop.html (4739B)


      1 <!DOCTYPE html>
      2 <meta charset="utf-8">
      3 <meta name="flags" content="dom">
      4 <title>CSS Test: CSSOM View MediaQueryList extends EventTarget (interop)</title>
      5 <link rel="help" href="https://www.w3.org/TR/cssom-view-1/#the-mediaquerylist-interface">
      6 <script src="/resources/testharness.js"></script>
      7 <script src="/resources/testharnessreport.js"></script>
      8 <script src="resources/matchMedia.js"></script>
      9 <div id="log"></div>
     10 <script>
     11 "use strict";
     12 
     13 test(() => {
     14    const mql = window.matchMedia("all");
     15 
     16    let receivedEvent;
     17    mql.addListener(event => {
     18        receivedEvent = event;
     19    });
     20 
     21    const dispatchedEvent = new Event("change");
     22    mql.dispatchEvent(dispatchedEvent);
     23 
     24    assert_equals(receivedEvent, dispatchedEvent);
     25 }, "dispatchEvent triggers listener added with addListener");
     26 
     27 promise_test(async t => {
     28    const mql = await createMQL(t);
     29 
     30    let calls = 0;
     31    const listener = {
     32        handleEvent() {
     33            calls++;
     34        },
     35    };
     36 
     37    mql.addListener(listener);
     38    mql.addEventListener("change", listener);
     39 
     40    triggerMQLEvent(mql);
     41    await waitForChangesReported();
     42    assert_equals(calls, 1, "triggerMQLEvent");
     43 
     44    mql.dispatchEvent(new Event("change"));
     45    assert_equals(calls, 2, "dispatchEvent");
     46 }, "listener added with addListener and addEventListener is called once");
     47 
     48 promise_test(async t => {
     49    const mql = await createMQL(t);
     50 
     51    let calls = 0;
     52    const listener = () => {
     53        calls++;
     54    };
     55 
     56    mql.addListener(listener);
     57    mql.addEventListener("change", listener, true);
     58 
     59    triggerMQLEvent(mql);
     60    await waitForChangesReported();
     61    assert_equals(calls, 2, "triggerMQLEvent");
     62 
     63    mql.dispatchEvent(new Event("change"));
     64    assert_equals(calls, 4, "dispatchEvent");
     65 }, "listener added with addListener and addEventListener (capture) is called twice");
     66 
     67 promise_test(async t => {
     68    const mql = await createMQL(t);
     69 
     70    let calls = 0;
     71    const listener = {
     72        handleEvent() {
     73            calls++;
     74        },
     75    };
     76 
     77    mql.addListener(listener);
     78    mql.removeEventListener("change", listener);
     79 
     80    triggerMQLEvent(mql);
     81    await waitForChangesReported();
     82    assert_equals(calls, 0, "triggerMQLEvent");
     83 
     84    mql.dispatchEvent(new Event("change"));
     85    assert_equals(calls, 0, "dispatchEvent");
     86 }, "removeEventListener removes listener added with addListener");
     87 
     88 promise_test(async t => {
     89    const mql = await createMQL(t);
     90 
     91    let calls = 0;
     92    const listener = () => {
     93        calls++;
     94    };
     95 
     96    mql.addListener(listener);
     97    mql.removeEventListener("change", listener, true);
     98 
     99    triggerMQLEvent(mql);
    100    await waitForChangesReported();
    101    assert_equals(calls, 1, "triggerMQLEvent");
    102 
    103    mql.dispatchEvent(new Event("change"));
    104    assert_equals(calls, 2, "dispatchEvent");
    105 }, "removeEventListener (capture) doesn't remove listener added with addListener");
    106 
    107 promise_test(async t => {
    108    const mql = await createMQL(t);
    109 
    110    let calls = 0;
    111    const listener = {
    112        handleEvent() {
    113            calls++;
    114        },
    115    };
    116 
    117    mql.addEventListener("change", listener);
    118    mql.removeListener(listener);
    119 
    120    triggerMQLEvent(mql);
    121    await waitForChangesReported();
    122    assert_equals(calls, 0, "triggerMQLEvent");
    123 
    124    mql.dispatchEvent(new Event("change"));
    125    assert_equals(calls, 0, "dispatchEvent");
    126 }, "removeListener removes listener added with addEventListener");
    127 
    128 promise_test(async t => {
    129    const mql = await createMQL(t);
    130 
    131    let calls = 0;
    132    const listener = () => {
    133        calls++;
    134    };
    135 
    136    mql.addEventListener("change", listener, true);
    137    mql.removeListener(listener);
    138 
    139    triggerMQLEvent(mql);
    140    await waitForChangesReported();
    141    assert_equals(calls, 1, "triggerMQLEvent");
    142 
    143    mql.dispatchEvent(new Event("change"));
    144    assert_equals(calls, 2, "dispatchEvent");
    145 }, "removeListener doesn't remove listener added with addEventListener (capture)");
    146 
    147 // See:
    148 //   * https://github.com/whatwg/dom/issues/746
    149 //   * https://bugzilla.mozilla.org/show_bug.cgi?id=1492446
    150 //   * https://bugs.chromium.org/p/chromium/issues/detail?id=949432
    151 promise_test(async t => {
    152    const mql = await createMQL(t);
    153 
    154    let calls = [];
    155    mql.addListener(() => {
    156        calls.push("addListener");
    157    });
    158    mql.addEventListener("change", {
    159        handleEvent() {
    160            calls.push("addEventListener");
    161        },
    162    }, true);
    163 
    164    triggerMQLEvent(mql);
    165    await waitForChangesReported();
    166    assert_array_equals(calls, ["addEventListener", "addListener"], "triggerMQLEvent");
    167 
    168    calls = [];
    169    mql.dispatchEvent(new Event("change"));
    170    assert_array_equals(calls, ["addEventListener", "addListener"], "dispatchEvent");
    171 }, "capturing event listener fires before non-capturing listener at target");
    172 </script>