forked from mirrors/gecko-dev
		
	This method only is async in order to allow callers to wait for a process switch triggered by the call to `loadURI` to be finished before resolving. With DocumentChannel, we should never trigger a process switch eagerly like this again, so we don't need any of the async behaviour here anymore. This part is largely mechanical changes to tests, removing the `await` calls on `loadURI`, and a follow-up part will remove the actual async logic from `BrowserTestUtils.loadURI`. Differential Revision: https://phabricator.services.mozilla.com/D94641
		
			
				
	
	
		
			349 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			349 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Any copyright is dedicated to the Public Domain.
 | 
						|
 * http://creativecommons.org/publicdomain/zero/1.0/ */
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
add_task(async function bookmarks_toolbar_shown_on_newtab() {
 | 
						|
  for (let featureEnabled of [true, false]) {
 | 
						|
    info(
 | 
						|
      "Testing with the feature " + (featureEnabled ? "enabled" : "disabled")
 | 
						|
    );
 | 
						|
    await SpecialPowers.pushPrefEnv({
 | 
						|
      set: [["browser.toolbars.bookmarks.2h2020", featureEnabled]],
 | 
						|
    });
 | 
						|
    let newtab = await BrowserTestUtils.openNewForegroundTab({
 | 
						|
      gBrowser,
 | 
						|
      opening: "about:newtab",
 | 
						|
      waitForLoad: false,
 | 
						|
    });
 | 
						|
 | 
						|
    // 1: Test that the toolbar is shown in a newly opened foreground about:newtab
 | 
						|
    if (featureEnabled) {
 | 
						|
      await waitForBookmarksToolbarVisibility({
 | 
						|
        visible: true,
 | 
						|
        message: "Toolbar should be visible on newtab if enabled",
 | 
						|
      });
 | 
						|
    }
 | 
						|
    is(
 | 
						|
      isBookmarksToolbarVisible(),
 | 
						|
      featureEnabled,
 | 
						|
      "Toolbar should be visible on newtab if enabled"
 | 
						|
    );
 | 
						|
 | 
						|
    // 2: Test that the toolbar is hidden when the browser is navigated away from newtab
 | 
						|
    BrowserTestUtils.loadURI(newtab.linkedBrowser, "https://example.com");
 | 
						|
    await BrowserTestUtils.browserLoaded(newtab.linkedBrowser);
 | 
						|
    if (featureEnabled) {
 | 
						|
      await waitForBookmarksToolbarVisibility({
 | 
						|
        visible: false,
 | 
						|
        message:
 | 
						|
          "Toolbar should not be visible on newtab after example.com is loaded within",
 | 
						|
      });
 | 
						|
    }
 | 
						|
    ok(
 | 
						|
      !isBookmarksToolbarVisible(),
 | 
						|
      "Toolbar should not be visible on newtab after example.com is loaded within"
 | 
						|
    );
 | 
						|
 | 
						|
    // 3: Re-load about:newtab in the browser for the following tests and confirm toolbar reappears
 | 
						|
    BrowserTestUtils.loadURI(newtab.linkedBrowser, "about:newtab");
 | 
						|
    await BrowserTestUtils.browserLoaded(newtab.linkedBrowser);
 | 
						|
    if (featureEnabled) {
 | 
						|
      await waitForBookmarksToolbarVisibility({
 | 
						|
        visible: true,
 | 
						|
        message: "Toolbar should be visible on newtab",
 | 
						|
      });
 | 
						|
    }
 | 
						|
    is(
 | 
						|
      isBookmarksToolbarVisible(),
 | 
						|
      featureEnabled,
 | 
						|
      "Toolbar should be visible on newtab"
 | 
						|
    );
 | 
						|
 | 
						|
    // 4: Toolbar should get hidden when opening a new tab to example.com
 | 
						|
    let example = await BrowserTestUtils.openNewForegroundTab({
 | 
						|
      gBrowser,
 | 
						|
      opening: "https://example.com",
 | 
						|
    });
 | 
						|
    await waitForBookmarksToolbarVisibility({
 | 
						|
      visible: false,
 | 
						|
      message: "Toolbar should be hidden on example.com",
 | 
						|
    });
 | 
						|
 | 
						|
    // 5: Toolbar should become visible when switching tabs to newtab
 | 
						|
    await BrowserTestUtils.switchTab(gBrowser, newtab);
 | 
						|
    if (featureEnabled) {
 | 
						|
      await waitForBookmarksToolbarVisibility({
 | 
						|
        visible: true,
 | 
						|
        message: "Toolbar is visible with switch to newtab if enabled",
 | 
						|
      });
 | 
						|
    }
 | 
						|
    is(
 | 
						|
      isBookmarksToolbarVisible(),
 | 
						|
      featureEnabled,
 | 
						|
      "Toolbar is visible with switch to newtab if enabled"
 | 
						|
    );
 | 
						|
 | 
						|
    // 6: Toolbar should become hidden when switching tabs to example.com
 | 
						|
    await BrowserTestUtils.switchTab(gBrowser, example);
 | 
						|
    await waitForBookmarksToolbarVisibility({
 | 
						|
      visible: false,
 | 
						|
      message: "Toolbar is hidden with switch to example",
 | 
						|
    });
 | 
						|
 | 
						|
    // 7: Similar to #3 above, loading about:newtab in example should show toolbar
 | 
						|
    BrowserTestUtils.loadURI(example.linkedBrowser, "about:newtab");
 | 
						|
    await BrowserTestUtils.browserLoaded(example.linkedBrowser);
 | 
						|
    if (featureEnabled) {
 | 
						|
      await waitForBookmarksToolbarVisibility({
 | 
						|
        visible: true,
 | 
						|
        message: "Toolbar is visible with newtab load if enabled",
 | 
						|
      });
 | 
						|
    }
 | 
						|
    is(
 | 
						|
      isBookmarksToolbarVisible(),
 | 
						|
      featureEnabled,
 | 
						|
      "Toolbar is visible with newtab load if enabled"
 | 
						|
    );
 | 
						|
 | 
						|
    // 8: Switching back and forth between two browsers showing about:newtab will still show the toolbar
 | 
						|
    await BrowserTestUtils.switchTab(gBrowser, newtab);
 | 
						|
    is(
 | 
						|
      isBookmarksToolbarVisible(),
 | 
						|
      featureEnabled,
 | 
						|
      "Toolbar is visible with switch to newtab if enabled"
 | 
						|
    );
 | 
						|
    await BrowserTestUtils.switchTab(gBrowser, example);
 | 
						|
    is(
 | 
						|
      isBookmarksToolbarVisible(),
 | 
						|
      featureEnabled,
 | 
						|
      "Toolbar is visible with switch to example(newtab) if enabled"
 | 
						|
    );
 | 
						|
 | 
						|
    // 9: With custom newtab URL, toolbar isn't shown on about:newtab but is shown on custom URL
 | 
						|
    let oldNewTab = AboutNewTab.newTabURL;
 | 
						|
    AboutNewTab.newTabURL = "https://example.com/2";
 | 
						|
    await BrowserTestUtils.switchTab(gBrowser, newtab);
 | 
						|
    await waitForBookmarksToolbarVisibility({ visible: false });
 | 
						|
    ok(!isBookmarksToolbarVisible(), "Toolbar should hide with custom newtab");
 | 
						|
    BrowserTestUtils.loadURI(example.linkedBrowser, AboutNewTab.newTabURL);
 | 
						|
    await BrowserTestUtils.browserLoaded(example.linkedBrowser);
 | 
						|
    await BrowserTestUtils.switchTab(gBrowser, example);
 | 
						|
    if (featureEnabled) {
 | 
						|
      await waitForBookmarksToolbarVisibility({ visible: true });
 | 
						|
    }
 | 
						|
    is(
 | 
						|
      isBookmarksToolbarVisible(),
 | 
						|
      featureEnabled,
 | 
						|
      "Toolbar is visible with switch to custom newtab if enabled"
 | 
						|
    );
 | 
						|
 | 
						|
    await BrowserTestUtils.removeTab(newtab);
 | 
						|
    await BrowserTestUtils.removeTab(example);
 | 
						|
    AboutNewTab.newTabURL = oldNewTab;
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function bookmarks_toolbar_open_persisted() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [["browser.toolbars.bookmarks.2h2020", true]],
 | 
						|
  });
 | 
						|
  let newtab = await BrowserTestUtils.openNewForegroundTab({
 | 
						|
    gBrowser,
 | 
						|
    opening: "about:newtab",
 | 
						|
    waitForLoad: false,
 | 
						|
  });
 | 
						|
  let example = await BrowserTestUtils.openNewForegroundTab({
 | 
						|
    gBrowser,
 | 
						|
    opening: "https://example.com",
 | 
						|
  });
 | 
						|
  let isToolbarPersistedOpen = () =>
 | 
						|
    Services.prefs.getCharPref("browser.toolbars.bookmarks.visibility") ==
 | 
						|
    "always";
 | 
						|
 | 
						|
  ok(!isBookmarksToolbarVisible(), "Toolbar is hidden");
 | 
						|
  await BrowserTestUtils.switchTab(gBrowser, newtab);
 | 
						|
  await waitForBookmarksToolbarVisibility({ visible: true });
 | 
						|
  ok(isBookmarksToolbarVisible(), "Toolbar is visible");
 | 
						|
  await BrowserTestUtils.switchTab(gBrowser, example);
 | 
						|
  await waitForBookmarksToolbarVisibility({ visible: false });
 | 
						|
  ok(!isBookmarksToolbarVisible(), "Toolbar is hidden");
 | 
						|
  ok(!isToolbarPersistedOpen(), "Toolbar is not persisted open");
 | 
						|
 | 
						|
  let contextMenu = document.querySelector("#toolbar-context-menu");
 | 
						|
  let popupShown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
 | 
						|
  let menuButton = document.getElementById("PanelUI-menu-button");
 | 
						|
  EventUtils.synthesizeMouseAtCenter(
 | 
						|
    menuButton,
 | 
						|
    { type: "contextmenu" },
 | 
						|
    window
 | 
						|
  );
 | 
						|
  await popupShown;
 | 
						|
  let bookmarksToolbarMenu = document.querySelector("#toggle_PersonalToolbar");
 | 
						|
  let subMenu = bookmarksToolbarMenu.querySelector("menupopup");
 | 
						|
  popupShown = BrowserTestUtils.waitForEvent(subMenu, "popupshown");
 | 
						|
  EventUtils.synthesizeMouseAtCenter(bookmarksToolbarMenu, {});
 | 
						|
  await popupShown;
 | 
						|
  let alwaysMenuItem = document.querySelector(
 | 
						|
    'menuitem[data-visibility-enum="always"]'
 | 
						|
  );
 | 
						|
  let neverMenuItem = document.querySelector(
 | 
						|
    'menuitem[data-visibility-enum="never"]'
 | 
						|
  );
 | 
						|
  let newTabMenuItem = document.querySelector(
 | 
						|
    'menuitem[data-visibility-enum="newtab"]'
 | 
						|
  );
 | 
						|
  is(alwaysMenuItem.getAttribute("checked"), "false", "Menuitem isn't checked");
 | 
						|
  is(neverMenuItem.getAttribute("checked"), "false", "Menuitem isn't checked");
 | 
						|
  is(newTabMenuItem.getAttribute("checked"), "true", "Menuitem is checked");
 | 
						|
 | 
						|
  EventUtils.synthesizeMouseAtCenter(alwaysMenuItem, {});
 | 
						|
 | 
						|
  await waitForBookmarksToolbarVisibility({ visible: true });
 | 
						|
  popupShown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
 | 
						|
  EventUtils.synthesizeMouseAtCenter(
 | 
						|
    menuButton,
 | 
						|
    { type: "contextmenu" },
 | 
						|
    window
 | 
						|
  );
 | 
						|
  await popupShown;
 | 
						|
  bookmarksToolbarMenu = document.querySelector("#toggle_PersonalToolbar");
 | 
						|
  EventUtils.synthesizeMouseAtCenter(bookmarksToolbarMenu, {});
 | 
						|
  subMenu = bookmarksToolbarMenu.querySelector("menupopup");
 | 
						|
  popupShown = BrowserTestUtils.waitForEvent(subMenu, "popupshown");
 | 
						|
  EventUtils.synthesizeMouseAtCenter(bookmarksToolbarMenu, {});
 | 
						|
  await popupShown;
 | 
						|
  alwaysMenuItem = document.querySelector(
 | 
						|
    'menuitem[data-visibility-enum="always"]'
 | 
						|
  );
 | 
						|
  neverMenuItem = document.querySelector(
 | 
						|
    'menuitem[data-visibility-enum="never"]'
 | 
						|
  );
 | 
						|
  newTabMenuItem = document.querySelector(
 | 
						|
    'menuitem[data-visibility-enum="newtab"]'
 | 
						|
  );
 | 
						|
  is(alwaysMenuItem.getAttribute("checked"), "true", "Menuitem is checked");
 | 
						|
  is(neverMenuItem.getAttribute("checked"), "false", "Menuitem isn't checked");
 | 
						|
  is(newTabMenuItem.getAttribute("checked"), "false", "Menuitem isn't checked");
 | 
						|
  contextMenu.hidePopup();
 | 
						|
  ok(isBookmarksToolbarVisible(), "Toolbar is visible");
 | 
						|
  ok(isToolbarPersistedOpen(), "Toolbar is persisted open");
 | 
						|
  await BrowserTestUtils.switchTab(gBrowser, newtab);
 | 
						|
  ok(isBookmarksToolbarVisible(), "Toolbar is visible");
 | 
						|
  await BrowserTestUtils.switchTab(gBrowser, example);
 | 
						|
  ok(isBookmarksToolbarVisible(), "Toolbar is visible");
 | 
						|
 | 
						|
  popupShown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
 | 
						|
  EventUtils.synthesizeMouseAtCenter(
 | 
						|
    menuButton,
 | 
						|
    { type: "contextmenu" },
 | 
						|
    window
 | 
						|
  );
 | 
						|
  await popupShown;
 | 
						|
  bookmarksToolbarMenu = document.querySelector("#toggle_PersonalToolbar");
 | 
						|
  EventUtils.synthesizeMouseAtCenter(bookmarksToolbarMenu, {});
 | 
						|
  subMenu = bookmarksToolbarMenu.querySelector("menupopup");
 | 
						|
  popupShown = BrowserTestUtils.waitForEvent(subMenu, "popupshown");
 | 
						|
  EventUtils.synthesizeMouseAtCenter(bookmarksToolbarMenu, {});
 | 
						|
  await popupShown;
 | 
						|
  alwaysMenuItem = document.querySelector(
 | 
						|
    'menuitem[data-visibility-enum="always"]'
 | 
						|
  );
 | 
						|
  neverMenuItem = document.querySelector(
 | 
						|
    'menuitem[data-visibility-enum="never"]'
 | 
						|
  );
 | 
						|
  newTabMenuItem = document.querySelector(
 | 
						|
    'menuitem[data-visibility-enum="newtab"]'
 | 
						|
  );
 | 
						|
  is(alwaysMenuItem.getAttribute("checked"), "true", "Menuitem is checked");
 | 
						|
  is(neverMenuItem.getAttribute("checked"), "false", "Menuitem isn't checked");
 | 
						|
  is(newTabMenuItem.getAttribute("checked"), "false", "Menuitem isn't checked");
 | 
						|
  EventUtils.synthesizeMouseAtCenter(newTabMenuItem, {});
 | 
						|
  await waitForBookmarksToolbarVisibility({
 | 
						|
    visible: false,
 | 
						|
    message: "Toolbar is hidden",
 | 
						|
  });
 | 
						|
  await BrowserTestUtils.switchTab(gBrowser, newtab);
 | 
						|
  await waitForBookmarksToolbarVisibility({
 | 
						|
    visible: true,
 | 
						|
    message: "Toolbar is visible",
 | 
						|
  });
 | 
						|
  await BrowserTestUtils.switchTab(gBrowser, example);
 | 
						|
  await waitForBookmarksToolbarVisibility({
 | 
						|
    visible: false,
 | 
						|
    message: "Toolbar is hidden",
 | 
						|
  });
 | 
						|
 | 
						|
  await BrowserTestUtils.removeTab(newtab);
 | 
						|
  await BrowserTestUtils.removeTab(example);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_with_newtabpage_disabled() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [
 | 
						|
      ["browser.toolbars.bookmarks.2h2020", true],
 | 
						|
      ["browser.newtabpage.enabled", true],
 | 
						|
    ],
 | 
						|
  });
 | 
						|
 | 
						|
  let tabCount = gBrowser.tabs.length;
 | 
						|
  document.getElementById("cmd_newNavigatorTab").doCommand();
 | 
						|
  // Can't use BrowserTestUtils.waitForNewTab since onLocationChange will not
 | 
						|
  // fire due to preloaded new tabs.
 | 
						|
  await TestUtils.waitForCondition(() => gBrowser.tabs.length == tabCount + 1);
 | 
						|
  let newtab = gBrowser.selectedTab;
 | 
						|
  is(newtab.linkedBrowser.currentURI.spec, "about:newtab", "newtab is loaded");
 | 
						|
  await waitForBookmarksToolbarVisibility({
 | 
						|
    visible: true,
 | 
						|
    message: "Toolbar is visible with NTP enabled",
 | 
						|
  });
 | 
						|
  await BrowserTestUtils.removeTab(newtab);
 | 
						|
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [["browser.newtabpage.enabled", false]],
 | 
						|
  });
 | 
						|
 | 
						|
  document.getElementById("cmd_newNavigatorTab").doCommand();
 | 
						|
  await TestUtils.waitForCondition(() => gBrowser.tabs.length == tabCount + 1);
 | 
						|
  newtab = gBrowser.selectedTab;
 | 
						|
  is(newtab.linkedBrowser.currentURI.spec, "about:blank", "blank is loaded");
 | 
						|
  await waitForBookmarksToolbarVisibility({
 | 
						|
    visible: false,
 | 
						|
    message: "Toolbar is not visible with NTP disabled",
 | 
						|
  });
 | 
						|
  await BrowserTestUtils.removeTab(newtab);
 | 
						|
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [["browser.newtabpage.enabled", true]],
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_history_pushstate() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [["browser.toolbars.bookmarks.2h2020", true]],
 | 
						|
  });
 | 
						|
  await BrowserTestUtils.withNewTab("https://example.com/", async browser => {
 | 
						|
    await waitForBookmarksToolbarVisibility({ visible: false });
 | 
						|
    ok(!isBookmarksToolbarVisible(), "Toolbar should be hidden");
 | 
						|
 | 
						|
    // Temporarily show the toolbar:
 | 
						|
    setToolbarVisibility(
 | 
						|
      document.querySelector("#PersonalToolbar"),
 | 
						|
      true,
 | 
						|
      false,
 | 
						|
      false
 | 
						|
    );
 | 
						|
    ok(isBookmarksToolbarVisible(), "Toolbar should now be visible");
 | 
						|
 | 
						|
    // Now "navigate"
 | 
						|
    await SpecialPowers.spawn(browser, [], () => {
 | 
						|
      content.location.href += "#foo";
 | 
						|
    });
 | 
						|
 | 
						|
    await TestUtils.waitForCondition(
 | 
						|
      () => gURLBar.value.endsWith("#foo"),
 | 
						|
      "URL bar should update"
 | 
						|
    );
 | 
						|
    ok(isBookmarksToolbarVisible(), "Toolbar should still be visible");
 | 
						|
  });
 | 
						|
});
 |