Bug 658245 - Part 2: add a browser mochitest for loadBookmarksInTabs. r=mak draft
authorHector Zhao <bzhao@mozilla.com>
Tue, 22 Aug 2017 19:02:14 +0800
changeset 655865 771cbee645fdad07adf909ad3923e4fd525b4d3e
parent 655775 53d3c57bf6e894b46e99163b951d521191439363
child 728920 e477f0b8c1f86e88dcb9d48777646093dc76b156
push id76967
push userbmo:bzhao@mozilla.com
push dateWed, 30 Aug 2017 11:54:17 +0000
reviewersmak
bugs658245
milestone57.0a1
Bug 658245 - Part 2: add a browser mochitest for loadBookmarksInTabs. r=mak MozReview-Commit-ID: JoFvDl5uLxD
browser/components/places/tests/browser/browser.ini
browser/components/places/tests/browser/browser_click_bookmarks_on_toolbar.js
--- a/browser/components/places/tests/browser/browser.ini
+++ b/browser/components/places/tests/browser/browser.ini
@@ -28,16 +28,17 @@ support-files =
   pageopeningwindow.html
 [browser_bookmarkProperties_addFolderDefaultButton.js]
 [browser_bookmarkProperties_addKeywordForThisSearch.js]
 [browser_bookmarkProperties_addLivemark.js]
 [browser_bookmarkProperties_bookmarkAllTabs.js]
 [browser_bookmarkProperties_editTagContainer.js]
 [browser_bookmarkProperties_readOnlyRoot.js]
 [browser_bookmarksProperties.js]
+[browser_click_bookmarks_on_toolbar.js]
 [browser_drag_bookmarks_on_toolbar.js]
 [browser_forgetthissite_single.js]
 [browser_history_sidebar_search.js]
 [browser_library_batch_delete.js]
 [browser_library_commands.js]
 [browser_library_delete_tags.js]
 [browser_library_downloads.js]
 [browser_library_infoBox.js]
new file mode 100644
--- /dev/null
+++ b/browser/components/places/tests/browser/browser_click_bookmarks_on_toolbar.js
@@ -0,0 +1,130 @@
+/* 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/. */
+
+const PREF_LOAD_BOOKMARKS_IN_TABS = "browser.tabs.loadBookmarksInTabs";
+const TEST_PAGES = ["about:mozilla", "about:robots"];
+
+var gBookmarkElements = [];
+
+function getToolbarNodeForItemGuid(aItemGuid) {
+  var children = document.getElementById("PlacesToolbarItems").childNodes;
+  for (let child of children) {
+    if (aItemGuid == child._placesNode.bookmarkGuid) {
+      return child;
+    }
+  }
+  return null;
+}
+
+function waitForLoad(browser, url) {
+  return BrowserTestUtils.browserLoaded(browser, false, url).then(() => {
+    return BrowserTestUtils.loadURI(browser, "about:blank");
+  });
+}
+
+function waitForNewTab(url, inBackground) {
+  return BrowserTestUtils.waitForNewTab(gBrowser, url).then(tab => {
+    if (inBackground) {
+      Assert.notEqual(tab,
+        gBrowser.selectedTab, `The new tab is in the background`);
+    } else {
+      Assert.equal(tab,
+        gBrowser.selectedTab, `The new tab is in the foreground`);
+    }
+
+    return BrowserTestUtils.removeTab(tab);
+  })
+}
+
+add_task(async function setup() {
+  let bookmarks = await Promise.all(TEST_PAGES.map((url, index) => {
+    return PlacesUtils.bookmarks.insert({
+      parentGuid: PlacesUtils.bookmarks.toolbarGuid,
+      title: `Title ${index}`,
+      url
+    });
+  }));
+
+  let toolbar = document.getElementById("PersonalToolbar");
+  let wasCollapsed = toolbar.collapsed;
+  if (wasCollapsed) {
+    await promiseSetToolbarVisibility(toolbar, true);
+  }
+
+  for (let bookmark of bookmarks) {
+    let element = getToolbarNodeForItemGuid(bookmark.guid);
+    Assert.notEqual(element, null, "Found node on toolbar");
+
+    gBookmarkElements.push(element);
+  }
+
+  registerCleanupFunction(async () => {
+    gBookmarkElements = [];
+
+    if (wasCollapsed) {
+      await promiseSetToolbarVisibility(toolbar, false);
+    }
+
+    await Promise.all(bookmarks.map(bookmark => {
+      return PlacesUtils.bookmarks.remove(bookmark);
+    }));
+  });
+});
+
+add_task(async function click() {
+  let promise = waitForLoad(gBrowser.selectedBrowser, TEST_PAGES[0]);
+  EventUtils.synthesizeMouseAtCenter(gBookmarkElements[0], {
+    button: 0
+  });
+  await promise;
+
+  promise = waitForNewTab(TEST_PAGES[1], false);
+  EventUtils.synthesizeMouseAtCenter(gBookmarkElements[1], {
+    button: 0, accelKey: true
+  });
+  await promise;
+});
+
+add_task(async function middleclick() {
+  let promise = waitForNewTab(TEST_PAGES[0], true);
+  EventUtils.synthesizeMouseAtCenter(gBookmarkElements[0], {
+    button: 1, shiftKey: true
+  });
+  await promise;
+
+  promise = waitForNewTab(TEST_PAGES[1], false);
+  EventUtils.synthesizeMouseAtCenter(gBookmarkElements[1], {
+    button: 1
+  });
+  await promise;
+});
+
+add_task(async function clickWithPrefSet() {
+  await SpecialPowers.pushPrefEnv({set: [
+    [PREF_LOAD_BOOKMARKS_IN_TABS, true]
+  ]})
+
+  let promise = waitForNewTab(TEST_PAGES[0], false);
+  EventUtils.synthesizeMouseAtCenter(gBookmarkElements[0], {
+    button: 0
+  });
+  await promise;
+
+  let placesContext = document.getElementById("placesContext");
+  promise = BrowserTestUtils.waitForEvent(placesContext, "popupshown");
+  EventUtils.synthesizeMouseAtCenter(gBookmarkElements[1], {
+    button: 2,
+    type: "contextmenu"
+  });
+  await promise;
+
+  promise = waitForLoad(gBrowser.selectedBrowser, TEST_PAGES[1]);
+  let open = document.getElementById("placesContext_open");
+  EventUtils.synthesizeMouseAtCenter(open, {
+    button: 0
+  });
+  await promise;
+
+  await SpecialPowers.popPrefEnv();
+});