forked from mirrors/gecko-dev
257 lines
8.1 KiB
JavaScript
257 lines
8.1 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
/**
|
|
* Test opening and closing the bookmarks panel.
|
|
*/
|
|
|
|
let bookmarkPanel = document.getElementById("editBookmarkPanel");
|
|
let bookmarkStar = document.getElementById("bookmarks-menu-button");
|
|
let bookmarkPanelTitle = document.getElementById("editBookmarkPanelTitle");
|
|
|
|
StarUI._closePanelQuickForTesting = true;
|
|
|
|
function* test_bookmarks_popup({isNewBookmark, popupShowFn, popupEditFn,
|
|
shouldAutoClose, popupHideFn, isBookmarkRemoved}) {
|
|
let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:home");
|
|
try {
|
|
if (!isNewBookmark) {
|
|
yield PlacesUtils.bookmarks.insert({
|
|
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
|
|
url: "about:home",
|
|
title: "Home Page"
|
|
});
|
|
}
|
|
|
|
is(bookmarkStar.hasAttribute("starred"), !isNewBookmark,
|
|
"Page should only be starred prior to popupshown if editing bookmark");
|
|
is(bookmarkPanel.state, "closed", "Panel should be 'closed' to start test");
|
|
let shownPromise = promisePopupShown(bookmarkPanel);
|
|
yield popupShowFn(tab.linkedBrowser);
|
|
yield shownPromise;
|
|
is(bookmarkPanel.state, "open", "Panel should be 'open' after shownPromise is resolved");
|
|
|
|
if (popupEditFn) {
|
|
yield popupEditFn();
|
|
}
|
|
let bookmarks = [];
|
|
yield PlacesUtils.bookmarks.fetch({url: "about:home"}, bm => bookmarks.push(bm));
|
|
is(bookmarks.length, 1, "Only one bookmark should exist");
|
|
is(bookmarkStar.getAttribute("starred"), "true", "Page is starred");
|
|
is(bookmarkPanelTitle.value,
|
|
isNewBookmark ?
|
|
gNavigatorBundle.getString("editBookmarkPanel.pageBookmarkedTitle") :
|
|
gNavigatorBundle.getString("editBookmarkPanel.editBookmarkTitle"),
|
|
"title should match isEditingBookmark state");
|
|
|
|
if (!shouldAutoClose) {
|
|
yield new Promise(resolve => setTimeout(resolve, 400));
|
|
is(bookmarkPanel.state, "open", "Panel should still be 'open' for non-autoclose");
|
|
}
|
|
|
|
let hiddenPromise = promisePopupHidden(bookmarkPanel);
|
|
if (popupHideFn) {
|
|
yield popupHideFn();
|
|
}
|
|
yield hiddenPromise;
|
|
is(bookmarkStar.hasAttribute("starred"), !isBookmarkRemoved,
|
|
"Page is starred after closing");
|
|
} finally {
|
|
let bookmark = yield PlacesUtils.bookmarks.fetch({url: "about:home"});
|
|
is(!!bookmark, !isBookmarkRemoved,
|
|
"bookmark should not be present if a panel action should've removed it");
|
|
if (bookmark) {
|
|
yield PlacesUtils.bookmarks.remove(bookmark);
|
|
}
|
|
gBrowser.removeTab(tab);
|
|
}
|
|
}
|
|
|
|
add_task(function* panel_shown_for_new_bookmarks_and_autocloses() {
|
|
yield test_bookmarks_popup({
|
|
isNewBookmark: true,
|
|
popupShowFn() {
|
|
bookmarkStar.click();
|
|
},
|
|
shouldAutoClose: true,
|
|
isBookmarkRemoved: false,
|
|
});
|
|
});
|
|
|
|
add_task(function* panel_shown_for_once_for_doubleclick_on_new_bookmark_star_and_autocloses() {
|
|
yield test_bookmarks_popup({
|
|
isNewBookmark: true,
|
|
popupShowFn() {
|
|
EventUtils.synthesizeMouse(bookmarkStar, 10, 10, { clickCount: 2 },
|
|
window);
|
|
},
|
|
shouldAutoClose: true,
|
|
isBookmarkRemoved: false,
|
|
});
|
|
});
|
|
|
|
add_task(function* panel_shown_once_for_slow_doubleclick_on_new_bookmark_star_and_autocloses() {
|
|
todo(false, "bug 1250267, may need to add some tracking state to " +
|
|
"browser-places.js for this.");
|
|
return;
|
|
|
|
yield test_bookmarks_popup({
|
|
isNewBookmark: true,
|
|
*popupShowFn() {
|
|
EventUtils.synthesizeMouse(bookmarkStar, 10, 10, window);
|
|
yield new Promise(resolve => setTimeout(resolve, 300));
|
|
EventUtils.synthesizeMouse(bookmarkStar, 10, 10, window);
|
|
},
|
|
shouldAutoClose: true,
|
|
isBookmarkRemoved: false,
|
|
});
|
|
});
|
|
|
|
add_task(function* panel_shown_for_keyboardshortcut_on_new_bookmark_star_and_autocloses() {
|
|
yield test_bookmarks_popup({
|
|
isNewBookmark: true,
|
|
popupShowFn() {
|
|
EventUtils.synthesizeKey("D", {accelKey: true}, window);
|
|
},
|
|
shouldAutoClose: true,
|
|
isBookmarkRemoved: false,
|
|
});
|
|
});
|
|
|
|
add_task(function* panel_shown_for_new_bookmarks_mousemove_mouseout() {
|
|
yield test_bookmarks_popup({
|
|
isNewBookmark: true,
|
|
popupShowFn() {
|
|
bookmarkStar.click();
|
|
},
|
|
*popupEditFn() {
|
|
let mouseMovePromise = BrowserTestUtils.waitForEvent(bookmarkPanel, "mousemove");
|
|
EventUtils.synthesizeMouseAtCenter(bookmarkPanel, {type: "mousemove"});
|
|
info("Waiting for mousemove event");
|
|
yield mouseMovePromise;
|
|
info("Got mousemove event");
|
|
|
|
yield new Promise(resolve => setTimeout(resolve, 400));
|
|
is(bookmarkPanel.state, "open", "Panel should still be open on mousemove");
|
|
},
|
|
*popupHideFn() {
|
|
let mouseOutPromise = BrowserTestUtils.waitForEvent(bookmarkPanel, "mouseout");
|
|
EventUtils.synthesizeMouse(bookmarkPanel, 0, 0, {type: "mouseout"});
|
|
EventUtils.synthesizeMouseAtCenter(document.documentElement, {type: "mousemove"});
|
|
info("Waiting for mouseout event");
|
|
yield mouseOutPromise;
|
|
info("Got mouseout event, should autoclose now");
|
|
},
|
|
shouldAutoClose: false,
|
|
isBookmarkRemoved: false,
|
|
});
|
|
});
|
|
|
|
add_task(function* panel_shown_for_new_bookmark_no_autoclose_close_with_ESC() {
|
|
yield test_bookmarks_popup({
|
|
isNewBookmark: false,
|
|
popupShowFn() {
|
|
bookmarkStar.click();
|
|
},
|
|
shouldAutoClose: false,
|
|
popupHideFn() {
|
|
EventUtils.synthesizeKey("VK_ESCAPE", {accelKey: true}, window);
|
|
},
|
|
isBookmarkRemoved: false,
|
|
});
|
|
});
|
|
|
|
add_task(function* panel_shown_for_editing_no_autoclose_close_with_ESC() {
|
|
yield test_bookmarks_popup({
|
|
isNewBookmark: false,
|
|
popupShowFn() {
|
|
bookmarkStar.click();
|
|
},
|
|
shouldAutoClose: false,
|
|
popupHideFn() {
|
|
EventUtils.synthesizeKey("VK_ESCAPE", {accelKey: true}, window);
|
|
},
|
|
isBookmarkRemoved: false,
|
|
});
|
|
});
|
|
|
|
add_task(function* panel_shown_for_new_bookmark_keypress_no_autoclose() {
|
|
yield test_bookmarks_popup({
|
|
isNewBookmark: true,
|
|
popupShowFn() {
|
|
bookmarkStar.click();
|
|
},
|
|
popupEditFn() {
|
|
EventUtils.sendChar("VK_TAB", window);
|
|
},
|
|
shouldAutoClose: false,
|
|
popupHideFn() {
|
|
bookmarkPanel.hidePopup();
|
|
},
|
|
isBookmarkRemoved: false,
|
|
});
|
|
});
|
|
|
|
add_task(function* contextmenu_new_bookmark_keypress_no_autoclose() {
|
|
yield test_bookmarks_popup({
|
|
isNewBookmark: true,
|
|
*popupShowFn(browser) {
|
|
let contextMenu = document.getElementById("contentAreaContextMenu");
|
|
let awaitPopupShown = BrowserTestUtils.waitForEvent(contextMenu,
|
|
"popupshown");
|
|
let awaitPopupHidden = BrowserTestUtils.waitForEvent(contextMenu,
|
|
"popuphidden");
|
|
yield BrowserTestUtils.synthesizeMouseAtCenter("body", {
|
|
type: "contextmenu",
|
|
button: 2
|
|
}, browser);
|
|
yield awaitPopupShown;
|
|
document.getElementById("context-bookmarkpage").click();
|
|
contextMenu.hidePopup();
|
|
yield awaitPopupHidden;
|
|
},
|
|
popupEditFn() {
|
|
EventUtils.sendChar("VK_TAB", window);
|
|
},
|
|
shouldAutoClose: false,
|
|
popupHideFn() {
|
|
bookmarkPanel.hidePopup();
|
|
},
|
|
isBookmarkRemoved: false,
|
|
});
|
|
});
|
|
|
|
add_task(function* bookmarks_menu_new_bookmark_remove_bookmark() {
|
|
yield test_bookmarks_popup({
|
|
isNewBookmark: true,
|
|
popupShowFn(browser) {
|
|
document.getElementById("menu_bookmarkThisPage").doCommand();
|
|
},
|
|
shouldAutoClose: true,
|
|
popupHideFn() {
|
|
document.getElementById("editBookmarkPanelRemoveButton").click();
|
|
},
|
|
isBookmarkRemoved: true,
|
|
});
|
|
});
|
|
|
|
add_task(function* ctrl_d_edit_bookmark_remove_bookmark() {
|
|
yield test_bookmarks_popup({
|
|
isNewBookmark: false,
|
|
popupShowFn(browser) {
|
|
EventUtils.synthesizeKey("D", {accelKey: true}, window);
|
|
},
|
|
shouldAutoClose: true,
|
|
popupHideFn() {
|
|
document.getElementById("editBookmarkPanelRemoveButton").click();
|
|
},
|
|
isBookmarkRemoved: true,
|
|
});
|
|
});
|
|
|
|
registerCleanupFunction(function() {
|
|
delete StarUI._closePanelQuickForTesting;
|
|
})
|