From a85f4c93fab887982f14c881073417ee211b3f18 Mon Sep 17 00:00:00 2001 From: Ehsan Akhgari Date: Tue, 4 Nov 2008 02:52:23 +0330 Subject: [PATCH] Bug 411929 - Private Browsing UI; r=mconnor,bzbarsky sr=bzbarsky --- browser/app/profile/firefox.js | 3 + browser/base/content/browser-menubar.inc | 6 + browser/base/content/browser-sets.inc | 1 + browser/base/content/browser.js | 117 ++++++++++++++++-- browser/base/content/browser.xul | 6 +- .../content/aboutPrivateBrowsing.xhtml | 99 +++++++++++++++ browser/components/privatebrowsing/jar.mn | 2 + .../privatebrowsing/src/Makefile.in | 5 +- .../src/aboutPrivateBrowsing.js | 63 ++++++++++ .../src/nsPrivateBrowsingService.js | 27 +++- .../browser/browser_privatebrowsing_ui.js | 110 +++++++++++++++- .../test/unit/test_0-privatebrowsing.js | 4 + .../unit/test_privatebrowsing_autostart.js | 12 ++ browser/installer/unix/packages-static | 1 + browser/installer/windows/packages-static | 1 + .../chrome/browser/aboutPrivateBrowsing.dtd | 13 ++ .../locales/en-US/chrome/browser/browser.dtd | 6 + .../en-US/chrome/browser/browser.properties | 11 ++ browser/locales/jar.mn | 1 + .../themes/gnomestripe/browser/Privacy-16.png | Bin 0 -> 713 bytes .../themes/gnomestripe/browser/Privacy-32.png | Bin 0 -> 1722 bytes .../themes/gnomestripe/browser/Privacy-48.png | Bin 0 -> 3013 bytes .../themes/gnomestripe/browser/Privacy-64.png | Bin 0 -> 3961 bytes .../browser/aboutPrivateBrowsing.css | 53 ++++++++ browser/themes/gnomestripe/browser/jar.mn | 5 + .../themes/pinstripe/browser/Privacy-16.png | Bin 0 -> 713 bytes .../themes/pinstripe/browser/Privacy-32.png | Bin 0 -> 1722 bytes .../themes/pinstripe/browser/Privacy-48.png | Bin 0 -> 3013 bytes .../themes/pinstripe/browser/Privacy-64.png | Bin 0 -> 3961 bytes .../browser/aboutPrivateBrowsing.css | 53 ++++++++ browser/themes/pinstripe/browser/jar.mn | 5 + .../themes/winstripe/browser/Privacy-16.png | Bin 0 -> 713 bytes .../themes/winstripe/browser/Privacy-32.png | Bin 0 -> 1722 bytes .../themes/winstripe/browser/Privacy-48.png | Bin 0 -> 3013 bytes .../themes/winstripe/browser/Privacy-64.png | Bin 0 -> 3961 bytes .../browser/aboutPrivateBrowsing.css | 53 ++++++++ browser/themes/winstripe/browser/jar.mn | 10 ++ .../base/public/nsIPrivateBrowsingService.idl | 7 +- 38 files changed, 657 insertions(+), 17 deletions(-) create mode 100644 browser/components/privatebrowsing/content/aboutPrivateBrowsing.xhtml create mode 100644 browser/components/privatebrowsing/jar.mn create mode 100644 browser/components/privatebrowsing/src/aboutPrivateBrowsing.js create mode 100644 browser/locales/en-US/chrome/browser/aboutPrivateBrowsing.dtd create mode 100644 browser/themes/gnomestripe/browser/Privacy-16.png create mode 100644 browser/themes/gnomestripe/browser/Privacy-32.png create mode 100644 browser/themes/gnomestripe/browser/Privacy-48.png create mode 100644 browser/themes/gnomestripe/browser/Privacy-64.png create mode 100644 browser/themes/gnomestripe/browser/aboutPrivateBrowsing.css create mode 100644 browser/themes/pinstripe/browser/Privacy-16.png create mode 100644 browser/themes/pinstripe/browser/Privacy-32.png create mode 100644 browser/themes/pinstripe/browser/Privacy-48.png create mode 100644 browser/themes/pinstripe/browser/Privacy-64.png create mode 100644 browser/themes/pinstripe/browser/aboutPrivateBrowsing.css create mode 100644 browser/themes/winstripe/browser/Privacy-16.png create mode 100644 browser/themes/winstripe/browser/Privacy-32.png create mode 100644 browser/themes/winstripe/browser/Privacy-48.png create mode 100644 browser/themes/winstripe/browser/Privacy-64.png create mode 100644 browser/themes/winstripe/browser/aboutPrivateBrowsing.css diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index cac169ecd6c..15c442d39f5 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -794,3 +794,6 @@ 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); diff --git a/browser/base/content/browser-menubar.inc b/browser/base/content/browser-menubar.inc index 772923ccf67..7d62ce5c4a3 100644 --- a/browser/base/content/browser-menubar.inc +++ b/browser/base/content/browser-menubar.inc @@ -466,6 +466,12 @@ key="key_viewInfo" command="View:PageInfo"/> #endif + + diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index ed76bc52e23..2ef88d83331 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -1347,6 +1347,7 @@ function BrowserShutdown() 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); @@ -6745,20 +6746,22 @@ 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) { @@ -6768,21 +6771,119 @@ let gPrivateBrowsingUI = { 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() { diff --git a/browser/base/content/browser.xul b/browser/base/content/browser.xul index d28e7fdd9a6..9cbd47a5dc3 100644 --- a/browser/base/content/browser.xul +++ b/browser/base/content/browser.xul @@ -66,7 +66,11 @@ 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" diff --git a/browser/components/privatebrowsing/content/aboutPrivateBrowsing.xhtml b/browser/components/privatebrowsing/content/aboutPrivateBrowsing.xhtml new file mode 100644 index 00000000000..6fc77b5c94b --- /dev/null +++ b/browser/components/privatebrowsing/content/aboutPrivateBrowsing.xhtml @@ -0,0 +1,99 @@ + + + + %htmlDTD; + + %netErrorDTD; + + %globalDTD; + + %privatebrowsingpageDTD; +]> + + + + &privatebrowsingpage.tabtitle; + + + + + + + + +
+ + +
+

