<!doctype html>
<html>
	<head>
		<title>Drag and drop passing over body with cancelling dragenter</title>
		<style type="text/css">
div:first-child {
	height: 100px;
	width: 100px;
	background: orange;
	display: inline-block;
}
div:first-child + div {
	height: 100px;
	width: 100px;
	margin-left: 200px;
	background: blue;
	display: inline-block;
}
		</style>
		<script type="text/javascript">
//this test enforces the following spec statement:
//"if this immediate user selection is not the same as the current target element"
window.onload = function () {
	var drag = document.getElementsByTagName('div')[0], sequence = [];
	drag.ondragstart = function (e) {
		e.dataTransfer.setData('text','hello');
		e.dataTransfer.effectAllowed = 'copy';
	};
	drag.ondragenter = function (e) {
		sequence[sequence.length] = 'drag.dragenter';
	};
	drag.ondragover = function (e) {
		if( sequence[sequence.length-1] != 'drag.dragover' ) {
			sequence[sequence.length] = 'drag.dragover';
		}
	};
	var drop = document.getElementsByTagName('div')[1];
	drop.ondragenter = function (e) {
		e.preventDefault();
		sequence[sequence.length] = 'drop.dragenter';
	};
	drop.ondragover = function (e) {
		e.preventDefault();
		if( sequence[sequence.length-1] != 'drop.dragover' ) {
			sequence[sequence.length] = 'drop.dragover';
		}
	};
	drop.ondrop = function (e) {
		e.preventDefault();
		sequence[sequence.length] = 'drop.ondrop';
	};
	document.body.ondragenter = function (e) {
		sequence[sequence.length] = ( e.target == this ) ? 'body.dragenter' : 'bubble.dragenter';
		if( e.target != this ) { return; }
		e.preventDefault(); //don't cancel when it bubbles from the child elements
	};
	document.body.ondragover = function (e) {
		if( e.target != this ) { return; }
		if( sequence[sequence.length-1] != 'body.dragover' ) {
			sequence[sequence.length] = 'body.dragover';
		}
	};
	drag.ondragend = function (e) {
		sequence = sequence.join('=&gt;')
		var desiredsequence = (['drag.dragenter','bubble.dragenter','body.dragenter','body.dragover','drop.dragenter','bubble.dragenter','drop.dragover','drop.ondrop']).join('=&gt;')
		if( sequence == desiredsequence ) {
			document.getElementsByTagName('div')[2].innerHTML = 'PASS';
		} else {
			document.getElementsByTagName('div')[2].innerHTML = 'FAIL, got:<br>'+sequence+'<br>instead of:<br>'+desiredsequence;
		}
	};
};
		</script>
	</head>
	<body>

		<div draggable="true"></div><div></div>
		<div>&nbsp;</div>
		<p>Drag the orange square onto the blue square and release it.</p>
		<noscript><p>Enable JavaScript and reload</p></noscript>

	</body>
</html>