fune/browser/base/content/test/urlbar/browser_urlbarDecode.js
Jared Wein 43bac26d30 Bug 1331661 - Enable the 'quotes' rule for eslint and fix most of the errors with --fix. r=Gijs
MozReview-Commit-ID: 6tv0Z06CO4a

--HG--
extra : rebase_source : 014c0b04d8538dc5f15bc6dd4ed6bd220c55c5d4
2017-01-17 09:48:17 -06:00

97 lines
3.3 KiB
JavaScript

"use strict";
// This test makes sure (1) you can't break the urlbar by typing particular JSON
// or JS fragments into it, (2) urlbar.textValue shows URLs unescaped, and (3)
// the urlbar also shows the URLs embedded in action URIs unescaped. See bug
// 1233672.
add_task(function* injectJSON() {
let inputStrs = [
'http://example.com/ ", "url": "bar',
"http://example.com/\\",
'http://example.com/"',
'http://example.com/","url":"evil.com',
"http://mozilla.org/\\u0020",
'http://www.mozilla.org/","url":1e6,"some-key":"foo',
'http://www.mozilla.org/","url":null,"some-key":"foo',
'http://www.mozilla.org/","url":["foo","bar"],"some-key":"foo',
];
for (let inputStr of inputStrs) {
yield checkInput(inputStr);
}
gURLBar.value = "";
gURLBar.handleRevert();
gURLBar.blur();
});
add_task(function losslessDecode() {
let urlNoScheme = "example.com/\u30a2\u30a4\u30a6\u30a8\u30aa";
let url = "http://" + urlNoScheme;
gURLBar.textValue = url;
// Since this is directly setting textValue, it is expected to be trimmed.
Assert.equal(gURLBar.inputField.value, urlNoScheme,
"The string displayed in the textbox should not be escaped");
gURLBar.value = "";
gURLBar.handleRevert();
gURLBar.blur();
});
add_task(function* actionURILosslessDecode() {
let urlNoScheme = "example.com/\u30a2\u30a4\u30a6\u30a8\u30aa";
let url = "http://" + urlNoScheme;
yield promiseAutocompleteResultPopup(url);
// At this point the heuristic result is selected but the urlbar's value is
// simply `url`. Key down and back around until the heuristic result is
// selected again, and at that point the urlbar's value should be a visiturl
// moz-action.
do {
gURLBar.controller.handleKeyNavigation(KeyEvent.DOM_VK_DOWN);
} while (gURLBar.popup.selectedIndex != 0);
let [, type, ] = gURLBar.value.match(/^moz-action:([^,]+),(.*)$/);
Assert.equal(type, "visiturl",
"visiturl action URI should be in the urlbar");
Assert.equal(gURLBar.inputField.value, urlNoScheme,
"The string displayed in the textbox should not be escaped");
gURLBar.value = "";
gURLBar.handleRevert();
gURLBar.blur();
});
function* checkInput(inputStr) {
yield promiseAutocompleteResultPopup(inputStr);
let item = gURLBar.popup.richlistbox.firstChild;
Assert.ok(item, "Should have a result");
// visiturl matches have their param.urls fixed up.
let fixupInfo = Services.uriFixup.getFixupURIInfo(inputStr,
Ci.nsIURIFixup.FIXUP_FLAG_FIX_SCHEME_TYPOS |
Ci.nsIURIFixup.FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP
);
let expectedVisitURL = fixupInfo.fixedURI.spec;
let type = "visiturl";
let params = {
url: expectedVisitURL,
input: inputStr,
};
for (let key in params) {
params[key] = encodeURIComponent(params[key]);
}
let expectedURL = "moz-action:" + type + "," + JSON.stringify(params);
Assert.equal(item.getAttribute("url"), expectedURL, "url");
Assert.equal(item.getAttribute("title"), inputStr.replace("\\", "/"), "title");
Assert.equal(item.getAttribute("text"), inputStr, "text");
let itemType = item.getAttribute("type");
Assert.equal(itemType, "visiturl");
Assert.equal(item._titleText.textContent, inputStr.replace("\\", "/"), "Visible title");
Assert.equal(item._actionText.textContent, "Visit", "Visible action");
}