/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ function test() { waitForExplicitFinish(); let newTab = gBrowser.selectedTab = gBrowser.addTab(); registerCleanupFunction(function () { gBrowser.removeTab(newTab); }); let scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"]. getService(Ci.mozIJSSubScriptLoader); let chromeUtils = {}; scriptLoader.loadSubScript("chrome://mochikit/content/tests/SimpleTest/ChromeUtils.js", chromeUtils); let browser = gBrowser.selectedBrowser; var linkHandlerActivated = 0; // Don't worry about clobbering the droppedLinkHandler, since we're closing // this tab after the test anyways browser.droppedLinkHandler = function dlh(e, url, name) { linkHandlerActivated++; ok(!/(javascript|data)/i.test(url), "javascript link should not be dropped"); } var receivedDropCount = 0; function dropListener() { receivedDropCount++; if (receivedDropCount == triggeredDropCount) { // Wait for the browser's system-phase event handler to run. executeSoon(function () { is(linkHandlerActivated, validDropCount, "link handler was called correct number of times"); finish(); }) } } browser.addEventListener("drop", dropListener, false); registerCleanupFunction(function () { browser.removeEventListener("drop", dropListener, false); }); var triggeredDropCount = 0; var validDropCount = 0; function drop(text, valid) { triggeredDropCount++; if (valid) validDropCount++; executeSoon(function () { chromeUtils.synthesizeDrop(browser, browser, [[{type: "text/plain", data: text}]], "copy", window, EventUtils); }); } drop("mochi.test/first", true); drop("javascript:'bad'"); drop("jAvascript:'also bad'"); drop("mochi.test/second", true); drop("data:text/html,bad"); drop("mochi.test/third", true); }