Bug 837510 Add File - New - Private Window menuitem r=IanN,Ratty
authorNeil Rashbrook <neil@parkwaycc.co.uk>
Tue, 19 Feb 2013 00:15:19 +0000
changeset 14922 98476aa17e13f7e0fe8b92475ead7f944e702e63
parent 14921 cf724e16a465910432e74919117706696d3f669b
child 14923 447443b87c8ef443225f111d5c47037bc503f727
push idunknown
push userunknown
push dateunknown
reviewersIanN, Ratty
bugs837510
Bug 837510 Add File - New - Private Window menuitem r=IanN,Ratty
editor/ui/composer/content/editingOverlay.xul
editor/ui/composer/content/editorOverlay.xul
suite/browser/navigatorOverlay.xul
suite/common/tasksOverlay.js
suite/common/utilityOverlay.js
suite/common/utilityOverlay.xul
suite/common/viewSourceOverlay.xul
suite/locales/en-US/chrome/common/utilityOverlay.dtd
suite/mailnews/addrbook/addressbook.xul
suite/mailnews/compose/messengercompose.xul
suite/mailnews/mailEditorOverlay.xul
suite/mailnews/mailWindowOverlay.xul
--- a/editor/ui/composer/content/editingOverlay.xul
+++ b/editor/ui/composer/content/editingOverlay.xul
@@ -64,16 +64,17 @@
   <!-- File menu items -->
   <menu id="menu_File">
     <menupopup id="menu_FilePopup" onpopupshowing="EditorInitFileMenu();">
       <menu id="menu_New">
         <menupopup id="menu_NewPopup">
           <menuitem id="menu_newEditor"/>
           <menuseparator id="sep_NewPopup"/>
           <menuitem id="menu_newNavigator"/>
+          <menuitem id="menu_newPrivateWindow"/>
         </menupopup>
       </menu>
       <menuitem id="menu_openRemote"
                 label="&openRemoteCmd.label;"
                 accesskey="&openRemoteCmd.accesskey;"
                 key="key_openRemoteEditor"
                 command="cmd_openRemote"/>
       <menuitem id="menu_openFile"
--- a/editor/ui/composer/content/editorOverlay.xul
+++ b/editor/ui/composer/content/editorOverlay.xul
@@ -15,16 +15,17 @@
          xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
 <script type="application/javascript" src="chrome://editor/content/editorUtilities.js"/>
 <script type="application/javascript" src="chrome://editor/content/ComposerCommands.js"/>
 
   <keyset id="editorKeys">
     <!-- defined in globalOverlay -->
     <key id="key_newNavigator"/>
+    <key id="key_newPrivateWindow"/>
     <key id="key_newBlankPage"/>
     <key id="key_save"
          key="&saveCmd.key;"
          command="cmd_save"
          modifiers="accel"/>
     <key id="key_print"/>
     <key id="key_close"/>
     <key id="key_undo"/>
@@ -276,16 +277,17 @@
   <commandset id="editorCommands">
     <commandset id="globalEditMenuItems"/>
     <commandset id="selectEditMenuItems"/>
     <commandset id="undoEditMenuItems"/>
     <commandset id="clipboardEditMenuItems"/>
     <command id="toggleSidebar"/>
     <!-- file menu -->
     <command id="cmd_newNavigator"/>
+    <command id="cmd_newPrivateWindow"/>
     <command id="cmd_newEditor"/>
     <command id="cmd_newEditorTemplate"/>
     <command id="cmd_newEditorDraft"/>
     <!-- view menu -->
     <command id="cmd_viewCompToolbar"     oncommand="goToggleToolbar('EditToolbar','cmd_viewCompToolbar');"         checked="true"/>
     <command id="cmd_viewFormatToolbar"   oncommand="goToggleToolbar('FormatToolbar','cmd_viewFormatToolbar');"     checked="true"/>
   </commandset>
 
--- a/suite/browser/navigatorOverlay.xul
+++ b/suite/browser/navigatorOverlay.xul
@@ -47,18 +47,19 @@
                   src="chrome://navigator-region/locale/region.properties"/>
     <stringbundle id="bundle_viewZoom"/>
     <stringbundle id="bundle_viewApplyTheme"/>
   </stringbundleset>
 
   <!-- Keysets -->
   <keyset id="navKeys">
     <!-- File Menu -->
