<!DOCTYPE html>
<html>
<head>
<title> event.data returns the data of the message </title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id=log></div>

<div style="display:none">
    <iframe width="70%" onload="PostMessageTest()" src="{{location[scheme]}}://{{domains[www]}}:{{location[port]}}/webmessaging/support/ChildWindowPostMessage.htm"></iframe>
    <iframe width="70%" onload="PostMessageTest()" src="./support/ChildWindowPostMessage.htm"></iframe>
</div>

<script>


    var description = "Test Description: event.data returns the data of the message.";

    var t = async_test(description);

    var PORT = location.port !== "" ? ":" + location.port : "";
    var DATA = "STRING";
    var TYPE = "string";
    var TARGET1 = document.querySelectorAll("iframe")[0];
    var TARGET2 = document.querySelectorAll("iframe")[1];
    var XORIGIN = "{{location[scheme]}}://{{domains[www]}}" + PORT;
    var SORIGIN = "{{location[scheme]}}://{{host}}" + PORT;
    var ExpectedResult = [DATA, TYPE, DATA, TYPE];
    var ActualResult = [];
    var loaded = 0;

    function PostMessageTest()
    {
        loaded++;

        if (loaded == 2)
        {
            TARGET1.contentWindow.postMessage(DATA, XORIGIN);
            TARGET2.contentWindow.postMessage(DATA, SORIGIN);
        }
    }

    window.onmessage = t.step_func(function(e)
    {
        if (e.data.toString() === "STRING") {
           ActualResult.push(e.data, typeof(e.data));

           if (ActualResult.length >= ExpectedResult.length) {
               assert_array_equals(ActualResult, ExpectedResult, "ActualResult");
                t.done();
           }
        }
    });
</script>
</body>
</html>
