<!doctype html>
<html>
	<head>
		<title>Data URI does not match its own URL</title>
	</head>
	<body>
		<!--
Sets an absolute URL pointing to the data URI.
The script origin will in fact be inherited from the parent page, which is actually the same data URI.
That part works.
However, when it comes to matching against it, it will not match, as the global identifier used as the
script origin does not match because the origin does not match the scheme/host/port tuple required.
		-->
		<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">
document.write('data:text/html,'+escape(
'<!doctype html>\
<html>\
	<head>\
		<title>Data URI does not match its own URL<\/title>\
		<style type="text/css">\
html, body { margin: 0; padding: 0; }\
div { height: 100px; width: 100px; background: orange; }\
iframe { border: none; height: 150px; width: 150px; }\
		<\/style>\
	<\/head>\
	<body>\
		<script type="text/javascript">\
if( self == top ) {\
	document.body.ondragenter = document.body.ondragleave = document.body.ondragover = document.body.ondrop = function (e) {\
		e.preventDefault();\
		document.body.innerHTML = "FAIL";\
	};\
	document.write("<p>Drag the orange square below over this text, and release it. Pass if this text does not change.<\\\/p>");\
	document.write("<p><iframe src=\\""+location.href+"\\"><\\\/iframe><\\\/p>");\
} else {\
	document.write("<div draggable=\\"true\\"><\\\/div>");\
	document.getElementsByTagName("div")[0].ondragstart = function (e) {\
		e.dataTransfer.effectAllowed = "copy";\
		e.dataTransfer.setData("text","dummy text");\
		e.dataTransfer.allowTargetOrigin(location.href);\
	};\
}\
		<\/script>\
	<\/body>\
<\/html>'));

		</script>
	</body>
</html>