<!DOCTYPE HTML>
<html>
<head>
<title>Example with iframe that notifies containing document via cross document messaging</title>
<script src="../testharness.js"></script>
<script src="../testharnessreport.js"></script>
</head>
<body>
<h1>Notifications From Tests Running In An IFRAME</h1>
<p>A test is run inside an <tt>iframe</tt> with a same origin document. The
containing document should receive messages via <tt>postMessage</tt>/
<tt>onmessage</tt> as the tests progress inside the <tt>iframe</tt>. A single
passing test is expected in the summary below.
</p>
<div id="log"></div>

<script>
var t = async_test("Containing document receives messages");
var start_received = false;
var result_received = false;
var completion_received = false;

// These are the messages that are expected to be seen while running the tests
// in the IFRAME.
var expected_messages = [
    t.step_func(
        function(message) {
            assert_equals(message.data.type, "start");
            assert_own_property(message.data, "properties");
        }),

    t.step_func(
        function(message) {
            assert_equals(message.data.type, "test_state");
            assert_equals(message.data.test.status, message.data.test.NOTRUN);
        }),

    t.step_func(
        function(message) {
            assert_equals(message.data.type, "result");
            assert_equals(message.data.test.status, message.data.test.PASS);
        }),

    t.step_func(
        function(message) {
            assert_equals(message.data.type, "complete");
            assert_equals(message.data.tests.length, 1);
            assert_equals(message.data.tests[0].status,
                          message.data.tests[0].PASS);
            assert_equals(message.data.status.status, message.data.status.OK);
            t.done();
        }),

    t.unreached_func("Too many messages received")
];

on_event(window,
         "message",
         function(message) {
             var handler = expected_messages.shift();
             handler(message);
         });
</script>
<iframe src="apisample6.html" style="display:none">
  <!-- apisample6 implements a file_is_test test. -->
</iframe>
</body>
