<!doctype html>
<html>
  <head>
    <title>Dropzone should not affect the dropEffect if dragover is cancelled</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;
  background: blue;
  display: inline-block;
}
    </style>
    <script type="text/javascript">
window.onload = function () {
  var drag = document.getElementsByTagName('div')[0];
  drag.ondragstart = function (e) {
    e.dataTransfer.setData('text','hello');
    e.dataTransfer.effectAllowed = 'all';
  };
  var drop = document.getElementsByTagName('div')[1], dragenter, dragover;
  drop.ondragenter = function (e) {
    dragenter = e.dataTransfer.dropEffect;
    e.preventDefault();
  };
  drop.ondragover = function (e) {
    dragover = e.dataTransfer.dropEffect;
    e.preventDefault();
  };
  drop.ondrop = function (e) {
    var sequence = ([dragenter,dragover,e.dataTransfer.dropEffect]).join('=&gt;')
    var desiredsequence = (['copy','copy','copy']).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 dropzone="link string:text/plain"></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>
