Bug 1907756: Store bookmark at the end if user drop item on chevron menu r=places-reviewers,mak

Differential Revision: https://phabricator.services.mozilla.com/D218384
This commit is contained in:
Daisuke Akatsuka 2024-08-05 03:44:06 +00:00
Родитель d148733a9d
Коммит 4e7d59bea9
3 изменённых файлов: 87 добавлений и 26 удалений

Просмотреть файл

@ -1625,6 +1625,13 @@ class PlacesToolbar extends PlacesViewBase {
dropPoint.beforeIndex = beforeIndex; dropPoint.beforeIndex = beforeIndex;
} }
} }
} else if (elt == this._chevron) {
// If drop on the chevron, insert after the last bookmark.
dropPoint.ip = new PlacesInsertionPoint({
parentGuid: PlacesUtils.getConcreteItemGuid(this._resultNode),
orientation: Ci.nsITreeView.DROP_BEFORE,
});
dropPoint.beforeIndex = -1;
} else { } else {
dropPoint.ip = new PlacesInsertionPoint({ dropPoint.ip = new PlacesInsertionPoint({
parentGuid: PlacesUtils.getConcreteItemGuid(this._resultNode), parentGuid: PlacesUtils.getConcreteItemGuid(this._resultNode),

Просмотреть файл

@ -91,7 +91,7 @@ support-files = ["pageopeningwindow.html"]
["browser_bookmarks_toolbar_context_menu_view_options.js"] ["browser_bookmarks_toolbar_context_menu_view_options.js"]
["browser_bookmarks_toolbar_drag_from_chevron.js"] ["browser_bookmarks_toolbar_drag_with_chevron.js"]
["browser_bookmarks_toolbar_telemetry.js"] ["browser_bookmarks_toolbar_telemetry.js"]

Просмотреть файл

@ -9,29 +9,12 @@ add_setup(async function () {
set: [["browser.toolbars.bookmarks.visibility", "newtab"]], set: [["browser.toolbars.bookmarks.visibility", "newtab"]],
}); });
registerCleanupFunction(async () => { info("Open new tab and bookmarks toolbar");
await PlacesUtils.bookmarks.eraseEverything(); let { newTab } = await openNewTabAndBookmarksToolbar();
await PlacesUtils.history.clear();
});
});
add_task(async function drop_on_tabbar() {
let bookmarksToolbar = document.getElementById("PersonalToolbar");
let chevronMenu = document.getElementById("PlacesChevron");
info("Open about:newtab to show the bookmark toolbar");
let newTab = await BrowserTestUtils.openNewForegroundTab({
gBrowser,
opening: "about:newtab",
waitForLoad: false,
});
await TestUtils.waitForCondition(
() => !bookmarksToolbar.collapsed,
"Wait for toolbar to become visible"
);
info("Add bookmarks until showing chevron menu"); info("Add bookmarks until showing chevron menu");
let bookmarkCount = 1; let chevronMenu = document.getElementById("PlacesChevron");
let bookmarkCount = 2;
for (; ; bookmarkCount++) { for (; ; bookmarkCount++) {
let url = `https://example.com/${bookmarkCount}`; let url = `https://example.com/${bookmarkCount}`;
await PlacesUtils.bookmarks.insert({ await PlacesUtils.bookmarks.insert({
@ -47,7 +30,7 @@ add_task(async function drop_on_tabbar() {
info("Add more bookmarks"); info("Add more bookmarks");
bookmarkCount += 1; bookmarkCount += 1;
for (let max = bookmarkCount + 5; bookmarkCount < max; bookmarkCount++) { for (let max = bookmarkCount + 2; bookmarkCount < max; bookmarkCount++) {
let url = `https://example.com/${bookmarkCount}`; let url = `https://example.com/${bookmarkCount}`;
await PlacesUtils.bookmarks.insert({ await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.toolbarGuid, parentGuid: PlacesUtils.bookmarks.toolbarGuid,
@ -56,8 +39,21 @@ add_task(async function drop_on_tabbar() {
}); });
} }
BrowserTestUtils.removeTab(newTab);
registerCleanupFunction(async () => {
await PlacesUtils.bookmarks.eraseEverything();
await PlacesUtils.history.clear();
});
});
add_task(async function drop_on_tabbar_from_chevron() {
info("Open new tab and bookmarks toolbar");
let { newTab, bookmarksToolbar } = await openNewTabAndBookmarksToolbar();
info("Check whether DnD from chevron works"); info("Check whether DnD from chevron works");
await dndTest(chevronMenu); let chevronMenu = document.getElementById("PlacesChevron");
await testForDndFromChevron(chevronMenu);
info("Open not about:newtab page to collapse the bookmark toolbar"); info("Open not about:newtab page to collapse the bookmark toolbar");
let contentTab = await BrowserTestUtils.openNewForegroundTab({ let contentTab = await BrowserTestUtils.openNewForegroundTab({
@ -78,13 +74,55 @@ add_task(async function drop_on_tabbar() {
); );
info("Check whether DnD from chevron works again"); info("Check whether DnD from chevron works again");
await dndTest(chevronMenu); await testForDndFromChevron(chevronMenu);
BrowserTestUtils.removeTab(newTab); BrowserTestUtils.removeTab(newTab);
BrowserTestUtils.removeTab(contentTab); BrowserTestUtils.removeTab(contentTab);
}); });
async function dndTest(chevronMenu) { add_task(async function drop_on_chevron_from_identity_box() {
await SpecialPowers.pushPrefEnv({
set: [["browser.toolbars.bookmarks.visibility", "always"]],
});
const TEST_URL = "https://example.com/404_not_found";
info("Open new tab and bookmarks toolbar");
let { newTab } = await openNewTabAndBookmarksToolbar({
url: TEST_URL,
});
info("Start DnD");
let chevronMenu = document.getElementById("PlacesChevron");
let identityBox = document.getElementById("identity-box");
let chevronPopup = document.getElementById("PlacesChevronPopup");
let onChevronPopupShown = BrowserTestUtils.waitForPopupEvent(
chevronPopup,
"shown"
);
await EventUtils.synthesizePlainDragAndDrop({
srcElement: identityBox,
destElement: chevronMenu,
});
await onChevronPopupShown;
info("Check the last bookmark item");
await BrowserTestUtils.waitForCondition(() => {
let items = [...chevronPopup.children];
let lastElement = items.findLast(
c => c.nodeName == "menuitem" && BrowserTestUtils.isVisible(c)
);
return lastElement.label == "404 Not Found";
});
Assert.ok(true, "The current page is bookmarked with correct position");
chevronPopup.hidePopup();
BrowserTestUtils.removeTab(newTab);
await SpecialPowers.popPrefEnv();
});
async function testForDndFromChevron(chevronMenu) {
info("Open chevron menu"); info("Open chevron menu");
let chevronPopup = document.getElementById("PlacesChevronPopup"); let chevronPopup = document.getElementById("PlacesChevronPopup");
let onChevronPopupShown = BrowserTestUtils.waitForPopupEvent( let onChevronPopupShown = BrowserTestUtils.waitForPopupEvent(
@ -125,3 +163,19 @@ async function dndTest(chevronMenu) {
BrowserTestUtils.removeTab(dropTab); BrowserTestUtils.removeTab(dropTab);
chevronPopup.hidePopup(); chevronPopup.hidePopup();
} }
async function openNewTabAndBookmarksToolbar({ url } = {}) {
let newTab = await BrowserTestUtils.openNewForegroundTab({
gBrowser,
opening: url ?? "about:newtab",
waitForLoad: !!url,
});
let bookmarksToolbar = document.getElementById("PersonalToolbar");
await TestUtils.waitForCondition(
() => !bookmarksToolbar.collapsed,
"Wait for toolbar to become visible"
);
return { newTab, bookmarksToolbar };
}