tor-browser

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

test_bug659350.html (4281B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=659350
      5 -->
      6 <head>
      7  <title>Test for Bug 659350</title>
      8  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      9  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     10 </head>
     11 <body>
     12 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=659350">Mozilla Bug 659350</a>
     13 <p id="display"></p>
     14 <div id="content" style="display: none">
     15  
     16 </div>
     17 <pre id="test">
     18 <script type="application/javascript">
     19 
     20 /** Test for Bug 659350 */
     21 function testIn(eventName, obj, objName, expected) {
     22  is(eventName in obj, expected, "'" + eventName + "' shuld be in " + objName);
     23 }
     24 
     25 var div = document.createElement("div");
     26 
     27 // Forwarded events
     28 testIn("onscroll", window, "window", true);
     29 testIn("onscroll", document.body, "body", true);
     30 testIn("onscroll", div, "div", true);
     31 // Window events
     32 testIn("onpopstate", window, "window", true);
     33 testIn("onpopstate", document.body, "body", true);
     34 testIn("onpopstate", div, "div", false);
     35 // Non-idl events
     36 testIn("onopen", window, "window", false);
     37 testIn("onopen", document.body, "body", false);
     38 testIn("onopen", div, "div", false);
     39 
     40 function f() {}
     41 function g() {}
     42 
     43 // Basic sanity of interaction between the IDL and content attributes
     44 div.onload = f;
     45 is(div.onload, f, "Should have 'f' as div's onload");
     46 div.setAttribute("onload", "");
     47 isnot(div.onload, f, "Should not longer have 'f' as div's onload");
     48 is(div.onload.toString(), "function onload(event) {\n\n}",
     49   "Should have wrapped empty string in a function");
     50 div.setAttribute("onload", "foopy();");
     51 is(div.onload.toString(), "function onload(event) {\nfoopy();\n}",
     52   "Should have wrapped call in a function");
     53 div.removeAttribute("onload");
     54 is(div.onload, null, "Should have null onload now");
     55 
     56 // Test forwarding to window for both events that are window-specific and that
     57 // exist on all elements
     58 function testPropagationToWindow(eventName) {
     59  is(window["on"+eventName], null, "Shouldn't have " + eventName + " stuff yet");
     60  document.body["on"+eventName] = f;
     61  is(window["on"+eventName], f,
     62     "Setting on"+eventName+" on body should propagate to window");
     63  document.createElement("body")["on"+eventName] = g;
     64  is(window["on"+eventName], g,
     65     "Setting on"+eventName+" on body not in document should propagate to window");
     66  document.createElement("frameset")["on"+eventName] = f;
     67  is(window["on"+eventName], f,
     68     "Setting on"+eventName+" on frameset not in document should propagate to window");
     69 
     70  document.body.setAttribute("on"+eventName, eventName);
     71  is(window["on"+eventName].toString(),
     72            "function on"+eventName+"(event) {\n"+eventName+"\n}",
     73            "Setting on"+eventName+"attribute on body should propagate to window");
     74  document.createElement("body").setAttribute("on"+eventName, eventName+"2");
     75  is(window["on"+eventName].toString(),
     76            "function on"+eventName+"(event) {\n"+eventName+"2\n}",
     77            "Setting on"+eventName+"attribute on body outside the document should propagate to window");
     78 }
     79 
     80 testPropagationToWindow("popstate");
     81 testPropagationToWindow("scroll");
     82 
     83 // Test |this| and scoping
     84 var called;
     85 div.onscroll = function(event) {
     86  is(this, div, "This should be div when invoking event listener");
     87  is(event, ev, "Event argument should be the event that was dispatched");
     88  called = true;
     89 }
     90 var ev = document.createEvent("Events");
     91 ev.initEvent("scroll", true, true);
     92 called = false;
     93 div.dispatchEvent(ev);
     94 is(called, true, "Event listener set via on* property not called");
     95 
     96 div.foopy = "Found me";
     97 document.foopy = "Didn't find me";
     98 document.foopy2 = "Found me";
     99 div.setAttribute("onscroll",
    100                 "is(this, div, 'This should be div when invoking via attribute');\
    101                  is(foopy, 'Found me', 'div should be on the scope chain when invoking handler compiled from content attribute');\
    102                  is(foopy2, 'Found me', 'document should be on the scope chain when invking handler compiled from content attribute');\
    103                  is(event, ev, 'Event argument should be the event that was dispatched');\
    104                  called = true;");
    105 called = false;
    106 div.dispatchEvent(ev);
    107 is(called, true, "Event listener set via on* attribute not called");
    108 </script>
    109 </pre>
    110 </body>
    111 </html>