dom/events/test/test_bug508479.html

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/events/test/test_bug508479.html	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,103 @@
     1.4 +<html>
     1.5 +<head>
     1.6 +  <title>Tests for the dragstart event</title>
     1.7 +  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
     1.8 +  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>      
     1.9 +  <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>      
    1.10 +
    1.11 +<script>
    1.12 +  
    1.13 +var gGotHandlingDrop = false;
    1.14 +var gGotNotHandlingDrop = false;
    1.15 +
    1.16 +SimpleTest.waitForExplicitFinish();
    1.17 +
    1.18 +function fireEvent(target, event) {
    1.19 +  SpecialPowers.DOMWindowUtils.dispatchDOMEventViaPresShell(target, event, true);
    1.20 +}
    1.21 +
    1.22 +function fireDrop(element, shouldAllowDrop, shouldAllowOnlyChromeDrop) {
    1.23 +  var ds = SpecialPowers.Cc["@mozilla.org/widget/dragservice;1"].
    1.24 +    getService(SpecialPowers.Ci.nsIDragService);
    1.25 +
    1.26 +  var dataTransfer;
    1.27 +  var trapDrag = function(event) {
    1.28 +    dataTransfer = event.dataTransfer;
    1.29 +    dataTransfer.setData("text/plain", "Hello");;
    1.30 +    dataTransfer.dropEffect = "move";
    1.31 +    event.preventDefault();
    1.32 +    event.stopPropagation();
    1.33 +  }
    1.34 +
    1.35 +  // need to use real mouse action
    1.36 +  window.addEventListener("dragstart", trapDrag, true);
    1.37 +  synthesizeMouse(element, 2, 2, { type: "mousedown" });
    1.38 +  synthesizeMouse(element, 11, 11, { type: "mousemove" });
    1.39 +  synthesizeMouse(element, 20, 20, { type: "mousemove" });
    1.40 +  window.removeEventListener("dragstart", trapDrag, true);
    1.41 +  synthesizeMouse(element, 20, 20, { type: "mouseup" });
    1.42 +
    1.43 +  ds.startDragSession();
    1.44 +
    1.45 +  var event = document.createEvent("DragEvents");
    1.46 +  event.initDragEvent("dragover", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null, dataTransfer);
    1.47 +  fireEvent(element, event);
    1.48 +
    1.49 +  is(ds.getCurrentSession().canDrop, shouldAllowDrop, "Unexpected .canDrop");
    1.50 +  is(ds.getCurrentSession().onlyChromeDrop, shouldAllowOnlyChromeDrop,
    1.51 +     "Unexpected .onlyChromeDrop");
    1.52 +
    1.53 +  event = document.createEvent("DragEvents");
    1.54 +  event.initDragEvent("drop", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null, dataTransfer);
    1.55 +  fireEvent(element, event);
    1.56 +
    1.57 +  ds.endDragSession(false);
    1.58 +  ok(!ds.getCurrentSession(), "There shouldn't be a drag session anymore!");
    1.59 +}
    1.60 +
    1.61 +var chromeGotEvent = false;
    1.62 +function chromeListener(e) {
    1.63 +  chromeGotEvent = true;
    1.64 +}
    1.65 +
    1.66 +function runTests()
    1.67 +{
    1.68 +  var targetHandling = document.getElementById("handling_target");
    1.69 +  fireDrop(targetHandling, true, false);
    1.70 +
    1.71 +  is(gGotHandlingDrop, true, "Got drop on accepting element (1)");
    1.72 +  is(gGotNotHandlingDrop, false, "Didn't get drop on unaccepting element (1)");
    1.73 +
    1.74 +  // reset
    1.75 +  gGotHandlingDrop = false;
    1.76 +  gGotNotHandlingDrop = false;
    1.77 +
    1.78 +  SpecialPowers.addChromeEventListener("drop", chromeListener, true, false);
    1.79 +  var targetNotHandling = document.getElementById("nothandling_target");
    1.80 +  fireDrop(targetNotHandling, true, true);
    1.81 +  SpecialPowers.removeChromeEventListener("drop", chromeListener, true);
    1.82 +  ok(chromeGotEvent, "Chrome should have got drop event!");
    1.83 +  is(gGotHandlingDrop, false, "Didn't get drop on accepting element (2)");
    1.84 +  is(gGotNotHandlingDrop, false, "Didn't get drop on unaccepting element (2)");
    1.85 +
    1.86 +  SimpleTest.finish();
    1.87 +}
    1.88 +
    1.89 +</script>
    1.90 +
    1.91 +<body onload="window.setTimeout(runTests, 0);">
    1.92 +
    1.93 +<img style="width: 100px; height: 100px;"
    1.94 +     src="data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%18%00%00%00%18%02%03%00%00%00%9D%19%D5k%00%00%00%04gAMA%00%00%B1%8F%0B%FCa%05%00%00%00%0CPLTE%FF%FF%FF%FF%FF%FF%F7%DC%13%00%00%00%03%80%01X%00%00%00%01tRNS%08N%3DPT%00%00%00%01bKGD%00%88%05%1DH%00%00%00%09pHYs%00%00%0B%11%00%00%0B%11%01%7Fd_%91%00%00%00%07tIME%07%D2%05%0C%14%0C%0D%D8%3F%1FQ%00%00%00%5CIDATx%9C%7D%8E%CB%09%C0%20%10D%07r%B7%20%2F%E9wV0%15h%EA%D9%12D4%BB%C1x%CC%5C%1E%0C%CC%07%C0%9C0%9Dd7()%C0A%D3%8D%E0%B8%10%1DiCHM%D0%AC%D2d%C3M%F1%B4%E7%FF%10%0BY%AC%25%93%CD%CBF%B5%B2%C0%3Alh%CD%AE%13%DF%A5%F7%E0%03byW%09A%B4%F3%E2%00%00%00%00IEND%AEB%60%82"
    1.95 +     id="handling_target"
    1.96 +     ondragenter="event.preventDefault()"
    1.97 +     ondragover="event.preventDefault()"
    1.98 +     ondrop="gGotHandlingDrop = true;">
    1.99 +
   1.100 +<img style="width: 100px; height: 100px;"
   1.101 +     src="data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%18%00%00%00%18%02%03%00%00%00%9D%19%D5k%00%00%00%04gAMA%00%00%B1%8F%0B%FCa%05%00%00%00%0CPLTE%FF%FF%FF%FF%FF%FF%F7%DC%13%00%00%00%03%80%01X%00%00%00%01tRNS%08N%3DPT%00%00%00%01bKGD%00%88%05%1DH%00%00%00%09pHYs%00%00%0B%11%00%00%0B%11%01%7Fd_%91%00%00%00%07tIME%07%D2%05%0C%14%0C%0D%D8%3F%1FQ%00%00%00%5CIDATx%9C%7D%8E%CB%09%C0%20%10D%07r%B7%20%2F%E9wV0%15h%EA%D9%12D4%BB%C1x%CC%5C%1E%0C%CC%07%C0%9C0%9Dd7()%C0A%D3%8D%E0%B8%10%1DiCHM%D0%AC%D2d%C3M%F1%B4%E7%FF%10%0BY%AC%25%93%CD%CBF%B5%B2%C0%3Alh%CD%AE%13%DF%A5%F7%E0%03byW%09A%B4%F3%E2%00%00%00%00IEND%AEB%60%82"
   1.102 +     id="nothandling_target"
   1.103 +     ondrop="gGotNotHandlingDrop = true;">
   1.104 +
   1.105 +</body>
   1.106 +</html>

mercurial