Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
const LOCATION_PREF = "browser.bookmarks.defaultLocation";
const TEST_URL = "about:about";
let bookmarkPanel;
let win;
add_setup(async function () {
Services.prefs.clearUserPref(LOCATION_PREF);
await PlacesUtils.bookmarks.eraseEverything();
win = await BrowserTestUtils.openNewBrowserWindow();
await BrowserTestUtils.openNewForegroundTab({
gBrowser: win.gBrowser,
opening: TEST_URL,
waitForStateStop: true,
});
let oldTimeout = win.StarUI._autoCloseTimeout;
// Make the timeout something big, so it doesn't interact badly with tests.
win.StarUI._autoCloseTimeout = 6000000;
win.StarUI._createPanelIfNeeded();
bookmarkPanel = win.document.getElementById("editBookmarkPanel");
bookmarkPanel.setAttribute("animate", false);
registerCleanupFunction(async () => {
bookmarkPanel = null;
win.StarUI._autoCloseTimeout = oldTimeout;
await BrowserTestUtils.closeWindow(win);
win = null;
await PlacesUtils.bookmarks.eraseEverything();
Services.prefs.clearUserPref(LOCATION_PREF);
});
});
async function cancelBookmarkCreationInPanel() {
let hiddenPromise = promisePopupHidden(
win.document.getElementById("editBookmarkPanel")
);
// Confirm and close the dialog.
win.document.getElementById("editBookmarkPanelRemoveButton").click();
await hiddenPromise;
}
/**
* Helper to check the selected folder is correct.
*/
async function checkSelection() {
// Open folder selector.
let menuList = win.document.getElementById("editBMPanel_folderMenuList");
let expectedFolder = "BookmarksToolbarFolderTitle";
Assert.equal(
menuList.label,
PlacesUtils.getString(expectedFolder),
`Should have ${expectedFolder} selected by default`
);
Assert.equal(
menuList.getAttribute("selectedGuid"),
await PlacesUIUtils.defaultParentGuid,
"Should have the correct default guid selected"
);
await cancelBookmarkCreationInPanel();
}
/**
* Verify that bookmarks created with the star button go to the default
* bookmark location.
*/
add_task(async function test_star_location() {
await clickBookmarkStar(win);
await checkSelection();
});
/**
* Verify that bookmarks created with the shortcut go to the default bookmark
* location.
*/
add_task(async function test_shortcut_location() {
let shownPromise = promisePopupShown(
win.document.getElementById("editBookmarkPanel")
);
win.document.getElementById("Browser:AddBookmarkAs").doCommand();
await shownPromise;
await checkSelection();
});
// Note: Bookmarking frames is tested in browser_addBookmarkForFrame.js
/**
* Verify that bookmarks created with the link context menu go to the default
* bookmark location.
*/
add_task(async function test_context_menu_link() {
for (let t = 0; t < 2; t++) {
if (t == 1) {
// For the second iteration, ensure that the default folder is invalid first.
await createAndRemoveDefaultFolder();
}
await withBookmarksDialog(
true,
async function openDialog() {
const contextMenu = win.document.getElementById(
"contentAreaContextMenu"
);
is(contextMenu.state, "closed", "checking if popup is closed");
let promisePopupShown = BrowserTestUtils.waitForEvent(
contextMenu,
"popupshown"
);
BrowserTestUtils.synthesizeMouseAtCenter(
"a[href*=config]", // Bookmark about:config
{ type: "contextmenu", button: 2 },
win.gBrowser.selectedBrowser
);
await promisePopupShown;
contextMenu.activateItem(
win.document.getElementById("context-bookmarklink")
);
},
async function test(dialogWin) {
let expectedFolder = "BookmarksToolbarFolderTitle";
let expectedFolderName = PlacesUtils.getString(expectedFolder);
let folderPicker = dialogWin.document.getElementById(
"editBMPanel_folderMenuList"
);
// Check the initial state of the folder picker.
await TestUtils.waitForCondition(
() => folderPicker.selectedItem.label == expectedFolderName,
"The folder is the expected one."
);
}
);
}
});
/**
* Verify that if we change the location, we persist that selection.
*/
add_task(async function test_change_location_panel() {
await clickBookmarkStar(win);
let menuList = win.document.getElementById("editBMPanel_folderMenuList");
let { toolbarGuid, menuGuid, unfiledGuid } = PlacesUtils.bookmarks;
let expectedFolderGuid = toolbarGuid;
info("Pref value: " + Services.prefs.getCharPref(LOCATION_PREF, ""));
await TestUtils.waitForCondition(
() => menuList.getAttribute("selectedGuid") == expectedFolderGuid,
"Should initially select the unfiled or toolbar item"
);
// Now move this new bookmark to the menu:
let promisePopup = BrowserTestUtils.waitForEvent(
menuList.menupopup,
"popupshown"
);
EventUtils.synthesizeMouseAtCenter(menuList, {}, win);
await promisePopup;
// Make sure we wait for the bookmark to be added.
let itemAddedPromise = PlacesTestUtils.waitForNotification(
"bookmark-added",
events => events.some(({ url }) => url === TEST_URL)
);
// Wait for the pref to change
let prefChangedPromise = TestUtils.waitForPrefChange(LOCATION_PREF);
// Click the choose item.
EventUtils.synthesizeMouseAtCenter(
win.document.getElementById("editBMPanel_bmRootItem"),
{},
win
);
await TestUtils.waitForCondition(
() => menuList.getAttribute("selectedGuid") == menuGuid,
"Should select the menu folder item"
);
info("Waiting for transactions to finish.");
await Promise.all(win.gEditItemOverlay.transactionPromises);
info("Moved; waiting to hide panel.");
await hideBookmarksPanel(win);
info("Waiting for pref change.");
await prefChangedPromise;
info("Waiting for item to be added.");
await itemAddedPromise;
// Check that it's in the menu, and remove the bookmark:
let bm = await PlacesUtils.bookmarks.fetch({ url: TEST_URL });
is(bm?.parentGuid, menuGuid, "Bookmark was put in the menu.");
if (bm) {
await PlacesUtils.bookmarks.remove(bm);
}
// Now create a new bookmark and check it starts in the menu
await clickBookmarkStar(win);
let expectedFolder = "BookmarksMenuFolderTitle";
Assert.equal(
menuList.label,
PlacesUtils.getString(expectedFolder),
`Should have menu folder selected by default`
);
Assert.equal(
menuList.getAttribute("selectedGuid"),
menuGuid,
"Should have the correct default guid selected"
);
// Now select a different item.
promisePopup = BrowserTestUtils.waitForEvent(
menuList.menupopup,
"popupshown"
);
EventUtils.synthesizeMouseAtCenter(menuList, {}, win);
await promisePopup;
// Click the toolbar item.
EventUtils.synthesizeMouseAtCenter(
win.document.getElementById("editBMPanel_toolbarFolderItem"),
{},
win
);
await TestUtils.waitForCondition(
() => menuList.getAttribute("selectedGuid") == toolbarGuid,
"Should select the toolbar item"
);
await cancelBookmarkCreationInPanel();
is(
await PlacesUIUtils.defaultParentGuid,
menuGuid,
"Default folder should not change if we cancel the panel."
);
// Now open the panel for an existing bookmark whose parent doesn't match
// the default and check we don't overwrite the default folder.
let testBM = await PlacesUtils.bookmarks.insert({
parentGuid: unfiledGuid,
title: "Yoink",
url: TEST_URL,
});
await TestUtils.waitForCondition(
() => win.BookmarkingUI.star.hasAttribute("starred"),
"Wait for bookmark to show up for current page."
);
await clickBookmarkStar(win);
await hideBookmarksPanel(win);
is(
await PlacesUIUtils.defaultParentGuid,
menuGuid,
"Default folder should not change if we accept the panel, but didn't change folders."
);
await PlacesUtils.bookmarks.remove(testBM);
});