<html>
<style>
    iframe
    { 
        height: 60px;
        width: 200px;
    }
</style>
<script>
    if (window.testRunner)
        testRunner.dumpAsText();
    function emitFrameWithContents(contents) 
    {
        document.write("<iframe src=\"data:text/html," + contents + "\"></iframe>");
    }
    function getRandomHost() 
    {
        return "www." + Math.floor(Math.random() * 10000000000) + ".invalid";
    }
    function emitFrameForScheme(scheme) 
    {
        var host = getRandomHost();
        var contents = "<meta http-equiv='x-dns-prefetch-control' content='on'>";
        contents += "<a href='" + scheme + "//" + host + "'>" + host + "</a>";
        emitFrameWithContents(contents);
    }
    function emitFrameForHost(host) 
    {
        var contents = "<meta http-equiv='x-dns-prefetch-control' content='on'>";
        contents += "<a href='http:" + "//" + host + "'>" + host + "</a>";
        emitFrameWithContents(contents);
    }
    function emitFrameForManualDNSPrefetch(dnsPrefetchControl) 
    {
        var host = getRandomHost();
        var contents = "";
        if (dnsPrefetchControl)
            contents += "<meta http-equiv='x-dns-prefetch-control' content='" + dnsPrefetchControl + "'>";
        contents += "<link rel='dns-prefetch' href='http://" + host + "'>" + host;
        emitFrameWithContents(contents);
    }
</script>
<body>
<p>This is a test of DNS prefetch control. It's considered a pass if it doesn't crash. It can also be used as 
a manual test of DNS prefetch using a networking monitoring tool.</p>

<p>The following frames contain links that are expected to trigger a DNS prefetch.</p>

<div>
  <script>emitFrameForManualDNSPrefetch("on")</script>
  <script>emitFrameForManualDNSPrefetch("off")</script>
  <script>emitFrameForScheme("http:")</script>
  <script>emitFrameForScheme("https:")</script>
  <script>emitFrameForScheme("ftp:")</script>
  <script>emitFrameForHost("%")</script>
  <iframe src="resources/dns-prefetch-control.py"></iframe>
  <iframe src="resources/dns-prefetch-control.py?value=on"></iframe>
  <iframe src="https://127.0.0.1:8443/misc/resources/dns-prefetch-control.py?value=on"></iframe>
</div>

<p style='clear: left'>The following frames contain links that are not expected to cause a DNS prefetch.</p>

<div>
  <iframe src="resources/dns-prefetch-control.py?value=off"></iframe>
  <iframe src="resources/dns-prefetch-control.py?value=foo"></iframe>
  <iframe src="https://127.0.0.1:8443/misc/resources/dns-prefetch-control.py"></iframe>
  <iframe src="https://127.0.0.1:8443/misc/resources/dns-prefetch-control.py?value=off"></iframe>
  <iframe src="https://127.0.0.1:8443/misc/resources/dns-prefetch-control.py?value=foo"></iframe>
  <iframe src="data:text/html,<meta http-equiv='x-dns-prefetch-control' value='off'><iframe src='http://127.0.0.1:8000/misc/resources/dns-prefetch-control.py'></iframe>"></iframe>
  <iframe src="data:text/html,<meta http-equiv='x-dns-prefetch-control' value='on'><iframe src='https://127.0.0.1:8443/misc/resources/dns-prefetch-control.py'></iframe>"></iframe>
</div>

</body>
</html>
