<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing initiator types with dynamic insertion</title>
<link rel="author" title="Google" href="http://www.google.com/" />
<link rel="help" href="https://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>
// Explicitly test the namespace before we start testing.
test_namespace("getEntriesByType");


let iframe;
function setup_iframe() {
    iframe = document.getElementById('frameContext');
    const d = iframe.contentWindow.document;
    const body = d.createElement('body');
    d.getElementsByTagName('html')[0].appendChild(body);

    const style = d.createElement('link');
    style.rel = 'stylesheet';
    style.href = 'resource_timing_test0.css';
    body.appendChild(style);

    const image = d.createElement('img');
    image.src = 'resource_timing_test0.png';
    body.appendChild(image);

    const subframe = d.createElement('iframe');
    subframe.src = 'inject_resource_test.html';
    body.appendChild(subframe);
}
function onload_test() {
    if (window.performance.getEntriesByType === undefined) {
      done();
      return;
    }
    const context = new PerformanceContext(iframe.contentWindow.performance);
    const entries = context.getEntriesByType('resource');

    const index = window.location.pathname.lastIndexOf('/');
    const pathname = window.location.pathname.substring(0, index) + '/';

    let expected_entries = { };
    expected_entries[ pathname + 'resources/resource_timing_test0.css' ] = 'link',
    expected_entries[ pathname + 'resources/resource_timing_test0.png' ] = 'img',
    expected_entries[ pathname + 'resources/inject_resource_test.html' ] = 'iframe',

    test_resource_entries(entries, expected_entries);
}
window.setup_iframe = setup_iframe;
</script>
</head>
<body>
<h1>Description</h1>
<p>This test validates that initiator types are represented even when dynamically inserted.</p>
<div id="log"></div>
<iframe id="frameContext" onload="onload_test();" src="resources/inject_resource_test.html"></iframe>
</body>
</html>