+    <key id="key_newNavigatorTab" key="&tabCmd.commandkey;" modifiers="accel" command="cmd_newNavigatorTab"/>
     <key id="key_newNavigator"/>
-    <key id="key_newNavigatorTab" key="&tabCmd.commandkey;" modifiers="accel" command="cmd_newNavigatorTab"/>
+    <key id="key_newPrivateWindow"/>
     <key id="key_restoreTab" key="&recentTabs.commandkey;" modifiers="accel,shift" oncommand="gBrowser.undoCloseTab(0);"/>
     <key id="key_restoreWindow" key="&recentWindows.commandkey;" modifiers="accel,shift" oncommand="undoCloseWindow();"/>
     <key id="key_newBlankPage"/>
     <key id="focusURLBar"      key="&openCmd.commandkey;" oncommand="ShowAndSelectContentsOfURLBar();"
          modifiers="accel"/>
     <key id="openLocationKb"   key="&openCmd.commandkey;" command="Browser:Open" modifiers="accel,shift"/>
     <key id="openFileKb"         key="&openFileCmd.commandkey;" command="Browser:OpenFile"  modifiers="accel"/>
     <key id="key_savePage"       key="&savePageCmd.commandkey;" command="Browser:SavePage" modifiers="accel"/>
@@ -110,18 +111,19 @@
     <key id="key_gotoHistory"  key="&history.commandKey;"        oncommand="toHistory();" modifiers="accel"/>
     <keyset id="viewZoomKeys"/>
     <keyset id="navigationKeys"/>  
     <keyset id="tasksKeys"/>
     <key id="key_sanitize" command="Tools:Sanitize" keycode="VK_DELETE" modifiers="accel,shift"/>
   </keyset>
 
   <commandset id="commands">
+    <command id="cmd_newNavigatorTab" oncommand="BrowserOpenTab();"/>
     <command id="cmd_newNavigator"/>
-    <command id="cmd_newNavigatorTab" oncommand="BrowserOpenTab();"/>
+    <command id="cmd_newPrivateWindow"/>
     <command id="cmd_newTabWithTarget" oncommand="contentAreaClick(event);"/>
     <command id="cmd_handleBackspace"  oncommand="BrowserHandleBackspace();" />
     <command id="cmd_handleShiftBackspace"  oncommand="BrowserHandleShiftBackspace();" />
 
     <command id="cmd_newEditor"/>
     <!-- NOT IMPLEMENTED
     <command id="cmd_newEditorTemplate"/>
     <command id="cmd_newEditorDraft"/> -->
@@ -223,19 +225,20 @@
 
   <!-- Menu -->
   <menubar id="main-menubar" class="chromeclass-menubar">
     <menu id="menu_File">
       <menupopup id="menu_FilePopup" onpopupshowing="updateCloseItems();getContentAreaFrameCount();updateSavePageItems();updateFileUploadItem();">
         <menu id="menu_New">
           <menupopup id="menu_NewPopup">
             <!-- From utilityOverlay.xul -->
-            <menuitem id="menu_newNavigator" command="cmd_newNavigator"/>
             <menuitem id="menu_newNavigatorTab" command="cmd_newNavigatorTab" key="key_newNavigatorTab"
                       label="&tabCmd.label;" accesskey="&tabCmd.accesskey;"/>
+            <menuitem id="menu_newNavigator"/>
+            <menuitem id="menu_newPrivateWindow"/>
             <menuseparator id="navBeginGlobalNewItems"/>
             <menuitem id="menu_newEditor"    command="cmd_newEditor"/>
           </menupopup>
         </menu>
         <menuitem id="menu_openLocation"
                   label="&openCmd.label;"
                   accesskey="&openCmd.accesskey;"
                   key="openLocationKb"
