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

Side by Side Diff: chrome/browser/sessions/tab_restore_service.h

Issue 14172: Makes the tab restore service contain any windows that were open at... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_SESSIONS_TAB_RESTORE_SERVICE_H_ 5 #ifndef CHROME_BROWSER_SESSIONS_TAB_RESTORE_SERVICE_H_
6 #define CHROME_BROWSER_SESSIONS_TAB_RESTORE_SERVICE_H_ 6 #define CHROME_BROWSER_SESSIONS_TAB_RESTORE_SERVICE_H_
7 7
8 #include <list> 8 #include <list>
9 #include <vector>
9 10
10 #include "base/observer_list.h" 11 #include "base/observer_list.h"
11 #include "base/time.h" 12 #include "base/time.h"
12 #include "chrome/browser/sessions/base_session_service.h" 13 #include "chrome/browser/sessions/base_session_service.h"
13 #include "chrome/browser/sessions/session_id.h" 14 #include "chrome/browser/sessions/session_id.h"
14 #include "chrome/browser/sessions/session_types.h" 15 #include "chrome/browser/sessions/session_types.h"
15 16
16 class Browser; 17 class Browser;
17 class NavigationController; 18 class NavigationController;
18 class Profile; 19 class Profile;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 // added to |browser|. 120 // added to |browser|.
120 void RestoreMostRecentEntry(Browser* browser); 121 void RestoreMostRecentEntry(Browser* browser);
121 122
122 // Restores an entry by id. If there is no entry with an id matching |id|, 123 // Restores an entry by id. If there is no entry with an id matching |id|,
123 // this does nothing. If |replace_existing_tab| is true and id identifies a 124 // this does nothing. If |replace_existing_tab| is true and id identifies a
124 // tab, the newly created tab replaces the selected tab in |browser|. 125 // tab, the newly created tab replaces the selected tab in |browser|.
125 void RestoreEntryById(Browser* browser, 126 void RestoreEntryById(Browser* browser,
126 SessionID::id_type id, 127 SessionID::id_type id,
127 bool replace_existing_tab); 128 bool replace_existing_tab);
128 129
129 // Loads the tabs from the previous session. This does nothing if the tabs 130 // Loads the tabs and previous session. This does nothing if the tabs
130 // from the previous session have already been loaded. 131 // from the previous session have already been loaded.
131 void LoadTabsFromLastSession(); 132 void LoadTabsFromLastSession();
132 133
134 // Max number of entries we'll keep around.
135 static const size_t kMaxEntries;
136
133 protected: 137 protected:
134 virtual void Save(); 138 virtual void Save();
135 139
136 private: 140 private:
141 // Used to indicate what has loaded.
142 enum LoadState {
143 // Indicates we haven't loaded anything.
144 NOT_LOADED = 1 << 0,
145
146 // Indicates we've asked for the last sessions and tabs but haven't gotten
147 // the result back yet.
148 LOADING = 1 << 2,
149
150 // Indicates we finished loading the last tabs (but not necessarily the
151 // last session).
152 LOADED_LAST_TABS = 1 << 3,
153
154 // Indicates we finished loading the last session (but not necessarily the
155 // last tabs).
156 LOADED_LAST_SESSION = 1 << 4
157 };
158
137 // Populates tabs->navigations from the NavigationController. 159 // Populates tabs->navigations from the NavigationController.
138 void PopulateTabFromController(NavigationController* controller, 160 void PopulateTabFromController(NavigationController* controller,
139 Tab* tab); 161 Tab* tab);
140 162
141 // Notifies observers the tabs have changed. 163 // Notifies observers the tabs have changed.
142 void NotifyTabsChanged(); 164 void NotifyTabsChanged();
143 165
144 // Adds |entry| to the list of entries. If |prune| is true |PruneAndNotify| 166 // Adds |entry| to the list of entries. If |prune| is true |PruneAndNotify|
145 // is invoked. If |to_front| is true the entry is added to the front, 167 // is invoked. If |to_front| is true the entry is added to the front,
146 // otherwise the back. Normal closes go to the front, but tab/window closes 168 // otherwise the back. Normal closes go to the front, but tab/window closes
(...skipping 25 matching lines...) Expand all
172 194
173 // Creates a restore command. 195 // Creates a restore command.
174 SessionCommand* CreateRestoredEntryCommand(SessionID::id_type entry_id); 196 SessionCommand* CreateRestoredEntryCommand(SessionID::id_type entry_id);
175 197
176 // Returns the index to persist as the selected index. This is the same 198 // Returns the index to persist as the selected index. This is the same
177 // as |tab.current_navigation_index| unless the entry at 199 // as |tab.current_navigation_index| unless the entry at
178 // |tab.current_navigation_index| shouldn't be persisted. Returns -1 if 200 // |tab.current_navigation_index| shouldn't be persisted. Returns -1 if
179 // no valid navigation to persist. 201 // no valid navigation to persist.
180 int GetSelectedNavigationIndexToPersist(const Tab& tab); 202 int GetSelectedNavigationIndexToPersist(const Tab& tab);
181 203
182 // Invoked when we've loaded the session commands from the previous run. 204 // Invoked when we've loaded the session commands that identify the
183 // This creates entries and adds them to entries_, notifying the observer. 205 // previously closed tabs. This creates entries, adds them to
206 // staging_entries_, and invokes LoadState.
184 void OnGotLastSessionCommands( 207 void OnGotLastSessionCommands(
185 Handle handle, 208 Handle handle,
186 scoped_refptr<InternalGetCommandsRequest> request); 209 scoped_refptr<InternalGetCommandsRequest> request);
187 210
211 // Populates |loaded_entries| with Entries from |request|.
212 void CreateEntriesFromCommands(
213 scoped_refptr<InternalGetCommandsRequest> request,
214 std::vector<Entry*>* loaded_entries);
215
188 // Returns true if |tab| has more than one navigation. If |tab| has more 216 // Returns true if |tab| has more than one navigation. If |tab| has more
189 // than one navigation |tab->current_navigation_index| is constrained based 217 // than one navigation |tab->current_navigation_index| is constrained based
190 // on the number of navigations. 218 // on the number of navigations.
191 bool ValidateTab(Tab* tab); 219 bool ValidateTab(Tab* tab);
192 220
193 // Validates all entries in |entries|, deleting any with no navigations. 221 // Validates all entries in |entries|, deleting any with no navigations.
194 // This also deletes any entries beyond the max number of entries we can 222 // This also deletes any entries beyond the max number of entries we can
195 // hold. 223 // hold.
196 void ValidateAndDeleteEmptyEntries(std::vector<Entry*>* entries); 224 void ValidateAndDeleteEmptyEntries(std::vector<Entry*>* entries);
197 225
226 // Callback from SessionService when we've received the windows from the
227 // previous session. This creates and add entries to |staging_entries_|
228 // and invokes LoadStateChanged.
229 void OnGotPreviousSession(Handle handle,
230 std::vector<SessionWindow*>* windows);
231
232 // Creates and add entries to |entries| for each of the windows in |windows|.
233 void CreateEntriesFromWindows(
234 std::vector<SessionWindow*>* windows,
235 std::vector<Entry*>* entries);
236
237 // Converts a SessionWindow into a Window, returning true on success.
238 bool ConvertSessionWindowToWindow(
239 SessionWindow* session_window,
240 Window* window);
241
242 // Invoked when previous tabs or session is loaded. If both have finished
243 // loading the entries in staging_entries_ are added to entries_ and
244 // observers are notified.
245 void LoadStateChanged();
246
198 // Set of entries. 247 // Set of entries.
199 Entries entries_; 248 Entries entries_;
200 249
201 // Whether we've loaded the last session. 250 // Whether we've loaded the last session.
202 bool loaded_last_session_; 251 int load_state_;
203 252
204 // Are we restoring a tab? If this is true we ignore requests to create a 253 // Are we restoring a tab? If this is true we ignore requests to create a
205 // historical tab. 254 // historical tab.
206 bool restoring_; 255 bool restoring_;
207 256
208 // Have the max number of entries ever been created? 257 // Have the max number of entries ever been created?
209 bool reached_max_; 258 bool reached_max_;
210 259
211 // The number of entries to write. 260 // The number of entries to write.
212 int entries_to_write_; 261 int entries_to_write_;
213 262
214 // Number of entries we've written. 263 // Number of entries we've written.
215 int entries_written_; 264 int entries_written_;
216 265
217 ObserverList<Observer> observer_list_; 266 ObserverList<Observer> observer_list_;
218 267
219 // Set of tabs that we've received a BrowserClosing method for but no 268 // Set of tabs that we've received a BrowserClosing method for but no
220 // corresponding BrowserClosed. We cache the set of browsers closing to 269 // corresponding BrowserClosed. We cache the set of browsers closing to
221 // avoid creating historical tabs for them. 270 // avoid creating historical tabs for them.
222 std::set<Browser*> closing_browsers_; 271 std::set<Browser*> closing_browsers_;
223 272
224 // Used when loading commands from the previous session. 273 // Used when loading previous tabs/session.
225 CancelableRequestConsumer load_tabs_consumer_; 274 CancelableRequestConsumer load_consumer_;
275
276 // Results from previously closed tabs/sessions is first added here. When
277 // the results from both us and the session restore service have finished
278 // loading LoadStateChanged is invoked, which adds these entries to
279 // entries_.
280 std::vector<Entry*> staging_entries_;
226 281
227 DISALLOW_COPY_AND_ASSIGN(TabRestoreService); 282 DISALLOW_COPY_AND_ASSIGN(TabRestoreService);
228 }; 283 };
229 284
230 #endif // CHROME_BROWSER_SESSIONS_TAB_RESTORE_SERVICE_H_ 285 #endif // CHROME_BROWSER_SESSIONS_TAB_RESTORE_SERVICE_H_
OLDNEW
« no previous file with comments | « chrome/browser/sessions/session_restore.cc ('k') | chrome/browser/sessions/tab_restore_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698