tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>