<!DOCTYPE HTML>
<html>
    <head>
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
        <title>All Resource Types Test Page</title>
        <link rel="shortcut icon" href="empty.py?favicon">
    </head>
    <body background='blue.png?id=body'>
        <script>
            if (window.parent.hasOwnProperty('on_test_body_created'))
                window.parent.on_test_body_created();
        </script>
        <link rel="stylesheet" href="nested.css"></link>
        <link rel="prefetch" href="nested.css?id=prefetch"></link>
        <link rel="preload" href="nested.css?id=preload" as="style"></link>
        <link rel="prerender" href="green.html?id=prerender"></link>
        <link rel="manifest" href="manifest.json"></link>
        <img src="resource_timing_test0.png"></img>
        <img src="resource_timing_test0.png?id=srcset-src"
            srcset="resource_timing_test0.png?id=srcset-srcset 67w"
            sizes="67px"></img>
        <iframe src="green.html" width="100px" height="100px"></iframe>
        <script src="empty_script.js"></script>
        <script>
            var async_xhr = new XMLHttpRequest;
            async_xhr.open('GET', 'blue.png?id=async_xhr', true);
            async_xhr.onreadystatechange = function() {
                if (async_xhr.readyState == 4 && async_xhr.status == 200 && parent.hasOwnProperty('on_async_xhr_done'))
                    parent.on_async_xhr_done();
            }
            async_xhr.send();

            if (window.navigator && navigator.sendBeacon) {
                navigator.sendBeacon('empty.py?id=beacon');
            }

            if (window.fetch) {
                fetch('empty.py?id=fetch');
            }

            if (window.EventSource) {
                var evtSource = new EventSource('eventsource.py?id=eventsource');
            }
        </script>
        <style>
            @font-face {
                font-family: remoteFontAhem;
                src: url('/fonts/Ahem.ttf');
            }
            iframe {
                background: url('blue.png?id=1');
            }
            body {
                cursor: url('blue.png?id=cursor'), pointer;
            }
            ul {
                font-family: remoteFontAhem;
                list-style-image: url('blue.png?id=2');
            }
        </style>
        <ul>
            <li>Test</li>
        </ul>
        <ol>
            <li>Test</li>
        </ol>
        <embed src="resource_timing_test0.css?id=embed" type="text/css"></embed>
        <input type="image" src="blue.png?id=input"></input>
        <object type="image/png" data="blue.png?id=object"></object>
        <video poster="blue.png?id=video-poster"></video>
        <video src="/media/test.mp4?id=video-src" autoplay="true"></video>
        <video autoplay="true">
            <source src="/media/test.mp4?id=video-source" type="video/mp4">
            <source src="/media/test.ogv?id=video-source" type="video/ogg">
            <track kind="subtitles" src="empty.py?id=video-track" srclang="en" default>
        </video>
        <audio src="empty.py?id=audio-src"></audio>
        <audio>
            <source src="empty.py?id=audio-source-wav" type="audio/wav" />
            <source src="empty.py?id=audio-source-mpeg" type="audio/mpeg" />
            <source src="empty.py?id=audio-source-ogg" type="audio/ogg" />
        </audio>
        <svg width=200 height=200
            xmlns="http://www.w3.org/2000/svg"
            xmlns:xlink="http://www.w3.org/1999/xlink">
            <image href="blue.png?id=svg-image" height="200" width="200"/>
        </svg>
        <picture>
            <source srcset="blue.png?id=picture-source" type="image/png" />
            <img src="blue.png?id=picture-img" />
        </picture>
        <picture>
            <source srcset="blue.png?id=picture-notsupported-source" type="image/notsupported" />
            <img src="blue.png?id=picture-notsupported-img" />
        </picture>
        <picture>
            <img src="blue.png?id=picture-img-src"
                srcset="blue.png?id=picture-img-srcset"
                sizes="67px"></img>
        </picture>
        <picture>
            <img src="blue.png?id=picture-99x-img-src"
                srcset="blue.png?id=picture-99x-img-srcset 99x"
                sizes="67px"></img>
        </picture>
    </body>
</html>
