Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(338)

Unified Diff: chrome/browser/profiles/profile_impl.cc

Issue 8533013: SessionRestore: Store session cookies and restore them if chrome crashes or auto-restarts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/profiles/profile_impl.cc
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index 30c73a5822f240339cc5ee61bd71d2964f562ea8..75e6638365f179858fb7ff993ede9307483b1918 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -167,6 +167,12 @@ FilePath GetMediaCachePath(const FilePath& base) {
return base.Append(chrome::kMediaCacheDirname);
}
+void SaveSessionStateOnIOThread(
+ net::URLRequestContextGetter* url_request_context_getter) {
+ url_request_context_getter->GetURLRequestContext()->cookie_store()->
+ GetCookieMonster()->SaveSessionCookies();
+}
+
} // namespace
// static
@@ -229,7 +235,8 @@ ProfileImpl::ProfileImpl(const FilePath& path,
checked_instant_promo_(false),
#endif
delegate_(delegate),
- predictor_(NULL) {
+ predictor_(NULL),
+ session_restore_enabled_(false) {
DCHECK(!path.empty()) << "Using an empty path will attempt to write " <<
"profile files to the root directory!";
@@ -244,6 +251,8 @@ ProfileImpl::ProfileImpl(const FilePath& path,
!command_line->HasSwitch(switches::kDisablePreconnect),
g_browser_process->profile_manager() == NULL);
+ session_restore_enabled_ =
+ command_line->HasSwitch(switches::kEnableRestoreSessionState);
if (delegate_) {
prefs_.reset(PrefService::CreatePrefService(
GetPrefFilePath(),
@@ -357,6 +366,12 @@ void ProfileImpl::DoFinalInit() {
FilePath app_path = GetPath().Append(chrome::kIsolatedAppStateDirname);
+ bool restore_old_session_cookies =
+ session_restore_enabled_ &&
+ (!DidLastSessionExitCleanly() ||
+ CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kRestoreLastSession));
+
// Make sure we initialize the ProfileIOData after everything else has been
// initialized that we might be reading from the IO thread.
@@ -364,7 +379,8 @@ void ProfileImpl::DoFinalInit() {
cache_max_size, media_cache_path, media_cache_max_size,
extensions_cookie_path, app_path, predictor_,
g_browser_process->local_state(),
- g_browser_process->io_thread());
+ g_browser_process->io_thread(),
+ restore_old_session_cookies);
ChromePluginServiceFilter::GetInstance()->RegisterResourceContext(
PluginPrefs::GetForProfile(this), &GetResourceContext());
@@ -1551,6 +1567,15 @@ NetworkActionPredictor* ProfileImpl::GetNetworkActionPredictor() {
return network_action_predictor_.get();
}
+void ProfileImpl::SaveSessionState() {
+ if (!session_restore_enabled_)
+ return;
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&SaveSessionStateOnIOThread,
+ make_scoped_refptr(GetRequestContext())));
erikwright (departed) 2011/11/29 13:43:22 I'm under the impression that Bind automatically i
marja 2011/11/29 14:58:21 If I remove it, the compile-time assert p1_is_refc
+}
+
SpellCheckProfile* ProfileImpl::GetSpellCheckProfile() {
if (!spellcheck_profile_.get())
spellcheck_profile_.reset(new SpellCheckProfile(path_));

Powered by Google App Engine
This is Rietveld 408576698