Index: webkit/database/database_tracker.cc |
diff --git a/webkit/database/database_tracker.cc b/webkit/database/database_tracker.cc |
index 8e09d167203f036b62878bd87283002af9bb09ec..980e8a16f0de4b6a0e3971c738db963f2bf476d0 100644 |
--- a/webkit/database/database_tracker.cc |
+++ b/webkit/database/database_tracker.cc |
@@ -100,6 +100,7 @@ DatabaseTracker::DatabaseTracker( |
: is_initialized_(false), |
is_incognito_(is_incognito), |
clear_local_state_on_exit_(clear_local_state_on_exit), |
+ save_session_state_(false), |
shutting_down_(false), |
profile_path_(profile_path), |
db_dir_(is_incognito_ ? |
@@ -857,7 +858,7 @@ void DatabaseTracker::Shutdown() { |
} |
if (is_incognito_) |
DeleteIncognitoDBDirectory(); |
- else |
+ else if (!save_session_state_) |
ClearLocalState(clear_local_state_on_exit_); |
} |
@@ -877,4 +878,15 @@ void DatabaseTracker::SetClearLocalStateOnExit(bool clear_local_state_on_exit) { |
clear_local_state_on_exit_ = clear_local_state_on_exit; |
} |
+void DatabaseTracker::SaveSessionState() { |
+ DCHECK(db_tracker_thread_.get()); |
+ if (!db_tracker_thread_->BelongsToCurrentThread()) { |
+ db_tracker_thread_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&DatabaseTracker::SaveSessionState, this)); |
+ return; |
+ } |
+ save_session_state_ = true; |
+} |
+ |
} // namespace webkit_database |