183 lines
6.1 KiB
JavaScript
183 lines
6.1 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const bookmarksInfo = [
|
|
{
|
|
title: "firefox",
|
|
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
|
|
url: "http://example.com",
|
|
},
|
|
{
|
|
title: "rules",
|
|
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
|
|
url: "http://example.com/2",
|
|
},
|
|
{
|
|
title: "yo",
|
|
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
|
|
url: "http://example.com/2",
|
|
},
|
|
];
|
|
|
|
async function emptyToolbarMessageVisible(visible, win = window) {
|
|
info("Empty toolbar message should be " + (visible ? "visible" : "hidden"));
|
|
let emptyMessage = win.document.getElementById("personal-toolbar-empty");
|
|
await BrowserTestUtils.waitForMutationCondition(
|
|
emptyMessage,
|
|
{ attributes: true, attributeFilter: ["hidden"] },
|
|
() => emptyMessage.hidden != visible
|
|
);
|
|
}
|
|
|
|
add_setup(async function () {
|
|
await SpecialPowers.pushPrefEnv({
|
|
// Ensure we can wait for about:newtab to load.
|
|
set: [["browser.newtab.preload", false]],
|
|
});
|
|
// Move all existing bookmarks in the Bookmarks Toolbar and
|
|
// Other Bookmarks to the Bookmarks Menu so they don't affect
|
|
// the visibility of the Bookmarks Toolbar. Restore them at
|
|
// the end of the test.
|
|
let Bookmarks = PlacesUtils.bookmarks;
|
|
let toolbarBookmarks = [];
|
|
let unfiledBookmarks = [];
|
|
let guidBookmarkTuples = [
|
|
[Bookmarks.toolbarGuid, toolbarBookmarks],
|
|
[Bookmarks.unfiledGuid, unfiledBookmarks],
|
|
];
|
|
for (let [parentGuid, arr] of guidBookmarkTuples) {
|
|
await Bookmarks.fetch({ parentGuid }, bookmark => arr.push(bookmark));
|
|
}
|
|
await Promise.all(
|
|
[...toolbarBookmarks, ...unfiledBookmarks].map(async bookmark => {
|
|
bookmark.parentGuid = Bookmarks.menuGuid;
|
|
return Bookmarks.update(bookmark);
|
|
})
|
|
);
|
|
registerCleanupFunction(async () => {
|
|
for (let [parentGuid, arr] of guidBookmarkTuples) {
|
|
await Promise.all(
|
|
arr.map(async bookmark => {
|
|
bookmark.parentGuid = parentGuid;
|
|
return Bookmarks.update(bookmark);
|
|
})
|
|
);
|
|
}
|
|
});
|
|
});
|
|
|
|
add_task(async function bookmarks_toolbar_not_shown_when_empty() {
|
|
let bookmarks = await PlacesUtils.bookmarks.insertTree({
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
children: bookmarksInfo,
|
|
});
|
|
let exampleTab = await BrowserTestUtils.openNewForegroundTab({
|
|
gBrowser,
|
|
opening: "https://example.com",
|
|
});
|
|
let newtab = await BrowserTestUtils.openNewForegroundTab({
|
|
gBrowser,
|
|
opening: "about:newtab",
|
|
});
|
|
let emptyMessage = document.getElementById("personal-toolbar-empty");
|
|
|
|
// 1: Test that the toolbar is shown in a newly opened foreground about:newtab
|
|
let placesItems = document.getElementById("PlacesToolbarItems");
|
|
let promiseBookmarksOnToolbar = BrowserTestUtils.waitForMutationCondition(
|
|
placesItems,
|
|
{ childList: true },
|
|
() => placesItems.childNodes.length
|
|
);
|
|
await waitForBookmarksToolbarVisibility({
|
|
visible: true,
|
|
message: "Toolbar should be visible on newtab",
|
|
});
|
|
await promiseBookmarksOnToolbar;
|
|
await emptyToolbarMessageVisible(false);
|
|
|
|
// 2: Toolbar should get hidden when switching tab to example.com
|
|
let promiseToolbar = waitForBookmarksToolbarVisibility({
|
|
visible: false,
|
|
message: "Toolbar should be hidden on example.com",
|
|
});
|
|
await BrowserTestUtils.switchTab(gBrowser, exampleTab);
|
|
await promiseToolbar;
|
|
|
|
// 3: Remove all children of the Bookmarks Toolbar and confirm that
|
|
// the toolbar should not become visible when switching to newtab
|
|
CustomizableUI.addWidgetToArea(
|
|
"personal-bookmarks",
|
|
CustomizableUI.AREA_TABSTRIP
|
|
);
|
|
CustomizableUI.removeWidgetFromArea("import-button");
|
|
await BrowserTestUtils.switchTab(gBrowser, newtab);
|
|
await waitForBookmarksToolbarVisibility({
|
|
visible: true,
|
|
message: "Toolbar is visible when there are no items in the toolbar area",
|
|
});
|
|
await emptyToolbarMessageVisible(true);
|
|
|
|
// Click the link and check we open the library:
|
|
let winPromise = BrowserTestUtils.domWindowOpenedAndLoaded();
|
|
EventUtils.synthesizeMouseAtCenter(
|
|
emptyMessage.querySelector(".text-link"),
|
|
{}
|
|
);
|
|
let libraryWin = await winPromise;
|
|
is(
|
|
libraryWin.document.location.href,
|
|
"chrome://browser/content/places/places.xhtml",
|
|
"Should have opened library."
|
|
);
|
|
await BrowserTestUtils.closeWindow(libraryWin);
|
|
|
|
// 4: Put personal-bookmarks back in the toolbar and confirm the toolbar is visible now
|
|
CustomizableUI.addWidgetToArea(
|
|
"personal-bookmarks",
|
|
CustomizableUI.AREA_BOOKMARKS
|
|
);
|
|
await BrowserTestUtils.switchTab(gBrowser, exampleTab);
|
|
await BrowserTestUtils.switchTab(gBrowser, newtab);
|
|
promiseBookmarksOnToolbar = BrowserTestUtils.waitForMutationCondition(
|
|
placesItems,
|
|
{ childList: true },
|
|
() => placesItems.childNodes.length
|
|
);
|
|
await waitForBookmarksToolbarVisibility({
|
|
visible: true,
|
|
message: "Toolbar should be visible with Bookmarks Toolbar Items restored",
|
|
});
|
|
await promiseBookmarksOnToolbar;
|
|
await emptyToolbarMessageVisible(false);
|
|
|
|
// 5: Remove all the bookmarks in the toolbar and confirm that the toolbar
|
|
// is hidden on the New Tab now
|
|
await PlacesUtils.bookmarks.remove(bookmarks);
|
|
await BrowserTestUtils.switchTab(gBrowser, exampleTab);
|
|
await BrowserTestUtils.switchTab(gBrowser, newtab);
|
|
await waitForBookmarksToolbarVisibility({
|
|
visible: true,
|
|
message:
|
|
"Toolbar is visible when there are no items or nested bookmarks in the toolbar area",
|
|
});
|
|
await emptyToolbarMessageVisible(true);
|
|
|
|
// 6: Add a toolbarbutton and make sure that the toolbar appears when the button is visible
|
|
CustomizableUI.addWidgetToArea(
|
|
"characterencoding-button",
|
|
CustomizableUI.AREA_BOOKMARKS
|
|
);
|
|
await BrowserTestUtils.switchTab(gBrowser, exampleTab);
|
|
await BrowserTestUtils.switchTab(gBrowser, newtab);
|
|
await waitForBookmarksToolbarVisibility({
|
|
visible: true,
|
|
message: "Toolbar is visible when there is a visible button in the toolbar",
|
|
});
|
|
await emptyToolbarMessageVisible(false);
|
|
|
|
await BrowserTestUtils.removeTab(newtab);
|
|
await BrowserTestUtils.removeTab(exampleTab);
|
|
CustomizableUI.reset();
|
|
});
|