Bug 411929 - Private Browsing UI; r=mconnor,bzbarsky sr=bzbarsky
authorEhsan Akhgari <ehsan.akhgari@gmail.com>
Tue, 04 Nov 2008 02:52:23 +0330
changeset 21249 b2b3816d152fec078cc93a0e4ae73d8df5600b99
parent 21248 0d3b97cd7867687d1affc3ba97df7e19fffd410a
child 21250 c504956ed84b428d4fdb5b59c7ffced781a36c69
push idunknown
push userunknown
push dateunknown
reviewersmconnor, bzbarsky, bzbarsky
bugs411929
milestone1.9.1b2pre
Bug 411929 - Private Browsing UI; r=mconnor,bzbarsky sr=bzbarsky
browser/app/profile/firefox.js
browser/base/content/browser-menubar.inc
browser/base/content/browser-sets.inc
browser/base/content/browser.js
browser/base/content/browser.xul
browser/components/privatebrowsing/content/aboutPrivateBrowsing.xhtml
browser/components/privatebrowsing/jar.mn
browser/components/privatebrowsing/src/Makefile.in
browser/components/privatebrowsing/src/aboutPrivateBrowsing.js
browser/components/privatebrowsing/src/nsPrivateBrowsingService.js
browser/components/privatebrowsing/test/browser/browser_privatebrowsing_ui.js
browser/components/privatebrowsing/test/unit/test_0-privatebrowsing.js
browser/components/privatebrowsing/test/unit/test_privatebrowsing_autostart.js
browser/installer/unix/packages-static
browser/installer/windows/packages-static
browser/locales/en-US/chrome/browser/aboutPrivateBrowsing.dtd
browser/locales/en-US/chrome/browser/browser.dtd
browser/locales/en-US/chrome/browser/browser.properties
browser/locales/jar.mn
browser/themes/gnomestripe/browser/Privacy-16.png
browser/themes/gnomestripe/browser/Privacy-32.png
browser/themes/gnomestripe/browser/Privacy-48.png
browser/themes/gnomestripe/browser/Privacy-64.png
browser/themes/gnomestripe/browser/aboutPrivateBrowsing.css
browser/themes/gnomestripe/browser/jar.mn
browser/themes/pinstripe/browser/Privacy-16.png
browser/themes/pinstripe/browser/Privacy-32.png
browser/themes/pinstripe/browser/Privacy-48.png
browser/themes/pinstripe/browser/Privacy-64.png
browser/themes/pinstripe/browser/aboutPrivateBrowsing.css
browser/themes/pinstripe/browser/jar.mn
browser/themes/winstripe/browser/Privacy-16.png
browser/themes/winstripe/browser/Privacy-32.png
browser/themes/winstripe/browser/Privacy-48.png
browser/themes/winstripe/browser/Privacy-64.png
browser/themes/winstripe/browser/aboutPrivateBrowsing.css
browser/themes/winstripe/browser/jar.mn
netwerk/base/public/nsIPrivateBrowsingService.idl
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -789,8 +789,11 @@ pref("breakpad.reportURL", "http://crash
 // base URL for web-based support pages
 pref("app.support.baseURL", "http://support.mozilla.com/1/%APP%/%VERSION%/%OS%/%LOCALE%/");
 
 // Name of alternate about: page for certificate errors (when undefined, defaults to about:neterror)
 pref("security.alternate_certificate_error_page", "certerror");
 
 // Whether to start the private browsing mode at application startup
 pref("browser.privatebrowsing.autostart", false);
+
+// Whether we should skip prompting before starting the private browsing mode
+pref("browser.privatebrowsing.dont_prompt_on_enter", false);
--- a/browser/base/content/browser-menubar.inc
+++ b/browser/base/content/browser-menubar.inc
@@ -461,16 +461,22 @@
 #ifdef XP_WIN
               <menuitem accesskey="&pageInfoCmd.accesskey;" label="&pageInfoCmd.label;"   
                         command="View:PageInfo"/>
 #else
               <menuitem accesskey="&pageInfoCmd.accesskey;" label="&pageInfoCmd.label;"   
                         key="key_viewInfo" command="View:PageInfo"/>
 #endif
               <menuseparator id="sanitizeSeparator"/>
+              <menuitem id="privateBrowsingItem"
+                        label="&privateBrowsingCmd.label;"
+                        accesskey="&privateBrowsingCmd.accesskey;"
+                        type="checkbox"
+                        autocheck="false"
+                        command="Tools:PrivateBrowsing"/>
               <menuitem id="sanitizeItem"
                         accesskey="&clearPrivateDataCmd.accesskey;"
                         label="&clearPrivateDataCmd.label;"
                         key="key_sanitize" command="Tools:Sanitize"/>
 #ifndef XP_UNIX
               <menuseparator id="prefSep"/>
               <menuitem id="menu_preferences"
                         label="&preferencesCmd.label;"
--- a/browser/base/content/browser-sets.inc
+++ b/browser/base/content/browser-sets.inc
@@ -121,16 +121,17 @@
     <command id="cmd_fullZoomToggle"  oncommand="ZoomManager.toggleZoom();"/>
     <command id="Browser:OpenLocation" oncommand="openLocation();"/>
 
     <command id="Tools:Search" oncommand="BrowserSearch.webSearch();"/>    
     <command id="Tools:Downloads" oncommand="BrowserDownloadsUI();"/>
     <command id="Tools:Addons" oncommand="BrowserOpenAddonsMgr();"/>
     <command id="Tools:Sanitize"
      oncommand="Cc[GLUE_CID].getService(Ci.nsIBrowserGlue).sanitize(window || null);"/>
+    <command id="Tools:PrivateBrowsing" oncommand="gPrivateBrowsingUI.toggleMode();"/>
     <command id="History:UndoCloseTab" oncommand="undoCloseTab();"/>
   </commandset>
 
   <commandset id="placesCommands">
     <command id="Browser:ShowAllBookmarks"
              oncommand="PlacesCommandHook.showPlacesOrganizer('AllBookmarks');"/>
     <command id="Browser:ShowAllHistory"
              oncommand="PlacesCommandHook.showPlacesOrganizer('History');"/>
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -1342,16 +1342,17 @@ function BrowserShutdown()
   }
 
   if (gSanitizeListener)
     gSanitizeListener.shutdown();
 
   BrowserOffline.uninit();
   OfflineApps.uninit();
   DownloadMonitorPanel.uninit();
