js/xpconnect/tests/chrome/test_wrappers-2.xul

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 <?xml version="1.0"?>
     2 <?xml-stylesheet href="chrome://global/skin" type="text/css"?>
     3 <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
     4                  type="text/css"?>
     5 <!--
     6 https://bugzilla.mozilla.org/show_bug.cgi?id=500931
     7 -->
     8 <window title="Mozilla Bug 500931"
     9   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    10   <script type="application/javascript"
    11           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
    13   <!-- test results are displayed in the html:body -->
    14   <body xmlns="http://www.w3.org/1999/xhtml">
    15   <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=403005"
    16      target="_blank">Mozilla Bug 403005</a>
    17   <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=409298"
    18      target="_blank">Mozilla Bug 409298</a>
    19   </body>
    21   <!-- test code goes here -->
    22   <script type="application/javascript"><![CDATA[
    24     /** Test for Bug 403005 and 409298 **/
    26   SimpleTest.waitForExplicitFinish();
    28   function go()
    29   {
    30     ok(window instanceof Object, "window is instanceof Object");
    32     let wrap = $('ifr').contentWindow.wrappedJSObject;
    33     ok(!('obj' in XPCNativeWrapper(wrap)), "XPCNativeWrapper constructor works");
    34     let iwin = $('ifr').contentWindow;
    35     is(iwin.document.ELEMENT_NODE, 1, 'constants work through XrayWrapper');
    36     is(iwin.document.nodeName, "#document", 'attributes work through XrayWrappe
    38     location.foopy = 3;
    40     var xow_answer = [];
    41     for (let i in location)
    42         xow_answer.push(i);
    44     var xpcnw_answer = [];
    45     var xpcnw = new XPCNativeWrapper(location);
    46     xpcnw.barpy = 4;
    47     for (let i in xpcnw)
    48         xpcnw_answer.push(i);
    50     var expected = [
    51         "hash",
    52         "host",
    53         "hostname",
    54         "href",
    55         "pathname",
    56         "port",
    57         "protocol",
    58         "search",
    59         "reload",
    60         "replace",
    61         "assign",
    62         "foopy"
    63     ];
    65     var xpcnw_expected = expected.slice(0, expected.length - 1);
    66     xpcnw_expected.push("barpy");
    68     is(xow_answer.sort().toString(),
    69        expected.sort().toString(),
    70        'enumeration over XOWs walks the prototype chain');
    72     is(xpcnw_answer.sort().toString(),
    73        xpcnw_expected.sort().toString(),
    74        'enumeration over XPCNWs walks the prototype chain');
    76     var for_each_expected = [];
    77     for each (let i in new XPCNativeWrapper(location))
    78         for_each_expected.push(typeof i);
    80     var for_each_answer = [];
    81     for each (let i in Iterator(new XPCNativeWrapper(location)))
    82         for_each_answer.push(typeof i);
    84     is(for_each_answer.sort().toString(),
    85        for_each_expected.sort().toString(),
    86        'wrapper iterators are properly iterators');
    88     let sjow_answer = [];
    89     let (obj = { a: 3, next:1 }) {
    90         for (let i in wrap.to_iterate)
    91             sjow_answer.push(i);
    92         is(sjow_answer.sort().toString(), ['a', 'next'].sort().toString(),
    93            'enumeration over SJOWs walks the prototype chain');
    94     }
    96     sjow_answer = [];
    97     for (let i in wrap.location)
    98         sjow_answer.push(i);
   100     is(sjow_answer.sort().toString(),
   101        expected.sort().toString(),
   102        'enumeration over SJOWs walks the prototype chain and works over XOWs');
   104     for (let i in wrap.enumerate) {
   105         is(typeof i, "string", "enumeration on wrappers only returns strings");
   106     }
   108     isnot(wrap, new XPCNativeWrapper(iwin),
   109          'SJOWs equality hook returns false correctly against XPCNW');
   111     is(typeof(wrap.func), 'function',
   112        'SJOWs look like functions when they wrap functions');
   113     is(typeof(wrap.o), 'object',
   114        'SJOWs look like objects when they wrap objects');
   115     ok(wrap.o === wrap.o,
   116        "Identity holds when accessing the same object twice");
   118     var origProto = iwin.__proto__;
   119     try {
   120         iwin.__proto__ = iwin;
   121         ok(false, 'cyclic proto value allowed');
   122         iwin.__proto__ = origProto;
   123     } catch (e) {
   124         is(e.toString(),
   125            'TypeError: cyclic __proto__ value',
   126            'throw the right exception for a cyclic proto');
   127         is(iwin.__proto__, origProto, 'reset __proto__ after a cyclic proto');
   128     }
   130     try {
   131         is('PASS', iwin.eval("'PASS'"), 'iwin.eval throws an exception');
   132     } catch (e) {
   133         ok(false, 'iwin.eval does not throw an exception');
   134     }
   136     try {
   137         new XPCNativeWrapper("");
   138         ok(false, "How did we construct a wrapper around a primitive?");
   139     } catch (e) {
   140         ok(true, "Unable to new XPCNativeWrapper(primitive)");
   141     }
   143     try {
   144         is(XPCNativeWrapper(""), "", "XPCNativeWrapper as a function allows primitives");
   145     } catch (e) {
   146         ok(false, "Unable to wrap a primitive, even without 'new'");
   147     }
   149     // Some tests for SJOWs too.
   150     isnot(wrap.document.body != document.body, "body should not be the same");
   152     XPCNativeWrapper.prototype = {};
   153     let (w = new XPCNativeWrapper(iwin)) {
   154         ok(iwin.location, "able to set XPCNativeWrapper.prototype and do stuff with it");
   155     }
   157     is(new XPCNativeWrapper(iwin, Window).closed, false,
   158        "able to wrap a window in a window XPCNativeWrapper");
   159     try {
   160         new XPCNativeWrapper(document, Window);
   161         todo(false, "Able to wrap a document in a Window XPCNativeWrapper?")
   162     } catch (e) {
   163         ok(/ILLEGAL_VALUE/(e), "not able to wrap a document in a Window XPCNativeWrapper");
   164     }
   166     let (w = new XPCNativeWrapper($('ifr').contentWindow)) {
   167         w.foopybar = 5;
   168         ok(!("foopybar" in iwin), "XPCNativeWrappers allow expandos through");
   169         is(w.foopybar, 5, "can set expandos on XPCNativeWrappers, though");
   171         ok(delete w.foopybar, "deleting properties returns true correctly");
   172         ok(!("foopybar" in w), "Can delete properties from XPCNativeWrappers");
   174         is(w.window, iwin, "w.window exists and is the window");
   175         ok(delete w.iwin, "can delete builtin properties");
   176         is(w.window, iwin, "w.window is automatically recreated");
   178         iwin.foopy = 5;
   179         ok(delete w.foopy, "delete returns true");
   180         is(iwin.foopy, 5, "delete doesn't delete underlying properties");
   181         ok(delete iwin.foopy, "can delete window.foopy");
   182         ok(!("foopy" in iwin), "foopy is no longer in window");
   183     }
   185     try {
   186       is((function(x) { return x+1; }).apply(this, wrap.a), 2,
   187          "able to call apply with an XPCSafeJSObjectWrapped array");
   188     } catch (e) {
   189         ok(false,
   190            "Unable to call apply() with a XPCSafeJSObjectWrapped array");
   191     }
   193     try {
   194         iwin.__proto__ = null;
   195         is(iwin.__proto__, null,
   196            "allowed to update iwin.__proto__ to null");
   197     } catch (e) {
   198         ok(false, "some crazy exception was thrown");
   199     }
   201     try {
   202         new XPCSafeJSObjectWrapped(<x />).foo;
   203         ok(false, "Allowed to wrap E4X in SJOWs?");
   204     } catch (e) {
   205     }
   207     SimpleTest.finish();
   208   }
   209   ]]></script>
   210   <iframe type="content"
   211           src="http://mochi.test:8888/tests/js/xpconnect/tests/mochitest/file_wrappers-2.html"
   212           onload="go()"
   213           id="ifr">
   214   </iframe>
   215 </window>

mercurial