Bug 656778 - Enable session restore when Panorama usage is detected; r=zpao+dolske, ui-r=limi

This commit is contained in:
Tim Taubert 2011-05-18 00:00:05 +02:00
Родитель 797d012a51
Коммит df2d627e1c
5 изменённых файлов: 201 добавлений и 23 удалений

Просмотреть файл

@ -40,10 +40,13 @@ let TabView = {
_deck: null,
_iframe: null,
_window: null,
_firstUseExperienced: false,
_browserKeyHandlerInitialized: false,
_isFrameLoading: false,
_initFrameCallbacks: [],
PREF_BRANCH: "browser.panorama.",
PREF_FIRST_RUN: "browser.panorama.experienced_first_run",
PREF_STARTUP_PAGE: "browser.startup.page",
PREF_RESTORE_ENABLED_ONCE: "browser.panorama.session_restore_enabled_once",
VISIBILITY_IDENTIFIER: "tabview-visibility",
// ----------
@ -57,24 +60,35 @@ let TabView = {
// ----------
get firstUseExperienced() {
return this._firstUseExperienced;
let pref = this.PREF_FIRST_RUN;
if (Services.prefs.prefHasUserValue(pref))
return Services.prefs.getBoolPref(pref);
return false;
},
// ----------
set firstUseExperienced(val) {
if (val != this._firstUseExperienced)
Services.prefs.setBoolPref("browser.panorama.experienced_first_run", val);
Services.prefs.setBoolPref(this.PREF_FIRST_RUN, val);
},
// ----------
get sessionRestoreEnabledOnce() {
let pref = this.PREF_RESTORE_ENABLED_ONCE;
if (Services.prefs.prefHasUserValue(pref))
return Services.prefs.getBoolPref(pref);
return false;
},
// ----------
set sessionRestoreEnabledOnce(val) {
Services.prefs.setBoolPref(this.PREF_RESTORE_ENABLED_ONCE, val);
},
// ----------
init: function TabView_init() {
if (!Services.prefs.prefHasUserValue("browser.panorama.experienced_first_run") ||
!Services.prefs.getBoolPref("browser.panorama.experienced_first_run")) {
Services.prefs.addObserver(
"browser.panorama.experienced_first_run", this, false);
} else {
this._firstUseExperienced = true;
if (this.firstUseExperienced) {
if ((gBrowser.tabs.length - gBrowser.visibleTabs.length) > 0)
this._setBrowserKeyHandlers();
@ -100,26 +114,24 @@ let TabView = {
"TabShow", this._tabShowEventListener, true);
}
}
Services.prefs.addObserver(this.PREF_BRANCH, this, false);
},
// ----------
// Observes topic changes.
observe: function TabView_observe(subject, topic, data) {
if (topic == "nsPref:changed") {
Services.prefs.removeObserver(
"browser.panorama.experienced_first_run", this);
this._firstUseExperienced = true;
if (data == this.PREF_FIRST_RUN && this.firstUseExperienced) {
this._addToolbarButton();
this.enableSessionRestore();
}
},
// ----------
// Uninitializes TabView.
uninit: function TabView_uninit() {
if (!this._firstUseExperienced) {
Services.prefs.removeObserver(
"browser.panorama.experienced_first_run", this);
}
Services.prefs.removeObserver(this.PREF_BRANCH, this);
if (this._tabShowEventListener) {
gBrowser.tabContainer.removeEventListener(
"TabShow", this._tabShowEventListener, true);
@ -366,5 +378,23 @@ let TabView = {
toolbar.currentSet = currentSet;
toolbar.setAttribute("currentset", currentSet);
document.persist(toolbar.id, "currentset");
},
// ----------
// Function: enableSessionRestore
// Enables automatic session restore when the browser is started. Does
// nothing if we already did that once in the past.
enableSessionRestore: function UI_enableSessionRestore() {
if (!this._window || !this.firstUseExperienced)
return;
// do nothing if we already enabled session restore once
if (this.sessionRestoreEnabledOnce)
return;
this.sessionRestoreEnabledOnce = true;
// enable session restore
Services.prefs.setIntPref(this.PREF_STARTUP_PAGE, 3);
}
};

Просмотреть файл

@ -552,6 +552,9 @@ let UI = {
TabItems.resumePainting();
}
if (gTabView.firstUseExperienced)
gTabView.enableSessionRestore();
},
// ----------

Просмотреть файл

@ -138,6 +138,7 @@ _BROWSER_FILES = \
browser_tabview_bug649307.js \
browser_tabview_bug651311.js \
browser_tabview_bug654941.js \
browser_tabview_bug656778.js \
browser_tabview_dragdrop.js \
browser_tabview_exit_button.js \
browser_tabview_expander.js \

Просмотреть файл

@ -0,0 +1,141 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
function test() {
waitForExplicitFinish();
registerCleanupFunction(function () {
Services.prefs.clearUserPref(TabView.PREF_FIRST_RUN);
Services.prefs.clearUserPref(TabView.PREF_STARTUP_PAGE);
Services.prefs.clearUserPref(TabView.PREF_RESTORE_ENABLED_ONCE);
});
let assertBoolPref = function (pref, value) {
is(Services.prefs.getBoolPref(pref), value, pref + " is " + value);
};
let assertIntPref = function (pref, value) {
is(Services.prefs.getIntPref(pref), value, pref + " is " + value);
};
let setPreferences = function (startupPage, firstRun, enabledOnce) {
Services.prefs.setIntPref(TabView.PREF_STARTUP_PAGE, startupPage);
Services.prefs.setBoolPref(TabView.PREF_FIRST_RUN, firstRun);
Services.prefs.setBoolPref(TabView.PREF_RESTORE_ENABLED_ONCE, enabledOnce);
};
let assertPreferences = function (startupPage, firstRun, enabledOnce) {
assertIntPref(TabView.PREF_STARTUP_PAGE, startupPage);
assertBoolPref(TabView.PREF_FIRST_RUN, firstRun);
assertBoolPref(TabView.PREF_RESTORE_ENABLED_ONCE, enabledOnce);
};
let next = function () {
if (tests.length == 0) {
waitForFocus(finish);
return;
}
let test = tests.shift();
info("running " + test.name + "...");
test();
};
// State:
// Panorama was already used before (firstUseExperienced = true) but session
// restore is deactivated. We did not automatically enable SR, yet.
//
// Expected result:
// When entering Panorma session restore will be enabled and a notification
// banner is shown.
let test1 = function test1() {
setPreferences(1, true, false);
newWindowWithTabView(function (win) {
assertPreferences(3, true, true);
win.close();
next();
});
};
// State:
// Panorama has not been used before (firstUseExperienced = false) and session
// restore is deactivated. We did not automatically enable SR, yet. That state
// is equal to starting the browser the first time.
//
// Expected result:
// When entering Panorma nothing happens. When we detect that Panorama is
// really used (firstUseExperienced = true) we notify that session restore
// is now enabled.
let test2 = function test2() {
setPreferences(1, false, false);
newWindowWithTabView(function (win) {
assertPreferences(1, false, false);
win.TabView.firstUseExperienced = true;
assertPreferences(3, true, true);
win.close();
next();
});
};
// State:
// Panorama was already used before (firstUseExperienced = true) and session
// restore is activated. We did not automatically enable SR, yet.
//
// Expected result:
// When entering Panorama nothing happens because session store is already
// enabled so there's no reason to notify.
let test3 = function test3() {
setPreferences(3, true, false);
newWindowWithTabView(function (win) {
assertPreferences(3, true, true);
win.close();
next();
});
};
// State:
// Panorama was already used before (firstUseExperienced = true) and session
// restore has been automatically activated.
//
// Expected result:
// When entering Panorama nothing happens.
let test4 = function test4() {
setPreferences(3, true, true);
newWindowWithTabView(function (win) {
assertPreferences(3, true, true);
win.close();
next();
});
};
// State:
// Panorama was already used before (firstUseExperienced = true) and session
// restore has been automatically activated. Session store was afterwards
// disabled by the user so we won't touch that again.
//
// Expected result:
// When entering Panorama nothing happens and we didn't enable session restore.
let test5 = function test5() {
setPreferences(1, true, true);
newWindowWithTabView(function (win) {
assertPreferences(1, true, true);
win.close();
next();
});
};
let tests = [test1, test2, test3, test4, test5];
next();
}

Просмотреть файл

@ -1,5 +1,6 @@
function test() {
waitForExplicitFinish();
resetPreferences();
function observer(win, topic, data) {
if (topic != "main-pane-loaded")
@ -57,11 +58,13 @@ function runTest(win) {
is(menu.selectedItem, option, "The correct value should be restored");
// cleanup
[pbAutoStartPref, startupPref].forEach(function (pref) {
if (pref.hasUserValue)
pref.reset();
});
resetPreferences();
win.close();
finish();
}
function resetPreferences() {
Services.prefs.clearUserPref("browser.startup.page");
Services.prefs.clearUserPref("browser.privatebrowsing.autostart");
}