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

    <script>
// test data
var zeroedNavTimingAtt = undefined;

setup(function () {
   // for testing the INVALID_ACCESS_ERR exception, find a navigation timing attribute with a value of zero
   for (var i in timingAttributes) {
     if (window.performance.timing[timingAttributes[i]] == 0) {
        zeroedNavTimingAtt = timingAttributes[i];
     }
   }
   if (zeroedNavTimingAtt == undefined) {
       throw new Error("A navigation timing attribute with a value of 0 was not found to test for the " +
                          "INVALID_ACCESS_ERR exception thrown by window.performance.measure().")
   }
});

test(function () {
   assert_throws("InvalidAccessError", function () {
       window.performance.measure("measure", zeroedNavTimingAtt);
   });
}, "window.performance.measure(\"measure\", \"" + zeroedNavTimingAtt + "\"), where \"" +
                              zeroedNavTimingAtt + "\" is a navigation timing attribute with a value of 0, throws a " +
                              "InvalidAccessError exception.");

test(function () {
   assert_throws("InvalidAccessError", function () {
       window.performance.measure("measure", zeroedNavTimingAtt, "responseEnd");
   });
}, "window.performance.measure(\"measure\", \"" + zeroedNavTimingAtt + "\", " +
                              "\"responseEnd\"), where \"" + zeroedNavTimingAtt + "\" is a navigation timing " +
                              "attribute with a value of 0, throws a InvalidAccessError exception.");

test(function () {
   assert_throws("InvalidAccessError", function () {
       window.performance.measure("measure", "navigationStart", zeroedNavTimingAtt);
   });
}, "window.performance.measure(\"measure\", \"navigationStart\", \"" + zeroedNavTimingAtt +
                              "\"), where \"" + zeroedNavTimingAtt + "\" is a navigation timing attribute with a " +
                              "value of 0, throws a InvalidAccessError exception.");

test(function () {
   assert_throws("InvalidAccessError", function () {
       window.performance.measure("measure", zeroedNavTimingAtt, zeroedNavTimingAtt);
   });
}, "window.performance.measure(\"measure\", \"" + zeroedNavTimingAtt + "\", \"" +
                              zeroedNavTimingAtt + "\"), where \"" + zeroedNavTimingAtt + "\" is a navigation timing " +
                              "attribute with a value of 0, throws a InvalidAccessError exception.");
    </script>
    </head>
    <body>
        <h1>Description</h1>
        <p><code>window.performance.measure()</code> method throws a InvalidAccessError
           whenever a navigation timing attribute with a value of zero is provided as the startMark or endMark.
        </p>

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