tor-browser

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

test_extra_text_markup.html (3166B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <meta charset="utf-8">
      5  <title>Test L10nOverlays Localized text markup</title>
      6  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
      7  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
      8  <script type="application/javascript">
      9  /* global L10nOverlays */
     10  "use strict";
     11 
     12  function elem(name) {
     13    return function(str) {
     14      const element = document.createElement(name);
     15      element.innerHTML = str;
     16      return element;
     17    };
     18  }
     19 
     20  const { translateElement } = L10nOverlays;
     21 
     22  // Localized text markup
     23  {
     24    // allowed element
     25    const element = elem("div")`Foo`;
     26    const translation = {
     27      value: "FOO <em>BAR</em> BAZ",
     28      attributes: null,
     29    };
     30 
     31    translateElement(element, translation);
     32    is(element.innerHTML, "FOO <em>BAR</em> BAZ");
     33  }
     34 
     35  {
     36    // forbidden element
     37    const element = elem("div")`Foo`;
     38    const translation = {
     39      value: 'FOO <img src="img.png" />',
     40      attributes: null,
     41    };
     42 
     43    translateElement(element, translation);
     44    is(element.innerHTML, "FOO ");
     45  }
     46 
     47  {
     48    // forbiden element with text
     49    const element = elem("div")`Foo`;
     50    const translation = {
     51      value: "FOO <a>a</a>",
     52      attributes: null,
     53    };
     54 
     55    translateElement(element, translation);
     56    is(element.innerHTML, "FOO a");
     57  }
     58 
     59  {
     60    // nested HTML is forbidden
     61    const element = elem("div")`Foo`;
     62    const translation = {
     63      value: "FOO <em><strong>BAR</strong></em> BAZ",
     64      attributes: null,
     65    };
     66 
     67    translateElement(element, translation);
     68    is(element.innerHTML, "FOO <em>BAR</em> BAZ");
     69  }
     70 
     71  // Attributes of localized text markup
     72  {
     73    // allowed attribute
     74    const element = elem("div")`Foo Bar`;
     75    const translation = {
     76      value: 'FOO <em title="BAR">BAR</em>',
     77      attributes: null,
     78    };
     79 
     80    translateElement(element, translation);
     81    is(element.innerHTML,
     82      'FOO <em title="BAR">BAR</em>');
     83  }
     84 
     85  {
     86    // forbidden attribute
     87    const element = elem("div")`Foo Bar`;
     88    const translation = {
     89      value: 'FOO <em class="BAR" title="BAR">BAR</em>',
     90      attributes: null,
     91    };
     92 
     93    translateElement(element, translation);
     94    is(element.innerHTML,
     95      'FOO <em title="BAR">BAR</em>');
     96  }
     97 
     98  {
     99    // attributes do not leak on first translation
    100    const element = elem("div")`
    101      <em title="Foo">Foo</a>`;
    102    const translation = {
    103      value: "<em>FOO</em>",
    104      attributes: null,
    105    };
    106 
    107    translateElement(element, translation);
    108    is(element.innerHTML,
    109      "<em>FOO</em>");
    110  }
    111 
    112  {
    113    // attributes do not leak on retranslation
    114    const element = elem("div")``;
    115    const translationA = {
    116      value: '<em title="FOO A">FOO A</em>',
    117      attributes: null,
    118    };
    119    const translationB = {
    120      value: "<em>FOO B</em>",
    121      attributes: null,
    122    };
    123 
    124    translateElement(element, translationA);
    125    is(element.innerHTML,
    126      '<em title="FOO A">FOO A</em>');
    127    translateElement(element, translationB);
    128    is(element.innerHTML,
    129      "<em>FOO B</em>");
    130  }
    131  </script>
    132 </head>
    133 <body>
    134 </body>
    135 </html>