<!DOCTYPE html>
<html>
  <head>
        <meta charset="utf-8" >
        <title>window.performance.now across frames</title>
        <link rel="author" title="Google" href="http://www.google.com/">
        <link rel="help" href="http://www.w3.org/TR/hr-time/#sec-extenstions-performance-interface">

        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>

        <script type="text/javascript">
            setup({explicit_done: true});

            var setup_frame = async_test("Setup the frame");

            function start_test() {
              setup_frame.step_timeout(function () {
                var iframe = document.createElement('iframe');
                iframe.id = 'frameContext';
                iframe.onload = finish_test;
                iframe.src = "resources/now_frame.html";
                document.body.appendChild(iframe);
                setup_frame.done();
              }, 1000);
            }

            function finish_test() {
              var childWindow = document.getElementById('frameContext').contentWindow;

              // Verify a positive number is returned for both the frame and parent.
              test(function() { assert_true(window.performance.now() > 0); }, 'parent performance.now() > 0');
              test(function() { assert_true(childWindow.performance.now() > 0); }, 'child performance.now() > 0');

              // Verify that the test properly created the child at least a second after the parent.
              test(function () { assert_true(childWindow.performance.timing.navigationStart > (window.performance.timing.navigationStart + 1000)); },
                                'Child created at least 1 second after parent');

              test(function () {
                var parentNow = window.performance.now();
                var childNow = childWindow.performance.now();
                var childParentSkew = Math.abs(childNow - parentNow);
                assert_true(childParentSkew > 1000, 'Child and parent\'s now()s have different bases (skewed more than 1 second)');

                var childLoadTime = childWindow.performance.timing.loadEventStart - childWindow.performance.timing.navigationStart;
                assert_true(1000 > (childNow - childLoadTime), 'Child\'s now() is based on its document\'s navigationStart');
              }, 'Child and parent time bases are correct');

              done();
            }
        </script>

    </head>
    <body onload="start_test()">
        <h1>Description</h1>
        <p>This test validates the values of the window.performance.now() are based on the current document's navigationStart.</p>
        <div id="log"></div>
    </body>
</html>
