<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Resource Timing - Error cases</title>
<meta http-equiv="Content-Security-Policy" content="img-src 'self'">
<link rel="help" href="https://w3c.github.io/resource-timing/#resources-included">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/rt-utilities.sub.js"></script>
</head>
<body>
<h1>Resource Timing: Error cases</h1>
<div id="log"></div>
<script>
promise_test(function(t) {
    let rejectedImageURL = crossOriginURL("csp-denied", "WebKit/resource-timing/resources/resource.png");
    let allowedImageURL = uniqueImageURL("csp-allowed");

    let rejectedImg = document.body.appendChild(document.createElement("img"));
    rejectedImg.src = rejectedImageURL;

    let allowedImg = document.body.appendChild(document.createElement("img"));
    allowedImg.src = allowedImageURL;

    return observeResources(1).then(([entry]) => {
        checkResourceTimingEntryType(entry, {name: allowedImageURL});
    });
}, "Content-Security-Policy rejections do not create entries");

promise_test(function(t) {
    let rejectedDataURL = crossOriginURL("cors-denied", "WebKit/resource-timing/resources/data.json");
    let allowedDataURL = crossOriginURL("cors-allowed", "WebKit/resource-timing/resources/data.json") + "&pipe=header(Access-Control-Allow-Origin,*)";

    fetch(rejectedDataURL).catch(function(){});
    fetch(allowedDataURL);

    return observeResources(1).then(([entry]) => {
        checkResourceTimingEntryType(entry, {name: allowedDataURL});
    });
}, "CORS preflight failures do not create entries");

// FIXME: Mixed content?
</script>
</body>
</html>
