From 8b8e6fd89dfbb1ac731d80ff5d39228bf0514c2b Mon Sep 17 00:00:00 2001 From: Steven MacLeod Date: Thu, 25 Jul 2013 21:50:15 +0200 Subject: [PATCH] Bug 881049 - Switch SessionStore to Promise.jsm; r=ttaubert X-Git-Commit-ID: 39b42be125f8b40a52350ed7cf9c39082356118f --- browser/base/content/browser.js | 22 +++++++++++-------- .../test/social/browser_social_window.js | 9 ++++++-- .../sessionstore/nsISessionStore.idl | 4 ++-- .../sessionstore/src/SessionStore.jsm | 10 +++++---- .../sessionstore/src/_SessionFile.jsm | 2 +- .../sessionstore/src/nsSessionStartup.js | 2 +- 6 files changed, 30 insertions(+), 19 deletions(-) diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 1b2c280ea15e..b75e498449fb 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -1040,7 +1040,6 @@ var gBrowserInit = { OfflineApps.init(); IndexedDBPromptHelper.init(); gFormSubmitObserver.init(); - SocialUI.init(); AddonManager.addAddonListener(AddonsMgrListener); WebrtcIndicator.init(); @@ -1101,12 +1100,7 @@ var gBrowserInit = { // initialize the session-restore service (in case it's not already running) let ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore); - ss.init(window); - - // Enable the Restore Last Session command if needed - if (ss.canRestoreLastSession && - !PrivateBrowsingUtils.isWindowPrivate(window)) - goSetCommandEnabled("Browser:RestoreLastSession", true); + let ssPromise = ss.init(window); PlacesToolbarHelper.init(); @@ -1169,7 +1163,6 @@ var gBrowserInit = { #endif gBrowserThumbnails.init(); - TabView.init(); setUrlAndSearchBarWidthForConditionalForwardButton(); window.addEventListener("resize", function resizeHandler(event) { @@ -1284,8 +1277,19 @@ var gBrowserInit = { #endif #endif + ssPromise.then(() =>{ + // Enable the Restore Last Session command if needed + if (ss.canRestoreLastSession && + !PrivateBrowsingUtils.isWindowPrivate(window)) + goSetCommandEnabled("Browser:RestoreLastSession", true); + + TabView.init(); + SocialUI.init(); + + setTimeout(function () { BrowserChromeTest.markAsReady(); }, 0); + }); + Services.obs.notifyObservers(window, "browser-delayed-startup-finished", ""); - setTimeout(function () { BrowserChromeTest.markAsReady(); }, 0); TelemetryTimestamps.add("delayedStartupFinished"); }, diff --git a/browser/base/content/test/social/browser_social_window.js b/browser/base/content/test/social/browser_social_window.js index f6a0afab038c..14d4aa7c58e8 100644 --- a/browser/base/content/test/social/browser_social_window.js +++ b/browser/base/content/test/social/browser_social_window.js @@ -17,6 +17,7 @@ function resetSocial() { } let createdWindows = []; +let ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore); function openWindowAndWaitForInit(callback) { // this notification tells us SocialUI.init() has been run... @@ -26,8 +27,12 @@ function openWindowAndWaitForInit(callback) { Services.obs.addObserver(function providerSet(subject, topic, data) { Services.obs.removeObserver(providerSet, topic); info(topic + " observer was notified - continuing test"); - // executeSoon to let the browser UI observers run first - executeSoon(function() {callback(w)}); + // We need to wait for the SessionStore as well, since + // SocialUI.init() is also waiting on it. + ss.init(w).then(function () { + executeSoon(function() {callback(w);}); + }); + }, topic, false); } diff --git a/browser/components/sessionstore/nsISessionStore.idl b/browser/components/sessionstore/nsISessionStore.idl index aa710921f120..153623d958a9 100644 --- a/browser/components/sessionstore/nsISessionStore.idl +++ b/browser/components/sessionstore/nsISessionStore.idl @@ -25,13 +25,13 @@ interface nsIDOMNode; * |gBrowser.tabContainer| such as e.g. |gBrowser.selectedTab|. */ -[scriptable, uuid(0aa5492c-15ad-4376-8eac-28895796826e)] +[scriptable, uuid(092fa0cc-e99b-11e2-a2a3-a25b4f45d8e2)] interface nsISessionStore : nsISupports { /** * Initialize the service */ - void init(in nsIDOMWindow aWindow); + jsval init(in nsIDOMWindow aWindow); /** * Is it possible to restore the previous session. Will always be false when diff --git a/browser/components/sessionstore/src/SessionStore.jsm b/browser/components/sessionstore/src/SessionStore.jsm index 539687e9f047..0c2e06be5905 100644 --- a/browser/components/sessionstore/src/SessionStore.jsm +++ b/browser/components/sessionstore/src/SessionStore.jsm @@ -79,7 +79,7 @@ Cu.import("resource://gre/modules/TelemetryTimestamps.jsm", this); Cu.import("resource://gre/modules/TelemetryStopwatch.jsm", this); Cu.import("resource://gre/modules/osfile.jsm", this); Cu.import("resource://gre/modules/PrivateBrowsingUtils.jsm", this); -Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js", this); +Cu.import("resource://gre/modules/Promise.jsm", this); Cu.import("resource://gre/modules/Task.jsm", this); XPCOMUtils.defineLazyServiceGetter(this, "gSessionStartup", @@ -139,7 +139,7 @@ this.SessionStore = { }, init: function ss_init(aWindow) { - SessionStoreInternal.init(aWindow); + return SessionStoreInternal.init(aWindow); }, getBrowserState: function ss_getBrowserState() { @@ -579,9 +579,11 @@ let SessionStoreInternal = { let self = this; this.initService(); - this._promiseInitialization.promise.then( + return this._promiseInitialization.promise.then( function onSuccess() { - self.onLoad(aWindow); + if (!aWindow.closed) { + self.onLoad(aWindow); + } } ); }, diff --git a/browser/components/sessionstore/src/_SessionFile.jsm b/browser/components/sessionstore/src/_SessionFile.jsm index 4a69b36be470..e96784b10316 100644 --- a/browser/components/sessionstore/src/_SessionFile.jsm +++ b/browser/components/sessionstore/src/_SessionFile.jsm @@ -33,7 +33,7 @@ Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/osfile.jsm"); Cu.import("resource://gre/modules/osfile/_PromiseWorker.jsm", this); -Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js"); +Cu.import("resource://gre/modules/Promise.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "TelemetryStopwatch", "resource://gre/modules/TelemetryStopwatch.jsm"); diff --git a/browser/components/sessionstore/src/nsSessionStartup.js b/browser/components/sessionstore/src/nsSessionStartup.js index 112d0e8a7af0..6d8c7925bf1a 100644 --- a/browser/components/sessionstore/src/nsSessionStartup.js +++ b/browser/components/sessionstore/src/nsSessionStartup.js @@ -39,7 +39,7 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/TelemetryStopwatch.jsm"); Cu.import("resource://gre/modules/PrivateBrowsingUtils.jsm"); -Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js"); +Cu.import("resource://gre/modules/Promise.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "_SessionFile", "resource:///modules/sessionstore/_SessionFile.jsm");