summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_clipboard_pastefile.js
blob: 133a84e068785d8aac99d1c5b14ae07e99643d90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// This test is used to check that pasting files removes all non-file data from
// event.clipboardData.

add_task(async function() {
  await SpecialPowers.pushPrefEnv({
    set: [["dom.events.dataTransfer.mozFile.enabled", true]],
  });

  var input = document.createElement("input");
  document.documentElement.appendChild(input);

  input.focus();
  input.value = "Text";
  input.select();

  await new Promise((resolve, reject) => {
    input.addEventListener(
      "copy",
      function(event) {
        event.clipboardData.setData("text/plain", "Alternate");
        // For this test, it doesn't matter that the file isn't actually a file.
        event.clipboardData.setData("application/x-moz-file", "Sample");
        event.preventDefault();
        resolve();
      },
      { capture: true, once: true }
    );

    EventUtils.synthesizeKey("c", { accelKey: true });
  });

  let tab = await BrowserTestUtils.openNewForegroundTab(
    gBrowser,
    "https://example.com/browser/browser/base/content/test/general/clipboard_pastefile.html"
  );
  let browser = tab.linkedBrowser;

  await SpecialPowers.spawn(browser, [], async function(arg) {
    content.document.getElementById("input").focus();
  });

  await BrowserTestUtils.synthesizeKey("v", { accelKey: true }, browser);

  let output = await SpecialPowers.spawn(browser, [], async function(arg) {
    return content.document.getElementById("output").textContent;
  });
  is(output, "Passed", "Paste file");

  input.focus();

  await new Promise((resolve, reject) => {
    input.addEventListener(
      "paste",
      function(event) {
        let dt = event.clipboardData;
        is(dt.types.length, 3, "number of types");
        ok(dt.types.includes("text/plain"), "text/plain exists in types");
        ok(
          dt.mozTypesAt(0).contains("text/plain"),
          "text/plain exists in mozTypesAt"
        );
        is(
          dt.getData("text/plain"),
          "Alternate",
          "text/plain returned in getData"
        );
        is(
          dt.mozGetDataAt("text/plain", 0),
          "Alternate",
          "text/plain returned in mozGetDataAt"
        );

        resolve();
      },
      { capture: true, once: true }
    );

    EventUtils.synthesizeKey("v", { accelKey: true });
  });

  input.remove();

  BrowserTestUtils.removeTab(tab);
});