tor-browser

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

test_bug771429.xhtml (2811B)


      1 <?xml version="1.0"?>
      2 <?xml-stylesheet type="text/css" href="chrome://global/skin"?>
      3 <?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
      4 <!--
      5 https://bugzilla.mozilla.org/show_bug.cgi?id=771429
      6 -->
      7 <window title="Mozilla Bug 771429"
      8        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
      9  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
     10 
     11  <!-- test results are displayed in the html:body -->
     12  <body xmlns="http://www.w3.org/1999/xhtml">
     13  <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=771429"
     14     target="_blank">Mozilla Bug 771429</a>
     15  </body>
     16 
     17  <!-- test code goes here -->
     18  <script type="application/javascript">
     19  <![CDATA[
     20      /** Test for Bug 771429 */
     21      function f() {}
     22      function g() { return this; }
     23      function h() { "use strict"; return this; }
     24      function ctor() { this.x = 1; }
     25      f.x = 2;
     26      f.g = g;
     27      function test(freshCompartment) {
     28        var s = new Cu.Sandbox(window, {
     29          sandboxPrototype: window,
     30          freshCompartment,
     31        });
     32        try {
     33          is(Cu.evalInSandbox('g()', s), window,
     34             "Should get window as this object of non-strict global function");
     35          is(Cu.evalInSandbox('h()', s), undefined,
     36             "Should get undefined as this object of strict global function");
     37          is(Cu.evalInSandbox('f.x', s), 2,
     38             "Should have gotten the right thing back");
     39          if (freshCompartment) {
     40            is(Cu.evalInSandbox('f.g()', s), f,
     41               "Should have the right function object");
     42          } else {
     43            // In the same-compartment case we don't go through a compartment
     44            // boundary so when we call f.g() we don't unwrap the "callable
     45            // proxy" around f and the test above fails. We accept this slight
     46            // difference in behavior and assert a weaker invariant.
     47            is(Cu.evalInSandbox('f.g()', s).toString(), f.toString(),
     48               "Should have the right function object");
     49          }
     50          is(Cu.evalInSandbox('var x = { z: 7 }; g.call(x).z', s), 7,
     51             "Should not rebind calls that are already bound");
     52          // And test what happens when we use the normal Function.prototype.call
     53          // on g instead of whatever our proxies happen to return.
     54          is(Cu.evalInSandbox('var x = { z: 7 }; Function.prototype.call.call(g, x).z', s), 7,
     55             "Should not rebind calls that are already bound");
     56          is(Cu.evalInSandbox('new ctor();', s).x, 1,
     57             "Should get a properly constructed object out of the sandbox");
     58        } catch (e) {
     59          ok(false, "Should not get an exception: " + e);
     60        }
     61      }
     62      test(false);
     63      test(true);
     64  ]]>
     65  </script>
     66 </window>