+  gPrivateBrowsingUI.uninit();
 
   var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService();
   var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
   var enumerator = windowManagerInterface.getEnumerator(null);
   enumerator.getNext();
   if (!enumerator.hasMoreElements()) {
     document.persist("sidebar-box", "sidebarcommand");
     document.persist("sidebar-box", "width");
@@ -6740,52 +6741,152 @@ function getNotificationBox(aWindow) {
 
 /* DEPRECATED */
 function getBrowser() gBrowser;
 function getNavToolbox() gNavToolbox;
 
 let gPrivateBrowsingUI = {
   _observerService: null,
   _privateBrowsingService: null,
+  _privateBrowsingAutoStarted: false,
 
   init: function PBUI_init() {
     this._observerService = Cc["@mozilla.org/observer-service;1"].
                             getService(Ci.nsIObserverService);
     this._observerService.addObserver(this, "private-browsing", false);
-    this._observerService.addObserver(this, "quit-application", false);
 
     this._privateBrowsingService = Cc["@mozilla.org/privatebrowsing;1"].
                                    getService(Ci.nsIPrivateBrowsingService);
 
-    if (this._privateBrowsingService.privateBrowsingEnabled)
+    if (this.privateBrowsingEnabled)
       this.onEnterPrivateBrowsing();
-    else
-      this.onExitPrivateBrowsing();
+  },
+
+  uninit: function PBUI_unint() {
+    this._observerService.removeObserver(this, "private-browsing");
   },
 
   observe: function PBUI_observe(aSubject, aTopic, aData) {
     if (aTopic == "private-browsing") {
       if (aData == "enter")
         this.onEnterPrivateBrowsing();
       else if (aData == "exit")
         this.onExitPrivateBrowsing();
     }
-    else if (aTopic == "quit-application") {
-      this._observerService.removeObserver(this, "quit-application");
-      this._observerService.removeObserver(this, "private-browsing");
-    }
+  },
+
+  _shouldEnter: function PBUI__shouldEnter() {
+    try {
+      // Never prompt if the session is not going to be closed, or if user has
+      // already requested not to be prompted.
+      if (gPrefService.getBoolPref("browser.privatebrowsing.dont_prompt_on_enter") ||
+          gPrefService.getBoolPref("browser.privatebrowsing.keep_current_session"))
+        return true;
+    }
+    catch (ex) { }
+
+    var bundleService = Cc["@mozilla.org/intl/stringbundle;1"].
+                        getService(Ci.nsIStringBundleService);
+    var pbBundle = bundleService.createBundle("chrome://browser/locale/browser.properties");
+    var brandBundle = bundleService.createBundle("chrome://branding/locale/brand.properties");
+
+    var appName = brandBundle.GetStringFromName("brandShortName");
+    var dialogTitle = pbBundle.GetStringFromName("privateBrowsingDialogTitle");
+    var message = pbBundle.formatStringFromName("privateBrowsingMessage", [appName], 1);
+
+    var promptService = Cc["@mozilla.org/embedcomp/prompt-service;1"].
+                        getService(Ci.nsIPromptService);
+
+    var flags = promptService.BUTTON_TITLE_IS_STRING * promptService.BUTTON_POS_0 +
+                promptService.BUTTON_TITLE_IS_STRING * promptService.BUTTON_POS_1 +
+                promptService.BUTTON_POS_0_DEFAULT;
+
+    var neverAsk = {value:false};
+    var button0Title = pbBundle.GetStringFromName("privateBrowsingYesTitle");
+    var button1Title = pbBundle.GetStringFromName("privateBrowsingNoTitle");
+    var neverAskText = pbBundle.GetStringFromName("privateBrowsingNeverAsk");
+
+    var result;
+    var choice = promptService.confirmEx(null, dialogTitle, message,
+                               flags, button0Title, button1Title, null,
+                               neverAskText, neverAsk);
+
+    switch (choice) {
+    case 0: // Start Private Browsing
+      result = true;
+      if (neverAsk.value)
+        gPrefService.setBoolPref("browser.privatebrowsing.dont_prompt_on_enter", true);
+      break;
+    case 1: // Keep
+      result = false;
+      break;
+    }
+
+    return result;
   },
 
   onEnterPrivateBrowsing: function PBUI_onEnterPrivateBrowsing() {
+    let pbMenuItem = document.getElementById("privateBrowsingItem");
+    if (pbMenuItem)
+      pbMenuItem.setAttribute("checked", "true");
+
+    this._privateBrowsingAutoStarted = this._privateBrowsingService.autoStarted;
+
+    if (!this._privateBrowsingAutoStarted) {
+      // Adjust the window's title
+      let docElement = document.documentElement;
+#ifdef XP_MACOSX // see bug 411929 comment 38 for the reason behind this
+      docElement.setAttribute("titlemodifier",
+        docElement.getAttribute("titlemodifier_privatebrowsing"));
+      docElement.setAttribute("titledefault", "");
+#else
+      docElement.setAttribute("title",
+        docElement.getAttribute("title_privatebrowsing"));
+      docElement.setAttribute("titlemodifier",
+        docElement.getAttribute("titlemodifier_privatebrowsing"));
+#endif
+    }
+    else {
+      // Disable the menu item in auto-start mode
+      if (pbMenuItem)
+        pbMenuItem.setAttribute("disabled", "true");
+      document.getElementById("Tools:PrivateBrowsing")
+              .setAttribute("disabled", "true");
+    }
   },
 
   onExitPrivateBrowsing: function PBUI_onExitPrivateBrowsing() {
+    let pbMenuItem = document.getElementById("privateBrowsingItem");
+    if (pbMenuItem)
+      pbMenuItem.removeAttribute("checked");
+
+    if (!this._privateBrowsingAutoStarted) {
+      // Adjust the window's title
+      let docElement = document.documentElement;
+#ifdef XP_MACOSX // see bug 411929 comment 38 for the reason behind this
+      docElement.setAttribute("titlemodifier", "");
+      docElement.setAttribute("titledefault",
+        docElement.getAttribute("titlemodifier_normal"));
+#else
+      docElement.setAttribute("title",
+        docElement.getAttribute("title_normal"));
+      docElement.setAttribute("titlemodifier",
+        docElement.getAttribute("titlemodifier_normal"));
+#endif
+    }
+    else
+      this._privateBrowsingAutoStarted = false;
   },
 
   toggleMode: function PBUI_toggleMode() {
+    // prompt the users on entering the private mode, if needed
+    if (!this.privateBrowsingEnabled)
+      if (!this._shouldEnter())
+        return;
+
     this._privateBrowsingService.privateBrowsingEnabled =
-      !this._privateBrowsingService.privateBrowsingEnabled;
+      !this.privateBrowsingEnabled;
   },
 
   get privateBrowsingEnabled PBUI_get_privateBrowsingEnabled() {
     return this._privateBrowsingService.privateBrowsingEnabled;
   }
 };
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -61,17 +61,21 @@
 #include browser-doctype.inc
 
 <window id="main-window"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:svg="http://www.w3.org/2000/svg"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="BrowserStartup()" onunload="BrowserShutdown()" onclose="return WindowIsClosing();"
         title="&mainWindow.title;"
-        titlemodifier="&mainWindow.title;"
+        title_normal="&mainWindow.title;"
+        title_privatebrowsing="&mainWindowPrivateBrowsing.titlemodifier;"
+        titlemodifier="&mainWindow.titlemodifier;"
+        titlemodifier_normal="&mainWindow.titlemodifier;"
+        titlemodifier_privatebrowsing="&mainWindowPrivateBrowsing.titlemodifier;"
         titlemenuseparator="&mainWindow.titlemodifiermenuseparator;"
         windowtype="navigator:browser"
         screenX="4" screenY="4"
         persist="screenX screenY width height sizemode"> 
 
 # All JS files which are not content (only) dependent that browser.xul
 # wishes to include *must* go into the global-scripts.inc file
 # so that they can be shared by macBrowserOverlay.xul.
new file mode 100644
--- /dev/null
+++ b/browser/components/privatebrowsing/content/aboutPrivateBrowsing.xhtml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is Private Browsing.
+#
+# The Initial Developer of the Original Code is
+# Ehsan Akhgari <ehsan.akhgari@gmail.com>
+# Portions created by the Initial Developer are Copyright (C) 2008
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+-->
+<!DOCTYPE html [
+  <!ENTITY % htmlDTD PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+  %htmlDTD;
+  <!ENTITY % netErrorDTD SYSTEM "chrome://global/locale/netError.dtd">
+  %netErrorDTD;
+  <!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd">
+  %globalDTD;
+  <!ENTITY % privatebrowsingpageDTD SYSTEM "chrome://browser/locale/aboutPrivateBrowsing.dtd">
+  %privatebrowsingpageDTD;
+]>
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>&privatebrowsingpage.tabtitle;</title>
+    <link rel="stylesheet" href="chrome://global/skin/netError.css" type="text/css" media="all"/>
+    <link rel="stylesheet" href="chrome://browser/skin/aboutPrivateBrowsing.css" type="text/css" media="all"/>
+    <link rel="icon" type="image/png" href="chrome://browser/skin/Privacy-16.png"/>
+  </head>
+
+  <body dir="&locale.dir;">
+
+    <!-- PAGE CONTAINER (for styling purposes only) -->
+    <div id="errorPageContainer">
+    
+      <!-- Error Title -->
+      <div id="errorTitle">
+        <h1 id="errorTitleText">&privatebrowsingpage.pagetitle;</h1>
+      </div>
+      
+      <!-- LONG CONTENT (the section most likely to require scrolling) -->
+      <div id="errorLongContent">
+      
+        <!-- Short Description -->
+        <div id="errorShortDesc">
+          <p id="errorShortDescText">&privatebrowsingpage.issueDesc;</p>
+        </div>
+
+        <!-- Long Description (Note: See netError.dtd for used XHTML tags) -->
+        <div id="errorLongDesc">
+          <p>&privatebrowsingpage.longDesc;</p>
+        </div>
+
+        <!-- Clear Recent History -->
+        <div id="clearRecentHistoryDesc">
+          <p>&privatebrowsingpage.clearRecentHistoryDesc;</p>
+          <button xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+                  id="showClearRecentHistory" label="&privatebrowsingpage.recentHistory.label;"
+                  accesskey="&privatebrowsingpage.recentHistory.accesskey;"
+                  disabled="true"/>
+        </div>
+
+        <!-- Footer -->
+        <div id="footerDesc">
+          <p>&privatebrowsingpage.howToStopDesc;</p>
+          <p id="enjoyDesc">&privatebrowsingpage.footerDesc;</p>
+        </div>
+      </div>
+    </div>
+
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/components/privatebrowsing/jar.mn
@@ -0,0 +1,2 @@
+browser.jar:
+*   content/browser/aboutPrivateBrowsing.xhtml            (content/aboutPrivateBrowsing.xhtml) 
--- a/browser/components/privatebrowsing/src/Makefile.in
+++ b/browser/components/privatebrowsing/src/Makefile.in
@@ -37,11 +37,14 @@
 
 DEPTH   = ../../../..
 topsrcdir = @top_srcdir@
 srcdir    = @srcdir@
 VPATH   = @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
-EXTRA_PP_COMPONENTS = nsPrivateBrowsingService.js
+EXTRA_PP_COMPONENTS = \
+	nsPrivateBrowsingService.js \
+	aboutPrivateBrowsing.js \
+	$(NULL)
 
 include $(topsrcdir)/config/rules.mk
new file mode 100644
--- /dev/null
+++ b/browser/components/privatebrowsing/src/aboutPrivateBrowsing.js
@@ -0,0 +1,63 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Private Browsing.
+ *
+ * The Initial Developer of the Original Code is
+ * Ehsan Akhgari <ehsan.akhgari@gmail.com>
+ * Portions created by the Initial Developer are Copyright (C) 2008
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+
+function AboutPrivateBrowsing() { }
+AboutPrivateBrowsing.prototype = {
+  classDescription: "about:privatebrowsing",
+  contractID: "@mozilla.org/network/protocol/about;1?what=privatebrowsing",
+  classID: Components.ID("{d92a18c8-234d-49e4-9936-3b7e020c29a2}"),
+  QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
+  
+  getURIFlags: function(aURI) {
+    return Ci.nsIAboutModule.ALLOW_SCRIPT;
+  },
+  
+  newChannel: function(aURI) {
+    let ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
+    let channel = ios.newChannel("chrome://browser/content/aboutPrivateBrowsing.xhtml",
+                                 null, null);
+    channel.originalURI = aURI;
+    return channel;
+  }
+};
+
+function NSGetModule(compMgr, fileSpec)
+  XPCOMUtils.generateModule([AboutPrivateBrowsing]);
--- a/browser/components/privatebrowsing/src/nsPrivateBrowsingService.js
+++ b/browser/components/privatebrowsing/src/nsPrivateBrowsingService.js
@@ -70,16 +70,19 @@ PrivateBrowsingService.prototype = {
   _saveSession: true,
 
   // Make sure we don't allow re-enterant changing of the private mode
   _alreadyChangingMode: false,
 
   // Whether we're entering the private browsing mode at application startup
   _autoStart: false,
 
+  // Whether the private browsing mode has been started automatically
+  _autoStarted: false,
+
   // XPCOM registration
   classDescription: "PrivateBrowsing Service",
   contractID: "@mozilla.org/privatebrowsing;1",
   classID: Components.ID("{c31f4883-839b-45f6-82ad-a6a9bc5ad599}"),
   _xpcom_categories: [
     { category: "app-startup", service: true }
   ],
 
@@ -121,31 +124,32 @@ PrivateBrowsingService.prototype = {
 
         // save the whole browser state in order to restore all windows/tabs later
         if (this._saveSession && !this._savedBrowserState) {
           this._savedBrowserState = ss.getBrowserState();
 
           // Close all windows
           this._closeAllWindows();
 
-          // Open a single window
-          this._openSingleWindow();
+          // Open about:privatebrowsing
+          this._openAboutPrivateBrowsing();
         }
       }
       else {
         // Clear the error console
         let consoleService = Cc["@mozilla.org/consoleservice;1"].
                              getService(Ci.nsIConsoleService);
         consoleService.logStringMessage(null); // trigger the listeners
         consoleService.reset();
 
         // restore the windows/tabs which were open before entering the private mode
         if (this._saveSession && this._savedBrowserState) {
-          if (!this._quitting) // don't restore when shutting down!
+          if (!this._quitting) { // don't restore when shutting down!
             ss.setBrowserState(this._savedBrowserState);
+          }
           this._savedBrowserState = null;
         }
       }
     }
     else
       this._saveSession = false;
   },
 
@@ -163,21 +167,24 @@ PrivateBrowsingService.prototype = {
 #endif
 
     while (windowsEnum.hasMoreElements()) {
       let win = windowsEnum.getNext();
       win.close();
     }
   },
 
-  _openSingleWindow: function PBS__openSingleWindow() {
+  _openAboutPrivateBrowsing: function PBS__openAboutPrivateBrowsing() {
     let windowWatcher = Cc["@mozilla.org/embedcomp/window-watcher;1"].
                         getService(Ci.nsIWindowWatcher);
+    let url = Cc["@mozilla.org/supports-string;1"].
+              createInstance(Ci.nsISupportsString);
+    url.data = "about:privatebrowsing";
     windowWatcher.openWindow(null, "chrome://browser/content/browser.xul",
-                             null, "chrome,all,resizable=yes,dialog=no", null);
+                             null, "chrome,all,resizable=yes,dialog=no", url);
   },
 
   _canEnterPrivateBrowsingMode: function PBS__canEnterPrivateBrowsingMode() {
     let cancelEnter = Cc["@mozilla.org/supports-PRBool;1"].
                       createInstance(Ci.nsISupportsPRBool);
     cancelEnter.data = false;
     this._obs.notifyObservers(cancelEnter, "private-browsing-cancel-vote", "enter");
     return !cancelEnter.data;
@@ -199,16 +206,17 @@ PrivateBrowsingService.prototype = {
         // If the autostart prefs has been set, simulate entering the
         // private browsing mode upon startup.
         // This won't interfere with the session store component, because
         // that component will be initialized on final-ui-startup.
         let prefsService = Cc["@mozilla.org/preferences-service;1"].
                            getService(Ci.nsIPrefBranch);
         this._autoStart = prefsService.getBoolPref("browser.privatebrowsing.autostart");
         if (this._autoStart) {
+          this._autoStarted = true;
           this.privateBrowsingEnabled = true;
           this._autoStart = false;
         }
         this._obs.removeObserver(this, "profile-after-change");
         break;
       case "quit-application-granted":
         this._unload();
         break;
@@ -244,16 +252,18 @@ PrivateBrowsingService.prototype = {
           if (!this._canEnterPrivateBrowsingMode())
             return;
         }
         else {
           if (!this._canLeavePrivateBrowsingMode())
             return;
         }
 
+        if (!val)
+          this._autoStarted = false;
         this._inPrivateBrowsing = val != false;
 
         let data = val ? "enter" : "exit";
 
         let quitting = Cc["@mozilla.org/supports-PRBool;1"].
                        createInstance(Ci.nsISupportsPRBool);
         quitting.data = this._quitting;
         this._obs.notifyObservers(quitting, "private-browsing", data);
@@ -261,13 +271,20 @@ PrivateBrowsingService.prototype = {
         this._onPrivateBrowsingModeChanged();
       }
     } catch (ex) {
       Cu.reportError("Exception thrown while processing the " +
         "private browsing mode change request: " + ex.toString());
     } finally {
       this._alreadyChangingMode = false;
     }
+  },
+
+  /**
+   * Whether private browsing has been started automatically.
+   */
+  get autoStarted PBS_get_autoStarted() {
+    return this._autoStarted;
   }
 };
 
 function NSGetModule(compMgr, fileSpec)
   XPCOMUtils.generateModule([PrivateBrowsingService]);
