| Index: chrome/browser/sessions/session_restore.cc
|
| diff --git a/chrome/browser/sessions/session_restore.cc b/chrome/browser/sessions/session_restore.cc
|
| index a4184999051a3dfb15435cc36f41d0e36b35503a..185e1c3b04d563c191b547f6242b545bb6a4da42 100644
|
| --- a/chrome/browser/sessions/session_restore.cc
|
| +++ b/chrome/browser/sessions/session_restore.cc
|
| @@ -31,6 +31,7 @@
|
| #include "chrome/browser/chrome_notification_types.h"
|
| #include "chrome/browser/lifetime/keep_alive_types.h"
|
| #include "chrome/browser/lifetime/scoped_keep_alive.h"
|
| +#include "chrome/browser/prefs/session_startup_pref.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/search/search.h"
|
| #include "chrome/browser/sessions/session_restore_delegate.h"
|
| @@ -75,6 +76,30 @@ using RestoredTab = SessionRestoreDelegate::RestoredTab;
|
|
|
| namespace {
|
|
|
| +// Appends the urls in |urls| to |browser|.
|
| +void AppendURLsToBrowser(Browser* browser, const std::vector<GURL>& urls) {
|
| + for (size_t i = 0; i < urls.size(); ++i) {
|
| + int add_types = TabStripModel::ADD_FORCE_INDEX;
|
| + if (i == 0)
|
| + add_types |= TabStripModel::ADD_ACTIVE;
|
| + chrome::NavigateParams params(browser, urls[i],
|
| + ui::PAGE_TRANSITION_AUTO_TOPLEVEL);
|
| + params.disposition = i == 0 ? WindowOpenDisposition::NEW_FOREGROUND_TAB
|
| + : WindowOpenDisposition::NEW_BACKGROUND_TAB;
|
| + params.tabstrip_add_types = add_types;
|
| + chrome::Navigate(¶ms);
|
| + }
|
| +}
|
| +
|
| +bool HasSingleNewTabPage(Browser* browser) {
|
| + if (browser->tab_strip_model()->count() != 1)
|
| + return false;
|
| + const content::WebContents* active_tab =
|
| + browser->tab_strip_model()->GetWebContentsAt(0);
|
| + return active_tab->GetURL() == chrome::kChromeUINewTabURL ||
|
| + search::IsInstantNTP(active_tab);
|
| +}
|
| +
|
| class SessionRestoreImpl;
|
|
|
| // Pointers to SessionRestoreImpls which are currently restoring the session.
|
| @@ -649,21 +674,6 @@ class SessionRestoreImpl : public content::NotificationObserver {
|
| browser->tab_strip_model()->GetActiveWebContents()->SetInitialFocus();
|
| }
|
|
|
| - // Appends the urls in |urls| to |browser|.
|
| - void AppendURLsToBrowser(Browser* browser, const std::vector<GURL>& urls) {
|
| - for (size_t i = 0; i < urls.size(); ++i) {
|
| - int add_types = TabStripModel::ADD_FORCE_INDEX;
|
| - if (i == 0)
|
| - add_types |= TabStripModel::ADD_ACTIVE;
|
| - chrome::NavigateParams params(browser, urls[i],
|
| - ui::PAGE_TRANSITION_AUTO_TOPLEVEL);
|
| - params.disposition = i == 0 ? WindowOpenDisposition::NEW_FOREGROUND_TAB
|
| - : WindowOpenDisposition::NEW_BACKGROUND_TAB;
|
| - params.tabstrip_add_types = add_types;
|
| - chrome::Navigate(¶ms);
|
| - }
|
| - }
|
| -
|
| // Invokes TabRestored on the SessionService for all tabs in browser after
|
| // initial_count.
|
| void NotifySessionServiceOfRestoredTabs(Browser* browser, int initial_count) {
|
| @@ -764,22 +774,25 @@ Browser* SessionRestore::RestoreSession(
|
|
|
| // static
|
| void SessionRestore::RestoreSessionAfterCrash(Browser* browser) {
|
| - uint32_t behavior = 0;
|
| - if (browser->tab_strip_model()->count() == 1) {
|
| - const content::WebContents* active_tab =
|
| - browser->tab_strip_model()->GetWebContentsAt(0);
|
| - if (active_tab->GetURL() == chrome::kChromeUINewTabURL ||
|
| - search::IsInstantNTP(active_tab)) {
|
| - // There is only one tab and its the new tab page, make session restore
|
| - // clobber it.
|
| - behavior = SessionRestore::CLOBBER_CURRENT_TAB;
|
| - }
|
| - }
|
| + uint32_t behavior =
|
| + HasSingleNewTabPage(browser) ? SessionRestore::CLOBBER_CURRENT_TAB : 0;
|
| SessionRestore::RestoreSession(browser->profile(), browser, behavior,
|
| std::vector<GURL>());
|
| }
|
|
|
| // static
|
| +void SessionRestore::OpenStartupPagesAfterCrash(Browser* browser) {
|
| + WebContents* tab_to_clobber = nullptr;
|
| + if (HasSingleNewTabPage(browser))
|
| + tab_to_clobber = browser->tab_strip_model()->GetActiveWebContents();
|
| +
|
| + AppendURLsToBrowser(
|
| + browser, SessionStartupPref::GetStartupPref(browser->profile()).urls);
|
| + if (tab_to_clobber)
|
| + chrome::CloseWebContents(browser, tab_to_clobber, true);
|
| +}
|
| +
|
| +// static
|
| std::vector<Browser*> SessionRestore::RestoreForeignSessionWindows(
|
| Profile* profile,
|
| std::vector<const sessions::SessionWindow*>::const_iterator begin,
|
|
|