tor-browser

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

browser_take_focus.js (3506B)


      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 /* import-globals-from ../../mochitest/states.js */
      8 loadScripts(
      9  { name: "role.js", dir: MOCHITESTS_DIR },
     10  { name: "states.js", dir: MOCHITESTS_DIR }
     11 );
     12 
     13 addAccessibleTask(
     14  `<div role="group"><input id="textbox" value="hello"/></div>`,
     15  async function (browser, iframeDocAcc, contentDocAcc) {
     16    const textbox = findAccessibleChildByID(iframeDocAcc, "textbox");
     17    const iframe = findAccessibleChildByID(contentDocAcc, "default-iframe-id");
     18    const iframeDoc = findAccessibleChildByID(
     19      contentDocAcc,
     20      "default-iframe-body-id"
     21    );
     22    const root = getRootAccessible(document);
     23 
     24    testStates(textbox, STATE_FOCUSABLE, 0, STATE_FOCUSED);
     25 
     26    let onFocus = waitForEvent(EVENT_FOCUS, textbox);
     27    textbox.takeFocus();
     28    await onFocus;
     29 
     30    testStates(textbox, STATE_FOCUSABLE | STATE_FOCUSED, 0);
     31 
     32    is(
     33      getAccessibleDOMNodeID(contentDocAcc.focusedChild),
     34      "textbox",
     35      "correct focusedChild from top doc"
     36    );
     37 
     38    is(
     39      getAccessibleDOMNodeID(iframeDocAcc.focusedChild),
     40      "textbox",
     41      "correct focusedChild from iframe"
     42    );
     43 
     44    is(
     45      getAccessibleDOMNodeID(root.focusedChild),
     46      "textbox",
     47      "correct focusedChild from root"
     48    );
     49 
     50    ok(!iframe.focusedChild, "correct focusedChild from iframe (null)");
     51 
     52    onFocus = waitForEvent(EVENT_FOCUS, iframeDoc);
     53    iframeDoc.takeFocus();
     54    await onFocus;
     55 
     56    is(
     57      getAccessibleDOMNodeID(contentDocAcc.focusedChild),
     58      "default-iframe-body-id",
     59      "correct focusedChild of child doc from top doc"
     60    );
     61    is(
     62      getAccessibleDOMNodeID(iframe.focusedChild),
     63      "default-iframe-body-id",
     64      "correct focusedChild of child doc from iframe"
     65    );
     66    is(
     67      getAccessibleDOMNodeID(root.focusedChild),
     68      "default-iframe-body-id",
     69      "correct focusedChild of child doc from root"
     70    );
     71  },
     72  { topLevel: false, iframe: true, remoteIframe: true }
     73 );
     74 
     75 function focusURLBar() {
     76  info("Focusing the URL bar");
     77  const focused = waitForEvent(
     78    EVENT_FOCUS,
     79    event => event.accessible.role == ROLE_ENTRY
     80  );
     81  gURLBar.focus();
     82  return focused;
     83 }
     84 
     85 /**
     86 * Test takeFocus on web content when focus is in the browser UI.
     87 */
     88 addAccessibleTask(
     89  `
     90 <button id="outerButton">outerButton</button>
     91 <iframe src="data:text/html,<body id='innerDoc'><button id='innerButton'>innerButton</button>"></iframe>
     92  `,
     93  async function testFocusContentWhileUiFocused(browser, docAcc) {
     94    await focusURLBar();
     95    info("Focusing docAcc");
     96    let focused = waitForEvent(EVENT_FOCUS, docAcc);
     97    docAcc.takeFocus();
     98    await focused;
     99 
    100    await focusURLBar();
    101    info("Focusing outerButton");
    102    const outerButton = findAccessibleChildByID(docAcc, "outerButton");
    103    focused = waitForEvent(EVENT_FOCUS, outerButton);
    104    outerButton.takeFocus();
    105    await focused;
    106 
    107    await focusURLBar();
    108    info("Focusing innerButton");
    109    const innerButton = findAccessibleChildByID(docAcc, "outerButton");
    110    focused = waitForEvent(EVENT_FOCUS, innerButton);
    111    innerButton.takeFocus();
    112    await focused;
    113 
    114    await focusURLBar();
    115    info("Focusing outerButton");
    116    focused = waitForEvent(EVENT_FOCUS, outerButton);
    117    outerButton.takeFocus();
    118    await focused;
    119  },
    120  { chrome: true, topLevel: true, iframe: true, remoteIframe: true }
    121 );