--- a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_ui.js
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_ui.js
@@ -30,17 +30,18 @@
  * use your version of this file under the terms of the MPL, indicate your
  * decision by deleting the provisions above and replace them with the notice
  * and other provisions required by the GPL or the LGPL. If you do not delete
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 
-// This test makes sure that the gPrivateBrowsingUI object works correctly.
+// This test makes sure that the gPrivateBrowsingUI object, the Private Browsing
+// menu item and its XUL <command> element work correctly.
 
 function test() {
   // initialization
   let prefBranch = Cc["@mozilla.org/preferences-service;1"].
                    getService(Ci.nsIPrefBranch);
   prefBranch.setBoolPref("browser.privatebrowsing.keep_current_session", true);
   let pb = Cc["@mozilla.org/privatebrowsing;1"].
            getService(Ci.nsIPrivateBrowsingService);
@@ -49,18 +50,125 @@ function test() {
       if (aTopic == "private-browsing")
         this.data = aData;
     },
     data: null
   };
   let os = Cc["@mozilla.org/observer-service;1"].
            getService(Ci.nsIObserverService);
   os.addObserver(observer, "private-browsing", false);
+  let pbMenuItem = document.getElementById("privateBrowsingItem");
+  // add a new blank tab to ensure the title
+  let blankTab = gBrowser.addTab();
+  gBrowser.selectedTab = blankTab;
+  let originalTitle = document.title;
+  let privateBrowsingTitle = document.documentElement.getAttribute("titlemodifier_privatebrowsing");
+  waitForExplicitFinish();
 
   // test the gPrivateBrowsingUI object
   ok(gPrivateBrowsingUI, "The gPrivateBrowsingUI object exists");
+  ok(pbMenuItem, "The Private Browsing menu item exists");
+  ok(!pbMenuItem.hasAttribute("checked"), "The Private Browsing menu item is not checked initially");
   gPrivateBrowsingUI.toggleMode();
   // check to see if the Private Browsing mode was activated successfully
   is(observer.data, "enter", "Private Browsing mode was activated using the gPrivateBrowsingUI object");
+  ok(pbMenuItem.hasAttribute("checked"), "The Private Browsing menu item was correctly checked");
   gPrivateBrowsingUI.toggleMode()
   // check to see if the Private Browsing mode was deactivated successfully
   is(observer.data, "exit", "Private Browsing mode was deactivated using the gPrivateBrowsingUI object");
