Index: chrome/browser/browser_shutdown.cc |
=================================================================== |
--- chrome/browser/browser_shutdown.cc (revision 48146) |
+++ chrome/browser/browser_shutdown.cc (working copy) |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -28,6 +28,7 @@ |
#include "chrome/browser/renderer_host/render_view_host.h" |
#include "chrome/browser/renderer_host/render_widget_host.h" |
#include "chrome/common/chrome_paths.h" |
+#include "chrome/common/chrome_switches.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/common/chrome_plugin_lib.h" |
#include "net/dns_global.h" |
@@ -128,6 +129,14 @@ |
shutdown_num_processes_slow_); |
} |
+ // Check local state for the restart flag so we can restart the session below. |
+ bool restart_last_session = false; |
+ if (prefs->HasPrefPath(prefs::kRestartLastSessionOnShutdown)) { |
+ restart_last_session = |
+ prefs->GetBoolean(prefs::kRestartLastSessionOnShutdown); |
+ prefs->ClearPref(prefs::kRestartLastSessionOnShutdown); |
+ } |
+ |
prefs->SavePersistentPrefs(); |
#if defined(OS_WIN) |
@@ -152,7 +161,21 @@ |
shutdown_type_ != browser_shutdown::END_SESSION) { |
Upgrade::SwapNewChromeExeIfPresent(); |
} |
+ |
+ if (restart_last_session) { |
+ // Make sure to relaunch the browser with the same command line and add |
+ // Restore Last Session flag if session restore is not set. |
+ CommandLine command_line = CommandLine::FromString( |
+ CommandLine::ForCurrentProcess()->command_line_string()); |
+ if (!command_line.HasSwitch(switches::kRestoreLastSession)) |
+ command_line.AppendSwitch(switches::kRestoreLastSession); |
+ Upgrade::RelaunchChromeBrowser(command_line); |
Nico
2010/08/27 05:14:09
Isn't this very racy? RelaunchChromeBrowser() most
Nico
2010/08/27 05:17:15
This might be the cause for http://crbug.com/50803
|
+ } |
#endif |
+#if !defined(OS_WIN) |
+ if (restart_last_session) |
+ NOTIMPLEMENTED(); |
+#endif |
if (shutdown_type_ > NOT_VALID && shutdown_num_processes_ > 0) { |
// Measure total shutdown time as late in the process as possible |