From 6a3ea8045952b1653b201b4ac07f21f720d929a8 Mon Sep 17 00:00:00 2001 From: Margaret Leibovic Date: Thu, 25 Aug 2011 14:11:18 -0400 Subject: [PATCH] Bug 670194 - Startup numbers don't account for interactive startup interruptions. r=dtownsend --- toolkit/components/startup/nsAppStartup.cpp | 17 ++++++++++++++++- toolkit/components/startup/nsAppStartup.h | 1 + .../components/startup/public/nsIAppStartup.idl | 7 ++++++- toolkit/content/Services.jsm | 1 + toolkit/mozapps/extensions/XPIProvider.jsm | 3 +++ .../extensions/test/xpcshell/test_bug542391.js | 1 + 6 files changed, 28 insertions(+), 2 deletions(-) diff --git a/toolkit/components/startup/nsAppStartup.cpp b/toolkit/components/startup/nsAppStartup.cpp index 5a7b50bf3276..ae6f4e0a8360 100644 --- a/toolkit/components/startup/nsAppStartup.cpp +++ b/toolkit/components/startup/nsAppStartup.cpp @@ -134,7 +134,8 @@ nsAppStartup::nsAppStartup() : mRunning(PR_FALSE), mShuttingDown(PR_FALSE), mAttemptingQuit(PR_FALSE), - mRestart(PR_FALSE) + mRestart(PR_FALSE), + mInterrupted(PR_FALSE) { } @@ -452,6 +453,20 @@ nsAppStartup::GetShuttingDown(PRBool *aResult) return NS_OK; } +NS_IMETHODIMP +nsAppStartup::SetInterrupted(PRBool aInterrupted) +{ + mInterrupted = aInterrupted; + return NS_OK; +} + +NS_IMETHODIMP +nsAppStartup::GetInterrupted(PRBool *aInterrupted) +{ + *aInterrupted = mInterrupted; + return NS_OK; +} + // // nsAppStartup->nsIWindowCreator // diff --git a/toolkit/components/startup/nsAppStartup.h b/toolkit/components/startup/nsAppStartup.h index 2a0ea1a4752b..fc7a6d413938 100644 --- a/toolkit/components/startup/nsAppStartup.h +++ b/toolkit/components/startup/nsAppStartup.h @@ -84,6 +84,7 @@ private: PRPackedBool mShuttingDown; // Quit method reentrancy check PRPackedBool mAttemptingQuit; // Quit(eAttemptQuit) still trying PRPackedBool mRestart; // Quit(eRestart) + PRPackedBool mInterrupted; // Was startup interrupted by an interactive prompt? }; #endif // nsAppStartup_h__ diff --git a/toolkit/components/startup/public/nsIAppStartup.idl b/toolkit/components/startup/public/nsIAppStartup.idl index 55981d26a19b..2091921a6cd1 100644 --- a/toolkit/components/startup/public/nsIAppStartup.idl +++ b/toolkit/components/startup/public/nsIAppStartup.idl @@ -41,7 +41,7 @@ interface nsICmdLineService; -[scriptable, uuid(68b4b481-e21b-478f-8d75-41b131e1c261)] +[scriptable, uuid(35fcdb69-3bb6-4484-b99a-32f49a84fabd)] interface nsIAppStartup : nsISupports { /** @@ -135,6 +135,11 @@ interface nsIAppStartup : nsISupports * Properties may not be available depending on platform or application */ void getStartupInfo(); + + /** + * True if startup was interrupted by an interactive prompt. + */ + attribute boolean interrupted; }; %{C++ diff --git a/toolkit/content/Services.jsm b/toolkit/content/Services.jsm index 5dc5b60e407b..bbe8b39bd902 100644 --- a/toolkit/content/Services.jsm +++ b/toolkit/content/Services.jsm @@ -86,6 +86,7 @@ let initTable = [ ["vc", "@mozilla.org/xpcom/version-comparator;1", "nsIVersionComparator"], ["wm", "@mozilla.org/appshell/window-mediator;1", "nsIWindowMediator"], ["ww", "@mozilla.org/embedcomp/window-watcher;1", "nsIWindowWatcher"], + ["startup", "@mozilla.org/toolkit/app-startup;1", "nsIAppStartup"], ]; initTable.forEach(function ([name, contract, intf]) diff --git a/toolkit/mozapps/extensions/XPIProvider.jsm b/toolkit/mozapps/extensions/XPIProvider.jsm index d8587b7a4c91..1737259f13e7 100644 --- a/toolkit/mozapps/extensions/XPIProvider.jsm +++ b/toolkit/mozapps/extensions/XPIProvider.jsm @@ -1707,6 +1707,9 @@ var XPIProvider = { * Shows the "Compatibility Updates" UI */ showUpgradeUI: function XPI_showUpgradeUI() { + // Flip a flag to indicate that we interrupted startup with an interactive prompt + Services.startup.interrupted = true; + if (!Prefs.getBoolPref(PREF_SHOWN_SELECTION_UI, false)) { // This *must* be modal as it has to block startup. var features = "chrome,centerscreen,dialog,titlebar,modal"; diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_bug542391.js b/toolkit/mozapps/extensions/test/xpcshell/test_bug542391.js index 25be6eccf9f5..ed64340b6742 100644 --- a/toolkit/mozapps/extensions/test/xpcshell/test_bug542391.js +++ b/toolkit/mozapps/extensions/test/xpcshell/test_bug542391.js @@ -58,6 +58,7 @@ var WindowWatcher = { arguments: null, openWindow: function(parent, url, name, features, arguments) { + do_check_true(Services.startup.interrupted); do_check_eq(url, URI_EXTENSION_UPDATE_DIALOG); do_check_true(this.expected); this.expected = false;