tor-browser

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

draggable_input_submit.html (3149B)


      1 <!doctype html>
      2 <html>
      3  <head>
      4    <title>Draggable input submit</title>
      5    <script src="/resources/testharness.js"></script>
      6    <script src="/resources/testharnessreport.js"></script>
      7    <script src="/resources/testdriver.js"></script>
      8    <script src="/resources/testdriver-vendor.js"></script>
      9    <script src="/resources/testdriver-actions.js"></script>
     10    <style type="text/css">
     11 #inner { border: 1px solid orange; border-top-width: 20px; }
     12    </style>
     13  </head>
     14  <body>
     15 
     16    <p>Press your mouse button down on the orange block and drag downwards. It should drag the input submit.</p>
     17    <p>Press your mouse button down on the text and drag rightward. It should drag the input submit.</p>
     18    <div id="outer">
     19      <input type="submit" value="Dummy text" draggable="true" id="inner">
     20    </div>
     21 
     22    <script>
     23    const outer = document.getElementById("outer");
     24    const inner = document.getElementById("inner");
     25 
     26    function testDragInputSubmitButton(dragActionFun, msg) {
     27      promise_test(t => {
     28        return new Promise((resolve, reject) => {
     29          let result = {};
     30 
     31          const dragStartListener = ev => {
     32            ev.preventDefault();
     33            result.didReceiveDragStart = true;
     34            result.targetId = ev.target.id;
     35            result.dataTransferItemsCount = ev.dataTransfer.items.length;
     36            result.dataTransferTypesCount = ev.dataTransfer.types.length;
     37          };
     38          outer.addEventListener("dragstart", dragStartListener, { once: true });
     39          t.add_cleanup(() => outer.removeEventListener("dragstart", dragStartListener));
     40 
     41          outer.addEventListener("mouseup", () => {
     42            resolve(result);
     43          }, { once: true });
     44 
     45          dragActionFun();
     46        }).then(result => {
     47          assert_true(result.didReceiveDragStart, "dragstart should not fire");
     48          assert_equals(result.targetId, "inner", "should drag inner element");
     49          assert_equals(result.dataTransferItemsCount, 0, "dataTransfer should have no items");
     50          assert_equals(result.dataTransferTypesCount, 0, "dataTransfer should have no types");
     51        });
     52      }, msg);
     53    }
     54 
     55    testDragInputSubmitButton(async () => {
     56      const centerH = inner.getBoundingClientRect().height / 2;
     57      new test_driver.Actions()
     58        // Move pointer to the center of the top-border.
     59        .pointerMove(0, 10 - centerH, { origin: inner })
     60        .pointerDown()
     61        // Move pointer to the center of the button.
     62        .pointerMove(0, 0, { origin: inner })
     63        .pointerUp()
     64        .send();
     65    }, "Draggable input submit button should be draggable from border");
     66 
     67    testDragInputSubmitButton(async () => {
     68      const centerW = inner.getBoundingClientRect().width / 2;
     69      new test_driver.Actions()
     70        // Move pointer to the start of the input button text.
     71        .pointerMove(5 - centerW, 10, { origin: inner })
     72        .pointerDown()
     73        // Move pointer rightward.
     74        .pointerMove(0, 10, { origin: inner })
     75        .pointerUp()
     76        .send();
     77    }, "Draggable input submit button should be draggable from button text");
     78    </script>
     79 
     80  </body>
     81 </html>