<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>window.performance User Timing mark() method is throwing the proper exceptions</title>
        <link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
        <link rel="help" href="http://www.w3.org/TR/user-timing/#dom-performance-mark"/>
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>
        <script src="resources/webperftestharness.js"></script>

    <script type="text/javascript">
        // test data
        var markExceptionThrown = false;

        setup({explicit_done: true});

        test_namespace();

        function onload_test()
        {
            // test for existance of User Timing and Performance Timeline interface
            if (!has_required_interfaces())
            {
                test_true(false,
                          "The User Timing and Performance Timeline interfaces, which are required for this test, " +
                          "are defined.");

                done();
            }
            else
            {
                test_mark_exceptions();
            }
        }

        function test_mark_exceptions()
        {
            // loop through mark scenarios
            for (var i in timingAttributes)
            {
                try
                {
                    // create the mark
                    window.performance.mark(timingAttributes[i]);

                    test_true(false,
                              "window.performance.mark(\"" + timingAttributes[i] + "\") threw an exception.");
                }
                catch(e)
                {
                    test_true(true,
                              "window.performance.mark(\"" + timingAttributes[i] + "\") threw an exception.");

                    // confirm that a SYNTAX_ERR exception is thrown and not any other exception
                    test_equals(e.code,
                                e.SYNTAX_ERR,
                                "window.performance.mark(\"" + timingAttributes[i] + "\") threw a SYNTAX_ERR " +
                                "exception.");
                }
            }

            done();
        }
    </script>
    </head>
    <body onload="onload_test();">
        <h1>Description</h1>
        <p>This test validates that the performance.mark() method throws a SYNTAX_ERR exception whenever a navigation
           timing attribute is provided for the name parameter.
        </p>

        <div id="log"></div>
    </body>
</html>
