Index: src/application/MainController.mm
===================================================================
RCS file: /cvsroot/mozilla/camino/src/application/MainController.mm,v
retrieving revision 1.289
diff -u -8 -r1.289 MainController.mm
--- src/application/MainController.mm	2 Sep 2009 18:05:37 -0000	1.289
+++ src/application/MainController.mm	3 Sep 2009 23:47:38 -0000
@@ -299,17 +299,21 @@
   [[NSUserDefaults standardUserDefaults] synchronize];
 
   // Determine if the previous session's window state should be restored.
   // Obey the camino.remember_window_state preference unless Camino crashed
   // last time, in which case the user is asked what to do.
   BOOL shouldRestoreWindowState = NO;
   if ([[SessionManager sharedInstance] hasSavedState]) {
     if (previousSessionTerminatedNormally) {
-      shouldRestoreWindowState = [prefManager getBooleanPref:kGeckoPrefSessionSaveEnabled withSuccess:NULL];
+      shouldRestoreWindowState =
+          [prefManager getBooleanPref:kGeckoPrefSessionSaveEnabled
+                          withSuccess:NULL] ||
+          [prefManager getBooleanPref:kGeckoPrefRelaunchingForAutoupdate
+                          withSuccess:NULL];
     }
     else if ([prefManager getBooleanPref:kGeckoPrefSessionSaveRestoreAfterCrash withSuccess:NULL]) {
       NSAlert* restoreAfterCrashAlert = [[[NSAlert alloc] init] autorelease];
       [restoreAfterCrashAlert addButtonWithTitle:NSLocalizedString(@"RestoreAfterCrashActionButton", nil)];
       [restoreAfterCrashAlert addButtonWithTitle:NSLocalizedString(@"RestoreAfterCrashCancelButton", nil)];
       [restoreAfterCrashAlert setMessageText:NSLocalizedString(@"RestoreAfterCrashTitle", nil)];
       [restoreAfterCrashAlert setInformativeText:NSLocalizedString(@"RestoreAfterCrashMessage", nil)];
       [restoreAfterCrashAlert setAlertStyle:NSWarningAlertStyle];
@@ -318,16 +322,18 @@
       // should be called before displaying any modal dialogs.
       [NSMenu cancelAllTracking];
 
       if ([restoreAfterCrashAlert runModal] == NSAlertFirstButtonReturn)
         shouldRestoreWindowState = YES;
     }
   }
 
+  [prefManager clearPref:kGeckoPrefRelaunchingForAutoupdate];
+
   if (shouldRestoreWindowState) {
     // if we've already opened a window (e.g., command line argument or apple event), we need
     // to pull it to the front after restoring the window state
     NSWindow* existingWindow = [self frontmostBrowserWindow];
     [[SessionManager sharedInstance] restoreWindowState];
     [existingWindow makeKeyAndOrderFront:self];
   }
   else {
@@ -427,28 +433,36 @@
     BrowserWindowController* bwc = [curWindow windowController];
     if (![[bwc tabBrowser] windowShouldClose])
       return NSTerminateCancel;
   }
 
   return NSTerminateNow;
 }
 
+- (void)updaterWillRelaunchApplication:(SUUpdater *)updater {
+  PreferenceManager* prefManager = [PreferenceManager sharedInstanceDontCreate];
+  [prefManager setPref:kGeckoPrefRelaunchingForAutoupdate toBoolean:YES];
+}
+
 - (void)applicationWillTerminate:(NSNotification*)aNotification
 {
 #if DEBUG
   NSLog(@"App will terminate notification");
 #endif
   // If there's no pref manager then we didn't really start up, so we do nothing.
   PreferenceManager* prefManager = [PreferenceManager sharedInstanceDontCreate];
   if (prefManager) {
-    if ([prefManager getBooleanPref:kGeckoPrefSessionSaveEnabled withSuccess:NULL])
+    if ([prefManager getBooleanPref:kGeckoPrefSessionSaveEnabled withSuccess:NULL] ||
+        [prefManager getBooleanPref:kGeckoPrefRelaunchingForAutoupdate withSuccess:NULL]) {
       [[SessionManager sharedInstance] saveWindowState];
-    else
+    }
+    else {
       [[SessionManager sharedInstance] clearSavedState];
+    }
   }
 
   [NetworkServices shutdownNetworkServices];
 
   // make sure the info window is closed
   [BookmarkInfoController closeBookmarkInfoController];
 
   // shut down bookmarks (if we made them)
Index: src/preferences/GeckoPrefConstants.h
===================================================================
RCS file: /cvsroot/mozilla/camino/src/preferences/GeckoPrefConstants.h,v
retrieving revision 1.16
diff -u -8 -r1.16 GeckoPrefConstants.h
--- src/preferences/GeckoPrefConstants.h	7 Aug 2009 01:28:33 -0000	1.16
+++ src/preferences/GeckoPrefConstants.h	3 Sep 2009 23:47:38 -0000
@@ -202,16 +202,19 @@
 #pragma mark Auto-Update
 
 // The base URL for software update checks
 extern const char* const kGeckoPrefUpdateURL;                          // string
 
 // A user-override for kGeckoPrefUpdateURL
 extern const char* const kGeckoPrefUpdateURLOverride;                  // string
 
+// Tracks whether we are doing an auto-update relaunch
+extern const char* const kGeckoPrefRelaunchingForAutoupdate;           // bool
+
 #pragma mark i18n
 
 // The ranked languages to send in the Accept-Languages header
 extern const char* const kGeckoPrefAcceptLanguages;                    // string
 
 // A user override for the automatically-determined kGeckoPrefAcceptLanguages
 extern const char* const kGeckoPrefAcceptLanguagesOverride;            // string
 
Index: src/preferences/GeckoPrefConstants.mm
===================================================================
RCS file: /cvsroot/mozilla/camino/src/preferences/GeckoPrefConstants.mm,v
retrieving revision 1.16
diff -u -8 -r1.16 GeckoPrefConstants.mm
--- src/preferences/GeckoPrefConstants.mm	7 Aug 2009 01:28:33 -0000	1.16
+++ src/preferences/GeckoPrefConstants.mm	3 Sep 2009 23:47:38 -0000
@@ -145,16 +145,17 @@
 
 const char* const kGeckoPrefBackspaceAction = "browser.backspace_action";
 const char* const kGeckoPrefTabFocusBehavior = "accessibility.tabfocus";
 
 #pragma mark Auto-Update
 
 const char* const kGeckoPrefUpdateURL = "app.update.url";
 const char* const kGeckoPrefUpdateURLOverride = "app.update.url.override";
+const char* const kGeckoPrefRelaunchingForAutoupdate = "camino.relaunching_for_autoupdate";
 
 #pragma mark i18n
 
 const char* const kGeckoPrefAcceptLanguages = "intl.accept_languages";
 const char* const kGeckoPrefAcceptLanguagesOverride = "camino.accept_languages";
 const char* const kGeckoPrefCharsetDetector = "intl.charset.detector";
 
 #pragma mark Session Saving
