dom/tests/mochitest/whatwg/test_postMessage_origin.xhtml

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 <!DOCTYPE html>
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3 <!--
     4 https://bugzilla.mozilla.org/show_bug.cgi?id=417075
     5 -->
     6 <head>
     7   <title>postMessage from about:blank, data URLs</title>
     8   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>        
     9   <script type="text/javascript" src="browserFu.js"></script>
    10   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
    11 </head>
    12 <body>
    13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=417075">Mozilla Bug 417075</a>
    14 <p id="display"></p>
    15 <div id="content" style="display: none"></div>
    17 <iframe src="http://mochi.test:8888/tests/dom/tests/mochitest/whatwg/postMessage_origin_helper.xhtml"
    18         id="sameDomain"></iframe>
    19 <iframe src="http://example.com/tests/dom/tests/mochitest/whatwg/postMessage_origin_helper.xhtml"
    20         id="otherDomain"></iframe>
    21 <iframe src="http://example.org:8000/tests/dom/tests/mochitest/whatwg/postMessage_origin_helper.xhtml"
    22         id="otherDomainPort"></iframe>
    23 <iframe src="ftp://mochi.test:27534/tests/dom/tests/mochitest/whatwg/postMessage_origin_helper.xhtml"
    24         id="localNoExist"></iframe>
    26 <iframe src="http://sub1.παράδειγμα.δοκιμή/tests/dom/tests/mochitest/whatwg/postMessage_origin_helper.xhtml"
    27         id="idnKidWhitelist"></iframe>
    29 <iframe src="http://sub1.exaмple.test/tests/dom/tests/mochitest/whatwg/postMessage_origin_helper.xhtml"
    30         id="idnKidNoWhitelist"></iframe>
    33 <pre id="test">
    34 <script class="testbody" type="application/javascript"><![CDATA[
    35 /** Test for Bug 417075 **/
    37 SimpleTest.waitForExplicitFinish();
    39 function errorCheck(i, called, error, actual)
    40 {
    41   ok(!called, "receiver should not have been called for test #" + i);
    42   is(actual, error, "wrong error thrown in test #" + i);
    43 }
    45 var tests =
    46   [
    47    // 0
    48    {
    49      args: ["NOT-RECEIVED", ""],
    50      source: "sameDomain",
    51      name: "SyntaxError",
    52      code: DOMException.SYNTAX_ERR
    53    },
    54    {
    55      args: ["NOT-RECEIVED", "null"],
    56      source: "sameDomain",
    57      name: "SyntaxError",
    58      code: DOMException.SYNTAX_ERR
    59    },
    60    {
    61      args: ["NOT-RECEIVED", "a"],
    62      source: "sameDomain",
    63      name: "SyntaxError",
    64      code: DOMException.SYNTAX_ERR
    65    },
    66    {
    67      args: ["NOT-RECEIVED", "http :"],
    68      source: "sameDomain",
    69      name: "SyntaxError",
    70      code: DOMException.SYNTAX_ERR
    71    },
    72    {
    73      args: ["NOT-RECEIVED", "http: //"],
    74      source: "sameDomain",
    75      name: "SyntaxError",
    76      code: DOMException.SYNTAX_ERR,
    78      hasThrowsNoExceptionBug: true
    79    },
    80    // 5
    81    {
    82      args: ["NOT-RECEIVED", "http ://"],
    83      source: "sameDomain",
    84      name: "SyntaxError",
    85      code: DOMException.SYNTAX_ERR
    86    },
    87    {
    88      args: ["TODO", " http://localhost:8888"],
    89      source: "sameDomain",
    90      name: "SyntaxError",
    91      code: DOMException.SYNTAX_ERR,
    93      returnOrigin: "http://mochi.test:8888",
    94      hasThrowsNoExceptionBug: true
    95    },
    96    {
    97      args: ["NOT-RECEIVED", "hä"],
    98      source: "sameDomain",
    99      name: "SyntaxError",
   100      code: DOMException.SYNTAX_ERR
   101    },
   102    {
   103      args: ["NOT-RECEIVED", "http://lo\0k.com"],
   104      source: "sameDomain",
   105      name: "SyntaxError",
   106      code: DOMException.SYNTAX_ERR
   107    },
   108    {
   109      args: ["NOT-RECEIVED", "http: //localhost:8888"],
   110      source: "sameDomain",
   111      name: "SyntaxError",
   112      code: DOMException.SYNTAX_ERR,
   114      hasThrowsNoExceptionBug: true
   115    },
   116    // 10
   117    {
   118      args: ["NOT-RECEIVED", "http://localhost :8888"],
   119      source: "sameDomain",
   120      name: "SyntaxError",
   121      code: DOMException.SYNTAX_ERR
   122    },
   123    {
   124      args: ["NOT-RECEIVED", "http:// localhost:8888"],
   125      source: "sameDomain",
   126      name: "SyntaxError",
   127      code: DOMException.SYNTAX_ERR,
   129      hasThrowsNoExceptionBug: true
   130    },
   131    {
   132      args: ["TODO", "http://\nlocalhost:8888"],
   133      source: "sameDomain",
   134      name: "SyntaxError",
   135      code: DOMException.SYNTAX_ERR,
   137      returnOrigin: "http://mochi.test:8888",
   138      hasThrowsNoExceptionBug: true
   139    },
   140    {
   141      args: ["TODO", "http://localhost:8888\0"],
   142      source: "sameDomain",
   143      name: "SyntaxError",
   144      code: DOMException.SYNTAX_ERR,
   146      returnOrigin: "http://mochi.test:8888",
   147      hasThrowsNoExceptionBug: true
   148    },
   149    {
   150      args: ["TODO", "http://localhost:8888\n"],
   151      source: "sameDomain",
   152      name: "SyntaxError",
   153      code: DOMException.SYNTAX_ERR,
   155      returnOrigin: "http://mochi.test:8888",
   156      hasThrowsNoExceptionBug: true
   157    },
   158    // 15
   159    {
   160      args: ["PASS", "*"],
   161      source: "sameDomain",
   162      returnOrigin: "http://mochi.test:8888"
   163    },
   164    {
   165      args: ["PASS", "http://mochi.test:8888"],
   166      source: "sameDomain",
   167      returnOrigin: "http://mochi.test:8888"
   168    },
   169    {
   170      args: ["PASS", "http://example.com"],
   171      source: "otherDomain",
   172      returnOrigin: "http://example.com"
   173    },
   174    {
   175      args: ["PASS", "http://example.com/"],
   176      source: "otherDomain",
   177      returnOrigin: "http://example.com"
   178    },
   179    {
   180      args: ["PASS", "http://example.com:80"],
   181      source: "otherDomain",
   182      returnOrigin: "http://example.com"
   183    },
   184    // 20
   185    {
   186      args: ["PASS", "http://example.com:80/"],
   187      source: "otherDomain",
   188      returnOrigin: "http://example.com"
   189    },
   190    {
   191      args: ["PASS", "http://example.com:80/foobar"],
   192      source: "otherDomain",
   193      returnOrigin: "http://example.com"
   194    },
   195    {
   196      args: ["PASS", "http://example.com/foobar"],
   197      source: "otherDomain",
   198      returnOrigin: "http://example.com"
   199    },
   200    {
   201      args: ["PASS", "http://example.com:8000"],
   202      source: "otherDomain",
   203      expectNoCallback: true
   204    },
   205    {
   206      args: ["PASS", "http://example.com:8000/"],
   207      source: "otherDomain",
   208      expectNoCallback: true
   209    },
   210    // 25
   211    {
   212      args: ["PASS", "http://example.org:8000"],
   213      source: "otherDomainPort",
   214      returnOrigin: "http://example.org:8000"
   215    },
   216    {
   217      args: ["PASS", "http://example.org:8000/"],
   218      source: "otherDomainPort",
   219      returnOrigin: "http://example.org:8000"
   220    },
   221    {
   222      args: ["PASS", "http://example.org:8000/tests/dom/test/mochitest/whatwg/postMessage_origin_helper.xhtml"],
   223      source: "otherDomainPort",
   224      returnOrigin: "http://example.org:8000"
   225    },
   226    {
   227      args: ["PASS", "http://example.org:8000/tests/dom/test/mochitest/whatwg/this_file_does_not_exist.xhtml"],
   228      source: "otherDomainPort",
   229      returnOrigin: "http://example.org:8000"
   230    },
   231    {
   232      args: ["PASS", "http://example.org"],
   233      source: "otherDomainPort",
   234      expectNoCallback: true
   235    },
   236    // 30
   237    {
   238      args: ["PASS", "http://example.org:80"],
   239      source: "otherDomainPort",
   240      expectNoCallback: true
   241    },
   242    {
   243      args: ["PASS", "http://example.org/"],
   244      source: "otherDomainPort",
   245      expectNoCallback: true
   246    },
   247    {
   248      args: ["PASS", "http://example.org"],
   249      source: "otherDomain",
   250      expectNoCallback: true
   251    },
   252    {
   253      args: ["PASS", "ftp://mochi.test:8888"],
   254      source: "sameDomain",
   255      expectNoCallback: true
   256    },
   257    {
   258      args: ["PASS", "http://mochi.test:8888"],
   259      source: "sameDomain",
   260      returnOrigin: "http://mochi.test:8888"
   261    },
   262    // 35
   263    {
   264      args: ["PASS", "http://mochi.test:27534"],
   265      source: "sameDomain",
   266      expectNoCallback: true
   267    },
   268    {
   269      args: ["PASS", "http://sub1.παράδειγμα.δοκιμή"],
   270      source: "idnKidWhitelist",
   271      returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
   272    },
   273    {
   274      args: ["PASS", "http://sub1.παράδειγμα.δοκιμή:80"],
   275      source: "idnKidWhitelist",
   276      returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
   277    },
   278    {
   279      args: ["PASS", "http://sub1.παράδειγμα.δοκιμή:80/"],
   280      source: "idnKidWhitelist",
   281      returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
   282    },
   283    {
   284      args: ["PASS", "http://sub1.παράδειγμα.δοκιμή:80/foobar"],
   285      source: "idnKidWhitelist",
   286      returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
   287    },
   288    // 40
   289    {
   290      args: ["PASS", "http://sub1.παράδειγμα.δοκιμή/foobar"],
   291      source: "idnKidWhitelist",
   292      returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
   293    },
   294    {
   295      args: ["PASS", "http://sub1.xn--hxajbheg2az3al.xn--jxalpdlp"],
   296      source: "idnKidWhitelist",
   297      returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
   298    },
   299    {
   300      args: ["PASS", "http://sub1.xn--hxajbheg2az3al.xn--jxalpdlp:80"],
   301      source: "idnKidWhitelist",
   302      returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
   303    },
   304    {
   305      args: ["PASS", "http://sub1.xn--hxajbheg2az3al.xn--jxalpdlp:80/"],
   306      source: "idnKidWhitelist",
   307      returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
   308    },
   309    {
   310      args: ["PASS", "http://sub1.xn--hxajbheg2az3al.xn--jxalpdlp:80/foo"],
   311      source: "idnKidWhitelist",
   312      returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
   313    },
   314    // 45
   315    {
   316      args: ["PASS", "http://sub1.exaмple.test"],
   317      source: "idnKidNoWhitelist",
   318      returnOrigin: "http://sub1.exaмple.test",
   320      hasWrongReturnOriginBug: true
   321    },
   322    {
   323      args: ["PASS", "http://sub1.exaмple.test:80"],
   324      source: "idnKidNoWhitelist",
   325      returnOrigin: "http://sub1.exaмple.test",
   327      hasWrongReturnOriginBug: true
   328    },
   329    {
   330      args: ["PASS", "http://sub1.exaмple.test:80/"],
   331      source: "idnKidNoWhitelist",
   332      returnOrigin: "http://sub1.exaмple.test",
   334      hasWrongReturnOriginBug: true
   335    },
   336    {
   337      args: ["PASS", "http://sub1.exaмple.test/"],
   338      source: "idnKidNoWhitelist",
   339      returnOrigin: "http://sub1.exaмple.test",
   341      hasWrongReturnOriginBug: true
   342    },
   343    {
   344      args: ["PASS", "http://sub1.exaмple.test/foobar"],
   345      source: "idnKidNoWhitelist",
   346      returnOrigin: "http://sub1.exaмple.test",
   348      hasWrongReturnOriginBug: true
   349    },
   350    // 50
   351    {
   352      args: ["PASS", "http://sub1.xn--exaple-kqf.test"],
   353      source: "idnKidNoWhitelist",
   354      returnOrigin: "http://sub1.exaмple.test",
   356      hasWrongReturnOriginBug: true
   357    },
   358    {
   359      args: ["PASS", "http://sub1.xn--exaple-kqf.test:80"],
   360      source: "idnKidNoWhitelist",
   361      returnOrigin: "http://sub1.exaмple.test",
   363      hasWrongReturnOriginBug: true
   364    },
   365    {
   366      args: ["PASS", "http://sub1.xn--exaple-kqf.test:80/"],
   367      source: "idnKidNoWhitelist",
   368      returnOrigin: "http://sub1.exaмple.test",
   370      hasWrongReturnOriginBug: true
   371    },
   372    {
   373      args: ["PASS", "http://sub1.xn--exaple-kqf.test/"],
   374      source: "idnKidNoWhitelist",
   375      returnOrigin: "http://sub1.exaмple.test",
   377      hasWrongReturnOriginBug: true
   378    },
   379    {
   380      args: ["PASS", "http://sub1.xn--exaple-kqf.test/foobar"],
   381      source: "idnKidNoWhitelist",
   382      returnOrigin: "http://sub1.exaмple.test",
   384      hasWrongReturnOriginBug: true
   385    },
   386    // 55
   387    {
   388      args: ["NOT-RECEIVED", undefined],
   389      source: "sameDomain",
   390      name: "SyntaxError",
   391      code: DOMException.SYNTAX_ERR
   392    },
   393   ];
   395 function allTests(callback)
   396 {
   397   var test, target, called;
   399   function eventCheck(evt)
   400   {
   401     ok(test === tests[i],
   402        "i and test are out of sync!  async is hard, let's go shopping");
   404     var originCheck = test.hasWrongReturnOriginBug ? todo_is : is;
   405     originCheck(evt.origin, test.returnOrigin, "wrong origin for #" + i);
   406     if (test.args[0] == "TODO")
   407       todo_is(evt.data, "PASS", "wrong data");
   408     else
   409       is(evt.data, "PASS", "wrong data");
   410     is(evt.lastEventId, "",
   411        "postMessage creates events with empty lastEventId");
   412     ok(evt.source === target, "wrong source");
   413     called = true;
   414   }
   416   function nextTest()
   417   {
   418     i++;
   420     if (i === end)
   421     {
   422       removeListener(listener);
   424       setTimeout(callback, 0);
   425       return;
   426     }
   428     test = tests[i];
   430     target = $(test.source).contentWindow;
   431     try
   432     {
   433       called = false;
   434       target.postMessage.apply(target, test.args);
   435     }
   436     catch (e)
   437     {
   438       // Since an exception was thrown, we know at this point that we're not
   439       // waiting on anything else in the queue of script to run, and we can just
   440       // call nextTest directly.
   441       errorCheck(i, called, e.name, test.name);
   442       errorCheck(i, called, e.code, test.code);
   443       nextTest();
   444       return;
   445     }
   447     // We've set up the event generated by postMessage to be dispatched, and
   448     // it's sitting in a queue somewhere.  However, it hasn't arrived yet, and
   449     // the target document hasn't received the event -- so we need to continue
   450     // our tests later.
   451     setTimeout(function()
   452     {
   453       // The event was dispatched, and the target frame's code processed it and
   454       // responded -- so now *that* response is sitting in the queue of script to
   455       // execute.  Process pending script one more time so we know we've gotten
   456       // the response.
   457       setTimeout(function()
   458       {
   459         // Finally, we've posted our message and received our response, and
   460         // there's nothing further coming down the pipe.
   461         if (test.hasThrowsNoExceptionBug)
   462           todo(false, "should throw on test #" + i);
   463         else
   464           ok(test.expectNoCallback ^ called, "should have been called #" + i);
   466         nextTest();
   467       }, 0);
   468     }, 0);
   469   }
   471   var listener = registerMessageListener(eventCheck);
   473   var i = -1, end = tests.length;
   474   nextTest();
   475 }
   477 function registerMessageListener(func, callback)
   478 {
   479   function receive(evt)
   480   {
   481     func(evt);
   482     if (callback)
   483       callback();
   484   }
   486   window.addEventListener("message", receive, false);
   488   return receive;
   489 }
   491 function removeListener(listener)
   492 {
   493   window.removeEventListener("message", listener, false);
   494 }
   496 function oddballTests(callback)
   497 {
   498   var called = false;
   500   function eventChecks(evt)
   501   {
   502     is(evt.origin, "http://mochi.test:8888", "wrong sender");
   503     is(evt.data, "PASS", "wrong data");
   504     is(evt.lastEventId, "",
   505        "postMessage creates events with empty lastEventId");
   506     ok(evt.source === window, "wrong source");
   507     called = true;
   508   }
   510   var listener = registerMessageListener(eventChecks, function()
   511   {
   512     is(called, true, "should have been called");
   513     removeListener(listener);
   515     called = false;
   516     listener = registerMessageListener(eventChecks, function()
   517     {
   518       is(called, true, "should have been called");
   520       removeListener(listener);
   521       callback();
   522     });
   524     window.postMessage("PASS", "http://mochi.test:8888");
   525   });
   527   window.postMessage("PASS", "http://mochi.test:8888");
   528 }
   530 function run()
   531 {
   532   oddballTests(function()
   533   {
   534     allTests(function()
   535     {
   536       SimpleTest.finish();
   537     });
   538   });
   539 }
   541 window.addEventListener("load", run, false);
   542 ]]></script>
   543 </pre>
   544 </body>
   545 </html>

mercurial