tor-browser

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

browser_menu_and_alerts.js (4290B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 "use strict";
      6 
      7 function matchHideParent(parent) {
      8  return event => {
      9    event.QueryInterface(Ci.nsIAccessibleHideEvent);
     10    if (typeof parent == "string") {
     11      return getAccessibleDOMNodeID(event.targetParent) == parent;
     12    }
     13 
     14    return event.targetParent == parent;
     15  };
     16 }
     17 
     18 /**
     19 * Accessible menu popup start/end
     20 */
     21 addAccessibleTask(
     22  `
     23  <div id="container">
     24  <ul id="menu" role="menu" style="display: none;">
     25    <li role="menuitem">Hello</li>
     26  </ul>
     27  </div>
     28  `,
     29  async function (browser) {
     30    let expectedEvents = waitForEvents(
     31      [
     32        [EVENT_SHOW, "menu"],
     33        [EVENT_REORDER, "container"],
     34        [EVENT_MENUPOPUP_START, "menu"],
     35      ],
     36      "Popup start sequence",
     37      true
     38    );
     39    await invokeContentTask(browser, [], () => {
     40      content.document.getElementById("menu").style.display = "block";
     41    });
     42    await expectedEvents;
     43 
     44    expectedEvents = waitForEvents(
     45      [
     46        [EVENT_MENUPOPUP_END, "menu"],
     47        [EVENT_HIDE, matchHideParent("container")],
     48        [EVENT_REORDER, "container"],
     49      ],
     50      "Popup end sequence",
     51      true
     52    );
     53    await invokeContentTask(browser, [], () => {
     54      content.document.getElementById("menu").style.display = "none";
     55    });
     56    await expectedEvents;
     57  },
     58  { chrome: true, topLevel: true }
     59 );
     60 
     61 /**
     62 * Accessible menu popup start/end in subtree
     63 */
     64 addAccessibleTask(
     65  `
     66  <div id="container" style="display: none;">
     67  <ul id="menu" role="menu">
     68    <li role="menuitem">Hello</li>
     69  </ul>
     70  </div>
     71  `,
     72  async function (browser, accDoc) {
     73    let expectedEvents = waitForEvents(
     74      [
     75        [EVENT_SHOW, "container"],
     76        [EVENT_REORDER, accDoc],
     77        [EVENT_MENUPOPUP_START, "menu"],
     78      ],
     79      "Embedded popup start sequence",
     80      true
     81    );
     82    await invokeContentTask(browser, [], () => {
     83      content.document.getElementById("container").style.display = "block";
     84    });
     85    await expectedEvents;
     86 
     87    expectedEvents = waitForEvents(
     88      [
     89        [EVENT_MENUPOPUP_END, "menu"],
     90        [EVENT_HIDE, matchHideParent(accDoc)],
     91        [EVENT_REORDER, accDoc],
     92      ],
     93      "Embedded popup end sequence",
     94      true
     95    );
     96    await invokeContentTask(browser, [], () => {
     97      content.document.getElementById("container").style.display = "none";
     98    });
     99    await expectedEvents;
    100  },
    101  { chrome: true, topLevel: true }
    102 );
    103 
    104 /**
    105 * Accessible alert event
    106 */
    107 addAccessibleTask(
    108  `
    109  <div id="container">
    110  <div role="alert" id="alert" style="display: none;">Alert!</div>
    111  </div>
    112  `,
    113  async function (browser, accDoc) {
    114    let expectedEvents = waitForEvents(
    115      [[EVENT_SHOW], [EVENT_REORDER, "container"], [EVENT_ALERT, "alert"]],
    116      "Alert events sequence",
    117      true
    118    );
    119    await invokeContentTask(browser, [], () => {
    120      content.document.getElementById("alert").style.display = "block";
    121    });
    122    await expectedEvents;
    123 
    124    expectedEvents = waitForEvent(EVENT_REORDER, accDoc);
    125    await invokeContentTask(browser, [], () => {
    126      content.document.getElementById("container").style.display = "none";
    127    });
    128    await expectedEvents;
    129 
    130    expectedEvents = waitForEvents(
    131      [[EVENT_SHOW], [EVENT_REORDER, accDoc], [EVENT_ALERT, "alert"]],
    132      "Embedded Alert events sequence",
    133      true
    134    );
    135    await invokeContentTask(browser, [], () => {
    136      content.document.getElementById("container").style.display = "block";
    137    });
    138    await expectedEvents;
    139  },
    140  { chrome: true, topLevel: true }
    141 );
    142 
    143 /**
    144 * No alert event at load.
    145 */
    146 addAccessibleTask(
    147  ``,
    148  async function (browser) {
    149    let onLoadEvents = waitForEvents({
    150      expected: [
    151        [EVENT_FOCUS, "body2"],
    152        [EVENT_DOCUMENT_LOAD_COMPLETE, "body2"],
    153        stateChangeEventArgs("body2", STATE_BUSY, false, false),
    154      ],
    155      unexpected: [[EVENT_ALERT]],
    156    });
    157 
    158    BrowserTestUtils.startLoadingURIString(
    159      browser,
    160      `data:text/html;charset=utf-8,
    161      <html><body id="body2">
    162        <div role="alert" id="alert">Alert!</div>
    163      </body></html>`
    164    );
    165 
    166    await onLoadEvents;
    167  },
    168  { chrome: true, topLevel: true }
    169 );