Bug 959396 - Init WindowsPrefSync sooner and populate _orderedWindows even when not restoring. r=tabraldes, a=metro-only
--- a/browser/metro/base/content/browser-ui.js
+++ b/browser/metro/base/content/browser-ui.js
@@ -150,21 +150,16 @@ var BrowserUI = {
MetroDownloadsView.init();
DialogUI.init();
FormHelperUI.init();
FindHelperUI.init();
} catch(ex) {
Util.dumpLn("Exception in delay load module:", ex.message);
}
- if (WindowsPrefSync) {
- // Pulls in Desktop controlled prefs and pushes out Metro controlled prefs
- WindowsPrefSync.init();
- }
-
// check for left over crash reports and submit them if found.
BrowserUI.startupCrashCheck();
Util.dumpLn("* delay load complete.");
}, false);
#ifndef MOZ_OFFICIAL_BRANDING
setTimeout(function() {
--- a/browser/metro/base/content/browser.js
+++ b/browser/metro/base/content/browser.js
@@ -168,18 +168,17 @@ var Browser = {
let uri = commandURL || Browser.getHomePage();
self.addTab(uri, true);
}
}
// Should we restore the previous session (crash or some other event)
let ss = Cc["@mozilla.org/browser/sessionstore;1"]
.getService(Ci.nsISessionStore);
- let shouldRestore = ss.shouldRestore()
- || (3 == Services.prefs.getIntPref("browser.startup.page"));
+ let shouldRestore = ss.shouldRestore();
if (shouldRestore) {
let bringFront = false;
// First open any commandline URLs, except the homepage
if (activationURI && activationURI != kStartURI) {
this.addTab(activationURI, true, null, { flags: Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP });
} else if (commandURL && commandURL != kStartURI) {
this.addTab(commandURL, true);
} else {
--- a/browser/metro/components/SessionStore.js
+++ b/browser/metro/components/SessionStore.js
@@ -4,16 +4,17 @@
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const Cr = Components.results;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/WindowsPrefSync.jsm");
#ifdef MOZ_CRASHREPORTER
XPCOMUtils.defineLazyServiceGetter(this, "CrashReporter",
"@mozilla.org/xre/app-info;1", "nsICrashReporter");
#endif
XPCOMUtils.defineLazyServiceGetter(this, "gUUIDGenerator",
"@mozilla.org/uuid-generator;1", "nsIUUIDGenerator");
@@ -194,16 +195,20 @@ SessionStore.prototype = {
observerService.addObserver(this, "browser-lastwindow-close-granted", true);
observerService.addObserver(this, "browser:purge-session-history", true);
observerService.addObserver(this, "quit-application-requested", true);
observerService.addObserver(this, "quit-application-granted", true);
observerService.addObserver(this, "quit-application", true);
break;
case "final-ui-startup":
observerService.removeObserver(this, "final-ui-startup");
+ if (WindowsPrefSync) {
+ // Pulls in Desktop controlled prefs and pushes out Metro controlled prefs
+ WindowsPrefSync.init();
+ }
this.init();
break;
case "domwindowopened":
let window = aSubject;
window.addEventListener("load", function() {
self.onWindowOpen(window);
window.removeEventListener("load", arguments.callee, false);
}, false);
@@ -335,19 +340,22 @@ SessionStore.prototype = {
this._windows[aWindow.__SSID] = { tabs: [], selected: 0, _closedTabs: [] };
// Perform additional initialization when the first window is loading
if (this._loadState == STATE_STOPPED) {
this._loadState = STATE_RUNNING;
this._lastSaveTime = Date.now();
// Nothing to restore, notify observers things are complete
- if (!this._shouldRestore) {
+ if (!this.shouldRestore()) {
this._clearCache();
Services.obs.notifyObservers(null, "sessionstore-windows-restored", "");
+
+ // If nothing is being restored, we only have our single Metro window.
+ this._orderedWindows.push(aWindow.__SSID);
}
}
// Add tab change listeners to all already existing tabs
let tabs = aWindow.Browser.tabs;
for (let i = 0; i < tabs.length; i++)
this.onTabAdd(aWindow, tabs[i].browser, true);
@@ -721,17 +729,17 @@ SessionStore.prototype = {
let browser = aTab.linkedBrowser;
if (browser.__SS_extdata && browser.__SS_extdata[aKey])
delete browser.__SS_extdata[aKey];
else
throw (Components.returnCode = Cr.NS_ERROR_INVALID_ARG);
},
shouldRestore: function ss_shouldRestore() {
- return this._shouldRestore;
+ return this._shouldRestore || (3 == Services.prefs.getIntPref("browser.startup.page"));
},
restoreLastSession: function ss_restoreLastSession(aBringToFront) {
let self = this;
function notifyObservers(aMessage) {
self._clearCache();
Services.obs.notifyObservers(null, "sessionstore-windows-restored", aMessage || "");
}