Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Tests for draging and dropping to the Urlbar.
*/
const TEST_URL = "data:text/html,a test page";
add_task(async function test_setup() {
// Stop search-engine loads from hitting the network.
await SearchTestUtils.installSearchExtension({}, { setAsDefault: true });
registerCleanupFunction(async function cleanup() {
while (gBrowser.tabs.length > 1) {
BrowserTestUtils.removeTab(gBrowser.tabs[gBrowser.tabs.length - 1]);
}
});
CustomizableUI.addWidgetToArea("home-button", "nav-bar");
registerCleanupFunction(() =>
CustomizableUI.removeWidgetFromArea("home-button")
);
});
/**
* Simulates a drop on the URL bar input field.
* The drag source must be something different from the URL bar, so we pick the
* home button somewhat arbitrarily.
*
* @param {object} content a {type, data} object representing the DND content.
*/
function simulateURLBarDrop(content) {
EventUtils.synthesizeDrop(
document.getElementById("home-button"), // Dragstart element.
gURLBar.inputField, // Drop element.
[[content]], // Drag data.
"copy",
window
);
}
add_task(async function checkDragURL() {
await BrowserTestUtils.withNewTab(TEST_URL, function () {
info("Check dragging a normal url to the urlbar");
const DRAG_URL = "http://www.example.com/";
simulateURLBarDrop({ type: "text/plain", data: DRAG_URL });
Assert.equal(
gURLBar.value,
TEST_URL,
"URL bar value should not have changed"
);
Assert.equal(
gBrowser.selectedBrowser.userTypedValue,
null,
"Stored URL bar value should not have changed"
);
});
});
add_task(async function checkDragForbiddenURL() {
await BrowserTestUtils.withNewTab(TEST_URL, function () {
// See also browser_removeUnsafeProtocolsFromURLBarPaste.js for other
// examples. In general we trust that function, we pick some testcases to
// ensure we disallow dropping trimmed text.
for (let url of [
"javascript:",
"javascript:void(0)",
"java\r\ns\ncript:void(0)",
" javascript:void(0)",
"\u00A0java\nscript:void(0)",
"javascript:document.domain",
"javascript:javascript:alert('hi!')",
]) {
info(`Check dragging "{$url}" to the URL bar`);
simulateURLBarDrop({ type: "text/plain", data: url });
Assert.notEqual(
gURLBar.value,
url,
`Shouldn't be allowed to drop ${url} on URL bar`
);
}
});
});
add_task(async function checkDragText() {
await BrowserTestUtils.withNewTab(TEST_URL, async browser => {
info("Check dragging multi word text to the urlbar");
const TEXT = "Firefox is awesome";
let promiseLoad = BrowserTestUtils.browserLoaded(browser, false, TEXT_URL);
simulateURLBarDrop({ type: "text/plain", data: TEXT });
await promiseLoad;
info("Check dragging single word text to the urlbar");
const WORD = "Firefox";
const WORD_URL = "https://example.com/?q=Firefox";
promiseLoad = BrowserTestUtils.browserLoaded(browser, false, WORD_URL);
simulateURLBarDrop({ type: "text/plain", data: WORD });
await promiseLoad;
});
});