mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-14 15:37:55 +00:00
1b9c8c04f3
r=ttaubert
92 lines
3.3 KiB
JavaScript
92 lines
3.3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
function test() {
|
|
waitForExplicitFinish();
|
|
|
|
let str = Cc["@mozilla.org/supports-string;1"]
|
|
.createInstance(Ci.nsISupportsString);
|
|
str.data = "about:mozilla";
|
|
Services.prefs.setComplexValue("browser.startup.homepage",
|
|
Ci.nsISupportsString, str);
|
|
registerCleanupFunction(() => {
|
|
Services.prefs.clearUserPref("browser.startup.homepage");
|
|
});
|
|
|
|
// Open a new tab, since starting a drag from the home button activates it and
|
|
// we don't want to interfere with future tests by loading the home page.
|
|
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 homeButton = document.getElementById("home-button");
|
|
ok(homeButton, "home button present");
|
|
|
|
let dialogListener = new WindowListener("chrome://global/content/commonDialog.xul", function (domwindow) {
|
|
ok(true, "dialog appeared in response to home button drop");
|
|
domwindow.document.documentElement.cancelDialog();
|
|
Services.wm.removeListener(dialogListener);
|
|
|
|
// Now trigger the invalid URI test
|
|
executeSoon(function () {
|
|
let consoleListener = {
|
|
observe: function (m) {
|
|
if (m.message.contains("NS_ERROR_DOM_BAD_URI")) {
|
|
ok(true, "drop was blocked");
|
|
executeSoon(finish);
|
|
}
|
|
}
|
|
}
|
|
Services.console.registerListener(consoleListener);
|
|
registerCleanupFunction(function () {
|
|
Services.console.unregisterListener(consoleListener);
|
|
});
|
|
|
|
executeSoon(function () {
|
|
info("Attempting second drop, of a javascript: URI");
|
|
// The drop handler throws an exception when dragging URIs that inherit
|
|
// principal, e.g. javascript:
|
|
expectUncaughtException();
|
|
ChromeUtils.synthesizeDrop(homeButton, homeButton, [[{type: "text/plain", data: "javascript:8888"}]], "copy", window);
|
|
});
|
|
})
|
|
});
|
|
|
|
Services.wm.addListener(dialogListener);
|
|
|
|
ChromeUtils.synthesizeDrop(homeButton, homeButton, [[{type: "text/plain", data: "http://mochi.test:8888/"}]], "copy", window);
|
|
}
|
|
|
|
function WindowListener(aURL, aCallback) {
|
|
this.callback = aCallback;
|
|
this.url = aURL;
|
|
}
|
|
WindowListener.prototype = {
|
|
onOpenWindow: function(aXULWindow) {
|
|
var domwindow = aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor)
|
|
.getInterface(Ci.nsIDOMWindow);
|
|
var self = this;
|
|
domwindow.addEventListener("load", function() {
|
|
domwindow.removeEventListener("load", arguments.callee, false);
|
|
|
|
ok(true, "domwindow.document.location.href: " + domwindow.document.location.href);
|
|
if (domwindow.document.location.href != self.url)
|
|
return;
|
|
|
|
// Allow other window load listeners to execute before passing to callback
|
|
executeSoon(function() {
|
|
self.callback(domwindow);
|
|
});
|
|
}, false);
|
|
},
|
|
onCloseWindow: function(aXULWindow) {},
|
|
onWindowTitleChange: function(aXULWindow, aNewTitle) {}
|
|
}
|
|
|