&privatebrowsingpage.pagetitle;

+
+ + +
+ + +
+

&privatebrowsingpage.issueDesc;

+
+ + +
+

&privatebrowsingpage.longDesc;

+
+ + +
+

&privatebrowsingpage.clearRecentHistoryDesc;

+
+ + +
+

&privatebrowsingpage.howToStopDesc;

+

&privatebrowsingpage.footerDesc;

+
+
+
+ + + diff --git a/browser/components/privatebrowsing/jar.mn b/browser/components/privatebrowsing/jar.mn new file mode 100644 index 00000000000..9e8aa38caba --- /dev/null +++ b/browser/components/privatebrowsing/jar.mn @@ -0,0 +1,2 @@ +browser.jar: +* content/browser/aboutPrivateBrowsing.xhtml (content/aboutPrivateBrowsing.xhtml) diff --git a/browser/components/privatebrowsing/src/Makefile.in b/browser/components/privatebrowsing/src/Makefile.in index a0707ab2fdc..50f27878e41 100644 --- a/browser/components/privatebrowsing/src/Makefile.in +++ b/browser/components/privatebrowsing/src/Makefile.in @@ -42,6 +42,9 @@ 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 diff --git a/browser/components/privatebrowsing/src/aboutPrivateBrowsing.js b/browser/components/privatebrowsing/src/aboutPrivateBrowsing.js new file mode 100644 index 00000000000..237c770f497 --- /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 + * 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]); diff --git a/browser/components/privatebrowsing/src/nsPrivateBrowsingService.js b/browser/components/privatebrowsing/src/nsPrivateBrowsingService.js index a2c824cbe4f..28ffbbc344c 100644 --- a/browser/components/privatebrowsing/src/nsPrivateBrowsingService.js +++ b/browser/components/privatebrowsing/src/nsPrivateBrowsingService.js @@ -75,6 +75,9 @@ PrivateBrowsingService.prototype = { // 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", @@ -126,8 +129,8 @@ PrivateBrowsingService.prototype = { // Close all windows this._closeAllWindows(); - // Open a single window - this._openSingleWindow(); + // Open about:privatebrowsing + this._openAboutPrivateBrowsing(); } } else { @@ -139,8 +142,9 @@ PrivateBrowsingService.prototype = { // 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; } } @@ -168,11 +172,14 @@ PrivateBrowsingService.prototype = { } }, - _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() { @@ -204,6 +211,7 @@ PrivateBrowsingService.prototype = { getService(Ci.nsIPrefBranch); this._autoStart = prefsService.getBoolPref("browser.privatebrowsing.autostart"); if (this._autoStart) { + this._autoStarted = true; this.privateBrowsingEnabled = true; this._autoStart = false; } @@ -249,6 +257,8 @@ PrivateBrowsingService.prototype = { return; } + if (!val) + this._autoStarted = false; this._inPrivateBrowsing = val != false; let data = val ? "enter" : "exit"; @@ -266,6 +276,13 @@ PrivateBrowsingService.prototype = { } finally { this._alreadyChangingMode = false; } + }, + + /** + * Whether private browsing has been started automatically. + */ + get autoStarted PBS_get_autoStarted() { + return this._autoStarted; } }; diff --git a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_ui.js b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_ui.js index bb8e8b17f84..2023c96e7b1 100644 --- a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_ui.js +++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_ui.js @@ -35,7 +35,8 @@ * * ***** 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 element work correctly. function test() { // initialization @@ -54,13 +55,120 @@ function test() { 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 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); } diff --git a/browser/components/privatebrowsing/test/unit/test_0-privatebrowsing.js b/browser/components/privatebrowsing/test/unit/test_0-privatebrowsing.js index 55f9f728a85..831881d71aa 100644 --- a/browser/components/privatebrowsing/test/unit/test_0-privatebrowsing.js +++ b/browser/components/privatebrowsing/test/unit/test_0-privatebrowsing.js @@ -66,12 +66,16 @@ function run_test() { // 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 = { diff --git a/browser/components/privatebrowsing/test/unit/test_privatebrowsing_autostart.js b/browser/components/privatebrowsing/test/unit/test_privatebrowsing_autostart.js index 1c315c6fc58..5d3346212dd 100644 --- a/browser/components/privatebrowsing/test/unit/test_privatebrowsing_autostart.js +++ b/browser/components/privatebrowsing/test/unit/test_privatebrowsing_autostart.js @@ -48,9 +48,21 @@ function run_test() { 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); } diff --git a/browser/installer/unix/packages-static b/browser/installer/unix/packages-static index 78c26bd3ffb..d4ae034d65b 100644 --- a/browser/installer/unix/packages-static +++ b/browser/installer/unix/packages-static @@ -229,6 +229,7 @@ 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 diff --git a/browser/installer/windows/packages-static b/browser/installer/windows/packages-static index 69b7aa68078..8ff04b5222c 100644 --- a/browser/installer/windows/packages-static +++ b/browser/installer/windows/packages-static @@ -236,6 +236,7 @@ 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 diff --git a/browser/locales/en-US/chrome/browser/aboutPrivateBrowsing.dtd b/browser/locales/en-US/chrome/browser/aboutPrivateBrowsing.dtd new file mode 100644 index 00000000000..1b05498e6be --- /dev/null +++ b/browser/locales/en-US/chrome/browser/aboutPrivateBrowsing.dtd @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/browser/locales/en-US/chrome/browser/browser.dtd b/browser/locales/en-US/chrome/browser/browser.dtd index 1473eef8d40..2b0caff888d 100644 --- a/browser/locales/en-US/chrome/browser/browser.dtd +++ b/browser/locales/en-US/chrome/browser/browser.dtd @@ -7,6 +7,9 @@ + + @@ -161,6 +164,9 @@ + + + diff --git a/browser/locales/en-US/chrome/browser/browser.properties b/browser/locales/en-US/chrome/browser/browser.properties index 0c84746c1c4..9e311b0e30d 100644 --- a/browser/locales/en-US/chrome/browser/browser.properties +++ b/browser/locales/en-US/chrome/browser/browser.properties @@ -161,3 +161,14 @@ 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 diff --git a/browser/locales/jar.mn b/browser/locales/jar.mn index 943a8709a23..1b81b30c675 100644 --- a/browser/locales/jar.mn +++ b/browser/locales/jar.mn @@ -4,6 +4,7 @@ % 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) diff --git a/browser/themes/gnomestripe/browser/Privacy-16.png b/browser/themes/gnomestripe/browser/Privacy-16.png new file mode 100644 index 0000000000000000000000000000000000000000..cff4ddcc8f7cbe6ba6e4838e9bff447ea03dbfe2 GIT binary patch literal 713 zcmV;)0yh1LP)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>;YP9O$cv(6t|6yPN@TLjucuUOajx?E>oJX0lxONx#*xxSv? z0b%7%R8QKGz8U_5dv*IGkx29^FkqdZUkK;|x~%gjSOUC6x+_CcpzGfR&0q>@0rmXuGjyK#&F#PJ1v6j{#>2=m9}$M9jf(3vHnq)&>{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-?Jrz&d|S(fdZs z^=v#{@lRti6Y&!1(+II5L3g=lss~O1eh>tM%};Wl0eTXRRYpu5a13}{BYdf vVUPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOW8 z6#x%Hop9v<000PdMObu0Z*6U5Zgc?l%$C0Z00t&WL_t(o!>yNpY}9ud$6xQyU8x*D zi*YjL$2PYFCK|`$pzXm{BiS+-*Z2p$mW}9)8)2A0nysMuz+&Jtz)TG#h2m>=wAS{k0X-#Y$wy|Or8YGI=@){# zu-8QJT4PsRksGuv)ypP?SnL_0MaHW!d(!2&VR*wyS|V6z`**g-1RS6#zwNxO4Zxd1 z-;|g=N(sW^8KpbNHlfnRp;zTApk5kRuFE(LrW@G#5)%t^~_#=CM2JO5QE7T&F_7`NSMnFh!9 zNEi|s;C`Sj-L>_dmE9Sa!S4mm00)7i;Dn^_ApKO4W)1_JUKXfN0&fj!1t*c`3H?~; z@tQ4*KelT3jtJ8#_&}zV4&}j$gBh`cv2zE0Vp{-2JS*EMobHd#MG)X`-9-OMj;RY z_O06Oe8bK&zze`>NuMWZ(&dD0_rv*OvFN`U{tZkKOay4kwfAB=fm;ysf*h*?ZXZ-C zUASU5ng0L-gYxUx|DBetdduQ*@wny)ZZbM*cz@`u5_w9%WJ zY^@srD$2LuS|Av2Hk=&cdk64HS>WPGAD4a9_F)BG%Fd&EI!i6JsUk2jUaoN%F+#)b zX`rv{Q(=4@*aWvh*iizIBp@EgE+P$JCT_lG zX>8SBwwFc({R!{}*oJZRpr}y$Wdbo}eF?EhzyoV^YP<)P;%=%>Y&a z)39^EndhsQjzd~FNGN(eJe=QAaOA%NlMxHA6L=^~^~u({my@k^9hEUUgTf2IXR&{e z{j08Y=ec-@O&26F`>}ckm8%rx39$p160H4J-{~L9pJsIAaDTq^(fgmYr7l! z)vm^!AC$ZQeqcW0YZRkXm+IS^tp7UjwC(TO&NSvS1;*G~s_Q2!@FxocP3i2`)A9dx zt207#B(1}o0bUwQ@aCFSmE<)@Hw&+8$hMsxv5@!_=C?o~=!xdq<hEp*6r<>~^5pk&dPFTQ7d( z6IZ9=u^68KEfzEZw}3a7@Gply`IQOOrs9L!s~$6aNpQmW6--AIl@2xKx1IR#i^#I6 zgxIZu1(Fs33k*kuHv;*grn_dDZBC}*LNjIR5%&V09=siW(WWRVW{3&K4=yS6Vctai z!LUD_-FkYg-i{N9X^443w_(pROp+AC^dWkH<94(ctA|o_D!scsx>DT#0sx4yyK@pG QL;wH)07*qoM6N<$f>nAf4FCWD literal 0 HcmV?d00001 diff --git a/browser/themes/gnomestripe/browser/Privacy-48.png b/browser/themes/gnomestripe/browser/Privacy-48.png new file mode 100644 index 0000000000000000000000000000000000000000..016767de7c4aa2bb42aee6aed7f692cae084003c GIT binary patch literal 3013 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 Tcf{3600000NkvXXu0mjfO7o&& literal 0 HcmV?d00001 diff --git a/browser/themes/gnomestripe/browser/aboutPrivateBrowsing.css b/browser/themes/gnomestripe/browser/aboutPrivateBrowsing.css new file mode 100644 index 00000000000..bdf20697a85 --- /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 + * 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; +} diff --git a/browser/themes/gnomestripe/browser/jar.mn b/browser/themes/gnomestripe/browser/jar.mn index 3ebc8e957c7..6c0eb3bd209 100644 --- a/browser/themes/gnomestripe/browser/jar.mn +++ b/browser/themes/gnomestripe/browser/jar.mn @@ -1,5 +1,6 @@ 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) @@ -14,6 +15,10 @@ classic.jar: * 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 diff --git a/browser/themes/pinstripe/browser/Privacy-16.png b/browser/themes/pinstripe/browser/Privacy-16.png new file mode 100644 index 0000000000000000000000000000000000000000..cff4ddcc8f7cbe6ba6e4838e9bff447ea03dbfe2 GIT binary patch literal 713 zcmV;)0yh1LP)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>;YP9O$cv(6t|6yPN@TLjucuUOajx?E>oJX0lxONx#*xxSv? z0b%7%R8QKGz8U_5dv*IGkx29^FkqdZUkK;|x~%gjSOUC6x+_CcpzGfR&0q>@0rmXuGjyK#&F#PJ1v6j{#>2=m9}$M9jf(3vHnq)&>{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-?Jrz&d|S(fdZs z^=v#{@lRti6Y&!1(+II5L3g=lss~O1eh>tM%};Wl0eTXRRYpu5a13}{BYdf vVUPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOW8 z6#x%Hop9v<000PdMObu0Z*6U5Zgc?l%$C0Z00t&WL_t(o!>yNpY}9ud$6xQyU8x*D zi*YjL$2PYFCK|`$pzXm{BiS+-*Z2p$mW}9)8)2A0nysMuz+&Jtz)TG#h2m>=wAS{k0X-#Y$wy|Or8YGI=@){# zu-8QJT4PsRksGuv)ypP?SnL_0MaHW!d(!2&VR*wyS|V6z`**g-1RS6#zwNxO4Zxd1 z-;|g=N(sW^8KpbNHlfnRp;zTApk5kRuFE(LrW@G#5)%t^~_#=CM2JO5QE7T&F_7`NSMnFh!9 zNEi|s;C`Sj-L>_dmE9Sa!S4mm00)7i;Dn^_ApKO4W)1_JUKXfN0&fj!1t*c`3H?~; z@tQ4*KelT3jtJ8#_&}zV4&}j$gBh`cv2zE0Vp{-2JS*EMobHd#MG)X`-9-OMj;RY z_O06Oe8bK&zze`>NuMWZ(&dD0_rv*OvFN`U{tZkKOay4kwfAB=fm;ysf*h*?ZXZ-C zUASU5ng0L-gYxUx|DBetdduQ*@wny)ZZbM*cz@`u5_w9%WJ zY^@srD$2LuS|Av2Hk=&cdk64HS>WPGAD4a9_F)BG%Fd&EI!i6JsUk2jUaoN%F+#)b zX`rv{Q(=4@*aWvh*iizIBp@EgE+P$JCT_lG zX>8SBwwFc({R!{}*oJZRpr}y$Wdbo}eF?EhzyoV^YP<)P;%=%>Y&a z)39^EndhsQjzd~FNGN(eJe=QAaOA%NlMxHA6L=^~^~u({my@k^9hEUUgTf2IXR&{e z{j08Y=ec-@O&26F`>}ckm8%rx39$p160H4J-{~L9pJsIAaDTq^(fgmYr7l! z)vm^!AC$ZQeqcW0YZRkXm+IS^tp7UjwC(TO&NSvS1;*G~s_Q2!@FxocP3i2`)A9dx zt207#B(1}o0bUwQ@aCFSmE<)@Hw&+8$hMsxv5@!_=C?o~=!xdq<hEp*6r<>~^5pk&dPFTQ7d( z6IZ9=u^68KEfzEZw}3a7@Gply`IQOOrs9L!s~$6aNpQmW6--AIl@2xKx1IR#i^#I6 zgxIZu1(Fs33k*kuHv;*grn_dDZBC}*LNjIR5%&V09=siW(WWRVW{3&K4=yS6Vctai z!LUD_-FkYg-i{N9X^443w_(pROp+AC^dWkH<94(ctA|o_D!scsx>DT#0sx4yyK@pG QL;wH)07*qoM6N<$f>nAf4FCWD literal 0 HcmV?d00001 diff --git a/browser/themes/pinstripe/browser/Privacy-48.png b/browser/themes/pinstripe/browser/Privacy-48.png new file mode 100644 index 0000000000000000000000000000000000000000..016767de7c4aa2bb42aee6aed7f692cae084003c GIT binary patch literal 3013 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 Tcf{3600000NkvXXu0mjfO7o&& literal 0 HcmV?d00001 diff --git a/browser/themes/pinstripe/browser/aboutPrivateBrowsing.css b/browser/themes/pinstripe/browser/aboutPrivateBrowsing.css new file mode 100644 index 00000000000..bdf20697a85 --- /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 + * 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; +} diff --git a/browser/themes/pinstripe/browser/jar.mn b/browser/themes/pinstripe/browser/jar.mn index 18bed11082f..05253083771 100644 --- a/browser/themes/pinstripe/browser/jar.mn +++ b/browser/themes/pinstripe/browser/jar.mn @@ -1,5 +1,6 @@ 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 @@ -36,6 +37,10 @@ classic.jar: 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 diff --git a/browser/themes/winstripe/browser/Privacy-16.png b/browser/themes/winstripe/browser/Privacy-16.png new file mode 100644 index 0000000000000000000000000000000000000000..cff4ddcc8f7cbe6ba6e4838e9bff447ea03dbfe2 GIT binary patch literal 713 zcmV;)0yh1LP)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>;YP9O$cv(6t|6yPN@TLjucuUOajx?E>oJX0lxONx#*xxSv? z0b%7%R8QKGz8U_5dv*IGkx29^FkqdZUkK;|x~%gjSOUC6x+_CcpzGfR&0q>@0rmXuGjyK#&F#PJ1v6j{#>2=m9}$M9jf(3vHnq)&>{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-?Jrz&d|S(fdZs z^=v#{@lRti6Y&!1(+II5L3g=lss~O1eh>tM%};Wl0eTXRRYpu5a13}{BYdf vVUPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOW8 z6#x%Hop9v<000PdMObu0Z*6U5Zgc?l%$C0Z00t&WL_t(o!>yNpY}9ud$6xQyU8x*D zi*YjL$2PYFCK|`$pzXm{BiS+-*Z2p$mW}9)8)2A0nysMuz+&Jtz)TG#h2m>=wAS{k0X-#Y$wy|Or8YGI=@){# zu-8QJT4PsRksGuv)ypP?SnL_0MaHW!d(!2&VR*wyS|V6z`**g-1RS6#zwNxO4Zxd1 z-;|g=N(sW^8KpbNHlfnRp;zTApk5kRuFE(LrW@G#5)%t^~_#=CM2JO5QE7T&F_7`NSMnFh!9 zNEi|s;C`Sj-L>_dmE9Sa!S4mm00)7i;Dn^_ApKO4W)1_JUKXfN0&fj!1t*c`3H?~; z@tQ4*KelT3jtJ8#_&}zV4&}j$gBh`cv2zE0Vp{-2JS*EMobHd#MG)X`-9-OMj;RY z_O06Oe8bK&zze`>NuMWZ(&dD0_rv*OvFN`U{tZkKOay4kwfAB=fm;ysf*h*?ZXZ-C zUASU5ng0L-gYxUx|DBetdduQ*@wny)ZZbM*cz@`u5_w9%WJ zY^@srD$2LuS|Av2Hk=&cdk64HS>WPGAD4a9_F)BG%Fd&EI!i6JsUk2jUaoN%F+#)b zX`rv{Q(=4@*aWvh*iizIBp@EgE+P$JCT_lG zX>8SBwwFc({R!{}*oJZRpr}y$Wdbo}eF?EhzyoV^YP<)P;%=%>Y&a z)39^EndhsQjzd~FNGN(eJe=QAaOA%NlMxHA6L=^~^~u({my@k^9hEUUgTf2IXR&{e z{j08Y=ec-@O&26F`>}ckm8%rx39$p160H4J-{~L9pJsIAaDTq^(fgmYr7l! z)vm^!AC$ZQeqcW0YZRkXm+IS^tp7UjwC(TO&NSvS1;*G~s_Q2!@FxocP3i2`)A9dx zt207#B(1}o0bUwQ@aCFSmE<)@Hw&+8$hMsxv5@!_=C?o~=!xdq<hEp*6r<>~^5pk&dPFTQ7d( z6IZ9=u^68KEfzEZw}3a7@Gply`IQOOrs9L!s~$6aNpQmW6--AIl@2xKx1IR#i^#I6 zgxIZu1(Fs33k*kuHv;*grn_dDZBC}*LNjIR5%&V09=siW(WWRVW{3&K4=yS6Vctai z!LUD_-FkYg-i{N9X^443w_(pROp+AC^dWkH<94(ctA|o_D!scsx>DT#0sx4yyK@pG QL;wH)07*qoM6N<$f>nAf4FCWD literal 0 HcmV?d00001 diff --git a/browser/themes/winstripe/browser/Privacy-48.png b/browser/themes/winstripe/browser/Privacy-48.png new file mode 100644 index 0000000000000000000000000000000000000000..016767de7c4aa2bb42aee6aed7f692cae084003c GIT binary patch literal 3013 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 Tcf{3600000NkvXXu0mjfO7o&& literal 0 HcmV?d00001 diff --git a/browser/themes/winstripe/browser/aboutPrivateBrowsing.css b/browser/themes/winstripe/browser/aboutPrivateBrowsing.css new file mode 100644 index 00000000000..bdf20697a85 --- /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 + * 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; +} diff --git a/browser/themes/winstripe/browser/jar.mn b/browser/themes/winstripe/browser/jar.mn index 327c90642d8..0dba8f1f8cf 100644 --- a/browser/themes/winstripe/browser/jar.mn +++ b/browser/themes/winstripe/browser/jar.mn @@ -3,6 +3,7 @@ classic.jar: % 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) @@ -16,6 +17,10 @@ classic.jar: 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) @@ -93,6 +98,7 @@ classic.jar: #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) @@ -106,6 +112,10 @@ classic.jar: 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) diff --git a/netwerk/base/public/nsIPrivateBrowsingService.idl b/netwerk/base/public/nsIPrivateBrowsingService.idl index b47ee527301..9cc0b543477 100644 --- a/netwerk/base/public/nsIPrivateBrowsingService.idl +++ b/netwerk/base/public/nsIPrivateBrowsingService.idl @@ -37,7 +37,7 @@ #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 @@ -46,6 +46,11 @@ interface nsIPrivateBrowsingService : nsISupports // 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++