Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

"use strict";
const TEST_URL =
let contentAreaContextMenu = document.getElementById("contentAreaContextMenu");
add_task(async function add_keyword() {
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: TEST_URL,
},
async function (browser) {
// We must wait for the context menu code to build metadata.
await openContextMenuForContentSelector(
browser,
'#form1 > input[name="search"]'
);
await withBookmarksDialog(
false,
function () {
AddKeywordForSearchField();
contentAreaContextMenu.hidePopup();
},
async function (dialogWin) {
let acceptBtn = dialogWin.document
.getElementById("bookmarkpropertiesdialog")
.getButton("accept");
Assert.ok(acceptBtn.disabled, "Accept button is disabled");
let promiseKeywordNotification = PlacesTestUtils.waitForNotification(
"bookmark-keyword-changed",
events => events.some(event => event.keyword === "kw")
);
fillBookmarkTextField("editBMPanel_keywordField", "kw", dialogWin);
Assert.ok(!acceptBtn.disabled, "Accept button is enabled");
acceptBtn.click();
await promiseKeywordNotification;
// After the notification, the keywords cache will update asynchronously.
info("Check the keyword entry has been created");
let entry;
await TestUtils.waitForCondition(async function () {
entry = await PlacesUtils.keywords.fetch("kw");
return !!entry;
}, "Unable to find the expected keyword");
Assert.equal(entry.keyword, "kw", "keyword is correct");
Assert.equal(entry.url.href, TEST_URL, "URL is correct");
Assert.equal(
entry.postData,
"accenti%3D%E0%E8%EC%F2%F9&search%3D%25s",
"POST data is correct"
);
let bm = await PlacesUtils.bookmarks.fetch({ url: TEST_URL });
Assert.equal(
bm.parentGuid,
await PlacesUIUtils.defaultParentGuid,
"Should have created the keyword in the right folder."
);
info("Check the charset has been saved");
let pageInfo = await PlacesUtils.history.fetch(TEST_URL, {
includeAnnotations: true,
});
Assert.equal(
pageInfo.annotations.get(PlacesUtils.CHARSET_ANNO),
"windows-1252",
"charset is correct"
);
// Now check getShortcutOrURI.
let data = await UrlbarUtils.getShortcutOrURIAndPostData("kw test");
Assert.equal(
getPostDataString(data.postData),
"accenti=\u00E0\u00E8\u00EC\u00F2\u00F9&search=test",
"getShortcutOrURI POST data is correct"
);
Assert.equal(data.url, TEST_URL, "getShortcutOrURI URL is correct");
},
() => PlacesUtils.bookmarks.eraseEverything()
);
}
);
});
add_task(async function reopen_same_field() {
await PlacesUtils.keywords.insert({
url: TEST_URL,
keyword: "kw",
postData: "accenti%3D%E0%E8%EC%F2%F9&search%3D%25s",
});
registerCleanupFunction(async function () {
await PlacesUtils.keywords.remove("kw");
});
// Reopening on the same input field should show the existing keyword.
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: TEST_URL,
},
async function (browser) {
// We must wait for the context menu code to build metadata.
await openContextMenuForContentSelector(
browser,
'#form1 > input[name="search"]'
);
await withBookmarksDialog(
true,
function () {
AddKeywordForSearchField();
contentAreaContextMenu.hidePopup();
},
async function (dialogWin) {
let elt = dialogWin.document.getElementById(
"editBMPanel_keywordField"
);
Assert.equal(elt.value, "kw", "Keyword should be the previous value");
let acceptBtn = dialogWin.document
.getElementById("bookmarkpropertiesdialog")
.getButton("accept");
ok(!acceptBtn.disabled, "Accept button is enabled");
},
() => PlacesUtils.bookmarks.eraseEverything()
);
}
);
});
add_task(async function open_other_field() {
await PlacesUtils.keywords.insert({
url: TEST_URL,
keyword: "kw2",
postData: "search%3D%25s",
});
registerCleanupFunction(async function () {
await PlacesUtils.keywords.remove("kw2");
});
// Reopening on another field of the same page that has different postData
// should not show the existing keyword.
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: TEST_URL,
},
async function (browser) {
// We must wait for the context menu code to build metadata.
await openContextMenuForContentSelector(
browser,
'#form2 > input[name="search"]'
);
await withBookmarksDialog(
true,
function () {
AddKeywordForSearchField();
contentAreaContextMenu.hidePopup();
},
function (dialogWin) {
let acceptBtn = dialogWin.document
.getElementById("bookmarkpropertiesdialog")
.getButton("accept");
ok(acceptBtn.disabled, "Accept button is disabled");
let elt = dialogWin.document.getElementById(
"editBMPanel_keywordField"
);
is(elt.value, "");
},
() => PlacesUtils.bookmarks.eraseEverything()
);
}
);
});
function getPostDataString(stream) {
let sis = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(
Ci.nsIScriptableInputStream
);
sis.init(stream);
return sis.read(stream.available()).split("\n").pop();
}