summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_contextMenus_bookmarks.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_contextMenus_bookmarks.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_contextMenus_bookmarks.js115
1 files changed, 115 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_contextMenus_bookmarks.js b/browser/components/extensions/test/browser/browser_ext_contextMenus_bookmarks.js
new file mode 100644
index 0000000000..1e95899513
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_contextMenus_bookmarks.js
@@ -0,0 +1,115 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+Services.scriptloader.loadSubScript(
+ "chrome://mochitests/content/browser/browser/components/places/tests/browser/head.js",
+ this
+);
+/* globals withSidebarTree, synthesizeClickOnSelectedTreeCell, promiseLibrary, promiseLibraryClosed */
+
+function bookmarkContextMenuExtension() {
+ return ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: ["contextMenus", "bookmarks"],
+ },
+ async background() {
+ const CONTEXT_ENTRY_LABEL = "Test Context Entry ";
+
+ browser.contextMenus.create(
+ {
+ title: CONTEXT_ENTRY_LABEL,
+ contexts: ["bookmark"],
+ onclick: (info, tab) => {
+ browser.test.sendMessage(`clicked`, info.bookmarkId);
+ },
+ },
+ () => {
+ browser.test.assertEq(
+ browser.runtime.lastError,
+ null,
+ "Created context menu"
+ );
+ browser.test.sendMessage("created", CONTEXT_ENTRY_LABEL);
+ }
+ );
+ },
+ });
+}
+
+add_task(async function test_bookmark_sidebar_contextmenu() {
+ await withSidebarTree("bookmarks", async tree => {
+ let extension = bookmarkContextMenuExtension();
+ await extension.startup();
+ let context_entry_label = await extension.awaitMessage("created");
+
+ const expected_bookmarkID_2_virtualID = new Map([
+ ["toolbar_____", "toolbar____v"], // Bookmarks Toolbar
+ ["menu________", "menu_______v"], // Bookmarks Menu
+ ["unfiled_____", "unfiled____v"], // Other Bookmarks
+ ]);
+
+ for (let [
+ expectedBookmarkID,
+ expectedVirtualID,
+ ] of expected_bookmarkID_2_virtualID) {
+ info(`Testing context menu for Bookmark ID "${expectedBookmarkID}"`);
+ let sidebar = window.SidebarUI.browser;
+ let menu = sidebar.contentDocument.getElementById("placesContext");
+ tree.selectItems([expectedBookmarkID]);
+
+ let min = {},
+ max = {};
+ tree.view.selection.getRangeAt(0, min, max);
+ let node = tree.view.nodeForTreeIndex(min.value);
+ const actualVirtualID = node.bookmarkGuid;
+ Assert.equal(actualVirtualID, expectedVirtualID, "virtualIDs match");
+
+ let shown = BrowserTestUtils.waitForEvent(menu, "popupshown");
+ synthesizeClickOnSelectedTreeCell(tree, { type: "contextmenu" });
+ await shown;
+
+ let menuItem = menu.getElementsByAttribute(
+ "label",
+ context_entry_label
+ )[0];
+ closeChromeContextMenu("placesContext", menuItem, sidebar.contentWindow);
+
+ const actualBookmarkID = await extension.awaitMessage(`clicked`);
+ Assert.equal(actualBookmarkID, expectedBookmarkID, "bookmarkIDs match");
+ }
+ await extension.unload();
+ });
+});
+
+add_task(async function test_bookmark_library_contextmenu() {
+ let extension = bookmarkContextMenuExtension();
+ await extension.startup();
+ let context_entry_label = await extension.awaitMessage("created");
+
+ let library = await promiseLibrary("BookmarksToolbar");
+ let menu = library.document.getElementById("placesContext");
+ let leftTree = library.document.getElementById("placesList");
+
+ const treeIDs = [
+ "allbms_____v",
+ "history____v",
+ "downloads__v",
+ "tags_______v",
+ ];
+
+ for (let treeID of treeIDs) {
+ info(`Testing context menu for TreeID "${treeID}"`);
+ leftTree.selectItems([treeID]);
+
+ let shown = BrowserTestUtils.waitForEvent(menu, "popupshown");
+ synthesizeClickOnSelectedTreeCell(leftTree, { type: "contextmenu" });
+ await shown;
+
+ let items = menu.getElementsByAttribute("label", context_entry_label);
+ Assert.equal(items.length, 0, "no extension context entry");
+ closeChromeContextMenu("placesContext", null, library);
+ }
+ await extension.unload();
+ await promiseLibraryClosed(library);
+});