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

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

Issue 8929007: Restore sessionStorage when chrome restarts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix: cloning storage areas. Created 8 years, 11 months 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
« no previous file with comments | « chrome/browser/sessions/session_restore.cc ('k') | chrome/browser/sessions/session_service.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_SESSION_SERVICE_H_ 5 #ifndef CHROME_BROWSER_SESSIONS_SESSION_SERVICE_H_
6 #define CHROME_BROWSER_SESSIONS_SESSION_SERVICE_H_ 6 #define CHROME_BROWSER_SESSIONS_SESSION_SERVICE_H_
7 #pragma once 7 #pragma once
8 8
9 #include <map> 9 #include <map>
10 #include <set>
10 #include <string> 11 #include <string>
11 12
12 #include "base/basictypes.h" 13 #include "base/basictypes.h"
13 #include "base/callback.h" 14 #include "base/callback.h"
14 #include "base/time.h" 15 #include "base/time.h"
15 #include "chrome/browser/defaults.h" 16 #include "chrome/browser/defaults.h"
16 #include "chrome/browser/sessions/base_session_service.h" 17 #include "chrome/browser/sessions/base_session_service.h"
17 #include "chrome/browser/sessions/session_id.h" 18 #include "chrome/browser/sessions/session_id.h"
18 #include "chrome/browser/ui/browser.h" 19 #include "chrome/browser/ui/browser.h"
19 #include "chrome/browser/ui/browser_list.h" 20 #include "chrome/browser/ui/browser_list.h"
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 // callback invokes OnGotSessionCommands from which we map the 172 // callback invokes OnGotSessionCommands from which we map the
172 // SessionCommands to browser state, then notify the callback. 173 // SessionCommands to browser state, then notify the callback.
173 Handle GetLastSession(CancelableRequestConsumerBase* consumer, 174 Handle GetLastSession(CancelableRequestConsumerBase* consumer,
174 const SessionCallback& callback); 175 const SessionCallback& callback);
175 176
176 // Overridden from BaseSessionService because we want some UMA reporting on 177 // Overridden from BaseSessionService because we want some UMA reporting on
177 // session update activities. 178 // session update activities.
178 virtual void Save() OVERRIDE; 179 virtual void Save() OVERRIDE;
179 180
180 private: 181 private:
182 class SessionStorageAssociationReader;
183
181 typedef std::map<SessionID::id_type, std::pair<int, int> > IdToRange; 184 typedef std::map<SessionID::id_type, std::pair<int, int> > IdToRange;
182 typedef std::map<SessionID::id_type, SessionTab*> IdToSessionTab; 185 typedef std::map<SessionID::id_type, SessionTab*> IdToSessionTab;
183 typedef std::map<SessionID::id_type, SessionWindow*> IdToSessionWindow; 186 typedef std::map<SessionID::id_type, SessionWindow*> IdToSessionWindow;
184 187
185 188
186 // These types mirror Browser::Type, but are re-defined here because these 189 // These types mirror Browser::Type, but are re-defined here because these
187 // specific enumeration _values_ are written into the session database and 190 // specific enumeration _values_ are written into the session database and
188 // are needed to maintain forward compatibility. 191 // are needed to maintain forward compatibility.
189 // Note that we only store browsers of type TYPE_TABBED and TYPE_POPUP. 192 // Note that we only store browsers of type TYPE_TABBED and TYPE_POPUP.
190 enum WindowType { 193 enum WindowType {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 SessionCommand* CreateSetSelectedNavigationIndexCommand( 233 SessionCommand* CreateSetSelectedNavigationIndexCommand(
231 const SessionID& tab_id, 234 const SessionID& tab_id,
232 int index); 235 int index);
233 236
234 SessionCommand* CreateSetWindowTypeCommand(const SessionID& window_id, 237 SessionCommand* CreateSetWindowTypeCommand(const SessionID& window_id,
235 WindowType type); 238 WindowType type);
236 239
237 SessionCommand* CreatePinnedStateCommand(const SessionID& tab_id, 240 SessionCommand* CreatePinnedStateCommand(const SessionID& tab_id,
238 bool is_pinned); 241 bool is_pinned);
239 242
243 void CreateAndScheduleSessionStorageCreatedCommand(
244 int64 namespace_id,
245 const FilePath& directory);
246
240 // Callback from the backend for getting the commands from the save file. 247 // Callback from the backend for getting the commands from the save file.
241 // Converts the commands in SessionWindows and notifies the real callback. 248 // Converts the commands in SessionWindows and notifies the real callback.
242 void OnGotSessionCommands( 249 void OnGotSessionCommands(
243 Handle handle, 250 Handle handle,
244 scoped_refptr<InternalGetCommandsRequest> request); 251 scoped_refptr<InternalGetCommandsRequest> request);
245 252
246 // Converts the commands into SessionWindows. On return any valid 253 // Converts the commands into SessionWindows. On return any valid
247 // windows are added to valid_windows. It is up to the caller to delete 254 // windows are added to valid_windows. It is up to the caller to delete
248 // the windows added to valid_windows. 255 // the windows added to valid_windows.
249 // 256 //
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 std::map<int, SessionWindow*>* windows); 299 std::map<int, SessionWindow*>* windows);
293 300
294 // Creates tabs and windows from the specified commands. The created tabs 301 // Creates tabs and windows from the specified commands. The created tabs
295 // and windows are added to |tabs| and |windows| respectively. It is up to 302 // and windows are added to |tabs| and |windows| respectively. It is up to
296 // the caller to delete the tabs and windows added to |tabs| and |windows|. 303 // the caller to delete the tabs and windows added to |tabs| and |windows|.
297 // 304 //
298 // This does NOT add any created SessionTabs to SessionWindow.tabs, that is 305 // This does NOT add any created SessionTabs to SessionWindow.tabs, that is
299 // done by AddTabsToWindows. 306 // done by AddTabsToWindows.
300 bool CreateTabsAndWindows(const std::vector<SessionCommand*>& data, 307 bool CreateTabsAndWindows(const std::vector<SessionCommand*>& data,
301 std::map<int, SessionTab*>* tabs, 308 std::map<int, SessionTab*>* tabs,
302 std::map<int, SessionWindow*>* windows); 309 std::map<int, SessionWindow*>* windows,
310 std::set<std::string>* needed_session_storages);
303 311
304 // Adds commands to commands that will recreate the state of the specified 312 // Adds commands to commands that will recreate the state of the specified
305 // tab. This adds at most kMaxNavigationCountToPersist navigations (in each 313 // tab. This adds at most kMaxNavigationCountToPersist navigations (in each
306 // direction from the current navigation index). 314 // direction from the current navigation index).
307 // A pair is added to tab_to_available_range indicating the range of 315 // A pair is added to tab_to_available_range indicating the range of
308 // indices that were written. 316 // indices that were written.
309 void BuildCommandsForTab( 317 void BuildCommandsForTab(
310 const SessionID& window_id, 318 const SessionID& window_id,
311 TabContentsWrapper* tab, 319 TabContentsWrapper* tab,
312 int index_in_window, 320 int index_in_window,
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 base::TimeTicks* last_updated_time); 393 base::TimeTicks* last_updated_time);
386 394
387 // Helper methods to record the histogram data 395 // Helper methods to record the histogram data
388 void RecordUpdatedTabClosed(base::TimeDelta delta, bool use_long_period); 396 void RecordUpdatedTabClosed(base::TimeDelta delta, bool use_long_period);
389 void RecordUpdatedNavListPruned(base::TimeDelta delta, bool use_long_period); 397 void RecordUpdatedNavListPruned(base::TimeDelta delta, bool use_long_period);
390 void RecordUpdatedNavEntryCommit(base::TimeDelta delta, bool use_long_period); 398 void RecordUpdatedNavEntryCommit(base::TimeDelta delta, bool use_long_period);
391 void RecordUpdatedSaveTime(base::TimeDelta delta, bool use_long_period); 399 void RecordUpdatedSaveTime(base::TimeDelta delta, bool use_long_period);
392 void RecordUpdatedSessionNavigationOrTab(base::TimeDelta delta, 400 void RecordUpdatedSessionNavigationOrTab(base::TimeDelta delta,
393 bool use_long_period); 401 bool use_long_period);
394 402
403 // Callback for SessionStorageAssociationReader.
404 void AssociateSessionStorage(SessionStorageAssociationReader* reader,
405 int64 namespace_id,
406 const FilePath& directory);
407
395 // Convert back/forward between the Browser and SessionService DB window 408 // Convert back/forward between the Browser and SessionService DB window
396 // types. 409 // types.
397 static WindowType WindowTypeForBrowserType(Browser::Type type); 410 static WindowType WindowTypeForBrowserType(Browser::Type type);
398 static Browser::Type BrowserTypeForWindowType(WindowType type); 411 static Browser::Type BrowserTypeForWindowType(WindowType type);
399 412
400 content::NotificationRegistrar registrar_; 413 content::NotificationRegistrar registrar_;
401 414
402 // Maps from session tab id to the range of navigation entries that has 415 // Maps from session tab id to the range of navigation entries that has
403 // been written to disk. 416 // been written to disk.
404 // 417 //
(...skipping 25 matching lines...) Expand all
430 443
431 // Are there any open trackable browsers? 444 // Are there any open trackable browsers?
432 bool has_open_trackable_browsers_; 445 bool has_open_trackable_browsers_;
433 446
434 // If true and a new tabbed browser is created and there are no opened tabbed 447 // If true and a new tabbed browser is created and there are no opened tabbed
435 // browser (has_open_trackable_browsers_ is false), then the current session 448 // browser (has_open_trackable_browsers_ is false), then the current session
436 // is made the last session. See description above class for details on 449 // is made the last session. See description above class for details on
437 // current/last session. 450 // current/last session.
438 bool move_on_new_browser_; 451 bool move_on_new_browser_;
439 452
453 // Map from session storage namespace id (stored by |SessionStorageNamespace|)
454 // to a pair (window_id, tab_id).
455 typedef std::map<int64,
456 std::pair<SessionID, SessionID> > SessionStorageNamespaceMap;
457
458 SessionStorageNamespaceMap session_storage_namespace_map_;
459
440 // Used for reporting frequency of session altering operations. 460 // Used for reporting frequency of session altering operations.
441 base::TimeTicks last_updated_tab_closed_time_; 461 base::TimeTicks last_updated_tab_closed_time_;
442 base::TimeTicks last_updated_nav_list_pruned_time_; 462 base::TimeTicks last_updated_nav_list_pruned_time_;
443 base::TimeTicks last_updated_nav_entry_commit_time_; 463 base::TimeTicks last_updated_nav_entry_commit_time_;
444 base::TimeTicks last_updated_save_time_; 464 base::TimeTicks last_updated_save_time_;
445 465
446 // Constants used in calculating histogram data. 466 // Constants used in calculating histogram data.
447 const base::TimeDelta save_delay_in_millis_; 467 const base::TimeDelta save_delay_in_millis_;
448 const base::TimeDelta save_delay_in_mins_; 468 const base::TimeDelta save_delay_in_mins_;
449 const base::TimeDelta save_delay_in_hrs_; 469 const base::TimeDelta save_delay_in_hrs_;
450 470
471 // For keeping track of |SessionStorageAssociationReader|s which are active at
472 // the moment. When destructed, this map will drop the references to them. The
473 // destructor of |SessionService| uses this map for nullifying the pointers in
474 // the |SessionStorageAssociationReader|s so that they won't call
475 // |SessionService| back after finishing their operations.
476 typedef std::map<SessionStorageAssociationReader*,
477 scoped_refptr<SessionStorageAssociationReader> >
478 SessionStorageAssociationReaders;
479 SessionStorageAssociationReaders session_storage_association_readers_;
480
451 DISALLOW_COPY_AND_ASSIGN(SessionService); 481 DISALLOW_COPY_AND_ASSIGN(SessionService);
452 }; 482 };
453 483
454 #endif // CHROME_BROWSER_SESSIONS_SESSION_SERVICE_H_ 484 #endif // CHROME_BROWSER_SESSIONS_SESSION_SERVICE_H_
OLDNEW
« no previous file with comments | « chrome/browser/sessions/session_restore.cc ('k') | chrome/browser/sessions/session_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698