<!DOCTYPE html>
<html>
<head>
<title> postMessage to cross-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="{{location[scheme]}}://{{domains[www1]}}:{{location[port]}}/webmessaging/support/ChildWindowPostMessage.htm"></iframe>
</div>

<script>


    var description = "Test Description: postMessage to cross-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>
