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>