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

Side by Side Diff: chrome/browser/sessions/session_restore.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: Cleanup. 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 unified diff | Download patch | Annotate | Revision Log
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 #include "chrome/browser/sessions/session_restore.h" 5 #include "chrome/browser/sessions/session_restore.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <list> 8 #include <list>
9 #include <set> 9 #include <set>
10 #include <vector> 10 #include <vector>
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 // SessionRestoreImpl is responsible for fetching the set of tabs to create 399 // SessionRestoreImpl is responsible for fetching the set of tabs to create
400 // from SessionService. SessionRestoreImpl deletes itself when done. 400 // from SessionService. SessionRestoreImpl deletes itself when done.
401 401
402 class SessionRestoreImpl : public content::NotificationObserver { 402 class SessionRestoreImpl : public content::NotificationObserver {
403 public: 403 public:
404 SessionRestoreImpl(Profile* profile, 404 SessionRestoreImpl(Profile* profile,
405 Browser* browser, 405 Browser* browser,
406 bool synchronous, 406 bool synchronous,
407 bool clobber_existing_tab, 407 bool clobber_existing_tab,
408 bool always_create_tabbed_browser, 408 bool always_create_tabbed_browser,
409 bool restore_session_state,
409 const std::vector<GURL>& urls_to_open) 410 const std::vector<GURL>& urls_to_open)
410 : profile_(profile), 411 : profile_(profile),
411 browser_(browser), 412 browser_(browser),
412 synchronous_(synchronous), 413 synchronous_(synchronous),
413 clobber_existing_tab_(clobber_existing_tab), 414 clobber_existing_tab_(clobber_existing_tab),
414 always_create_tabbed_browser_(always_create_tabbed_browser), 415 always_create_tabbed_browser_(always_create_tabbed_browser),
416 restore_session_state_(restore_session_state),
415 urls_to_open_(urls_to_open), 417 urls_to_open_(urls_to_open),
416 restore_started_(base::TimeTicks::Now()) { 418 restore_started_(base::TimeTicks::Now()) {
417 // When asynchronous its possible for there to be no windows. To make sure 419 // When asynchronous its possible for there to be no windows. To make sure
418 // Chrome doesn't prematurely exit AddRef the process. We'll release in the 420 // Chrome doesn't prematurely exit AddRef the process. We'll release in the
419 // destructor when restore is done. 421 // destructor when restore is done.
420 g_browser_process->AddRefModule(); 422 g_browser_process->AddRefModule();
421 } 423 }
422 424
423 Browser* Restore() { 425 Browser* Restore() {
424 SessionService* session_service = 426 SessionService* session_service =
425 SessionServiceFactory::GetForProfile(profile_); 427 SessionServiceFactory::GetForProfile(profile_);
426 DCHECK(session_service); 428 DCHECK(session_service);
429
430 session_service->RestoreOrResetSessionState(restore_session_state_);
431
427 SessionService::SessionCallback* callback = 432 SessionService::SessionCallback* callback =
428 NewCallback(this, &SessionRestoreImpl::OnGotSession); 433 NewCallback(this, &SessionRestoreImpl::OnGotSession);
429 session_service->GetLastSession(&request_consumer_, callback); 434 session_service->GetLastSession(&request_consumer_, callback);
430 435
431 if (synchronous_) { 436 if (synchronous_) {
432 bool old_state = MessageLoop::current()->NestableTasksAllowed(); 437 bool old_state = MessageLoop::current()->NestableTasksAllowed();
433 MessageLoop::current()->SetNestableTasksAllowed(true); 438 MessageLoop::current()->SetNestableTasksAllowed(true);
434 MessageLoop::current()->Run(); 439 MessageLoop::current()->Run();
435 MessageLoop::current()->SetNestableTasksAllowed(old_state); 440 MessageLoop::current()->SetNestableTasksAllowed(old_state);
436 Browser* browser = ProcessSessionWindows(&windows_); 441 Browser* browser = ProcessSessionWindows(&windows_);
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 const bool synchronous_; 786 const bool synchronous_;
782 787
783 // See description of CLOBBER_CURRENT_TAB. 788 // See description of CLOBBER_CURRENT_TAB.
784 const bool clobber_existing_tab_; 789 const bool clobber_existing_tab_;
785 790
786 // If true and there is an error or there are no windows to restore, we 791 // If true and there is an error or there are no windows to restore, we
787 // create a tabbed browser anyway. This is used on startup to make sure at 792 // create a tabbed browser anyway. This is used on startup to make sure at
788 // at least one window is created. 793 // at least one window is created.
789 const bool always_create_tabbed_browser_; 794 const bool always_create_tabbed_browser_;
790 795
796 // See description of RESTORE_SESSION_STATE.
797 const bool restore_session_state_;
798
791 // Set of URLs to open in addition to those restored from the session. 799 // Set of URLs to open in addition to those restored from the session.
792 std::vector<GURL> urls_to_open_; 800 std::vector<GURL> urls_to_open_;
793 801
794 // Used to get the session. 802 // Used to get the session.
795 CancelableRequestConsumer request_consumer_; 803 CancelableRequestConsumer request_consumer_;
796 804
797 // Responsible for loading the tabs. 805 // Responsible for loading the tabs.
798 scoped_ptr<TabLoader> tab_loader_; 806 scoped_ptr<TabLoader> tab_loader_;
799 807
800 // When synchronous we run a nested message loop. To avoid creating windows 808 // When synchronous we run a nested message loop. To avoid creating windows
(...skipping 29 matching lines...) Expand all
830 NOTREACHED(); 838 NOTREACHED();
831 return NULL; 839 return NULL;
832 } 840 }
833 restoring = true; 841 restoring = true;
834 profile->set_restored_last_session(true); 842 profile->set_restored_last_session(true);
835 // SessionRestoreImpl takes care of deleting itself when done. 843 // SessionRestoreImpl takes care of deleting itself when done.
836 SessionRestoreImpl* restorer = new SessionRestoreImpl( 844 SessionRestoreImpl* restorer = new SessionRestoreImpl(
837 profile, browser, (behavior & SYNCHRONOUS) != 0, 845 profile, browser, (behavior & SYNCHRONOUS) != 0,
838 (behavior & CLOBBER_CURRENT_TAB) != 0, 846 (behavior & CLOBBER_CURRENT_TAB) != 0,
839 (behavior & ALWAYS_CREATE_TABBED_BROWSER) != 0, 847 (behavior & ALWAYS_CREATE_TABBED_BROWSER) != 0,
848 (behavior & RESTORE_SESSION_STATE) != 0,
840 urls_to_open); 849 urls_to_open);
841 return restorer->Restore(); 850 return restorer->Restore();
842 } 851 }
843 852
844 // static 853 // static
845 void SessionRestore::RestoreForeignSessionWindows( 854 void SessionRestore::RestoreForeignSessionWindows(
846 Profile* profile, 855 Profile* profile,
847 std::vector<const SessionWindow*>::const_iterator begin, 856 std::vector<const SessionWindow*>::const_iterator begin,
848 std::vector<const SessionWindow*>::const_iterator end) { 857 std::vector<const SessionWindow*>::const_iterator end) {
849 // Create a SessionRestore object to eventually restore the tabs. 858 // Create a SessionRestore object to eventually restore the tabs.
850 std::vector<GURL> gurls; 859 std::vector<GURL> gurls;
851 SessionRestoreImpl restorer(profile, 860 SessionRestoreImpl restorer(profile,
852 static_cast<Browser*>(NULL), true, false, true, gurls); 861 static_cast<Browser*>(NULL), true, false, true, false, gurls);
853 restorer.RestoreForeignSession(begin, end); 862 restorer.RestoreForeignSession(begin, end);
854 } 863 }
855 864
856 // static 865 // static
857 void SessionRestore::RestoreForeignSessionTab(Profile* profile, 866 void SessionRestore::RestoreForeignSessionTab(Profile* profile,
858 const SessionTab& tab) { 867 const SessionTab& tab) {
859 // Create a SessionRestore object to eventually restore the tabs. 868 // Create a SessionRestore object to eventually restore the tabs.
860 std::vector<GURL> gurls; 869 std::vector<GURL> gurls;
861 SessionRestoreImpl restorer(profile, 870 SessionRestoreImpl restorer(profile,
862 static_cast<Browser*>(NULL), true, false, true, gurls); 871 static_cast<Browser*>(NULL), true, false, true, false, gurls);
863 restorer.RestoreForeignTab(tab); 872 restorer.RestoreForeignTab(tab);
864 } 873 }
865 874
866 // static 875 // static
867 bool SessionRestore::IsRestoring() { 876 bool SessionRestore::IsRestoring() {
868 return restoring; 877 return restoring;
869 } 878 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698