| 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..c62f6205c071ad09211b8e3bab96526cb4bfc2b5 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"
|
| @@ -45,6 +46,7 @@
|
| #include "chrome/browser/ui/browser_tabrestore.h"
|
| #include "chrome/browser/ui/browser_tabstrip.h"
|
| #include "chrome/browser/ui/browser_window.h"
|
| +#include "chrome/browser/ui/startup/startup_browser_creator.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| #include "chrome/common/extensions/extension_metrics.h"
|
| #include "chrome/common/url_constants.h"
|
| @@ -75,6 +77,15 @@ using RestoredTab = SessionRestoreDelegate::RestoredTab;
|
|
|
| namespace {
|
|
|
| +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.
|
| @@ -764,22 +775,24 @@ 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();
|
| +
|
| + StartupBrowserCreator::OpenStartupPages(browser, true);
|
| + if (tab_to_clobber && browser->tab_strip_model()->count() > 1)
|
| + chrome::CloseWebContents(browser, tab_to_clobber, true);
|
| +}
|
| +
|
| +// static
|
| std::vector<Browser*> SessionRestore::RestoreForeignSessionWindows(
|
| Profile* profile,
|
| std::vector<const sessions::SessionWindow*>::const_iterator begin,
|
|
|