test_bug508479.html (4865B)
1 <html> 2 <head> 3 <title>Tests for the dragstart event</title> 4 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script src="/tests/SimpleTest/EventUtils.js"></script> 7 8 <script> 9 10 var gGotHandlingDrop = false; 11 var gGotNotHandlingDrop = false; 12 13 SimpleTest.waitForExplicitFinish(); 14 15 function fireEvent(target, event) { 16 SpecialPowers.DOMWindowUtils.dispatchDOMEventViaPresShellForTesting(target, event); 17 } 18 19 async function fireDrop(element, shouldAllowDrop, shouldAllowOnlyChromeDrop) { 20 var ds = SpecialPowers.Cc["@mozilla.org/widget/dragservice;1"]. 21 getService(SpecialPowers.Ci.nsIDragService); 22 23 var dataTransfer; 24 var trapDrag = function(event) { 25 dataTransfer = event.dataTransfer; 26 dataTransfer.setData("text/plain", "Hello");; 27 dataTransfer.dropEffect = "move"; 28 event.preventDefault(); 29 event.stopPropagation(); 30 } 31 32 // need to use real mouse action 33 window.addEventListener("dragstart", trapDrag, true); 34 await synthesizePlainDragAndDrop({ 35 srcElement: element, 36 stepX: 9, 37 stepY: 9, 38 expectCancelDragStart: true, 39 }); 40 window.removeEventListener("dragstart", trapDrag, true); 41 42 ds.startDragSessionForTests( 43 window, 44 SpecialPowers.Ci.nsIDragService.DRAGDROP_ACTION_MOVE | 45 SpecialPowers.Ci.nsIDragService.DRAGDROP_ACTION_COPY | 46 SpecialPowers.Ci.nsIDragService.DRAGDROP_ACTION_LINK 47 ); // Session for emulating dnd coming from another app. 48 try { 49 var event = document.createEvent("DragEvent"); 50 event.initDragEvent("dragover", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null, dataTransfer); 51 fireEvent(element, event); 52 53 is(ds.getCurrentSession().canDrop, shouldAllowDrop, "Unexpected .canDrop"); 54 is(ds.getCurrentSession().onlyChromeDrop, shouldAllowOnlyChromeDrop, 55 "Unexpected .onlyChromeDrop"); 56 57 event = document.createEvent("DragEvent"); 58 event.initDragEvent("drop", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null, dataTransfer); 59 fireEvent(element, event); 60 } finally { 61 ds.getCurrentSession().endDragSession(false); 62 ok(!ds.getCurrentSession(), "There shouldn't be a drag session anymore!"); 63 } 64 } 65 66 var chromeGotEvent = false; 67 function chromeListener(e) { 68 chromeGotEvent = true; 69 } 70 71 async function runTests() 72 { 73 var targetHandling = document.getElementById("handling_target"); 74 await fireDrop(targetHandling, true, false); 75 76 is(gGotHandlingDrop, true, "Got drop on accepting element (1)"); 77 is(gGotNotHandlingDrop, false, "Didn't get drop on unaccepting element (1)"); 78 79 // reset 80 gGotHandlingDrop = false; 81 gGotNotHandlingDrop = false; 82 83 SpecialPowers.addChromeEventListener("drop", chromeListener, true, false); 84 var targetNotHandling = document.getElementById("nothandling_target"); 85 await fireDrop(targetNotHandling, true, true); 86 SpecialPowers.removeChromeEventListener("drop", chromeListener, true); 87 ok(chromeGotEvent, "Chrome should have got drop event!"); 88 is(gGotHandlingDrop, false, "Didn't get drop on accepting element (2)"); 89 is(gGotNotHandlingDrop, false, "Didn't get drop on unaccepting element (2)"); 90 91 SimpleTest.finish(); 92 } 93 94 </script> 95 96 <body onload="window.setTimeout(runTests, 0);"> 97 98 <img style="width: 100px; height: 100px;" 99 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" 100 id="handling_target" 101 ondragenter="event.preventDefault()" 102 ondragover="event.preventDefault()" 103 ondrop="gGotHandlingDrop = true;"> 104 105 <img style="width: 100px; height: 100px;" 106 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" 107 id="nothandling_target" 108 ondrop="gGotNotHandlingDrop = true;"> 109 110 </body> 111 </html>