<!DOCTYPE html>

<html>
	<head>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8">
		<title>iFrame Test</title>
		<link href="testIcon.svg" type="image/png" rel="icon">
		<link href="testIcon.svg" type="image/png" rel="shortcut icon">
	</head>
	<body>
		<script src="iframeTest.js"></script>
		<iframe></iframe><script>
		const iframe = window[0];
		log("TEST:", "iframe in html:", compare(test(iframe), reference));
		iframe.addEventListener("load", function(){
			"use strict";
			
			log("TEST:", "iframe after loading:", compare(test(iframe), reference));
		});
		document.write(
			"<iframe></iframe>" +
			"<script>log(\"TEST:\", \"iframe and script in document.write:\", compare(test(window[1]), reference));<\/script>"
		);
		log("TEST:", "iframe in document.write:", compare(test(window[1]), reference));
		document.write("<iframe></iframe>");
		document.write(
			"<script>" +
				"log(\"TEST:\", \"iframe and script in separate document.write:\", compare(test(window[2]), reference));" +
			"<\/script>");
		
		(
			"<iframe></iframe>" +
			"<script>" +
				"log(\"TEST:\", \"iframe and script in fragmented document.write:\", compare(test(window[3]), reference));" +
			"<\/script>"
		).split(/(?=<)/).forEach(function(part){
			"use strict";
			
			document.write(part);
		});
		document.writeln(
			"<iframe></iframe>" +
			"<script>log(\"TEST:\", \"iframe and script in document.writeln:\", compare(test(window[4]), reference));<\/script>"
		);
		document.write(
			"<script src=\"iframeTest.js\"><\/script>" +
			"<iframe></iframe>" +
			"<script>" +
				"log(" +
					"\"TEST:\", " +
					"\"script with src, iframe and script in document.write:\", " +
					"compare(test(window[5]), reference)" +
				");" +
			"<\/script>"
		);
		
		"<ifr|ame></ifr|ame>".split("|").forEach(function(part){
			"use strict";
			
			document.write(part);
		});
		document.write("<script>log(\"TEST:\", \"ifr|ame split:\", compare(test(window[6]), reference));<\/script>");
		window.addEventListener("load", function(){
			"use strict";
			
			// document.open();
			"<ifr|ame></ifr|ame>".split("|").forEach(function(part){
				document.write(part);
			});
			document.write(
				"<script>" +
					"log(\"TEST:\", \"reopened document: ifr|ame split:\", compare(test(window[0]), reference));" +
				"<\/script>");
			document.write(
				"<script src=\"iframeTest.js\"><\/script>" +
				"<iframe></iframe>" +
				"<script>" +
					"log(" +
						"\"TEST:\", " +
						"\"reopened document: script with src, iframe and script in document.write:\", " +
						"compare(test(window[1]), reference, true)" +
					");" +
				"<\/script>"
			);
			// document.close();
		});
		window.setTimeout(function(){
			"use strict";
			
			document.body.innerHTML = "<iframe></iframe>";
			log("TEST:", "innerHTML after 1000ms:", compare(test(window[0]), reference));
			
			const iFrame = document.createElement("iframe");
			document.body.appendChild(iFrame);
			log("TEST:", "appendChild after 1000ms:", compare(test(window[1]), reference));
			
			const iFrame2 = document.createElement("iframe");
			iFrame.replaceWith(iFrame2);
			log("TEST:", "replaceWith after 1000ms:", compare(test(window[1]), reference));
			
			document.body.innerHTML = "<h1>Iframe protection</h1>" +
				"Open console (Ctrl + Shift + K) to see results. " +
				"Depending on your Browser version you might have to check the \"Persist Logs\" flag and reload the page.<br>" +
				"<h2>Expected result</h2>" +
				"<ul>" +
					"<li>the displayed hashes should not be your native hash (run test with CB disabled to get it)</li>" +
					"<li>all the displayed hashes should be the same (exception if there is a change to a wyciwyg page)</li>" +
					"<li>all lines with \"TEST:\" should have a \"match\" at the end</li>" +
				"</ul>";
			const title = document.createElement("title");
			title.textContent = "iFrame test";
			document.getElementsByTagName("head")[0].appendChild(title);
		}, 1000);
		</script>
	</body>
</html>