summaryrefslogtreecommitdiffstats
path: root/browser/base/content/nonbrowser-mac.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/nonbrowser-mac.js')
-rw-r--r--browser/base/content/nonbrowser-mac.js160
1 files changed, 160 insertions, 0 deletions
diff --git a/browser/base/content/nonbrowser-mac.js b/browser/base/content/nonbrowser-mac.js
new file mode 100644
index 0000000000..89996be8b8
--- /dev/null
+++ b/browser/base/content/nonbrowser-mac.js
@@ -0,0 +1,160 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+ * 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/. */
+
+/* eslint-env mozilla/browser-window */
+
+ChromeUtils.defineESModuleGetters(this, {
+ NimbusFeatures: "resource://nimbus/ExperimentAPI.sys.mjs",
+});
+
+let delayedStartupTimeoutId = null;
+
+function OpenBrowserWindowFromDockMenu(options) {
+ let win = OpenBrowserWindow(options);
+ win.addEventListener(
+ "load",
+ function () {
+ let dockSupport = Cc["@mozilla.org/widget/macdocksupport;1"].getService(
+ Ci.nsIMacDockSupport
+ );
+ dockSupport.activateApplication(true);
+ },
+ { once: true }
+ );
+
+ return win;
+}
+
+function nonBrowserWindowStartup() {
+ // Disable inappropriate commands / submenus
+ var disabledItems = [
+ "Browser:SavePage",
+ "Browser:SendLink",
+ "cmd_pageSetup",
+ "cmd_print",
+ "cmd_find",
+ "cmd_findAgain",
+ "viewToolbarsMenu",
+ "viewSidebarMenuMenu",
+ "Browser:Reload",
+ "viewFullZoomMenu",
+ "pageStyleMenu",
+ "repair-text-encoding",
+ "View:PageSource",
+ "View:FullScreen",
+ "enterFullScreenItem",
+ "viewHistorySidebar",
+ "Browser:AddBookmarkAs",
+ "Browser:BookmarkAllTabs",
+ "View:PageInfo",
+ "History:UndoCloseTab",
+ "menu_openFirefoxView",
+ ];
+ var element;
+
+ for (let disabledItem of disabledItems) {
+ element = document.getElementById(disabledItem);
+ if (element) {
+ element.setAttribute("disabled", "true");
+ }
+ }
+
+ // Show menus that are only visible in non-browser windows
+ let shownItems = ["menu_openLocation"];
+ for (let shownItem of shownItems) {
+ element = document.getElementById(shownItem);
+ if (element) {
+ element.removeAttribute("hidden");
+ }
+ }
+
+ if (
+ window.location.href == "chrome://browser/content/hiddenWindowMac.xhtml"
+ ) {
+ // If no windows are active (i.e. we're the hidden window), disable the
+ // close, minimize and zoom menu commands as well.
+ var hiddenWindowDisabledItems = [
+ "cmd_close",
+ "minimizeWindow",
+ "zoomWindow",
+ ];
+ for (let hiddenWindowDisabledItem of hiddenWindowDisabledItems) {
+ element = document.getElementById(hiddenWindowDisabledItem);
+ if (element) {
+ element.setAttribute("disabled", "true");
+ }
+ }
+
+ // Also hide the window-list separator.
+ element = document.getElementById("sep-window-list");
+ element.hidden = true;
+
+ // Setup the dock menu.
+ let dockMenuElement = document.getElementById("menu_mac_dockmenu");
+ if (dockMenuElement != null) {
+ let nativeMenu = Cc[
+ "@mozilla.org/widget/standalonenativemenu;1"
+ ].createInstance(Ci.nsIStandaloneNativeMenu);
+
+ try {
+ nativeMenu.init(dockMenuElement);
+
+ let dockSupport = Cc["@mozilla.org/widget/macdocksupport;1"].getService(
+ Ci.nsIMacDockSupport
+ );
+ dockSupport.dockMenu = nativeMenu;
+ } catch (e) {}
+ }
+
+ // Hide menuitems that don't apply to private contexts.
+ if (PrivateBrowsingUtils.permanentPrivateBrowsing) {
+ document.getElementById("macDockMenuNewWindow").hidden = true;
+ }
+ if (!PrivateBrowsingUtils.enabled) {
+ document.getElementById("macDockMenuNewPrivateWindow").hidden = true;
+ }
+ if (BrowserUIUtils.quitShortcutDisabled) {
+ document.getElementById("key_quitApplication").remove();
+ document.getElementById("menu_FileQuitItem").removeAttribute("key");
+ }
+ }
+
+ delayedStartupTimeoutId = setTimeout(nonBrowserWindowDelayedStartup, 0);
+}
+
+function nonBrowserWindowDelayedStartup() {
+ delayedStartupTimeoutId = null;
+
+ // initialise the offline listener
+ BrowserOffline.init();
+
+ // initialize the private browsing UI
+ gPrivateBrowsingUI.init();
+}
+
+function nonBrowserWindowShutdown() {
+ // If this is the hidden window being closed, release our reference to
+ // the dock menu element to prevent leaks on shutdown
+ if (
+ window.location.href == "chrome://browser/content/hiddenWindowMac.xhtml"
+ ) {
+ let dockSupport = Cc["@mozilla.org/widget/macdocksupport;1"].getService(
+ Ci.nsIMacDockSupport
+ );
+ dockSupport.dockMenu = null;
+ }
+
+ // If nonBrowserWindowDelayedStartup hasn't run yet, we have no work to do -
+ // just cancel the pending timeout and return;
+ if (delayedStartupTimeoutId) {
+ clearTimeout(delayedStartupTimeoutId);
+ return;
+ }
+
+ BrowserOffline.uninit();
+}
+
+addEventListener("load", nonBrowserWindowStartup, false);
+addEventListener("unload", nonBrowserWindowShutdown, false);