<!DOCTYPE html>
<html>
<head>
<title> postMessage to same-origin iframe with MessagePort array [100 ports] </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="./support/ChildWindowPostMessage.htm"></iframe>
</div>

<script>


    var description = "Test Description: postMessage to same-origin iframe with MessagePort array containing 100 ports.";

    var t = async_test(description);

    var TOTALPORTS = 100;
    var LocalPorts = [];
    var RemotePorts = [];
    var PassedResult = 0;
    var sum = 0;
    var TARGET = document.querySelector("iframe").contentWindow;

    function PostMessageTest()
    {
        test(function()
        {
            assert_own_property(window, "MessageChannel", "window");

            var channels = [];

            for (var i=0; i<TOTALPORTS; i++)
            {
                channels[i] = new MessageChannel();
                LocalPorts[i] = channels[i].port1;
                LocalPorts[i].foo = i;
                RemotePorts[i] = channels[i].port2;

                LocalPorts[i].onmessage = t.step_func(function(e)
                {
                    assert_equals(e.target.foo, e.data);

                    PassedResult++;
                    sum += e.data;

                    if (PassedResult == TOTALPORTS)
                    {
                        assert_equals(sum, 4950);
                        t.done();
                    }
                });
            }

            TARGET.postMessage("ports", "*", RemotePorts);

        }, "MessageChannel is supported.");
    }

    window.onmessage = function(e)
    {
        if (e.data === "ports")
        {
            for (var i=0; i<TOTALPORTS; i++)
            {
                LocalPorts[i].postMessage(LocalPorts[i].foo);
            }
        }
    }
</script>
</body>
</html>