+  ok(!pbMenuItem.hasAttribute("checked"), "The Private Browsing menu item was correctly unchecked");
+
+  // test the menu item
+  window.focus();
+  let timer = Cc["@mozilla.org/timer;1"].
+              createInstance(Ci.nsITimer);
+  timer.initWithCallback({
+    notify: function(timer) {
+      // get the access keys
+      let toolsKey = document.getElementById("tools-menu").getAttribute("accesskey");
+      let pbKey = pbMenuItem.getAttribute("accesskey");
+
+      // get the access key modifier
+      function accessKeyModifier () {
+        switch (gPrefService.getIntPref("ui.key.generalAccessKey")) {
+        case -1:
+          let chromeAccessKey = gPrefService.getIntPref("ui.key.chromeAccess");
+          if (chromeAccessKey == 0)
+            ok(false, "ui.key.chromeAccess was set to 0, so access keys for chrome are disabled");
+          else
+            return {
+              shiftKey: (chromeAccessKey & 1) != 0,
+              accelKey: (chromeAccessKey & 2) != 0,
+              altKey: (chromeAccessKey & 4) != 0,
+              metaKey: (chromeAccessKey & 8) != 0
+            };
+          break;
+
+        case Ci.nsIDOMKeyEvent.DOM_VK_SHIFT:
+          return { shiftKey: true };
+        case Ci.nsIDOMKeyEvent.DOM_VK_CONTROL:
+          return { accelKey: true };
+        case Ci.nsIDOMKeyEvent.DOM_VK_ALT:
+          return { altKey: true };
+        case Ci.nsIDOMKeyEvent.DOM_VK_META:
+          return { metaKey: true };
+        default:
+          ok(false, "Invalid value for the ui.key.generalAccessKey pref: " +
+            gPrefService.getIntPref("ui.key.generalAccessKey"));
+        }
+      }
+
+      let popup = document.getElementById("menu_ToolsPopup");
+      // activate the Private Browsing menu item
+      popup.addEventListener("popupshown", function () {
+        this.removeEventListener("popupshown", arguments.callee, false);
+
+        this.addEventListener("popuphidden", function () {
+          this.removeEventListener("popuphidden", arguments.callee, false);
+
+          // check to see if the Private Browsing mode was activated successfully
+          is(observer.data, "enter", "Private Browsing mode was activated using the menu");
+          // check to see that the window title has been changed correctly
+          is(document.title, privateBrowsingTitle, "Private browsing mode has correctly changed the title");
+
+          // toggle the Private Browsing menu item
+          this.addEventListener("popupshown", function () {
+            this.removeEventListener("popupshown", arguments.callee, false);
+
+            this.addEventListener("popuphidden", function () {
+              this.removeEventListener("popuphidden", arguments.callee, false);
+
+              // check to see if the Private Browsing mode was deactivated successfully
+              is(observer.data, "exit", "Private Browsing mode was deactivated using the menu");
+              // check to see that the window title has been restored correctly
+              is(document.title, originalTitle, "Private browsing mode has correctly restored the title");
+
+              // now, test using the <command> object
+              let cmd = document.getElementById("Tools:PrivateBrowsing");
+              isnot(cmd, null, "XUL command object for the private browsing service exists");
+              var func = new Function("", cmd.getAttribute("oncommand"));
+              func.call(cmd);
+              // check to see if the Private Browsing mode was activated successfully
+              is(observer.data, "enter", "Private Browsing mode was activated using the command object");
+              // check to see that the window title has been changed correctly
+              is(document.title, privateBrowsingTitle, "Private browsing mode has correctly changed the title");
+              func.call(cmd);
+              // check to see if the Private Browsing mode was deactivated successfully
+              is(observer.data, "exit", "Private Browsing mode was deactivated using the command object");
+              // check to see that the window title has been restored correctly
+              is(document.title, originalTitle, "Private browsing mode has correctly restored the title");
+
+              // cleanup
+              gBrowser.removeTab(blankTab);
+              os.removeObserver(observer, "private-browsing");
+              prefBranch.clearUserPref("browser.privatebrowsing.keep_current_session");
+              finish();
+            }, false);
+            EventUtils.synthesizeKey(pbKey, accessKeyModifier());
+          }, false);
+          EventUtils.synthesizeKey(toolsKey, accessKeyModifier());
+        }, false);
+        EventUtils.synthesizeKey(pbKey, accessKeyModifier());
+      }, false);
+      EventUtils.synthesizeKey(toolsKey, accessKeyModifier());
+    }
+  }, 2000, Ci.nsITimer.TYPE_ONE_SHOT);
 }
--- a/browser/components/privatebrowsing/test/unit/test_0-privatebrowsing.js
+++ b/browser/components/privatebrowsing/test/unit/test_0-privatebrowsing.js
@@ -61,22 +61,26 @@ function run_test() {
              getService(Ci.nsIPrivateBrowsingService);
   } catch (ex) {
     LOG("exception thrown when trying to get the service: " + ex);
     do_throw("private browsing service could not be initialized");
   }
 
   // private browsing should be turned off initially
   do_check_false(pb.privateBrowsingEnabled);
+  // private browsing not auto-started
+  do_check_false(pb.autoStarted);
 
   // it should be possible to toggle its status
   pb.privateBrowsingEnabled = true;
   do_check_true(pb.privateBrowsingEnabled);
+  do_check_false(pb.autoStarted);
   pb.privateBrowsingEnabled = false;
   do_check_false(pb.privateBrowsingEnabled);
