content/base/test/chrome/cpows_parent.xul

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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 <window title="MessageManager CPOW tests"
     6   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     7   onload="start()">
     9   <!-- test results are displayed in the html:body -->
    10   <label value="CPOWs"/>
    12   <script type="application/javascript"><![CDATA[
    13     var test_state = "remote";
    14     var test_node = null;
    15     var reentered = false;
    17     function ok(condition, message) {
    18       return opener.wrappedJSObject.ok(condition, message);
    19     }
    21     // Make sure that an error in this file actually causes the test to fail.
    22     window.onerror = function (msg, url, line) {
    23       ok(false, "Error while executing: \n" + msg + "\n" + url + ":" + line);
    24     };
    26     function testCpowMessage(message) {
    27       ok(message.json.check == "ok", "correct json");
    29       let data = message.objects.data;
    30       let document = message.objects.document;
    31       ok(data.i === 5, "integer property");
    32       ok(data.b === true, "boolean property");
    33       ok(data.s === "hello", "string property");
    34       ok(data.x.i === 10, "nested property");
    35       ok(data.f() === 99, "function call");
    36       ok(document.title === "Hello, Kitty", "document node");
    38       data.i = 6;
    39       data.b = false;
    40       data.s = "bye";
    41       data.x = null;
    42       ok(data.i === 6, "integer property");
    43       ok(data.b === false, "boolean property");
    44       ok(data.s === "bye", "string property");
    45       ok(data.x === null, "nested property");
    47       let throwing = message.objects.throwing;
    48       // Based on the table on:
    49       // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
    50       let tests = [
    51         () => Object.getOwnPropertyDescriptor(throwing, 'test'),
    52         () => Object.getOwnPropertyNames(throwing),
    53         () => Object.defineProperty(throwing, 'test', {value: 1}),
    54         () => delete throwing.test,
    55         () => "test" in throwing,
    56         () => Object.prototype.hasOwnProperty.call(throwing, 'test'),
    57         () => throwing.test,
    58         () => { throwing.test = 1 },
    59         // () => { for (let prop in throwing) {} }, Bug 783829
    60         () => { for (let prop of throwing) {} },
    61         () => Object.keys(throwing),
    62         () => Function.prototype.call.call(throwing),
    63         () => new throwing,
    64         () => Object.preventExtensions(throwing),
    65         () => Object.freeze(throwing),
    66         () => Object.seal(throwing),
    67       ]
    69       for (let test of tests) {
    70         let threw = false;
    71         try {
    72           test()
    73         } catch (e) {
    74           threw = true;
    75         }
    76         ok(threw, "proxy operation threw exception");
    77       }
    79       let array = message.objects.array;
    80       let i = 1;
    81       for (let elt of array) {
    82         ok(elt === i, "correct element found");
    83         i++;
    84       }
    85       ok(i === 4, "array has correct length");
    87       let j = message.objects.for_json;
    88       let str = JSON.stringify(j);
    89       let j2 = JSON.parse(str);
    90       ok(j2.n === 3, "JSON integer property");
    91       ok(j2.a[0] === 1, "JSON array index");
    92       ok(j2.a[1] === 2, "JSON array index");
    93       ok(j2.a[2] === 3, "JSON array index");
    94       ok(j2.s === "hello", "JSON string property");
    95       ok(j2.o.x === 10, "JSON object property");
    96     }
    98     function recvAsyncMessage(message) {
    99       testCpowMessage(message);
   100     }
   102     function recvSyncMessage(message) {
   103       testCpowMessage(message);
   104     }
   106     function recvRpcMessage(message) {
   107       ok(message.json.check == "ok", "correct json");
   109       let data = message.objects.data;
   111       // Sanity check.
   112       ok(data.i === 5, "integer property");
   114       // Check that we re-enter.
   115       reentered = false;
   116       let result = data.reenter();
   117       ok(reentered, "re-entered rpc");
   118       ok(result == "ok", "got correct result");
   119     }
   121     function recvReenterMessage(message) {
   122       ok(message.objects.data.valid === true, "cpows work");
   123       reentered = true;
   124     }
   126     function recvNestedSyncMessage(message) {
   127       message.objects.data.reenter();
   128     }
   130     function recvReenterSyncMessage(message) {
   131       ok(false, "should not have received re-entered sync message");
   132     }
   134     function recvFailMessage(message) {
   135       ok(false, message.json.message);
   136     }
   138     function recvDoneMessage(message) {
   139       if (test_state == "remote") {
   140         test_node.parentNode.removeChild(test_node);
   141         run_tests("inprocess");
   142         return;
   143       }
   145       finish();
   146     }
   148     function run_tests(type) {
   149       var node = document.getElementById('cpowbrowser_' + type);
   151       test_state = type;
   152       test_node = node;
   154       var mm = node.messageManager;
   155       mm.addMessageListener("cpows:async", recvAsyncMessage);
   156       mm.addMessageListener("cpows:sync", recvSyncMessage);
   157       mm.addMessageListener("cpows:rpc", recvRpcMessage);
   158       mm.addMessageListener("cpows:reenter", recvReenterMessage);
   159       mm.addMessageListener("cpows:reenter", recvReenterMessage);
   160       mm.addMessageListener("cpows:nested_sync", recvNestedSyncMessage);
   161       mm.addMessageListener("cpows:reenter_sync", recvReenterSyncMessage);
   162       mm.addMessageListener("cpows:done", recvDoneMessage);
   163       mm.addMessageListener("cpows:fail", recvFailMessage);
   164       mm.loadFrameScript("chrome://mochitests/content/chrome/content/base/test/chrome/cpows_child.js", true);
   165     }
   167     function start() {
   168       run_tests('remote');
   169     }
   171     function finish() {
   172       opener.setTimeout("done()", 0);
   173       window.close();
   174     }
   175   ]]></script>
   177   <browser type="content" src="about:blank" id="cpowbrowser_remote" remote="true"/>
   178   <browser type="content" src="about:blank" id="cpowbrowser_inprocess"/>
   179 </window>

mercurial