--- a/suite/common/tasksOverlay.js
+++ b/suite/common/tasksOverlay.js
@@ -92,38 +92,39 @@ function toOpenWindowByType( inType, uri
     {
       // make sure that this handler is called only once
       window.removeEventListener("unload", newWindowLoaded, false);
       window[uri].removeEventListener("load", newWindowLoaded, false);
       delete window[uri];
     }
     // remember the newly loading window until it's fully loaded
     // or until the current window passes away
-    window[uri] = window.openDialog(uri, "", features || "all,dialog=no");
+    window[uri] = openDialog(uri, "", features || "non-private,all,dialog=no");
     window[uri].addEventListener("load", newWindowLoaded, false);
     window.addEventListener("unload", newWindowLoaded, false);
   }
 }
 
 function OpenBrowserWindow()
 {
+  var win = Services.wm.getMostRecentWindow("navigator:browser");
   if (document.documentElement.getAttribute("windowtype") ==
       "navigator:browser" && window.content && window.content.document)
   {
     // if and only if the current window is a browser window and
     // it has a document with a character set, then extract the
     // current charset menu setting from the current document
     // and use it to initialize the new browser window
     window.openDialog(getBrowserURL(), "_blank",
                       "chrome,all,dialog=no", null,
                       "charset=" + window.content.document.characterSet);
-  } else if (Services.wm.getMostRecentWindow("navigator:browser")) {
+  } else if (win) {
     // if a browser window already exists then set startpage to null so
     // navigator.js can check pref for how new window should be opened
-    window.openDialog(getBrowserURL(), "_blank", "chrome,all,dialog=no", null);
+    win.openDialog(getBrowserURL(), "_blank", "chrome,all,dialog=no", null);
   } else {
     // open the first browser window as if we were starting up
     var cmdLine = {
       handleFlagWithParam: function handleFlagWithParam(flag, caseSensitive) {
         return flag == "remote" ? "xfeDoCommand(openBrowser)" : null;
       },
       handleFlag: function handleFlag(flag, caseSensitive) {
         return false;
--- a/suite/common/utilityOverlay.js
+++ b/suite/common/utilityOverlay.js
@@ -29,16 +29,18 @@ XPCOMUtils.defineLazyGetter(this, "Weave
 
 const kProxyManual = ["network.proxy.ftp",
                       "network.proxy.http",
                       "network.proxy.socks",
                       "network.proxy.ssl"];
 const kExistingWindow = Components.interfaces.nsIBrowserDOMWindow.OPEN_CURRENTWINDOW;
 const kNewWindow = Components.interfaces.nsIBrowserDOMWindow.OPEN_NEWWINDOW;
 const kNewTab = Components.interfaces.nsIBrowserDOMWindow.OPEN_NEWTAB;
+const kExistingTab = Components.interfaces.nsIBrowserDOMWindow.OPEN_SWITCHTAB;
+const kNewPrivate = 5;
 var TAB_DROP_TYPE = "application/x-moz-tabbrowser-tab";
 var gShowBiDi = false;
 var gUtilityBundle = null;
 var gPrivate = null;
 
 function toggleOfflineStatus()
 {
   var checkfunc;
@@ -239,17 +241,17 @@ function getBrowserURL() {
 function goPreferences(paneID)
 {
   //check for an existing pref window and focus it; it's not application modal
   var lastPrefWindow = Services.wm.getMostRecentWindow("mozilla:preferences");
   if (lastPrefWindow)
     lastPrefWindow.focus();
   else
     openDialog("chrome://communicator/content/pref/preferences.xul",
-               "PrefWindow", "chrome,titlebar,dialog=no,resizable",
+               "PrefWindow", "non-private,chrome,titlebar,dialog=no,resizable",
                paneID);
 }
 
 function goToggleToolbar( id, elementID )
 {
   var toolbar = document.getElementById( id );
   var element = document.getElementById( elementID );
   if ( toolbar )
@@ -568,17 +570,17 @@ function goClickThrobber(urlPref, aEvent
 {
   var url = GetLocalizedStringPref(urlPref);
   if (url)
     openUILinkIn(url, whereToOpenLink(aEvent, false, true, true));
 }
 
 function getTopWin()
 {
-  return Services.wm.getMostRecentWindow("navigator:browser");
+  return gPrivate || Services.wm.getMostRecentWindow("navigator:browser");
 }
 
 function isRestricted( url )
 {
   try {
     const nsIURIFixup = Components.interfaces.nsIURIFixup;
     var uri = Components.classes["@mozilla.org/docshell/urifixup;1"]
                         .getService(nsIURIFixup)
@@ -964,16 +966,17 @@ function openAsExternal(aURL)
   var loadType = Services.prefs.getIntPref("browser.link.open_external");
   var loadInBackground = Services.prefs.getBoolPref("browser.tabs.loadDivertedInBackground");
   openNewTabWindowOrExistingWith(loadType, aURL, null, loadInBackground);
 }
 
 /**
  * openNewTabWith: opens a new tab with the given URL.
  * openNewWindowWith: opens a new window with the given URL.
+ * openNewPrivateWith: opens a private window with the given URL.
  *
  * @param aURL
  *        The URL to open (as a string).
  * @param aDocument
  *        The document from which the URL came, or null. This is used to set
  *        the referrer header and to do a security check of whether the
  *        document is allowed to reference the URL. If null, there will be no
  *        referrer header and no security check.
@@ -987,16 +990,24 @@ function openAsExternal(aURL)
  * @param aAllowThirdPartyFixup
  *        If true, then we allow the URL text to be sent to third party
  *        services (e.g., Google's I Feel Lucky) for interpretation. This
  *        parameter may be undefined in which case it is treated as false.
  * @param [optional] aReferrer
  *        If aDocument is null, then this will be used as the referrer.
  *        There will be no security check.
  */
+function openNewPrivateWith(aURL, aDoc, aPostData, aAllowThirdPartyFixup,
+                            aReferrer)
+{
+  return openNewTabWindowOrExistingWith(kNewPrivate, aURL, aDoc, false,
+                                        aPostData, aAllowThirdPartyFixup,
+                                        aReferrer);
+}
+
 function openNewWindowWith(aURL, aDoc, aPostData, aAllowThirdPartyFixup,
                            aReferrer)
 {
   return openNewTabWindowOrExistingWith(kNewWindow, aURL, aDoc, false,
                                         aPostData, aAllowThirdPartyFixup,
                                         aReferrer);
 }
 
@@ -1031,34 +1042,37 @@ function openNewTabWindowOrExistingWith(
     urlSecurityCheck(aURL, aDoc.nodePrincipal,
                      Components.interfaces.nsIScriptSecurityManager.STANDARD);
 
   // get referrer, if as external should be null
   var referrerURI = aDoc ? aDoc.documentURIObject : aReferrer;
 
   var browserWin;
   // if we're not opening a new window, try and find existing window
-  if (aType != kNewWindow)
+  if (aType != kNewWindow && aType != kNewPrivate)
     browserWin = getTopWin();
 
   // Where appropriate we want to pass the charset of the
   // current document over to a new tab / window.
   var originCharset = null;
   if (aType != kExistingWindow) {
     var wintype = document.documentElement.getAttribute('windowtype');
     if (wintype == "navigator:browser")
       originCharset = window.content.document.characterSet;
   }
 
   // We want to open in a new window or no existing window can be found.
   if (!browserWin) {
+    var features = "private,chrome,all,dialog=no";
+    if (aType != kNewPrivate)
+      features = "non-" + features;
     var charsetArg = null;
     if (originCharset)
       charsetArg = "charset=" + originCharset;
-    return window.openDialog(getBrowserURL(), "_blank", "chrome,all,dialog=no",
+    return window.openDialog(getBrowserURL(), "_blank", features,
                              aURL, charsetArg, referrerURI, aPostData,
                              aAllowThirdPartyFixup);
   }
 
   // Get the existing browser object
   var browser = browserWin.getBrowser();
 
   // Open link in an existing window.
--- a/suite/common/utilityOverlay.xul
+++ b/suite/common/utilityOverlay.xul
@@ -148,16 +148,18 @@
   <!-- File Menu -->
   <menu id="menu_File"
         label="&fileMenu.label;"
         accesskey="&fileMenu.accesskey;"/>
 
   <!-- New SubMenu (Under File Menu) -->
   <command id="cmd_newNavigator"
            oncommand="OpenBrowserWindow()"/>
+  <command id="cmd_newPrivateWindow"
+           oncommand="openNewPrivateWith('about:privatebrowsing');"/>
   <command id="cmd_newEditor"
            oncommand="NewEditorWindow();"/>
 
   <!-- XXX not implemented, temporarily disabled
   <command id="cmd_newEditorTemplate"
            disabled="true"
            oncommand="NewEditorFromTemplate();"/>
   <command id="cmd_newEditorDraft"
@@ -183,16 +185,21 @@
         label="&newMenu.label;"
         accesskey="&newMenu.accesskey;"/>
 
   <menuitem id="menu_newNavigator"
             label="&newNavigatorCmd.label;"
             accesskey="&newNavigatorCmd.accesskey;"
             key="key_newNavigator"
             command="cmd_newNavigator"/>
+  <menuitem id="menu_newPrivateWindow"
+            label="&newPrivateWindowCmd.label;"
+            accesskey="&newPrivateWindowCmd.accesskey;"
+            key="key_newPrivateWindow"
+            command="cmd_newPrivateWindow"/>
   <menuitem id="menu_printSetup"
             label="&printSetupCmd.label;"
             accesskey="&printSetupCmd.accesskey;"
             command="cmd_printSetup"/>
   <menuitem id="menu_printPreview"
             label="&printPreviewCmd.label;"
             accesskey="&printPreviewCmd.accesskey;"
             command="cmd_printpreview"/>
@@ -205,16 +212,20 @@
   <key id="key_newBlankPage"
        key="&newBlankPageCmd.key;"
        command="cmd_newEditor"
        modifiers="accel, shift"/>
   <key id="key_newNavigator"
        key="&newNavigatorCmd.key;"
        command="cmd_newNavigator"
        modifiers="accel"/>
+  <key id="key_newPrivateWindow"
+       key="&newPrivateWindowCmd.key;"
+       command="cmd_newPrivateWindow"
+       modifiers="accel, shift"/>
   <key id="key_print"
        key="&printCmd.key;"
        command="cmd_print"
        modifiers="accel"/>
 
   <keyset id="findKeys">
     <key id="key_find"
          key="&findCmd.key;"
--- a/suite/common/viewSourceOverlay.xul
+++ b/suite/common/viewSourceOverlay.xul
@@ -24,44 +24,47 @@
   <script type="application/javascript"
           src="chrome://communicator/content/viewSourceOverlay.js"/>
   <script type="application/javascript"
           src="chrome://communicator/content/findUtils.js"/>
 
   <window id="viewSource">
     <commandset id="tasksCommands"/>
     <command id="cmd_newNavigator"/>
+    <command id="cmd_newPrivateWindow"/>
     <command id="cmd_newEditor"/>
     <command id="cmd_editPage" oncommand="ViewSourceEditPage();"/>
     <command id="cmd_find"
              oncommand="findInPage(getFindInstData());"/>
     <command id="cmd_findAgain"
              oncommand="findAgainInPage(getFindInstData(), false);"/>
     <command id="cmd_findPrevious"
              oncommand="findAgainInPage(getFindInstData(), true);"/>
     <stringbundle id="findBundle"
                   src="chrome://global/locale/finddialog.properties"/>
   </window>
 
   <keyset id="viewSourceKeys">
     <keyset id="tasksKeys"/>
     <key id="key_newBlankPage"/>
     <key id="key_newNavigator"/>
+    <key id="key_newPrivateWindow"/>
     <key id="key_editPage" key="&editPageCmd.commandkey;"
          command="Browser:EditPage" modifiers="accel"/>
   </keyset>
 
   <menubar id="viewSource-main-menubar"
            class="chromeclass-menubar"
            grippytooltiptext="&menuBar.tooltip;">
     <menu id="menu_file">
       <menupopup id="menu_FilePopup">
         <menu id="menu_New" position="1">
           <menupopup id="menu_NewPopup">
             <menuitem id="menu_newNavigator"/>
+            <menuitem id="menu_newPrivateWindow"/>
             <menuitem id="menu_newEditor"/>
           </menupopup>
         </menu>
         <menuitem id="menu_editPage" insertafter="menu_savePage"
                   key="key_editPage" command="cmd_editPage"
                   label="&editPageCmd.label;"
                   accesskey="&editPageCmd.accesskey;"/>
         <menuseparator insertbefore="menu_pageSetup"/>
--- a/suite/locales/en-US/chrome/common/utilityOverlay.dtd
+++ b/suite/locales/en-US/chrome/common/utilityOverlay.dtd
@@ -1,32 +1,35 @@
 <!-- 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/. -->
 
 <!-- these things need to move into utilityOverlay.xul -->
 <!ENTITY  offlineGoOfflineCmd.label                 "Work Offline">
 <!ENTITY  offlineGoOfflineCmd.accesskey             "k">
 
-<!-- LOCALIZATION NOTE : FILE This file contains the global menu items --> 
+!-- LOCALIZATION NOTE : FILE This file contains the global menu items --> 
 
 <!ENTITY fileMenu.label                   "File">
 <!ENTITY fileMenu.accesskey               "F">
 <!ENTITY newMenu.label                    "New">
 <!ENTITY newMenu.accesskey                "N">
 <!ENTITY newBlankPageCmd.label            "Composer Page">
 <!ENTITY newBlankPageCmd.accesskey        "P">
 <!ENTITY newBlankPageCmd.key              "n">
 <!ENTITY newPageFromTemplateCmd.label "Page Using Template">
 <!ENTITY newPageFromTemplateCmd.accesskey "t">
 <!ENTITY newPageFromDraftCmd.label "Page Using Draft">
 <!ENTITY newPageFromDraftCmd.accesskey "d">
 <!ENTITY newNavigatorCmd.label "Browser Window">
 <!ENTITY newNavigatorCmd.key "N">
 <!ENTITY newNavigatorCmd.accesskey "B">
+<!ENTITY newPrivateWindowCmd.label "Private Window">
+<!ENTITY newPrivateWindowCmd.key "P">
+<!ENTITY newPrivateWindowCmd.accesskey "W">
 <!ENTITY printSetupCmd.label "Page Setup…">
 <!ENTITY printSetupCmd.accesskey "u">
 <!ENTITY printPreviewCmd.label "Print Preview">
 <!ENTITY printPreviewCmd.accesskey "v">
 <!ENTITY printCmd.label "Print…">
 <!ENTITY printCmd.accesskey "P">
 <!ENTITY printCmd.key "P">
 
--- a/suite/mailnews/addrbook/addressbook.xul
+++ b/suite/mailnews/addrbook/addressbook.xul
@@ -63,16 +63,17 @@
     <commandset id="CommandUpdate_AddressBook"
                 commandupdater="true"
                 events="focus,addrbook-select"
                 oncommandupdate="CommandUpdate_AddressBook()"/>
     <commandset id="selectEditMenuItems"/> 
     <commandset id="undoEditMenuItems"/>
     <commandset id="globalEditMenuItems"/>
     <command id="cmd_newNavigator"/>
+    <command id="cmd_newPrivateWindow"/>
     <command id="cmd_newEditor"/>
     <command id="cmd_newcard" oncommand="AbNewCard();"/>
     <command id="cmd_newlist" oncommand="AbNewList();"/>
     <command id="cmd_newMessage" oncommand="AbNewMessage();"/>
     <command id="cmd_newim" oncommand="AbIMSelected()"/>
     <command id="cmd_printSetup" oncommand="PrintUtils.showPageSetup()"/>
     <command id="cmd_printCard" oncommand="AbPrintCard()"/>
     <command id="cmd_printPreviewCard" oncommand="AbPrintPreviewCard()"/>
@@ -103,16 +104,17 @@
   <broadcaster id="Communicator:WorkMode"/>
 </broadcasterset>
 
 <broadcasterset id="mainBroadcasterSet"/>
 
 <keyset id="tasksKeys">
   <!-- File Menu -->
   <key id="key_newNavigator"/>
+  <key id="key_newPrivateWindow"/>
   <key id="key_newBlankPage"/>
   <key id="key_newMessage"
        key="&newMessageCmd.key;"
        command="cmd_newMessage"
        modifiers="accel"/>
   <key id="key_printCard" key="&printContactViewCmd.key;"
        command="cmd_printCard" modifiers="accel"/>
   <key id="key_close"/>
@@ -223,16 +225,17 @@
                           accesskey="&newAddressBookCmd.accesskey;"
                           oncommand="AbNewAddressBook();"/>
                 <menuitem id="addLDAP"
                           label="&newLDAPDirectoryCmd.label;"
                           accesskey="&newLDAPDirectoryCmd.accesskey;"
                           oncommand="AbNewLDAPDirectory();"/>
                 <menuseparator/>
                 <menuitem id="menu_newNavigator"/>
+                <menuitem id="menu_newPrivateWindow"/>
                 <menuitem id="menu_newMessage"
                           label="&newMessageCmd.label;"
                           accesskey="&newMessageCmd.accesskey;"
                           key="key_newMessage"
                           command="cmd_newMessage"/>
                 <menuitem id="menu_newEditor"/>
               </menupopup>
             </menu>
--- a/suite/mailnews/compose/messengercompose.xul
+++ b/suite/mailnews/compose/messengercompose.xul
@@ -204,16 +204,17 @@
           <menu id="menu_File">
             <menupopup id="menu_FilePopup">
               <menu id="menu_New">
                 <menupopup id="menu_NewPopup">
                   <menuitem id="menu_newMessage"/>
                   <menuseparator id="menuNewPopupSeparator"/>
                   <menuitem id="menu_newCard"/>
                   <menuitem id="menu_newNavigator"/>
+                  <menuitem id="menu_newPrivateWindow"/>
                   <menuitem id="menu_newEditor"/>
                 </menupopup>
               </menu>
               <menu id="menu_Attach"
                     label="&attachMenu.label;"
                     accesskey="&attachMenu.accesskey;">
                 <menupopup id="menu_AttachPopup">
                   <menuitem id="menu_AttachFile"
--- a/suite/mailnews/mailEditorOverlay.xul
+++ b/suite/mailnews/mailEditorOverlay.xul
@@ -41,18 +41,18 @@
     }
 
   ]]>
   </script>         
 
   <!-- editor specific UI items -->
   <menupopup id="menu_NewPopup">
     <!-- Command nodes and implemention are in mailOverlay.xul -->
-    <menuitem id="menu_newMessage" insertafter="menu_newNavigator"/>
-    <menuitem id="menu_newCard" insertafter="menu_newNavigator"/>
+    <menuitem id="menu_newMessage" insertafter="menu_newPrivateWindow"/>
+    <menuitem id="menu_newCard" insertafter="menu_newPrivateWindow"/>
   </menupopup>
 
   <menupopup id="menu_FilePopup">
     <!-- The command node cmd_editSendPage is in editor.xul. 
          Implementation is in ComposerCommands.js
     -->
     <menuitem id="menu_sendPage" label="&sendPage.label;" accesskey="&sendPage.accesskey;" observes="cmd_editSendPage" insertafter="previewInBrowser"/>
   </menupopup>
--- a/suite/mailnews/mailWindowOverlay.xul
+++ b/suite/mailnews/mailWindowOverlay.xul
@@ -106,16 +106,17 @@
     <command id="cmd_renameFolder" oncommand="goDoCommand('cmd_renameFolder')" />
     <command id="cmd_sendUnsentMsgs" oncommand="goDoCommand('cmd_sendUnsentMsgs')" />
     <command id="cmd_synchronizeOffline" oncommand="goDoCommand('cmd_synchronizeOffline');" disabled="true"/>
     <command id="cmd_settingsOffline" oncommand="goDoCommand('cmd_settingsOffline');" disabled="true"/>
 </commandset>
 
 <commandset id="mailCommands">
   <command id="cmd_newNavigator"/>
+  <command id="cmd_newPrivateWindow"/>
   <command id="cmd_newEditor"/>
   <command id="cmd_createFilterFromPopup" oncommand="goDoCommand('cmd_createFilterFromPopup')"/>
   <command id="cmd_pageSetup"/>
 </commandset>
 
 <commandset id="mailViewMenuItems"
             commandupdater="true"
             events="create-menu-view"
@@ -307,16 +308,17 @@
   <key id="space" key=" " modifiers="shift any" oncommand="SpaceHit(event);"/>
 
   <!-- File Menu -->
   <key id="key_newTab"
        key="&newTabCmd.key;"
        modifiers="accel"
        oncommand="MsgOpenNewTab();"/>
   <key id="key_newNavigator"/>
+  <key id="key_newPrivateWindow"/>
   <key id="key_newBlankPage"/>
   <key id="key_close"/>
   <!-- Edit Menu -->
   <key id="key_undo"/>
   <key id="key_redo"/>
   <key id="key_cut"/>
   <key id="key_copy"/>
   <key id="key_paste"/>
@@ -916,16 +918,17 @@
           <menuseparator id="newPopupMenuSeparator"/>
           <menuitem id="menu_newCard"/>
           <menuitem id="menu_newTab"
                     label="&newTabCmd.label;"
                     accesskey="&newTabCmd.accesskey;"
                     key="key_newTab"
                     oncommand="MsgOpenNewTab();"/>
           <menuitem id="menu_newNavigator"/>
+          <menuitem id="menu_newPrivateWindow"/>
           <menuitem id="menu_newEditor"/>
         </menupopup>
       </menu>
       <menuitem id="openMessageFileMenuitem" label="&openMessageFileCmd.label;"
         key="key_openFileMessage"
         accesskey="&openMessageFileCmd.accesskey;"
         oncommand="MsgOpenFromFile();"/>
       <menuitem id="menu_close"/>