+  do_check_false(pb.autoStarted);
 
   // test the private-browsing notification
   var observer = {
     observe: function(aSubject, aTopic, aData) {
       if (aTopic == kPrivateBrowsingNotification)
         this.data = aData;
     },
     data: null
--- a/browser/components/privatebrowsing/test/unit/test_privatebrowsing_autostart.js
+++ b/browser/components/privatebrowsing/test/unit/test_privatebrowsing_autostart.js
@@ -43,14 +43,26 @@ function run_test() {
                      getService(Ci.nsIPrefBranch);
   prefsService.setBoolPref("browser.privatebrowsing.autostart", true);
   do_check_true(prefsService.getBoolPref("browser.privatebrowsing.autostart"));
 
   var pb = Cc["@mozilla.org/privatebrowsing;1"].
            getService(Ci.nsIPrivateBrowsingService).
            QueryInterface(Ci.nsIObserver);
 
+  // private browsing not auto-started yet
+  do_check_false(pb.autoStarted);
+
   // simulate startup to make the PB service read the prefs
   pb.observe(null, "profile-after-change", "");
 
   // the private mode should be entered automatically
   do_check_true(pb.privateBrowsingEnabled);
+
+  // private browsing is auto-started
+  do_check_true(pb.autoStarted);
+
+  // leave private browsing mode
+  pb.privateBrowsingEnabled = false;
+
+  // private browsing not auto-started
+  do_check_false(pb.autoStarted);
 }
--- a/browser/installer/unix/packages-static
+++ b/browser/installer/unix/packages-static
@@ -224,16 +224,17 @@ bin/components/nsSidebar.js
 bin/components/nsExtensionManager.js
 bin/components/nsBlocklistService.js
 bin/components/nsUpdateService.js
 bin/components/pluginGlue.js
 bin/components/extensions.xpt
 bin/components/update.xpt
 bin/components/nsSessionStartup.js
 bin/components/nsSessionStore.js
+bin/components/aboutPrivateBrowsing.js
 bin/components/aboutSessionRestore.js
 bin/components/sessionstore.xpt
 bin/components/nsURLFormatter.js
 bin/components/urlformatter.xpt
 bin/components/libbrowserdirprovider.so
 bin/components/libbrowsercomps.so
 bin/components/txEXSLTRegExFunctions.js
 bin/components/nsLivemarkService.js
--- a/browser/installer/windows/packages-static
+++ b/browser/installer/windows/packages-static
@@ -231,16 +231,17 @@ bin\components\nsLoginManager.js
 bin\components\nsLoginManagerPrompter.js
 bin\components\storage-Legacy.js
 bin\components\storage-mozStorage.js
 bin\components\pluginGlue.js
 bin\components\extensions.xpt
 bin\components\update.xpt
 bin\components\nsSessionStartup.js
 bin\components\nsSessionStore.js
+bin\components\aboutPrivateBrowsing.js
 bin\components\aboutSessionRestore.js
 bin\components\sessionstore.xpt
 bin\components\nsURLFormatter.js
 bin\components\urlformatter.xpt
 bin\components\browserdirprovider.dll
 bin\components\brwsrcmp.dll
 bin\components\txEXSLTRegExFunctions.js
 bin\components\nsLivemarkService.js
new file mode 100644
--- /dev/null
+++ b/browser/locales/en-US/chrome/browser/aboutPrivateBrowsing.dtd
@@ -0,0 +1,13 @@
+<!ENTITY privatebrowsingpage.tabtitle                  "Private Browsing">
+
+<!ENTITY privatebrowsingpage.pagetitle                 "Private Browsing">
+
+<!ENTITY privatebrowsingpage.issueDesc                 "&brandShortName; won't remember any history for this session.">
+<!ENTITY privatebrowsingpage.longDesc                  "No history will be recorded by &brandShortName; during this browsing session.  This includes browser history, search history, download history, web form history, cookies, and temporary internet files.  However, any files you download or bookmarks you create will be preserved.">
+
+<!ENTITY privatebrowsingpage.clearRecentHistoryDesc    "You may want to start by also clearing your recent history.">
+<!ENTITY privatebrowsingpage.recentHistory.label       "Clear Recent History">
+<!ENTITY privatebrowsingpage.recentHistory.accesskey   "C">
+
+<!ENTITY privatebrowsingpage.howToStopDesc             "To stop private browsing, uncheck Tools &gt; Private Browsing.">
+<!ENTITY privatebrowsingpage.footerDesc                "Enjoy!">
--- a/browser/locales/en-US/chrome/browser/browser.dtd
+++ b/browser/locales/en-US/chrome/browser/browser.dtd
@@ -2,16 +2,19 @@
 <!-- LOCALIZATION NOTE : FILE Do not translate commandkeys --> 
 
 <!-- LOCALIZATION NOTE (mainWindow.title): DONT_TRANSLATE -->
 <!ENTITY mainWindow.title "&brandFullName;">
 <!-- LOCALIZATION NOTE (mainWindow.titlemodifier) : DONT_TRANSLATE -->
 <!ENTITY mainWindow.titlemodifier "&brandFullName;">
 <!-- LOCALIZATION NOTE (mainWindow.titlemodifiermenuseparator): DONT_TRANSLATE -->
 <!ENTITY mainWindow.titlemodifiermenuseparator " - ">
+<!-- LOCALIZATION NOTE (mainWindowPrivateBrowsing.titlemodifier): This will be appended to the window's title
+                                                                  inside the private browsing mode -->
+<!ENTITY mainWindowPrivateBrowsing.titlemodifier "&mainWindow.titlemodifier; (Private Browsing)">
 
 <!ENTITY tabCmd.label "New Tab">
 <!ENTITY tabCmd.accesskey "T">
 <!ENTITY tabCmd.commandkey "t">
 <!ENTITY openLocationCmd.label "Open Location…">
 <!ENTITY openLocationCmd.accesskey "L">
 <!ENTITY openFileCmd.label "Open File…">
 <!ENTITY openFileCmd.accesskey "O">
@@ -156,16 +159,19 @@
 <!ENTITY preferencesCmd.label       "Options…">
 <!ENTITY preferencesCmd.accesskey     "O"> 
 <!ENTITY preferencesCmdUnix.label       "Preferences">
 <!ENTITY preferencesCmdUnix.accesskey     "n"> 
 
 <!ENTITY clearPrivateDataCmd.label            "Clear Private Data">
 <!ENTITY clearPrivateDataCmd.accesskey        "P">
 
+<!ENTITY privateBrowsingCmd.label            "Private Browsing">
+<!ENTITY privateBrowsingCmd.accesskey        "B">
+
 <!ENTITY viewMenu.label         "View"> 
 <!ENTITY viewMenu.accesskey       "V"> 
 <!ENTITY viewToolbarsMenu.label       "Toolbars"> 
 <!ENTITY viewToolbarsMenu.accesskey     "T"> 
 <!ENTITY viewSidebarMenu.label "Sidebar">
 <!ENTITY viewSidebarMenu.accesskey "e">
 <!ENTITY viewCustomizeToolbar.label       "Customize…"> 
 <!ENTITY viewCustomizeToolbar.accesskey     "C">
--- a/browser/locales/en-US/chrome/browser/browser.properties
+++ b/browser/locales/en-US/chrome/browser/browser.properties
@@ -156,8 +156,19 @@ geolocation.requestMessage=%S wants to k
 safebrowsing.getMeOutOfHereButton.label=Get me out of here!
 safebrowsing.getMeOutOfHereButton.accessKey=G
 safebrowsing.reportedWebForgery=Reported Web Forgery!
 safebrowsing.notAForgeryButton.label=This isn't a web forgery…
 safebrowsing.notAForgeryButton.accessKey=F
 safebrowsing.reportedAttackSite=Reported Attack Site!
 safebrowsing.notAnAttackButton.label=This isn't an attack site…
 safebrowsing.notAnAttackButton.accessKey=A
+
+# Private Browsing Confirmation dialog
+# LOCALIZATION NOTE (privateBrowsingMessage): %S will be replaced
+# by the name of the application.
+# LOCALIZATION NOTE (privateBrowsingYesTitle, privateBrowsingNoTitle, privateBrowsingNeverAsk):
+# Access keys are specified by prefixing the desired letter with an ampersand.
+privateBrowsingDialogTitle=Start Private Browsing
+privateBrowsingMessage=%S will save your current tabs for when you are done with your Private Browsing session.
+privateBrowsingYesTitle=&Start Private Browsing
+privateBrowsingNoTitle=&Cancel
+privateBrowsingNeverAsk=&Do not show this message again
--- a/browser/locales/jar.mn
+++ b/browser/locales/jar.mn
@@ -1,14 +1,15 @@
 #filter substitution
 
 @AB_CD@.jar:
 % locale browser @AB_CD@ %locale/browser/
     locale/browser/aboutCertError.dtd              (%chrome/browser/aboutCertError.dtd)
     locale/browser/aboutDialog.dtd                 (%chrome/browser/aboutDialog.dtd)
+    locale/browser/aboutPrivateBrowsing.dtd        (%chrome/browser/aboutPrivateBrowsing.dtd)
     locale/browser/aboutRights.dtd                 (%chrome/browser/aboutRights.dtd)
     locale/browser/aboutRights.properties          (%chrome/browser/aboutRights.properties)
     locale/browser/aboutRobots.dtd                 (%chrome/browser/aboutRobots.dtd)
     locale/browser/aboutSessionRestore.dtd         (%chrome/browser/aboutSessionRestore.dtd)
     locale/browser/credits.dtd                     (%chrome/browser/credits.dtd)
 *   locale/browser/browser.dtd                     (%chrome/browser/browser.dtd)
     locale/browser/baseMenuOverlay.dtd             (%chrome/browser/baseMenuOverlay.dtd)
     locale/browser/browser.properties              (%chrome/browser/browser.properties)
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cff4ddcc8f7cbe6ba6e4838e9bff447ea03dbfe2
GIT binary patch
literal 713
zc$@*r0yh1LP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOW8
z6#xOHC0*hG000PdMObu0Z*6U5Zgc?l%$C0Z00K2hL_t(I%Z-yyNK|1I#eeskDYPhz
zTvQBhf@~F05I8fHQ;QJ7nWFkM3c^LXh^$2$i5AtSjgVwSE}}*G23$Nxsg3DGpIMY`
zN@)`W5>#4=frZSx+oESoIfZ9=IOp8U{Uek?Hj#-T>;Y<lC@_g?UJJo^)3bgp)yf~n
zWM&<35vT-xpvoH&iXb(>P9O$cv(6t|6yPN@TLjucuUOajx?E>oJX0lxONx#*xxSv?
z0b%7%R8QKGz8U_5dv*IGkx29^FkqdZUkK;|x~%gjSOUC6x<W*5E3`zjiA)SI*7+03
zY{~&&Kt<sls^>+_CcpzGfR&0q>@0rmXuGjyK#&F#PJ1v6j{#>2=m9}$M9jf(3v<p6
z9}0rth(Mb$X1%Ho0`=zCs&u@x#i#aB0hj_-ht!H>Hnq)&>{H~e!pz+K>?c*NHb7LB
z(%rTvv#DFaW<~vwTLsi3vQ=OTk!3B<^C}`y156@PTM}>w^m3rOcf{sDgxp7GhdZ1d
zz5q-M9QNXk)xd02Rr4a!3gklZduQ{L<)$C^c2@u!fgy}Zpu8{?f^lGjmq^EeSHS#V
zzVE<%GMnl(V(y|kv}1I6zrb;X-i15Z4x9@#IMF<kD=gs-&Wgwn>-?Jrz&d|S(fdZs
z^=v#{@lRti6Y&!1(+II5L3g=lss~O1eh>tM%};Wl0eTXRRYpu5a13}{B<Mcsa>Ydf
vVU<dO24I(}t`(6e@D1f9La%lHbgBL)C9B|MWB%}@00000NkvXXu0mjf66h;}
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..507a6c45a5ca19fddd9a23cb0c4ed6d942ac0d38
GIT binary patch
literal 1722
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
QL;wH)07*qoM6N<$f>nAf4FCWD
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..016767de7c4aa2bb42aee6aed7f692cae084003c
GIT binary patch
literal 3013
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
Hu0mjf;$FvS
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..da73e8b16c00cca7f0bb238bcfe3399c306e48b0
GIT binary patch
literal 3961
zc$@)w4~FoGP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOW8
z6#yxako6b<000PdMObu0Z*6U5Zgc?l%$C0Z01o9zL_t(|+U1*ja8*^7#(!&{dy`xU
z0R;>ysOU5g8`S0z9*Ih@6zzsY(Kg|!qdiVrJySi?U5;Z-%~bVtRrj=ZS65eC?PG=>
z1qq2GD8cu%JVOWpq7zXbf^X3%B7}q+l6%fKf1Hyh2}uYV1*%uo{p0L&&pvytv)10<
zxAxlb7cTa7zhKFf>*8@QBNHrvECZBg5EsPE%td36q`)90XaQ@+)C5Yl_)QH9Hoe?(
zMjBwzxGVc45?Q01#m0e+MqF$#6qGIKZ)TZ*16m{{4Gw|T2|mPl8?+-(swSDN-+5=v
zh9jq?0hZ+z+MJ4&YP~L<G;0u^n~vFJGbRG(0)2sgK%XAIGXRo61JDTUlh}e(g&(Xg
z-n?pmSMNV%9<VI0aJ*rc8B9Qo#~20lk8U3Z?FKsl)B}xzqew|J1jK<DSOUlb&O)4x
zF&N1Hb01;{#x}tgq1rhWE4Q6e4_KBrGsEz*z{UV`f!PLUMYs0@2Y?SGZ8uYOAofZ2
zxkP=7&yl7hhZ@r3N0gD?Hx1I#@X|BE4Fa-F8iL~j;8I|OVFQ8l023SpRsc&u+l600
zr{dYBFQY^3t69&D18z6C2^bVLH%hz?!3sa+KY#Ra<DNU-Tzm8cT{X2a+PfWZJ~A%<
ztbU2iYn^#>4RS4f*BwBC;Az7>22_4y9#ArQR>FDiZZj(aCPWiio#1ic6~tZ<)E_<E
z@Wt)5t5dxZVoP&pX2mRab|4J_#yjj5jA_yBYDr~*A3QX-YE|-UH9$#T!DxrwY}f)|
z1n6_Y^M<VpVBMUGXZC#UOY5XrXQg>=lFV)}<5pk@uv=(JfR@j#DBscR23R)!+E|d0
z812k{XxIXSzMx%_{>N8PGOzO4UEef_Su$Z}c0AqPW@dj4HbT%Sv?P!oc1_70bGH3&
zs#grKZ2Yw`i>G}HFZO_$T@Uz@Hu~_Bc^g;0cB;`_$>dp=JJ0>r%yI!w(u?@1d(_hW
z)`^VZdh&uGBQZKseg=>X<ITUj?%)@-rvsdQ_v8Jqrxg59(&NA(Gn;`IdmzY2jQ+|V
zP?A@0sbN2I*j+#psWgCx=WJYAbGqUBk|{ICIM4gLXnsl$&?7<*b~h(@C!Fn_yVI~A
z8N?(#h4lM5mF2IVj>Km9hr2($Y1qh5%xr+cNU$*m2WOu*V$1Rmcc)G|1f1vYHf+8@
zrli*-|Ni3BRQXn!x3PR{DhPfivEHDMVe_5m?mj6X6e2t~&afh2B<QWc_kY^boZNjT
zP~3fWsl7u7r`_kpcnlb8X2qp>1yv%b>4+FzM`9CB3|<!4?Z8CfQ%Or|s-E3&Tg@xY
zXMzF#Y47vF+^T14B>fTiAk@Qd5A`~x=Wzx&#;R<LVK)ILQSSRJ{xyg*Oqx^8i-lH%
zAJuM(I16prqw9>-MZ{(h@U|K2=2exy2as2mZ)cJL7H)pw0I*iDCDLbJq+i!_fMJ&b
zvjK!2m$a_+UPaLw<(1`61FmmFU^<8d_&^h~gF^d6u&1(k{R!ufyt4eefZ;%Q<jF@g
z1BV5l1!#B5j_lr2RGkF4X2lKm%Ip_(Y&6a5jrcIkO$^zpRRG&M#Q~+0W(~5q_wT^n
zf_+HE#T!>{=rG9t0PgKxmFWGlPla}1YzhKiHdAe)U&Db{zPC+X7+_b(FX&14je<R(
zN=$3OHZ>k?-1pkTEkVb>m*vhH58hIYk-)=h@&C0osnR|KJU1ONA+)mAcScRS{_-91
zm4R`NnO$wzKYPZL2H#IM^c~#IgY`XTFh*Z9E;qBg4fincFB!4)p`F{yeI)c^=#@;s
zbJIJY1I#8znVdS%vq(J|(4*l}$wXj+0!<A3;OaoZ0?=~ci>U8GnEji{icThsfl*Q4
z6BTHJ{2*5fZV|d4sV@58*@oTfxmeNElB+H_K4$#-06hoPVT{6T@^N#(qH$ODiE?=T
zB;HHG+WD2`hk7u`cPfh392ehLES}V-Z+c?4!Dqm&(IC$iT${V}>Ma}Rt*h!m-_;dG
zYmQ@?V}Cc?%gi3O-Qj$Lo1?Hf+l&I7+X1}a9vnS;<ni&>RC$TakH9W8BWKaLEBoA8
zv*CzqO<gAvS)-zq6QJF-@No~nQbuQuuPxksWMk3VYNW+cI7N<NWANOJ9`@a@v&Pqd
z{Eok=c>S)Hlpc|2Ysd*^T+-Pyw{3gnFyf8q^1MVMYt)h{*To$`+{?%eQ`htbKEbHH
ze`9&j8%t3OsW)V-YSVN+#-+W{clG>r?*SjR3HA&`W;c)gAFv0=bQT*I_cAi0IlvNN
zqk&9?Dd@L)Yc1YfTv3nDJ8hcMfOC2;v9DAIZmVwA&%J_uKxU|~C0w*zWgspF`WWmt
z*+;zzNKACt)KGeF^gF(Eaz9{T8w7GF${2T^*YN#!kUjwth>MYBL>{2DaK{D%J~#Qj
zY5*C1I+)~Wk0Yon&{TS5{|rmajDTBfzZDW)rskUc#(fwEB4-&2N^{Xg929Lp=%61o
zecD^fPb$sJ!ee;baR5E-Ki;un#DlqMla^gQ9IOy=FOV1AI)rISK(MK+&hFT<_Aqcb
z(lgs29*cq|2J{a@$daGzJlxP*28iKZ3e0TFR*`y|wOyQ7mS5i?apR(Sq@PIx!aWGq
z1_94us;-)|zWY7IKus7Z+_j3uqNT|Ji3tA(KRHx&GAlr*$S|km%0%4r#uzLByXx3P
zt?h!BdH{9}=su@shDm7>N#76lR4-Wn1wd}uG}~CTR$V-EG}1W%xL7CYv6H2}!}H4W
zM-cAm3CRQrj9~_aVAmX*sPqZ&r^@2Bn|he5+!4WJufshr`e50ZWgFzj<L*#y>9kem
zY*)ptYnr>ZnYGo|V(nH5aHwaQ;x=+u^gH%dI{&1f8~ofNe%@0kTv4=UYukoP{wv$-
zpK($DG_TLMVvd`ELX3%qO%zO&_#Lpe2lI*#$c4*?0!h)9lBGX1=7zpK9AMBLT@%_b
zv>}jw<@>rd@b%=tEb2}QM|F_BKdAF-=5Icb3V0Rxg`@|Oc1NyJ2;4knS^kCH#8z6Q
zb5c?eiylk?hkz_hS^YBIV8VU*6N!tg{bK7J(wYyDIEryl;^RQPRW*0*m)SXrcXeay
zyfw{0^OR**z39vhw~!B*!IjSR8nCG2GY^cpJ}pAKgvA)7T33M<!|H%xU;~`zozn#s
z?o3{+C|dKYQ<e33tL3A&N2CwkVAwylMv1{yof+WV%-Fg7dHde#gj!mmaI@e;ATSu{
z%$;`<V@RCJwAcQHdwt2Z#TA({8`kNP>};5!!I7JO2-fT(tlAXT<j_c1(sId}l>1W{
z!fls{jLw%9y9kjD9Km=SQ&TGxPJ(tsC}}v-<!6!sJTag{Rx;T+B)4y4c44Tec7T!&
zpv7-$2$ZS;j)aEd;>8mR`=1HQ=Pk`2Vn!Q2KqFx|x07GwOpReS1~?mN43w&A@tYbP
zz=BOLw<MGGJAqFkR~ZtEbJ>!d!i>}20x?a*C~VX6HmF_k)UU@)c0;`Z7Z_X|HGP~+
z*6&=f>E)I`gPuEUHXM=ILP#gib{;e0Y3*I>6iAmj$%!TT7vz>+{Wrir0F&DIf3=i)
zs_lQz&lo%)&0;emL|QMgrM2!b)*+=|1vVLD3ZgiLU)t&wr$~O9SC;=yo3xuEw3?7{
zj^V}=R*^X%Kza`8$;vqu``Ys#2E?2d1KEhpp`IO*q9Hg8RulKG2Bw(VB~EVqqNy|9
zy|ePAh7RC|Zmz$I#5;l6oiYV$?<Jo~>_pt}Cxdp$*89dza?ZI+G5b#R>^4%t>P`(%
zym{6B(!3kD8hj26blA)U>3e{U-N4_V7Y)#pn&3cTe*a(y*0fCu)-<#ne7SaE?Q!UJ
zY`^SpoAF(spTfGut!*n!W5=(lss($-;7-D=r0Na^cocXcA`>3r?rU$!!iZJ+-7fng
z2>+v_f(D^Oohcu>r%f|#VRZR)sNeClvz?UY-8kK#3>YNo6-mFHQ(698URl0X6s<Xq
zE_c;_s-<+wjg!rBFUF0)enC-j#WSnBjNfDX=GrdwG|+5j)6HydS<cLXT`74wD*wc|
znVIIa5Mu_=66&Mv?e*-UK0x^OpvQpMB8GJ>F|Tl0&djsU1aS03PC=%Z;cke&d;)kC
z^jN4@`}%-ROJt%llFHKD!ZI`KhuLW0mpFSL_|xfb0O#4|=J*ZRxxh|IWyKrIE4$+J
zT~D`u@Q_f6paJ6?i+Mj=mRoTB>8$*+sRh?~&VFv#uxNr@8u-COUGj+TI$QqX?$qoH
zM(zjF47<YMBFy^VGHm2$PkpfK?bA*9rBe%TaAtoW6?8TW{ZVM~+{#rSpD6j*eaE>4
zV?FGbW;Q*FskMP0+?(=SY8O<$&~&O5UzBrwMur!^!gJnl%$Q18&AQr0_s!c_{`!eh
zS|^UFrsNL%)IE|`M_^@|Irn5N9-sE$`0?JURQ?Blb(u@V(x!UO{kIuY2+tp_#!ubj
znvy5nfA})h;(u${Z3dZ$y-0shOKMT^mgf$A)5@3T-I#+kAFR-f3j~LS76;O!t||Fu
zuT_h;m6E)IOC2`buz7^l8}B1lfGT}oFU_qgum8Fge`3naA)fQT>&$Kdz88h%E}<s^
zv|?^W`I|lMt2a)J<V4NeCH)>zX=b0Ljs{=M+gjdhg_R|_g;~zXLYxQWWA<YU(|0ML
z<{LXP(%uCNriK-m7M>ZB0Cs|{417JUK(%wL%adPK`NzI9YfyS$cb&lu!=?ePbwK+g
zg!fo+MfsOHGxU`XO^Kk!@b(Bwfq9tCwlFL%bTRwB;Qi9v!desC0tIihsQI0RRWBXr
zuFwA*Gd-<eR-a2SH&)n4gUieqNqB1P93U3e04xVefbAmq(qZ>?oEywROpL0{`T{M8
zotWMO>VPj0hZP=*Okp^~(j+o4(hT~8hJalt7#g`bgy#l#Vr)Ha&JDH_i*8Pi<^bmd
znS=#T>Bo{!3V^_j7#LDWI@-vQC`)~2oE+^Gp!_AA9X^qq;Pkk6%pp$A>GA&uJ)D-1
Tcf{3600000NkvXXu0mjfO7o&&
new file mode 100644
--- /dev/null
+++ b/browser/themes/gnomestripe/browser/aboutPrivateBrowsing.css
@@ -0,0 +1,53 @@
+%if 0
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Private Browsing.
+ *
+ * The Initial Developer of the Original Code is
+ * Ehsan Akhgari <ehsan.akhgari@gmail.com>
+ * Portions created by the Initial Developer are Copyright (C) 2008
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+%endif
+
+#errorPageContainer {
+  background-image: url("chrome://browser/skin/Privacy-48.png");
+}
+
+#clearRecentHistoryDesc {
+  margin-top: 2em;
+}
+
+#clearRecentHistoryDesc > button {
+  -moz-margin-start: 0;
+}
+
+#enjoyDesc {
+  margin-top: 2em;
+}
--- a/browser/themes/gnomestripe/browser/jar.mn
+++ b/browser/themes/gnomestripe/browser/jar.mn
@@ -1,24 +1,29 @@
 classic.jar:
 % skin browser classic/1.0 %skin/classic/browser/
