<!DOCTYPE html>
<html><head>
        <title> scheduler: defer script after initial onload event</title>
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>
        <script src="testlib/testlib.js"></script>
</head>
<body>

        <div id="log">FAILED (This TC requires JavaScript enabled)</div>
        <iframe id="myFrame"></iframe>

        <script>
          var t = async_test();
          onload = t.step_func(
            function() {
              var doc = document.getElementById("myFrame").contentDocument;
              var win = document.getElementById("myFrame").contentWindow;
              doc.open();
              doc.write("<title> scheduler: defer script after initial onload event</title><script src='testlib/testlib.js'><\/script><div id='log'>document.written content</div><script>log('inline script #1');<\/script><script src='scripts/include-1.js'><\/script><script defer src='scripts/include-2.js'><\/script>");
              doc.close();
              //Note that the *window* object has changed but the *global scope* of the script has not.
              var run_t = window.t.step_func(function() {
                      if (!win.eventOrder || win.eventOrder.length != 3) {
                          window.setTimeout(run_t, 100);
                          return;
                      }
                      window.assert_array_equals(win.eventOrder, ['inline script #1', 'external script #1', 'external script #2']);
                      window.t.done();
                });
                run_t();
            });
        </script>
</body>
</html>
