| <!doctype html> |
| <html> |
| <head> |
| <title>allowTargetOrigin with real dataTransfer should block dragenter, dragover, dragleave and drop synthetic events</title> |
| <style type="text/css"> |
| p + div { height: 100px; width: 100px; background: orange; } |
| </style> |
| <script type="text/javascript"> |
| window.onload = function () { |
| var orange = document.getElementsByTagName('div')[0], targ = document.getElementsByTagName('div')[1], evtdone = {}, fails = []; |
| orange.ondragstart = function (e) { |
| var evt; |
| e.dataTransfer.effectAllowed = 'copy'; |
| e.dataTransfer.setData('text','dummy text'); |
| try { |
| e.dataTransfer.allowTargetOrigin('http://example.com'); |
| } catch(e) { |
| fails[fails.length] = 'allowTargetOrigin threw an error: '+e; |
| } |
| try { |
| evt = new DragEvent('dragstart', {dataTransfer:e.dataTransfer}); |
| targ.dispatchEvent(evt); |
| evt = new DragEvent('drag', {dataTransfer:e.dataTransfer}); |
| targ.dispatchEvent(evt); |
| evt = new DragEvent('dragenter', {dataTransfer:e.dataTransfer}); |
| targ.dispatchEvent(evt); |
| evt = new DragEvent('dragover', {dataTransfer:e.dataTransfer}); |
| targ.dispatchEvent(evt); |
| evt = new DragEvent('dragleave', {dataTransfer:e.dataTransfer}); |
| targ.dispatchEvent(evt); |
| evt = new DragEvent('drop', {dataTransfer:e.dataTransfer}); |
| targ.dispatchEvent(evt); |
| evt = new DragEvent('dragend', {dataTransfer:e.dataTransfer}); |
| targ.dispatchEvent(evt); |
| } catch(e) { |
| fails[fails.length] = 'Synthetic event threw an error: '+e; |
| } |
| if( !evtdone.dragstart ) { |
| fails[fails.length] = 'dragstart did not fire'; |
| } |
| if( !evtdone.drag ) { |
| fails[fails.length] = 'drag did not fire'; |
| } |
| if( !evtdone.dragend ) { |
| fails[fails.length] = 'dragend did not fire'; |
| } |
| if( evtdone.dragenter ) { |
| fails[fails.length] = 'dragenter fired'; |
| } |
| if( evtdone.dragover ) { |
| fails[fails.length] = 'dragover fired'; |
| } |
| if( evtdone.dragleave ) { |
| fails[fails.length] = 'dragleave fired'; |
| } |
| if( evtdone.drop ) { |
| fails[fails.length] = 'drop fired'; |
| } |
| document.getElementsByTagName('p')[0].innerHTML = fails.length ? ( 'FAIL:<br>' + fails.join('<br>') ) : 'PASS'; |
| }; |
| targ.ondragstart = function (e) { |
| evtdone[e.type] = true; |
| }; |
| targ.ondragenter = targ.ondragover = targ.ondrop = function (e) { |
| e.preventDefault(); |
| evtdone[e.type] = true; |
| }; |
| targ.ondrag = targ.ondragleave = function (e) { |
| evtdone[e.type] = true; |
| }; |
| targ.ondragend = function (e) { |
| evtdone[e.type] = true; |
| }; |
| }; |
| </script> |
| </head> |
| <body> |
| <p>Drag the orange square to the right until the drag placeholder appears, then release it. Fail if this text does not change.</p> |
| <div draggable="true"></div> |
| <div></div> |
| <noscript><p>Enable JavaScript and reload</p></noscript> |
| </body> |
| </html> |