+* skin/classic/browser/aboutPrivateBrowsing.css             (aboutPrivateBrowsing.css)
 * skin/classic/browser/aboutSessionRestore.css        (aboutSessionRestore.css)
   skin/classic/browser/aboutCertError.css             (aboutCertError.css)
 * skin/classic/browser/browser.css                    (browser.css)
   skin/classic/browser/browser.xml
 * skin/classic/browser/engineManager.css              (engineManager.css)
   skin/classic/browser/Go-arrow.png
   skin/classic/browser/Go-arrow-rtl.png
   skin/classic/browser/identity.png
   skin/classic/browser/Info.png
   skin/classic/browser/monitor.png
   skin/classic/browser/monitor_16-10.png
 * skin/classic/browser/pageInfo.css
   skin/classic/browser/pageInfo.png
   skin/classic/browser/page-livemarks.png
+  skin/classic/browser/Privacy-16.png
+  skin/classic/browser/Privacy-32.png
+  skin/classic/browser/Privacy-48.png
+  skin/classic/browser/Privacy-64.png
   skin/classic/browser/searchbar.css                  (searchbar.css)
   skin/classic/browser/Search-glass.png
   skin/classic/browser/Search-glass-rtl.png
   skin/classic/browser/section_collapsed.png
   skin/classic/browser/section_expanded.png
   skin/classic/browser/Secure.png
   skin/classic/browser/Security-broken.png
   skin/classic/browser/setDesktopBackground.css
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cff4ddcc8f7cbe6ba6e4838e9bff447ea03dbfe2
GIT binary patch
literal 713
zc$@*r0yh1LP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOW8
z6#xOHC0*hG000PdMObu0Z*6U5Zgc?l%$C0Z00K2hL_t(I%Z-yyNK|1I#eeskDYPhz
zTvQBhf@~F05I8fHQ;QJ7nWFkM3c^LXh^$2$i5AtSjgVwSE}}*G23$Nxsg3DGpIMY`
zN@)`W5>#4=frZSx+oESoIfZ9=IOp8U{Uek?Hj#-T>;Y<lC@_g?UJJo^)3bgp)yf~n
zWM&<35vT-xpvoH&iXb(>P9O$cv(6t|6yPN@TLjucuUOajx?E>oJX0lxONx#*xxSv?
z0b%7%R8QKGz8U_5dv*IGkx29^FkqdZUkK;|x~%gjSOUC6x<W*5E3`zjiA)SI*7+03
zY{~&&Kt<sls^>+_CcpzGfR&0q>@0rmXuGjyK#&F#PJ1v6j{#>2=m9}$M9jf(3v<p6
z9}0rth(Mb$X1%Ho0`=zCs&u@x#i#aB0hj_-ht!H>Hnq)&>{H~e!pz+K>?c*NHb7LB
z(%rTvv#DFaW<~vwTLsi3vQ=OTk!3B<^C}`y156@PTM}>w^m3rOcf{sDgxp7GhdZ1d
zz5q-M9QNXk)xd02Rr4a!3gklZduQ{L<)$C^c2@u!fgy}Zpu8{?f^lGjmq^EeSHS#V
zzVE<%GMnl(V(y|kv}1I6zrb;X-i15Z4x9@#IMF<kD=gs-&Wgwn>-?Jrz&d|S(fdZs
z^=v#{@lRti6Y&!1(+II5L3g=lss~O1eh>tM%};Wl0eTXRRYpu5a13}{B<Mcsa>Ydf
vVU<dO24I(}t`(6e@D1f9La%lHbgBL)C9B|MWB%}@00000NkvXXu0mjf66h;}
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..507a6c45a5ca19fddd9a23cb0c4ed6d942ac0d38
GIT binary patch
literal 1722
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
QL;wH)07*qoM6N<$f>nAf4FCWD
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..016767de7c4aa2bb42aee6aed7f692cae084003c
GIT binary patch
literal 3013
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
Hu0mjf;$FvS
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..da73e8b16c00cca7f0bb238bcfe3399c306e48b0
GIT binary patch
literal 3961
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
Tcf{3600000NkvXXu0mjfO7o&&
new file mode 100644
--- /dev/null
+++ b/browser/themes/pinstripe/browser/aboutPrivateBrowsing.css
@@ -0,0 +1,53 @@
+%if 0
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Private Browsing.
+ *
+ * The Initial Developer of the Original Code is
+ * Ehsan Akhgari <ehsan.akhgari@gmail.com>
+ * Portions created by the Initial Developer are Copyright (C) 2008
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+%endif
+
+#errorPageContainer {
+  background-image: url("chrome://browser/skin/Privacy-48.png");
+}
+
+#clearRecentHistoryDesc {
+  margin-top: 2em;
+}
+
+#clearRecentHistoryDesc > button {
+  -moz-margin-start: 0;
+}
+
+#enjoyDesc {
+  margin-top: 2em;
+}
--- a/browser/themes/pinstripe/browser/jar.mn
+++ b/browser/themes/pinstripe/browser/jar.mn
@@ -1,10 +1,11 @@
 classic.jar:
 % skin browser classic/1.0 %skin/classic/browser/
+* skin/classic/browser/aboutPrivateBrowsing.css             (aboutPrivateBrowsing.css)
 * skin/classic/browser/aboutSessionRestore.css              (aboutSessionRestore.css)
   skin/classic/browser/aboutCertError.css                   (aboutCertError.css)
   skin/classic/browser/bookmark_toolbar_background.png
   skin/classic/browser/bookmark-open-left.png
   skin/classic/browser/bookmark-open-mid.png
   skin/classic/browser/bookmark-open-right.png
 * skin/classic/browser/browser.css                          (browser.css)
   skin/classic/browser/contextDialogBackground.png
@@ -31,16 +32,20 @@ classic.jar:
   skin/classic/browser/KUI-background.png
   skin/classic/browser/menu-back.png
   skin/classic/browser/menu-forward.png
   skin/classic/browser/page-livemarks.png
   skin/classic/browser/livemark-item.png
   skin/classic/browser/pageInfo.css
   skin/classic/browser/pageInfo.png
   skin/classic/browser/Popup-blocked.png
+  skin/classic/browser/Privacy-16.png
+  skin/classic/browser/Privacy-32.png
+  skin/classic/browser/Privacy-48.png
+  skin/classic/browser/Privacy-64.png
   skin/classic/browser/searchbar.css
   skin/classic/browser/Search.png
   skin/classic/browser/Search-addengines.png
   skin/classic/browser/Search-bar.png
   skin/classic/browser/search-bar-background-left.png
   skin/classic/browser/search-bar-background-mid.png
   skin/classic/browser/search-bar-background-right.png
   skin/classic/browser/section_collapsed.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cff4ddcc8f7cbe6ba6e4838e9bff447ea03dbfe2
GIT binary patch
literal 713
zc$@*r0yh1LP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOW8
z6#xOHC0*hG000PdMObu0Z*6U5Zgc?l%$C0Z00K2hL_t(I%Z-yyNK|1I#eeskDYPhz
zTvQBhf@~F05I8fHQ;QJ7nWFkM3c^LXh^$2$i5AtSjgVwSE}}*G23$Nxsg3DGpIMY`
zN@)`W5>#4=frZSx+oESoIfZ9=IOp8U{Uek?Hj#-T>;Y<lC@_g?UJJo^)3bgp)yf~n
zWM&<35vT-xpvoH&iXb(>P9O$cv(6t|6yPN@TLjucuUOajx?E>oJX0lxONx#*xxSv?
z0b%7%R8QKGz8U_5dv*IGkx29^FkqdZUkK;|x~%gjSOUC6x<W*5E3`zjiA)SI*7+03
zY{~&&Kt<sls^>+_CcpzGfR&0q>@0rmXuGjyK#&F#PJ1v6j{#>2=m9}$M9jf(3v<p6
z9}0rth(Mb$X1%Ho0`=zCs&u@x#i#aB0hj_-ht!H>Hnq)&>{H~e!pz+K>?c*NHb7LB
z(%rTvv#DFaW<~vwTLsi3vQ=OTk!3B<^C}`y156@PTM}>w^m3rOcf{sDgxp7GhdZ1d
zz5q-M9QNXk)xd02Rr4a!3gklZduQ{L<)$C^c2@u!fgy}Zpu8{?f^lGjmq^EeSHS#V
zzVE<%GMnl(V(y|kv}1I6zrb;X-i15Z4x9@#IMF<kD=gs-&Wgwn>-?Jrz&d|S(fdZs
z^=v#{@lRti6Y&!1(+II5L3g=lss~O1eh>tM%};Wl0eTXRRYpu5a13}{B<Mcsa>Ydf
vVU<dO24I(}t`(6e@D1f9La%lHbgBL)C9B|MWB%}@00000NkvXXu0mjf66h;}
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..507a6c45a5ca19fddd9a23cb0c4ed6d942ac0d38
GIT binary patch
literal 1722
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
QL;wH)07*qoM6N<$f>nAf4FCWD
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..016767de7c4aa2bb42aee6aed7f692cae084003c
GIT binary patch
literal 3013
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
Hu0mjf;$FvS
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..da73e8b16c00cca7f0bb238bcfe3399c306e48b0
GIT binary patch
literal 3961
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
Tcf{3600000NkvXXu0mjfO7o&&
new file mode 100644
--- /dev/null
+++ b/browser/themes/winstripe/browser/aboutPrivateBrowsing.css
@@ -0,0 +1,53 @@
+%if 0
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Private Browsing.
+ *
+ * The Initial Developer of the Original Code is
+ * Ehsan Akhgari <ehsan.akhgari@gmail.com>
+ * Portions created by the Initial Developer are Copyright (C) 2008
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+%endif
+
+#errorPageContainer {
+  background-image: url("chrome://browser/skin/Privacy-48.png");
+}
+
+#clearRecentHistoryDesc {
+  margin-top: 2em;
+}
+
+#clearRecentHistoryDesc > button {
+  -moz-margin-start: 0;
+}
+
+#enjoyDesc {
+  margin-top: 2em;
+}
--- a/browser/themes/winstripe/browser/jar.mn
+++ b/browser/themes/winstripe/browser/jar.mn
@@ -1,26 +1,31 @@
 classic.jar:
 % skin browser classic/1.0 %skin/classic/browser/ os=WINNT osversion<6
 % skin browser classic/1.0 %skin/classic/browser/ os!=WINNT
 # NOTE: If you add a new file here, you'll need to add it to the aero
 # section at the bottom of this file
+*       skin/classic/browser/aboutPrivateBrowsing.css                (aboutPrivateBrowsing.css)
 *       skin/classic/browser/aboutSessionRestore.css                 (aboutSessionRestore.css)
         skin/classic/browser/aboutCertError.css                      (aboutCertError.css)
 *       skin/classic/browser/browser.css                             (browser.css)
 *       skin/classic/browser/engineManager.css                       (engineManager.css)
         skin/classic/browser/Info.png                                (Info.png)
         skin/classic/browser/identity.png                            (identity.png)
         skin/classic/browser/KUI-background.png
         skin/classic/browser/pageInfo.css
         skin/classic/browser/pageInfo.png                            (pageInfo.png)
         skin/classic/browser/page-livemarks.png                      (feeds/feedIcon16.png)
         skin/classic/browser/livemark-item.png                       (livemark-item.png)
         skin/classic/browser/livemark-folder.png                     (livemark-folder.png)
         skin/classic/browser/Bookmarks-folder.png                    (Bookmarks-folder.png)
+        skin/classic/browser/Privacy-16.png
+        skin/classic/browser/Privacy-32.png
+        skin/classic/browser/Privacy-48.png
+        skin/classic/browser/Privacy-64.png
         skin/classic/browser/Secure.png                              (Secure.png)
         skin/classic/browser/Secure24.png                            (Secure24.png)
         skin/classic/browser/Security-broken.png                     (Security-broken.png)
         skin/classic/browser/Throbber.gif
         skin/classic/browser/Throbber.png
         skin/classic/browser/Throbber-small.png
         skin/classic/browser/Toolbar.png                             (Toolbar.png)
         skin/classic/browser/Toolbar-small.png                       (Toolbar-small.png)
@@ -88,29 +93,34 @@ classic.jar:
         skin/classic/browser/tabbrowser/tab-hover-bkgnd.png                     (tabbrowser/tab-hover-bkgnd.png)
         skin/classic/browser/tabbrowser/tabstrip-bottom.png                     (tabbrowser/tabstrip-bottom.png)
         icon.png
         preview.png
 
 #ifdef XP_WIN
 classic.jar:
 % skin browser classic/1.0 %skin/classic/aero/browser/ os=WINNT osversion>=6
+*       skin/classic/aero/browser/aboutPrivateBrowsing.css           (aboutPrivateBrowsing.css)
 *       skin/classic/aero/browser/aboutSessionRestore.css            (aboutSessionRestore.css)
         skin/classic/aero/browser/aboutCertError.css                 (aboutCertError.css)
 *       skin/classic/aero/browser/browser.css                        (browser-aero.css)
 *       skin/classic/aero/browser/engineManager.css                  (engineManager.css)
         skin/classic/aero/browser/Info.png                           (Info-aero.png)
         skin/classic/aero/browser/identity.png                       (identity-aero.png)
         skin/classic/aero/browser/KUI-background.png
         skin/classic/aero/browser/pageInfo.css
         skin/classic/aero/browser/pageInfo.png                       (pageInfo-aero.png)
         skin/classic/aero/browser/page-livemarks.png                 (feeds/feedIcon16-aero.png)
         skin/classic/aero/browser/livemark-item.png                  (livemark-item-aero.png)
         skin/classic/aero/browser/livemark-folder.png                (livemark-folder-aero.png)
         skin/classic/aero/browser/Bookmarks-folder.png               (Bookmarks-folder-aero.png)
+        skin/classic/aero/browser/Privacy-16.png
+        skin/classic/aero/browser/Privacy-32.png
+        skin/classic/aero/browser/Privacy-48.png
+        skin/classic/aero/browser/Privacy-64.png
         skin/classic/aero/browser/Secure.png                         (Secure-aero.png)
         skin/classic/aero/browser/Secure24.png                       (Secure24-aero.png)
         skin/classic/aero/browser/Security-broken.png                (Security-broken-aero.png)
         skin/classic/aero/browser/Throbber.gif
         skin/classic/aero/browser/Throbber.png
         skin/classic/aero/browser/Throbber-small.png
         skin/classic/aero/browser/Toolbar.png                        (Toolbar-aero.png)
         skin/classic/aero/browser/Toolbar-small.png                  (Toolbar-small-aero.png)
--- a/netwerk/base/public/nsIPrivateBrowsingService.idl
+++ b/netwerk/base/public/nsIPrivateBrowsingService.idl
@@ -32,25 +32,30 @@
  * and other provisions required by the GPL or the LGPL. If you do not delete
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 
 #include "nsISupports.idl"
 
-[scriptable, uuid(d2943870-c781-11dc-95ff-0800200c9a66)]
+[scriptable, uuid(effb626c-676f-4c9d-b6ca-70696787901a)]
 interface nsIPrivateBrowsingService : nsISupports
 {
     // When read, determines whether the private browsing mode is currently
     // active.  Setting to true enters the private browsing mode, and setting
     // to false leaves the private browsing mode.
     // Setting this value while handling one of the notifications generated
     // by the private browsing service throws NS_ERROR_FAILURE.
     attribute boolean privateBrowsingEnabled;
+
+    // Determine whether the private browsing mode has been started
+    // automatically at application startup.
+    // This value will never be true if privateBrowsingEnabled is false.
+    readonly attribute boolean autoStarted;
 };
 
 %{C++
 /**
  * Private Browsing service notifications:
  *
  * - NS_PRIVATE_BROWSING_REQUEST_TOPIC:
  *   The data parameter determines which kind of request this represents: