summaryrefslogtreecommitdiffstats
path: root/browser/components/places/tests/browser/browser_library_middleclick.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/places/tests/browser/browser_library_middleclick.js')
-rw-r--r--browser/components/places/tests/browser/browser_library_middleclick.js234
1 files changed, 234 insertions, 0 deletions
diff --git a/browser/components/places/tests/browser/browser_library_middleclick.js b/browser/components/places/tests/browser/browser_library_middleclick.js
new file mode 100644
index 0000000000..8eb0bfa008
--- /dev/null
+++ b/browser/components/places/tests/browser/browser_library_middleclick.js
@@ -0,0 +1,234 @@
+/* vim:set ts=2 sw=2 sts=2 et: */
+/* 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/. */
+
+/**
+ * Tests middle-clicking items in the Library.
+ */
+
+const URIs = ["about:license", "about:mozilla"];
+
+var gLibrary = null;
+var gTests = [];
+
+add_task(async function test_setup() {
+ // Increase timeout, this test can be quite slow due to waitForFocus calls.
+ requestLongerTimeout(2);
+
+ // Temporary disable history, so we won't record pages navigation.
+ await SpecialPowers.pushPrefEnv({ set: [["places.history.enabled", false]] });
+
+ // Ensure the database is empty.
+ await PlacesUtils.bookmarks.eraseEverything();
+
+ // Open Library window.
+ gLibrary = await promiseLibrary();
+
+ registerCleanupFunction(async () => {
+ // We must close "Other Bookmarks" ready for other tests.
+ gLibrary.PlacesOrganizer.selectLeftPaneBuiltIn("UnfiledBookmarks");
+ gLibrary.PlacesOrganizer._places.selectedNode.containerOpen = false;
+
+ await PlacesUtils.bookmarks.eraseEverything();
+
+ // Close Library window.
+ await promiseLibraryClosed(gLibrary);
+ });
+});
+
+gTests.push({
+ desc: "Open bookmark in a new tab.",
+ URIs: ["about:buildconfig"],
+ _bookmark: null,
+
+ async setup() {
+ // Add a new unsorted bookmark.
+ this._bookmark = await PlacesUtils.bookmarks.insert({
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ title: "Title",
+ url: this.URIs[0],
+ });
+
+ // Select unsorted bookmarks root in the left pane.
+ gLibrary.PlacesOrganizer.selectLeftPaneBuiltIn("UnfiledBookmarks");
+ Assert.notEqual(
+ gLibrary.PlacesOrganizer._places.selectedNode,
+ null,
+ "We correctly have selection in the Library left pane"
+ );
+
+ // Get our bookmark in the right pane.
+ var bookmarkNode = gLibrary.ContentTree.view.view.nodeForTreeIndex(0);
+ Assert.equal(
+ bookmarkNode.uri,
+ this.URIs[0],
+ "Found bookmark in the right pane"
+ );
+ },
+
+ async cleanup() {
+ await PlacesUtils.bookmarks.remove(this._bookmark);
+ },
+});
+
+// ------------------------------------------------------------------------------
+// Open a folder in tabs.
+//
+gTests.push({
+ desc: "Open a folder in tabs.",
+ URIs: ["about:buildconfig", "about:mozilla"],
+ _bookmarks: null,
+
+ async setup() {
+ // Create a new folder.
+ let children = this.URIs.map(url => {
+ return {
+ title: "Title",
+ url,
+ };
+ });
+
+ this._bookmarks = await PlacesUtils.bookmarks.insertTree({
+ guid: PlacesUtils.bookmarks.unfiledGuid,
+ children: [
+ {
+ title: "Folder",
+ type: PlacesUtils.bookmarks.TYPE_FOLDER,
+ children,
+ },
+ ],
+ });
+
+ // Select unsorted bookmarks root in the left pane.
+ gLibrary.PlacesOrganizer.selectLeftPaneBuiltIn("UnfiledBookmarks");
+ isnot(
+ gLibrary.PlacesOrganizer._places.selectedNode,
+ null,
+ "We correctly have selection in the Library left pane"
+ );
+ // Get our bookmark in the right pane.
+ var folderNode = gLibrary.ContentTree.view.view.nodeForTreeIndex(0);
+ is(folderNode.title, "Folder", "Found folder in the right pane");
+ },
+
+ async cleanup() {
+ await PlacesUtils.bookmarks.remove(this._bookmarks[0]);
+ },
+});
+
+// ------------------------------------------------------------------------------
+// Open a query in tabs.
+
+gTests.push({
+ desc: "Open a query in tabs.",
+ URIs: ["about:buildconfig", "about:mozilla"],
+ _bookmarks: null,
+ _query: null,
+
+ async setup() {
+ let children = this.URIs.map(url => {
+ return {
+ title: "Title",
+ url,
+ };
+ });
+
+ this._bookmarks = await PlacesUtils.bookmarks.insertTree({
+ guid: PlacesUtils.bookmarks.unfiledGuid,
+ children: [
+ {
+ title: "Folder",
+ type: PlacesUtils.bookmarks.TYPE_FOLDER,
+ children,
+ },
+ ],
+ });
+
+ // Create a bookmarks query containing our bookmarks.
+ var hs = PlacesUtils.history;
+ var options = hs.getNewQueryOptions();
+ options.queryType = Ci.nsINavHistoryQueryOptions.QUERY_TYPE_BOOKMARKS;
+ var query = hs.getNewQuery();
+ // The colon included in the terms selects only about: URIs. If not included
+ // we also may get pages like about.html included in the query result.
+ query.searchTerms = "about:";
+ var queryString = hs.queryToQueryString(query, options);
+ this._query = await PlacesUtils.bookmarks.insert({
+ index: 0, // it must be the first
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ title: "Query",
+ url: queryString,
+ });
+
+ // Select unsorted bookmarks root in the left pane.
+ gLibrary.PlacesOrganizer.selectLeftPaneBuiltIn("UnfiledBookmarks");
+ isnot(
+ gLibrary.PlacesOrganizer._places.selectedNode,
+ null,
+ "We correctly have selection in the Library left pane"
+ );
+ // Get our bookmark in the right pane.
+ var folderNode = gLibrary.ContentTree.view.view.nodeForTreeIndex(0);
+ is(folderNode.title, "Query", "Found query in the right pane");
+ },
+
+ async cleanup() {
+ await PlacesUtils.bookmarks.remove(this._bookmarks[0]);
+ await PlacesUtils.bookmarks.remove(this._query);
+ },
+});
+
+async function runTest(test) {
+ info("Start of test: " + test.desc);
+ // Test setup will set Library so that the bookmark to be opened is the
+ // first node in the content (right pane) tree.
+ await test.setup();
+
+ // Middle click on first node in the content tree of the Library.
+ gLibrary.focus();
+ await SimpleTest.promiseFocus(gLibrary);
+
+ // Now middle-click on the bookmark contained with it.
+ let promiseLoaded = Promise.all(
+ test.URIs.map(uri =>
+ BrowserTestUtils.waitForNewTab(gBrowser, uri, false, true)
+ )
+ );
+
+ mouseEventOnCell(gLibrary.ContentTree.view, 0, 0, { button: 1 });
+
+ let tabs = await promiseLoaded;
+
+ Assert.ok(true, "Expected tabs were loaded");
+
+ for (let tab of tabs) {
+ BrowserTestUtils.removeTab(tab);
+ }
+
+ await test.cleanup();
+}
+
+add_task(async function test_all() {
+ for (let test of gTests) {
+ await runTest(test);
+ }
+});
+
+function mouseEventOnCell(aTree, aRowIndex, aColumnIndex, aEventDetails) {
+ var selection = aTree.view.selection;
+ selection.select(aRowIndex);
+ aTree.ensureRowIsVisible(aRowIndex);
+ var column = aTree.columns[aColumnIndex];
+
+ // get cell coordinates
+ var rect = aTree.getCoordsForCellItem(aRowIndex, column, "text");
+
+ EventUtils.synthesizeMouse(
+ aTree.body,
+ rect.x,
+ rect.y,
+ aEventDetails,
+ gLibrary
+ );
+}