<!DOCTYPE html>
<html>
<head>
    This tests that 'performance.measure' throws exceptions with reasonable messages.
</head>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
    window.performance.clearMarks();
    window.performance.clearMeasures();

    window.performance.mark('mark');

    const eventMarks = [
        'unloadEventStart',
        'unloadEventEnd',
        'redirectStart',
        'redirectEnd',
        'secureConnectionStart',
        'domInteractive',
        'domContentLoadedEventStart',
        'domContentLoadedEventEnd',
        'domComplete',
        'loadEventStart',
        'loadEventEnd',
    ];
    eventMarks.forEach(function(name) {
        test(()=>{
            assert_throws_dom("InvalidAccessError", ()=>{
                window.performance.measure("measuring", name, "mark");
            }, "Should throw");
        }, `Passing '${name}' as a mark to measure API should cause error when the mark is empty.`);
    });

    const args = [
        51.15,  // Verify that number is parsed as string, not number.
        "DoesNotExist", // Non-existant mark name should cause error.
    ];
    args.forEach(each => {
        test(()=>{
            assert_throws_dom("SyntaxError", ()=>{
                window.performance.measure("measuring", each, "mark");
            }, "Should throw");
        }, `Passing ${each} as a mark to measure API should cause error.`);
    });
</script>
</body>
</html>