summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/urlbar/browser_removeUnsafeProtocolsFromURLBarPaste.js
blob: e9ba8d98962d01ddffef0e7818538b5c3e56942a (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
function test() {
  waitForExplicitFinish();
  testNext();
}

var pairs = [
  ["javascript:", ""],
  ["javascript:1+1", "1+1"],
  ["javascript:document.domain", "document.domain"],
  ["data:text/html,<body>hi</body>", "data:text/html,<body>hi</body>"],
  // Nested things get confusing because some things don't parse as URIs:
  ["javascript:javascript:alert('hi!')", "alert('hi!')"],
  ["data:data:text/html,<body>hi</body>", "data:data:text/html,<body>hi</body>"],
  ["javascript:data:javascript:alert('hi!')", "data:javascript:alert('hi!')"],
  ["javascript:data:text/html,javascript:alert('hi!')", "data:text/html,javascript:alert('hi!')"],
  ["data:data:text/html,javascript:alert('hi!')", "data:data:text/html,javascript:alert('hi!')"],
];

var clipboardHelper = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);

function paste(input, cb) {
  waitForClipboard(input, function() {
    clipboardHelper.copyString(input);
  }, function() {
    document.commandDispatcher.getControllerForCommand("cmd_paste").doCommand("cmd_paste");
    cb();
  }, function() {
    ok(false, "Failed to copy string '" + input + "' to clipboard");
    cb();
  });
}

function testNext() {
  gURLBar.value = '';
  if (!pairs.length) {
    finish();
    return;
  }

  let [inputValue, expectedURL] = pairs.shift();

  gURLBar.focus();
  paste(inputValue, function() {
    is(gURLBar.textValue, expectedURL, "entering '" + inputValue + "' strips relevant bits.");

    setTimeout(testNext, 0);
  });
}