tor-browser

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

browser_css_alt.js (9335B)


      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/role.js */
      8 loadScripts({ name: "role.js", dir: MOCHITESTS_DIR });
      9 
     10 const IMAGE =
     11  'url("https://example.com/a11y/accessible/tests/mochitest/moz.png")';
     12 
     13 /**
     14 * Test CSS content replacing an element.
     15 */
     16 addAccessibleTask(
     17  `
     18 <style>
     19  .twoStrings1 {
     20    content: ${IMAGE} / "re" "placed";
     21  }
     22  .twoStrings2 {
     23    content: ${IMAGE} / "RE" "PLACED";
     24  }
     25 </style>
     26 <h1 id="noAlt" style='content: ${IMAGE};'>noAlt</h1>
     27 <h1 id="oneString" style='content: ${IMAGE} / "replaced";'>oneString</h1>
     28 <h1 id="twoStrings" class="twoStrings1">twoStrings</h1>
     29 <h1 id="attr" style='content: ${IMAGE} / attr(data-alt)' data-alt="replaced">attr</h1>
     30 <h1 id="attrFallback" style='content: ${IMAGE} / attr(data-alt, "fallback")'>attrFallback</h1>
     31 <h1 id="mixed" style='content: ${IMAGE} / "re" attr(data-alt, "fallback") attr(missing, "ed")' data-alt="plac">mixed</h1>
     32 <h1 id="noInitialContent">noInitialContent</h1>
     33  `,
     34  async function testReplacing(browser, docAcc) {
     35    testAccessibleTree(findAccessibleChildByID(docAcc, "noAlt"), {
     36      role: ROLE_HEADING,
     37      children: [],
     38    });
     39    const oneString = findAccessibleChildByID(docAcc, "oneString");
     40    testAccessibleTree(oneString, {
     41      role: ROLE_HEADING,
     42      name: "replaced",
     43      children: [],
     44    });
     45    const twoStrings = findAccessibleChildByID(docAcc, "twoStrings");
     46    testAccessibleTree(twoStrings, {
     47      role: ROLE_HEADING,
     48      name: "replaced",
     49      children: [],
     50    });
     51    const attr = findAccessibleChildByID(docAcc, "attr");
     52    testAccessibleTree(attr, {
     53      role: ROLE_HEADING,
     54      name: "replaced",
     55      children: [],
     56    });
     57    const attrFallback = findAccessibleChildByID(docAcc, "attrFallback");
     58    testAccessibleTree(attrFallback, {
     59      role: ROLE_HEADING,
     60      name: "fallback",
     61      children: [],
     62    });
     63    testAccessibleTree(findAccessibleChildByID(docAcc, "mixed"), {
     64      role: ROLE_HEADING,
     65      name: "replaced",
     66      children: [],
     67    });
     68 
     69    info("Changing oneString content style");
     70    let changed = waitForEvent(EVENT_NAME_CHANGE, oneString);
     71    await invokeSetStyle(
     72      browser,
     73      "oneString",
     74      "content",
     75      `${IMAGE} / "REPLACED"`
     76    );
     77    await changed;
     78    testAccessibleTree(oneString, {
     79      role: ROLE_HEADING,
     80      name: "REPLACED",
     81      children: [],
     82    });
     83 
     84    info("Changing twoStrings class to twoStrings2");
     85    changed = waitForEvent(EVENT_NAME_CHANGE, twoStrings);
     86    await invokeSetAttribute(browser, "twoStrings", "class", "twoStrings2");
     87    await changed;
     88    testAccessibleTree(twoStrings, {
     89      role: ROLE_HEADING,
     90      name: "REPLACED",
     91      children: [],
     92    });
     93 
     94    info("Changing attr data-alt");
     95    changed = waitForEvent(EVENT_NAME_CHANGE, attr);
     96    await invokeSetAttribute(browser, "attr", "data-alt", "REPLACED");
     97    await changed;
     98    testAccessibleTree(attr, {
     99      role: ROLE_HEADING,
    100      name: "REPLACED",
    101      children: [],
    102    });
    103 
    104    info("Changing attrFallback data-alt");
    105    changed = waitForEvent(EVENT_NAME_CHANGE, attrFallback);
    106    await invokeSetAttribute(browser, "attrFallback", "data-alt", "replaced");
    107    await changed;
    108    testAccessibleTree(attrFallback, {
    109      role: ROLE_HEADING,
    110      name: "replaced",
    111      children: [],
    112    });
    113 
    114    const noInitialContent = findAccessibleChildByID(
    115      docAcc,
    116      "noInitialContent"
    117    );
    118    testAccessibleTree(noInitialContent, {
    119      role: ROLE_HEADING,
    120      name: "noInitialContent",
    121      children: [{ role: ROLE_TEXT_LEAF, name: "noInitialContent" }],
    122    });
    123    info("Add content prop to noInitialContent");
    124    changed = waitForEvent(EVENT_NAME_CHANGE, noInitialContent);
    125    await invokeSetStyle(
    126      browser,
    127      "noInitialContent",
    128      "content",
    129      `${IMAGE} / "replaced"`
    130    );
    131    await changed;
    132    testAccessibleTree(noInitialContent, {
    133      role: ROLE_HEADING,
    134      name: "replaced",
    135      children: [],
    136    });
    137  },
    138  { chrome: true, topLevel: true }
    139 );
    140 
    141 /**
    142 * Test CSS image content in pseudo-elements.
    143 */
    144 addAccessibleTask(
    145  `
    146 <style>
    147  #noAlt::before, #noAlt::after {
    148    content: ${IMAGE};
    149  }
    150  .strings1::before {
    151    content: ${IMAGE} / "be" "fore";
    152  }
    153  .strings2::before {
    154    content: ${IMAGE} / "BE" "FORE";
    155  }
    156  #strings::after {
    157    content: ${IMAGE} / "af" "ter";
    158  }
    159  #mixed::before {
    160    content: ${IMAGE} / "be" attr(data-alt);
    161  }
    162 </style>
    163 <h1 id="noAlt">noAlt</h1>
    164 <h1 id="strings" class="strings1">inside</h1>
    165 <h1 id="mixed" data-alt="fore">inside</h1>
    166  `,
    167  async function testImagePseudo(browser, docAcc) {
    168    testAccessibleTree(findAccessibleChildByID(docAcc, "noAlt"), {
    169      role: ROLE_HEADING,
    170      children: [{ role: ROLE_TEXT_LEAF, name: "noAlt" }],
    171    });
    172    const strings = findAccessibleChildByID(docAcc, "strings");
    173    testAccessibleTree(strings, {
    174      role: ROLE_HEADING,
    175      name: "before inside after",
    176      children: [
    177        { role: ROLE_GRAPHIC, name: "before" },
    178        { role: ROLE_TEXT_LEAF, name: "inside" },
    179        { role: ROLE_GRAPHIC, name: "after" },
    180      ],
    181    });
    182    const mixed = findAccessibleChildByID(docAcc, "mixed");
    183    testAccessibleTree(mixed, {
    184      role: ROLE_HEADING,
    185      name: "before inside",
    186      children: [
    187        { role: ROLE_GRAPHIC, name: "before" },
    188        { role: ROLE_TEXT_LEAF, name: "inside" },
    189      ],
    190    });
    191 
    192    info("Changing strings class to strings2");
    193    let changed = waitForEvent(EVENT_NAME_CHANGE, strings);
    194    await invokeSetAttribute(browser, "strings", "class", "strings2");
    195    await changed;
    196    testAccessibleTree(strings, {
    197      role: ROLE_HEADING,
    198      name: "BEFORE inside after",
    199      children: [
    200        { role: ROLE_GRAPHIC, name: "BEFORE" },
    201        { role: ROLE_TEXT_LEAF, name: "inside" },
    202        { role: ROLE_GRAPHIC, name: "after" },
    203      ],
    204    });
    205 
    206    info("Changing mixed data-alt");
    207    changed = waitForEvent(EVENT_NAME_CHANGE, mixed);
    208    await invokeSetAttribute(browser, "mixed", "data-alt", "FORE");
    209    await changed;
    210    testAccessibleTree(mixed, {
    211      role: ROLE_HEADING,
    212      name: "beFORE inside",
    213      children: [
    214        { role: ROLE_GRAPHIC, name: "beFORE" },
    215        { role: ROLE_TEXT_LEAF, name: "inside" },
    216      ],
    217    });
    218  },
    219  { chrome: true, topLevel: true }
    220 );
    221 
    222 /**
    223 * Test CSS text content in pseudo-elements.
    224 */
    225 addAccessibleTask(
    226  `
    227 <style>
    228  #noAlt::before {
    229    content: "before";
    230  }
    231  .strings1::before {
    232    content: "before" / "a" "lt";
    233  }
    234  .strings2::before {
    235    content: "before" / "A" "LT";
    236  }
    237  #mixed::before {
    238    content: "before" / "a" attr(data-alt);
    239  }
    240  #empty::after {
    241    content: "" / "alt";
    242  }
    243  #space::after {
    244    content: " " / "alt";
    245  }
    246 </style>
    247 <h1 id="noAlt">noAlt</h1>
    248 <h1 id="strings" class="strings1">inside</h1>
    249 <h1 id="mixed" data-alt="lt">inside</h1>
    250 <h1 id="empty">inside</h1>
    251 <h1 id="space">inside</h1>
    252  `,
    253  async function testTextPseudo(browser, docAcc) {
    254    testAccessibleTree(findAccessibleChildByID(docAcc, "noAlt"), {
    255      role: ROLE_HEADING,
    256      name: "beforenoAlt",
    257      children: [
    258        { role: ROLE_STATICTEXT, name: "before" },
    259        { role: ROLE_TEXT_LEAF, name: "noAlt" },
    260      ],
    261    });
    262    const strings = findAccessibleChildByID(docAcc, "strings");
    263    testAccessibleTree(strings, {
    264      role: ROLE_HEADING,
    265      name: "altinside",
    266      children: [
    267        { role: ROLE_STATICTEXT, name: "alt" },
    268        { role: ROLE_TEXT_LEAF, name: "inside" },
    269      ],
    270    });
    271    const mixed = findAccessibleChildByID(docAcc, "mixed");
    272    testAccessibleTree(mixed, {
    273      role: ROLE_HEADING,
    274      name: "altinside",
    275      children: [
    276        { role: ROLE_STATICTEXT, name: "alt" },
    277        { role: ROLE_TEXT_LEAF, name: "inside" },
    278      ],
    279    });
    280    const empty = findAccessibleChildByID(docAcc, "empty");
    281    testAccessibleTree(empty, {
    282      role: ROLE_HEADING,
    283      name: "insidealt",
    284      children: [
    285        { role: ROLE_TEXT_LEAF, name: "inside" },
    286        { role: ROLE_STATICTEXT, name: "alt" },
    287      ],
    288    });
    289    const space = findAccessibleChildByID(docAcc, "space");
    290    testAccessibleTree(space, {
    291      role: ROLE_HEADING,
    292      name: "insidealt",
    293      children: [
    294        { role: ROLE_TEXT_LEAF, name: "inside" },
    295        { role: ROLE_STATICTEXT, name: "alt" },
    296      ],
    297    });
    298 
    299    info("Changing strings class to strings2");
    300    let changed = waitForEvent(EVENT_NAME_CHANGE, strings);
    301    await invokeSetAttribute(browser, "strings", "class", "strings2");
    302    await changed;
    303    testAccessibleTree(strings, {
    304      role: ROLE_HEADING,
    305      name: "ALTinside",
    306      children: [
    307        { role: ROLE_STATICTEXT, name: "ALT" },
    308        { role: ROLE_TEXT_LEAF, name: "inside" },
    309      ],
    310    });
    311 
    312    info("Changing mixed data-alt");
    313    changed = waitForEvent(EVENT_NAME_CHANGE, mixed);
    314    await invokeSetAttribute(browser, "mixed", "data-alt", "LT");
    315    await changed;
    316    testAccessibleTree(mixed, {
    317      role: ROLE_HEADING,
    318      name: "aLTinside",
    319      children: [
    320        { role: ROLE_STATICTEXT, name: "aLT" },
    321        { role: ROLE_TEXT_LEAF, name: "inside" },
    322      ],
    323    });
    324  },
    325  { chrome: true, topLevel: true }
    326 );