<!doctype html>
<html>
	<head>
		<title>Using dataTransfer in new thread</title>
		<style type="text/css">
blockquote { height: 100px; width: 100px; background: orange; margin: 0; padding: 0; float: left; }
blockquote + blockquote { background: blue; }
blockquote + blockquote + blockquote { background: fuchsia; }
blockquote + div { clear: left; }
		</style>
		<script type="text/javascript" src="/resources/testharness.js"></script>
		<script type="text/javascript">
setup(function () {},{explicit_done:true,explicit_timeout:true});
window.onload = function () {

	var orange  = document.getElementsByTagName('blockquote')[0],
	    blue    = document.getElementsByTagName('blockquote')[1],
	    fuchsia = document.getElementsByTagName('blockquote')[2],
	    evtdone = {};

	orange.ondragstart = function (e) {
		e.dataTransfer.effectAllowed = 'copy';
		e.dataTransfer.setData('text','dragstart real data');
		var dataTransfer = e.dataTransfer;
		setTimeout(function () {
			test(function () {
				assert_equals( dataTransfer.getData('text'), '', 'step 1' );
				dataTransfer.setData('text','new thread after dragstart');
				assert_equals( dataTransfer.getData('text'), '', 'step 2' );
			},'dragstart data store should be protected after new thread starts');
		},0);
	};

	fuchsia.ondragenter = fuchsia.ondragover = function (e) {
		e.preventDefault();
	};

	fuchsia.ondrop = function (e) {
		e.preventDefault();
		var dataTransfer = e.dataTransfer;
		setTimeout(function () {
			test(function () {
				assert_equals( dataTransfer.getData('text'), '', 'step 1' );
				dataTransfer.setData('text','new thread after dragstart');
				assert_equals( dataTransfer.getData('text'), '', 'step 2' );
			},'drop data store should be protected after new thread starts');
			done();
		},0);
	};

};
		</script>
	</head>
	<body>
		<p>Drag the orange square over the blue square then the fuchsia square, then release it.</p>
		<blockquote draggable="true"></blockquote>
		<blockquote></blockquote>
		<blockquote></blockquote>
		<div id="log"></div>
		<noscript><p>Enable JavaScript and reload</p></noscript>
	</body>
</html>