tor-browser

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

pointerevent_click_is_a_pointerevent.html (5014B)


      1 <!DOCTYPE HTML>
      2 <title>click is a PointerEvent</title>
      3 <meta name="variant" content="?mouse">
      4 <meta name="variant" content="?pen">
      5 <meta name="variant" content="?touch">
      6 <link rel="help" href="https://github.com/w3c/pointerevents/pull/317">
      7 <script src="/resources/testharness.js"></script>
      8 <script src="/resources/testharnessreport.js"></script>
      9 <script src="/resources/testdriver.js"></script>
     10 <script src="/resources/testdriver-actions.js"></script>
     11 <script src="/resources/testdriver-vendor.js"></script>
     12 <script src="pointerevent_support.js"></script>
     13 
     14 <input id="target" style="margin: 20px">
     15 
     16 <iframe src="resources/minimal.html" height="100" width="100"></iframe>
     17 
     18 <script>
     19 'use strict';
     20 const pointer_type = location.search.substring(1);
     21 let subframe_loaded = getMessageData("subframe-loaded", frames[0]);
     22 
     23 function assertClickProperties(
     24    click_event, window_object, pointerdown_event, pointerup_event) {
     25  assert_equals(click_event.constructor, window_object.PointerEvent,
     26      "click should use a PointerEvent constructor");
     27  assert_true(click_event instanceof window_object.PointerEvent,
     28      "click should be a PointerEvent instance");
     29  assert_equals(click_event.composed, true, "click.composed should be true");
     30 
     31  if (pointerdown_event) {
     32    assert_equals(click_event.pointerId, pointerdown_event.pointerId,
     33        "click.pointerId should match pointerdown.pointerId");
     34    assert_equals(click_event.pointerType, pointerdown_event.pointerType,
     35        "click.pointerType should match pointerdown.pointerType");
     36  }
     37 
     38  if (pointerup_event) {
     39    assert_equals(click_event.pointerId, pointerup_event.pointerId,
     40        "click.pointerId should match pointerup.pointerId");
     41    assert_equals(click_event.pointerType, pointerup_event.pointerType,
     42        "click.pointerType should match pointerup.pointerType");
     43  }
     44 }
     45 
     46 promise_test(async test => {
     47  const target = document.getElementById("target");
     48 
     49  let pointerdown_prevented = preventDefaultPointerdownOnce(target, test);
     50 
     51  let pointerdown_promise = getEvent("pointerdown", target, test);
     52  let pointerup_promise = getEvent("pointerup", target, test);
     53  let click_promise = getEvent("click", target, test);
     54 
     55  await clickInTarget(pointer_type, target);
     56 
     57  await pointerdown_prevented;
     58  let pointerdown_event = await pointerdown_promise;
     59  let pointerup_event = await pointerup_promise;
     60  let click_event = await click_promise;
     61 
     62  assertClickProperties(click_event, this, pointerdown_event, pointerup_event);
     63 }, "click using " + pointer_type + " is a PointerEvent with correct properties");
     64 
     65 promise_test(async test => {
     66  const target = document.getElementById("target");
     67 
     68  let click_promise = getEvent("click", target, test);
     69  await clickInTarget(pointer_type, target);
     70 
     71  let click_event = await click_promise;
     72 
     73  assertClickProperties(click_event, this);
     74  assert_not_equals(click_event.pointerId, -1,
     75                    "click.pointerId should not be -1");
     76 }, "click using " + pointer_type + " is a PointerEvent with correct properties"
     77    + " when no other PointerEvent listeners are present");
     78 
     79 // Run this part of the test only once, since it doesn't rely on the pointer_type.
     80 if (pointer_type == "mouse") {
     81  promise_test(async test => {
     82    const target = document.getElementById("target");
     83    let click_promise = getEvent("click", target, test);
     84    target.click();
     85    let click_event = await click_promise;
     86    assert_equals(click_event.pointerId, -1,
     87                    "click.pointerId should be -1");
     88 
     89    target.type = "button";
     90    target.focus();
     91    click_promise = getEvent("click", target, test);
     92    // Press enter
     93    let actions = new test_driver.Actions()
     94                                 .keyDown("\uE007")
     95                                 .keyUp("\uE007");
     96    await actions.send();
     97    click_event = await click_promise;
     98    assertClickProperties(click_event, this);
     99    assert_equals(click_event.pointerId, -1,
    100                    "click.pointerId should be -1");
    101  }, "click using " + pointer_type + " is a PointerEvent with correct properties"
    102      + " using non-pointing device");
    103 }
    104 
    105 promise_test(async test => {
    106  // This subtest must be run last as workaround for a WebKit issue where webdriver
    107  // fails to correctly direct focus after clicking outside of the frame. This bug
    108  // does not occur during normal browsing. https://webkit.org/b/298676
    109  await subframe_loaded;
    110 
    111  const target = frames[0];
    112  let pointerdown_promise = getEvent("pointerdown", target, test);
    113  let pointerup_promise = getEvent("pointerup", target, test);
    114  let click_promise = getEvent("click", target, test);
    115 
    116  await clickInTarget(pointer_type, frames[0].document.body);
    117 
    118  let pointerdown_event = await pointerdown_promise;
    119  let pointerup_event = await pointerup_promise;
    120  let click_event = await click_promise;
    121 
    122  assertClickProperties(click_event, frames[0], pointerdown_event, pointerup_event);
    123 }, "click using " + pointer_type + " is a PointerEvent with correct properties"
    124    + " in a subframe");
    125 </script>