forked from mirrors/gecko-dev
		
	Something like this ought to do? Differential Revision: https://phabricator.services.mozilla.com/D130858
		
			
				
	
	
		
			192 lines
		
	
	
	
		
			6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
	
		
			6 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";
 | 
						|
 | 
						|
add_task(async function toolbar_ui_visibility() {
 | 
						|
  SpecialPowers.pushPrefEnv({ set: [["dom.disable_open_during_load", false]] });
 | 
						|
 | 
						|
  let popupOpened = BrowserTestUtils.waitForNewWindow({ url: "about:blank" });
 | 
						|
  BrowserTestUtils.openNewForegroundTab(
 | 
						|
    gBrowser,
 | 
						|
    "data:text/html,<html><script>popup=open('about:blank','','width=300,height=200')</script>"
 | 
						|
  );
 | 
						|
  const win = await popupOpened;
 | 
						|
  const doc = win.document;
 | 
						|
 | 
						|
  ok(win.gURLBar, "location bar exists in the popup");
 | 
						|
  isnot(win.gURLBar.clientWidth, 0, "location bar is visible in the popup");
 | 
						|
  ok(win.gURLBar.readOnly, "location bar is read-only in the popup");
 | 
						|
  isnot(
 | 
						|
    doc.getElementById("Browser:OpenLocation").getAttribute("disabled"),
 | 
						|
    "true",
 | 
						|
    "'open location' command is not disabled in the popup"
 | 
						|
  );
 | 
						|
 | 
						|
  EventUtils.synthesizeKey("t", { accelKey: true }, win);
 | 
						|
  is(
 | 
						|
    win.gBrowser.browsers.length,
 | 
						|
    1,
 | 
						|
    "Accel+T doesn't open a new tab in the popup"
 | 
						|
  );
 | 
						|
  is(
 | 
						|
    gBrowser.browsers.length,
 | 
						|
    3,
 | 
						|
    "Accel+T opened a new tab in the parent window"
 | 
						|
  );
 | 
						|
  gBrowser.removeCurrentTab();
 | 
						|
 | 
						|
  EventUtils.synthesizeKey("w", { accelKey: true }, win);
 | 
						|
  ok(win.closed, "Accel+W closes the popup");
 | 
						|
 | 
						|
  if (!win.closed) {
 | 
						|
    win.close();
 | 
						|
  }
 | 
						|
  gBrowser.removeCurrentTab();
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function titlebar_buttons_visibility() {
 | 
						|
  if (!navigator.platform.startsWith("Win")) {
 | 
						|
    ok(true, "Testing only on Windows");
 | 
						|
    return;
 | 
						|
  }
 | 
						|
 | 
						|
  const BUTTONS_MAY_VISIBLE = true;
 | 
						|
  const BUTTONS_NEVER_VISIBLE = false;
 | 
						|
 | 
						|
  // Always open a new window.
 | 
						|
  // With default behavior, it opens a new tab, that doesn't affect button
 | 
						|
  // visibility at all.
 | 
						|
  Services.prefs.setIntPref("browser.link.open_newwindow", 2);
 | 
						|
 | 
						|
  const drawInTitlebarValues = [
 | 
						|
    [1, BUTTONS_MAY_VISIBLE],
 | 
						|
    [0, BUTTONS_NEVER_VISIBLE],
 | 
						|
  ];
 | 
						|
  const windowFeaturesValues = [
 | 
						|
    // Opens a popup
 | 
						|
    ["width=300,height=100", BUTTONS_NEVER_VISIBLE],
 | 
						|
    ["toolbar", BUTTONS_NEVER_VISIBLE],
 | 
						|
    ["menubar", BUTTONS_NEVER_VISIBLE],
 | 
						|
    ["menubar,toolbar", BUTTONS_NEVER_VISIBLE],
 | 
						|
 | 
						|
    // Opens a new window
 | 
						|
    ["", BUTTONS_MAY_VISIBLE],
 | 
						|
  ];
 | 
						|
  const menuBarShownValues = [true, false];
 | 
						|
 | 
						|
  for (const [drawInTitlebar, drawInTitlebarButtons] of drawInTitlebarValues) {
 | 
						|
    Services.prefs.setIntPref("browser.tabs.inTitlebar", drawInTitlebar);
 | 
						|
 | 
						|
    for (const [
 | 
						|
      windowFeatures,
 | 
						|
      windowFeaturesButtons,
 | 
						|
    ] of windowFeaturesValues) {
 | 
						|
      for (const menuBarShown of menuBarShownValues) {
 | 
						|
        CustomizableUI.setToolbarVisibility("toolbar-menubar", menuBarShown);
 | 
						|
 | 
						|
        const popupPromise = BrowserTestUtils.waitForNewWindow("about:blank");
 | 
						|
        BrowserTestUtils.openNewForegroundTab(
 | 
						|
          gBrowser,
 | 
						|
          `data:text/html;charset=UTF-8,<html><script>window.open("about:blank","","${windowFeatures}")</script>`
 | 
						|
        );
 | 
						|
        const popupWin = await popupPromise;
 | 
						|
 | 
						|
        const menubar = popupWin.document.querySelector("#toolbar-menubar");
 | 
						|
        const menubarIsShown =
 | 
						|
          menubar.getAttribute("autohide") != "true" ||
 | 
						|
          menubar.getAttribute("inactive") != "true";
 | 
						|
        const buttonsInMenubar = menubar.querySelector(
 | 
						|
          ".titlebar-buttonbox-container"
 | 
						|
        );
 | 
						|
        const buttonsInMenubarShown =
 | 
						|
          menubarIsShown &&
 | 
						|
          popupWin.getComputedStyle(buttonsInMenubar).display != "none";
 | 
						|
 | 
						|
        const buttonsInTabbar = popupWin.document.querySelector(
 | 
						|
          "#TabsToolbar .titlebar-buttonbox-container"
 | 
						|
        );
 | 
						|
        const buttonsInTabbarShown =
 | 
						|
          popupWin.getComputedStyle(buttonsInTabbar).display != "none";
 | 
						|
 | 
						|
        const params = `drawInTitlebar=${drawInTitlebar}, windowFeatures=${windowFeatures}, menuBarShown=${menuBarShown}`;
 | 
						|
        if (
 | 
						|
          drawInTitlebarButtons == BUTTONS_MAY_VISIBLE &&
 | 
						|
          windowFeaturesButtons == BUTTONS_MAY_VISIBLE
 | 
						|
        ) {
 | 
						|
          ok(
 | 
						|
            buttonsInMenubarShown || buttonsInTabbarShown,
 | 
						|
            `Titlebar buttons should be visible: ${params}`
 | 
						|
          );
 | 
						|
        } else {
 | 
						|
          ok(
 | 
						|
            !buttonsInMenubarShown,
 | 
						|
            `Titlebar buttons should not be visible: ${params}`
 | 
						|
          );
 | 
						|
          ok(
 | 
						|
            !buttonsInTabbarShown,
 | 
						|
            `Titlebar buttons should not be visible: ${params}`
 | 
						|
          );
 | 
						|
        }
 | 
						|
 | 
						|
        const closedPopupPromise = BrowserTestUtils.windowClosed(popupWin);
 | 
						|
        popupWin.close();
 | 
						|
        await closedPopupPromise;
 | 
						|
        gBrowser.removeCurrentTab();
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  CustomizableUI.setToolbarVisibility("toolbar-menubar", false);
 | 
						|
  Services.prefs.clearUserPref("browser.tabs.inTitlebar");
 | 
						|
  Services.prefs.clearUserPref("browser.link.open_newwindow");
 | 
						|
});
 | 
						|
 | 
						|
// Test only `visibility` rule here, to verify bug 1636229 fix.
 | 
						|
// Other styles and ancestors can be different for each OS.
 | 
						|
function isVisible(element) {
 | 
						|
  const style = element.ownerGlobal.getComputedStyle(element);
 | 
						|
  return style.visibility == "visible";
 | 
						|
}
 | 
						|
 | 
						|
async function testTabBarVisibility() {
 | 
						|
  SpecialPowers.pushPrefEnv({ set: [["dom.disable_open_during_load", false]] });
 | 
						|
 | 
						|
  const popupOpened = BrowserTestUtils.waitForNewWindow({ url: "about:blank" });
 | 
						|
  BrowserTestUtils.openNewForegroundTab(
 | 
						|
    gBrowser,
 | 
						|
    "data:text/html,<html><script>popup=open('about:blank','','width=300,height=200')</script>"
 | 
						|
  );
 | 
						|
  const win = await popupOpened;
 | 
						|
  const doc = win.document;
 | 
						|
 | 
						|
  ok(
 | 
						|
    !isVisible(doc.getElementById("TabsToolbar")),
 | 
						|
    "tabbar should be hidden for popup"
 | 
						|
  );
 | 
						|
 | 
						|
  const closedPopupPromise = BrowserTestUtils.windowClosed(win);
 | 
						|
  win.close();
 | 
						|
  await closedPopupPromise;
 | 
						|
 | 
						|
  gBrowser.removeCurrentTab();
 | 
						|
}
 | 
						|
 | 
						|
add_task(async function tabbar_visibility() {
 | 
						|
  await testTabBarVisibility();
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function tabbar_visibility_with_theme() {
 | 
						|
  const extension = ExtensionTestUtils.loadExtension({
 | 
						|
    manifest: {
 | 
						|
      theme: {},
 | 
						|
    },
 | 
						|
  });
 | 
						|
 | 
						|
  await extension.startup();
 | 
						|
 | 
						|
  await testTabBarVisibility();
 | 
						|
 | 
						|
  await extension.unload();
 | 
						|
});
 |