<!doctype html>
<html>
	<head>
		<title>Origin for data: with no inherited origin to http:</title>
		<script type="text/javascript" src="../resources/crossorigin.sub.js"></script>
	</head>
	<body>

		<p>Load the following URL in a new tab (copy &amp; paste it into the address bar):</p>
		<noscript><p>Enable JavaScript and reload</p></noscript>

		<script type="text/javascript">
var origin = 'http://'+httpHostMain;
if( location.href.indexOf(origin+'/') ) {
	document.write('This must be tested on '+origin+'/');
} else {
	document.write("data:text/html,"+escape(
'<!doctype html>\
<html>\
	<head>\
		<title>Origin for data: with no inherited origin to http:<\/title>\
		<style type="text/css">\
div { height: 100px; width: 100px; background: orange; }\
iframe { width: 500px; height: 120px; border: none; }\
		<\/style>\
		<script type="text/javascript">\
window.onload = function () {\
	var origin = "null (string)";\
	document.getElementsByTagName("div")[0].ondragstart = function (e) {\
		e.dataTransfer.effectAllowed = "copy";\
		e.dataTransfer.setData("text","dummy text");\
	};\
	document.getElementsByTagName("span")[0].textContent = origin;\
	var iframe = document.createElement("iframe");\
	iframe.src = "'+location.href.replace(/[^\/]*$/,'HELPER-showorigin.html')+'";\
	document.body.insertBefore(iframe,document.getElementsByTagName("div")[0]);\
};\
		<\/script>\
	<\/head>\
	<body>\
		<p>Drag the orange square onto the blue square and release it. The blue square should be replaced with the text:<br>\
		<span><\/span><\/p>\
		<div draggable="true"></div>\
	<\/body>\
<\/html>'));
}
		</script>

	</body>
</html>
