tor-browser

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

test_bug962251.html (9090B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=962251
      5 -->
      6 <head>
      7  <meta charset="utf-8">
      8  <title>Test for Bug 962251</title>
      9  <script src="/tests/SimpleTest/SimpleTest.js"></script>
     10  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     11  <script type="application/javascript">
     12 
     13  SimpleTest.waitForExplicitFinish();
     14 
     15  function Test_ElementsInTheSameDocument() {
     16    var button1 = document.getElementById("button1");
     17    var button2 = document.getElementById("button2");
     18 
     19    button1.focus();
     20    is(button1.id, document.activeElement.id, "How did we call focus on button1 and it did" +
     21                                              " not become the active element?");
     22 
     23    var getBlurEvent = false;
     24    button1.addEventListener("blur", function(aEvent) {
     25      is(aEvent.target.id, "button1", "Button1 should lose focus.");
     26      ok(aEvent.relatedTarget, "The relatedTarget should not be null.");
     27      is(aEvent.relatedTarget.id, "button2", "The relatedTarget should be button2.");
     28      getBlurEvent = true;
     29    }, {once: true});
     30 
     31    button2.addEventListener("focus", function(aEvent) {
     32      ok(getBlurEvent, "Must get blur event first.");
     33      is(aEvent.target.id, "button2", "Button2 should be focused.");
     34      ok(aEvent.relatedTarget, "The relatedTarget should not be null.");
     35      is(aEvent.relatedTarget.id, "button1", "The relatedTarget should be button1.");
     36      button2.blur();
     37    }, {once: true});
     38 
     39    button2.addEventListener("blur", function(aEvent) {
     40      is(aEvent.target.id, "button2", "Button2 should lose focus.");
     41      ok(aEvent.relatedTarget === null, "The relatedTarget should be null.");
     42      runTests();
     43    }, {once: true});
     44 
     45    button2.focus();
     46  }
     47 
     48  function Test_ElementsInDifferentDocument() {
     49    var button2 = document.getElementById("button2");
     50    button2.focus();
     51    button2.addEventListener("blur", function(aEvent) {
     52      is(aEvent.target.id, "button2", "Button2 should lose focus.");
     53      ok(aEvent.relatedTarget === null, "The relatedTarget should be null, since it's in another document.");
     54    }, {once: true});
     55 
     56    var iframe = document.createElement("iframe");
     57    iframe.id = "iframe";
     58    iframe.src = "iframe_bug962251.html";
     59    window.addEventListener("message", function(aEvent) {
     60      if (aEvent.data == "runNextTest") {
     61        runTests();
     62      }
     63    }, {once: true});
     64    document.getElementById("content").appendChild(iframe);
     65  }
     66 
     67  function Test_FocusEventOnWindow() {
     68    var iframe1 = document.createElement("iframe");
     69    iframe1.id = "iframe1";
     70    iframe1.src = "about:blank";
     71 
     72    document.getElementById("content").appendChild(iframe1);
     73    document.getElementById("button2").focus();
     74    var iframe = document.getElementById("iframe");
     75    var expectedEventTarget = [iframe.contentDocument, iframe.contentWindow];
     76    var expectedEventTarget1 = [iframe1.contentDocument, iframe1.contentWindow];
     77    iframe.contentWindow.addEventListener("focus", function onFocus(aEvent) {
     78      var eventTarget = expectedEventTarget.shift();
     79      ok(aEvent.target === eventTarget, "Get expected focus event target.");
     80      ok(aEvent.relatedTarget === null, "relatedTarget should be null.");
     81      if (!expectedEventTarget.length) {
     82        iframe.contentWindow.removeEventListener("focus", onFocus, true);
     83        runTests();
     84      }
     85    }, true);
     86    iframe1.contentWindow.addEventListener("focus", function onFocus(aEvent) {
     87      var eventTarget = expectedEventTarget1.shift();
     88      ok(aEvent.target === eventTarget, "Get expected focus event target.");
     89      ok(aEvent.relatedTarget === null, "relatedTarget should be null.");
     90      if (!expectedEventTarget1.length) {
     91        iframe1.contentWindow.removeEventListener("focus", onFocus, true);
     92        // Append items for blur event listener
     93        expectedEventTarget1.push(iframe1.contentDocument);
     94        expectedEventTarget1.push(iframe1.contentWindow);
     95        iframe.contentWindow.focus();
     96      }
     97    }, true);
     98    iframe1.contentWindow.addEventListener("blur", function onBlur(aEvent) {
     99      var eventTarget = expectedEventTarget1.shift();
    100      ok(aEvent.target === eventTarget, "Get expected blur event target.");
    101      ok(aEvent.relatedTarget === null, "relatedTarget should be null.");
    102      if (!expectedEventTarget1.length) {
    103        iframe1.contentWindow.removeEventListener("blur", onBlur, true);
    104      }
    105    }, true);
    106    iframe1.contentWindow.focus();
    107  }
    108 
    109  function Test_SetFocusInBlurEvent() {
    110    var button1 = document.getElementById("button1");
    111    var button2 = document.getElementById("button2");
    112    var button3 = document.getElementById("button3");
    113 
    114    button1.focus();
    115    is(button1.id, document.activeElement.id, "document.activeElement.id is button1");
    116 
    117    button1.addEventListener("blur", function(aEvent) {
    118      info("button1 blur");
    119      is(aEvent.relatedTarget.id, button2.id, "relatedTarget.id should be button2.");
    120      button3.focus();
    121    }, {once: true});
    122    button1.addEventListener("focus", function(aEvent) {
    123      info("button1 focus");
    124    }, {once: true});
    125 
    126    button2.addEventListener("blur", function(aEvent) {
    127      info("button2 blur");
    128    }, {once: true});
    129    button2.addEventListener("focus", function(aEvent) {
    130      info("button2 focus");
    131    }, {once: true});
    132 
    133    button3.addEventListener("blur", function(aEvent) {
    134      info("button3 blur");
    135    }, {once: true});
    136    button3.addEventListener("focus", function(aEvent) {
    137      info("button3 focus");
    138      ok(aEvent.relatedTarget === null, "aEvent.relatedTarget is null.");
    139      runTests();
    140    }, {once: true});
    141 
    142    button2.focus();
    143  }
    144 
    145  function Test_ListenFocusBlurEventOnWindow1() {
    146    var button2 = document.getElementById("button2");
    147    button2.focus();
    148 
    149    var iframe = document.getElementById("iframe");
    150    var input = iframe.contentDocument.getElementById("textinput");
    151    var expectedEventTarget = [button2, document, window];
    152    var expectedEventTarget1 = [iframe.contentDocument, iframe.contentWindow, input];
    153    window.addEventListener("blur", function onBlur(aEvent) {
    154      var item = expectedEventTarget.shift();
    155      ok(aEvent.target === item, "Get an expected blur event.");
    156      ok(aEvent.relatedTarget === null, "relatedTarget should be null.");
    157      if (!expectedEventTarget.length) {
    158        iframe.contentWindow.removeEventListener("blur", onBlur, true);
    159      }
    160    }, true);
    161    iframe.contentWindow.addEventListener("focus", function onFocus(aEvent) {
    162      var item = expectedEventTarget1.shift();
    163      ok(aEvent.target === item, "Get an expected focus event.");
    164      ok(aEvent.relatedTarget === null, "relatedTarget should be null.");
    165      if (!expectedEventTarget1.length) {
    166        iframe.contentWindow.removeEventListener("focus", onFocus, true);
    167        runTests();
    168      }
    169    }, true);
    170 
    171    input.focus();
    172  }
    173 
    174  function Test_ListenFocusBlurEventOnWindow2() {
    175    var iframe = document.getElementById("iframe");
    176    var input = iframe.contentDocument.getElementById("textinput");
    177    var input1 = iframe.contentDocument.getElementById("textinput1");
    178 
    179    ok(iframe.contentDocument.activeElement === input, "Current focused element should be input.");
    180    iframe.contentWindow.addEventListener("focus", function(aEvent) {
    181      ok(aEvent.target === input1, "Input1 is focused.");
    182      ok(aEvent.relatedTarget === input, "relatedTarget should be input.");
    183      runTests();
    184    }, {capture: true, once: true});
    185    iframe.contentWindow.addEventListener("blur", function(aEvent) {
    186      ok(aEvent.target === input, "Input is not focused.");
    187      ok(aEvent.relatedTarget === input1, "relatedTarget should be input1.");
    188    }, {capture: true, once: true});
    189 
    190    input1.focus();
    191  }
    192 
    193  function Test_ListenFocusBlurEventOnWindow3() {
    194    var iframe = document.getElementById("iframe");
    195    var input1 = iframe.contentDocument.getElementById("textinput1");
    196 
    197    ok(iframe.contentDocument.activeElement === input1, "Current focused element should be input1.");
    198    iframe.contentWindow.addEventListener("blur", function(aEvent) {
    199      ok(aEvent.target === input1, "Input1 is not focused.");
    200      ok(aEvent.relatedTarget === null, "relatedTarget should be null.");
    201      runTests();
    202    }, {capture: true, once: true});
    203 
    204    input1.blur();
    205  }
    206 
    207  var tests = [
    208    Test_ElementsInTheSameDocument,
    209    Test_ElementsInDifferentDocument,
    210    Test_FocusEventOnWindow,
    211    Test_SetFocusInBlurEvent,
    212    Test_ListenFocusBlurEventOnWindow1,
    213    Test_ListenFocusBlurEventOnWindow2,
    214    Test_ListenFocusBlurEventOnWindow3
    215  ];
    216 
    217  function runTests()
    218  {
    219    if (!tests.length) {
    220      SimpleTest.finish();
    221      return;
    222    }
    223 
    224    var test = tests.shift();
    225    window.setTimeout(function () {
    226      test();
    227    });
    228  }
    229 
    230  </script>
    231 </head>
    232 <body onload="runTests();">
    233 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=962251">Mozilla Bug 962251</a>
    234 <p id="display"></p>
    235 <div id="content">
    236  <button id="button1">1</button>
    237  <button id="button2">2</button>
    238  <button id="button3">3</button>
    239 </div>
    240 <pre id="test">
    241 </pre>
    242 </body>
    243 </html>