Bug 842290 - Make privacy preference tab always check for permanent private browsing status changing, regardless of whether pref changes apply instantly. r=ehsan

This commit is contained in:
Josh Matthews 2013-03-06 09:51:00 -05:00
parent 6577598005
commit 3fe5e954e6
4 changed files with 72 additions and 86 deletions

View File

@ -24,9 +24,7 @@ var gPrivacyPane = {
this.initializeHistoryMode();
this.updateHistoryModePane();
this.updatePrivacyMicroControls();
this.initAutoStartPrivateBrowsingObserver();
window.addEventListener("unload", this.removeASPBObserver.bind(this), false);
this.initAutoStartPrivateBrowsingReverter();
},
// HISTORY MODE
@ -232,44 +230,37 @@ var gPrivacyPane = {
// PRIVATE BROWSING
/**
* Install the observer for the auto-start private browsing mode pref.
* Initialize the starting state for the auto-start private browsing mode pref reverter.
*/
initAutoStartPrivateBrowsingObserver: function PPP_initAutoStartPrivateBrowsingObserver()
initAutoStartPrivateBrowsingReverter: function PPP_initAutoStartPrivateBrowsingReverter()
{
let prefService = document.getElementById("privacyPreferences")
.service
.QueryInterface(Components.interfaces.nsIPrefBranch);
prefService.addObserver("browser.privatebrowsing.autostart",
this.autoStartPrivateBrowsingObserver,
false);
let mode = document.getElementById("historyMode");
let autoStart = document.getElementById("privateBrowsingAutoStart");
this._lastMode = mode.selectedIndex;
this._lastCheckState = autoStart.hasAttribute('checked');
},
/**
* Install the observer for the auto-start private browsing mode pref.
*/
removeASPBObserver: function PPP_removeASPBObserver()
{
let prefService = document.getElementById("privacyPreferences")
.service
.QueryInterface(Components.interfaces.nsIPrefBranch);
prefService.removeObserver("browser.privatebrowsing.autostart",
this.autoStartPrivateBrowsingObserver);
},
_lastMode: null,
_lasCheckState: null,
updateAutostart: function PPP_updateAutostart() {
let mode = document.getElementById("historyMode");
let autoStart = document.getElementById("privateBrowsingAutoStart");
let pref = document.getElementById("browser.privatebrowsing.autostart");
if ((mode.value == "custom" && this._lastCheckState == autoStart.checked) ||
(mode.value == "remember" && !this._lastCheckState) ||
(mode.value == "dontremember" && this._lastCheckState)) {
// These are all no-op changes, so we don't need to prompt.
this._lastMode = mode.selectedIndex;
this._lastCheckState = autoStart.hasAttribute('checked');
return;
}
autoStartPrivateBrowsingObserver:
{
QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIObserver]),
observe: function PPP_observe(aSubject, aTopic, aData)
{
if (!gPrivacyPane._shouldPromptForRestart) {
if (!this._shouldPromptForRestart) {
// We're performing a revert. Just let it happen.
gPrivacyPane._shouldPromptForRestart = true;
return;
}
const Cc = Components.classes, Ci = Components.interfaces;
let pref = document.getElementById("browser.privatebrowsing.autostart");
let brandName = document.getElementById("bundleBrand").getString("brandShortName");
let bundle = document.getElementById("bundlePreferences");
let msg = bundle.getFormattedString(pref.value ?
@ -286,24 +277,25 @@ var gPrivacyPane = {
shouldProceed = !cancelQuit.data;
if (shouldProceed) {
document.documentElement.acceptDialog();
let appStartup = Cc["@mozilla.org/toolkit/app-startup;1"]
.getService(Ci.nsIAppStartup);
appStartup.quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart);
return;
}
}
gPrivacyPane._shouldPromptForRestart = false;
pref.value = !pref.value;
let mode = document.getElementById("historyMode");
if (mode.value != "custom") {
mode.selectedIndex = pref.value ? 1 : 0;
mode.doCommand();
this._shouldPromptForRestart = false;
if (this._lastCheckState) {
autoStart.checked = "checked";
} else {
let rememberHistoryCheckbox = document.getElementById("rememberHistory");
rememberHistory.checked = pref.value;
autoStart.removeAttribute('checked');
}
}
mode.selectedIndex = this._lastMode;
mode.doCommand();
this._shouldPromptForRestart = true;
},
// HISTORY

View File

@ -61,7 +61,6 @@
<preference id="browser.privatebrowsing.autostart"
name="browser.privatebrowsing.autostart"
onchange="gPrivacyPane.updatePrivacyMicroControls();"
instantApply="true"
type="bool"/>
</preferences>
@ -101,7 +100,8 @@
<menulist id="historyMode"
oncommand="gPrivacyPane.updateHistoryModePane();
gPrivacyPane.updateHistoryModePrefs();
gPrivacyPane.updatePrivacyMicroControls();">
gPrivacyPane.updatePrivacyMicroControls();
gPrivacyPane.updateAutostart();">
<menupopup>
<menuitem label="&historyHeader.remember.label;" value="remember"/>
<menuitem label="&historyHeader.dontremember.label;" value="dontremember"/>
@ -148,7 +148,8 @@
<checkbox id="privateBrowsingAutoStart"
label="&privateBrowsingPermanent2.label;"
accesskey="&privateBrowsingPermanent2.accesskey;"
preference="browser.privatebrowsing.autostart"/>
preference="browser.privatebrowsing.autostart"
oncommand="gPrivacyPane.updateAutostart()"/>
<vbox class="indent">
<checkbox id="rememberHistory"

View File

@ -27,9 +27,7 @@ var gPrivacyPane = {
this.initializeHistoryMode();
this.updateHistoryModePane();
this.updatePrivacyMicroControls();
this.initAutoStartPrivateBrowsingObserver();
window.addEventListener("unload", this.removeASPBObserver.bind(this), false);
this.initAutoStartPrivateBrowsingReverter();
},
// HISTORY MODE
@ -235,44 +233,37 @@ var gPrivacyPane = {
// PRIVATE BROWSING
/**
* Install the observer for the auto-start private browsing mode pref.
* Initialize the starting state for the auto-start private browsing mode pref reverter.
*/
initAutoStartPrivateBrowsingObserver: function PPP_initAutoStartPrivateBrowsingObserver()
initAutoStartPrivateBrowsingReverter: function PPP_initAutoStartPrivateBrowsingReverter()
{
let prefService = document.getElementById("privacyPreferences")
.service
.QueryInterface(Components.interfaces.nsIPrefBranch);
prefService.addObserver("browser.privatebrowsing.autostart",
this.autoStartPrivateBrowsingObserver,
false);
let mode = document.getElementById("historyMode");
let autoStart = document.getElementById("privateBrowsingAutoStart");
this._lastMode = mode.selectedIndex;
this._lastCheckState = autoStart.hasAttribute('checked');
},
/**
* Install the observer for the auto-start private browsing mode pref.
*/
removeASPBObserver: function PPP_removeASPBObserver()
{
let prefService = document.getElementById("privacyPreferences")
.service
.QueryInterface(Components.interfaces.nsIPrefBranch);
prefService.removeObserver("browser.privatebrowsing.autostart",
this.autoStartPrivateBrowsingObserver);
},
_lastMode: null,
_lasCheckState: null,
updateAutostart: function PPP_updateAutostart() {
let mode = document.getElementById("historyMode");
let autoStart = document.getElementById("privateBrowsingAutoStart");
let pref = document.getElementById("browser.privatebrowsing.autostart");
if ((mode.value == "custom" && this._lastCheckState == autoStart.checked) ||
(mode.value == "remember" && !this._lastCheckState) ||
(mode.value == "dontremember" && this._lastCheckState)) {
// These are all no-op changes, so we don't need to prompt.
this._lastMode = mode.selectedIndex;
this._lastCheckState = autoStart.hasAttribute('checked');
return;
}
autoStartPrivateBrowsingObserver:
{
QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIObserver]),
observe: function PPP_observe(aSubject, aTopic, aData)
{
if (!gPrivacyPane._shouldPromptForRestart) {
if (!this._shouldPromptForRestart) {
// We're performing a revert. Just let it happen.
gPrivacyPane._shouldPromptForRestart = true;
return;
}
const Cc = Components.classes, Ci = Components.interfaces;
let pref = document.getElementById("browser.privatebrowsing.autostart");
let brandName = document.getElementById("bundleBrand").getString("brandShortName");
let bundle = document.getElementById("bundlePreferences");
let msg = bundle.getFormattedString(pref.value ?
@ -289,24 +280,25 @@ var gPrivacyPane = {
shouldProceed = !cancelQuit.data;
if (shouldProceed) {
document.documentElement.acceptDialog();
let appStartup = Cc["@mozilla.org/toolkit/app-startup;1"]
.getService(Ci.nsIAppStartup);
appStartup.quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart);
return;
}
}
gPrivacyPane._shouldPromptForRestart = false;
pref.value = !pref.value;
let mode = document.getElementById("historyMode");
if (mode.value != "custom") {
mode.selectedIndex = pref.value ? 1 : 0;
mode.doCommand();
this._shouldPromptForRestart = false;
if (this._lastCheckState) {
autoStart.checked = "checked";
} else {
let rememberHistoryCheckbox = document.getElementById("rememberHistory");
rememberHistory.checked = pref.value;
autoStart.removeAttribute('checked');
}
}
mode.selectedIndex = this._lastMode;
mode.doCommand();
this._shouldPromptForRestart = true;
},
// HISTORY

View File

@ -73,7 +73,6 @@
<preference id="browser.privatebrowsing.autostart"
name="browser.privatebrowsing.autostart"
onchange="gPrivacyPane.updatePrivacyMicroControls();"
instantApply="true"
type="bool"/>
</preferences>
@ -113,7 +112,8 @@
<menulist id="historyMode"
oncommand="gPrivacyPane.updateHistoryModePane();
gPrivacyPane.updateHistoryModePrefs();
gPrivacyPane.updatePrivacyMicroControls();">
gPrivacyPane.updatePrivacyMicroControls();
gPrivacyPane.updateAutostart();">
<menupopup>
<menuitem label="&historyHeader.remember.label;" value="remember"/>
<menuitem label="&historyHeader.dontremember.label;" value="dontremember"/>
@ -160,7 +160,8 @@
<checkbox id="privateBrowsingAutoStart" class="indent"
label="&privateBrowsingPermanent2.label;"
accesskey="&privateBrowsingPermanent2.accesskey;"
preference="browser.privatebrowsing.autostart"/>
preference="browser.privatebrowsing.autostart"
oncommand="gPrivacyPane.updateAutostart()"/>
<vbox class="indent">
<vbox class="indent">