<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing cached resources</title>
<link rel="author" title="Google" href="http://www.google.com/" />
<link rel="help" href="http://www.w3.org/TR/resource-timing/#dom-performanceresourcetiming-initiatortype"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/webperftestharness.js"></script>
<script src="resources/webperftestharnessextension.js"></script>
<script>
setup({explicit_done: true});

// explicitly test the namespace before we start testing
test_namespace("getEntriesByType");

var d;
var iframe;
var iframeBody;
var image;
var random = Math.random();

function setup_iframe() {
    iframe = document.getElementById('frameContext');
    d = iframe.contentWindow.document;
    iframeBody = d.body;
    iframe.addEventListener('load', onload_test, false);
}
function onload_test() {
    if (window.performance.getEntriesByType === undefined) {
      done();
      return;
    }
    var context = new PerformanceContext(iframe.contentWindow.performance);
    var entries = context.getEntriesByType('resource');
    test_equals(entries.length, 2, "There should be two entries");
    if (entries.length >= 2) {
        test_equals(entries[0].name, entries[1].name, "Both entries should have the same name");
    }
    done();
}
window.setup_iframe = setup_iframe;
</script>
</head>
<body>
<h1>Description</h1>
<p>This test validates that a 304 Not Modified resource appears in the buffer.</p>
<div id="log"></div>
<iframe id="frameContext" src="resources/fake_responses.html"></iframe>
</body>
</html>
