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

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: Code review. Created 9 years 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
« no previous file with comments | « chrome/browser/profiles/profile_impl.h ('k') | chrome/browser/profiles/profile_impl_io_data.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/profiles/profile_impl.cc
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index 0fee3f3b08b8039fadf2676a757f85ec3e629bb5..4bdb837ef94c02275795f53c266f5d2c01c3b9ca 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -168,6 +168,13 @@ FilePath GetMediaCachePath(const FilePath& base) {
return base.Append(chrome::kMediaCacheDirname);
}
+void SaveSessionStateOnIOThread(
+ net::URLRequestContextGetter* url_request_context_getter) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ url_request_context_getter->GetURLRequestContext()->cookie_store()->
+ GetCookieMonster()->SaveSessionCookies();
+}
+
} // namespace
// static
@@ -230,7 +237,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!";
@@ -245,6 +253,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(),
@@ -358,6 +368,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.
@@ -365,7 +381,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());
@@ -1563,6 +1580,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())));
+}
+
SpellCheckProfile* ProfileImpl::GetSpellCheckProfile() {
if (!spellcheck_profile_.get())
spellcheck_profile_.reset(new SpellCheckProfile(path_));
« no previous file with comments | « chrome/browser/profiles/profile_impl.h ('k') | chrome/browser/profiles/profile_impl_io_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698