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

Unified Diff: chrome/browser/sessions/session_restore.cc

Issue 2644663003: Offer to open the startup pages after a crash. (Closed)
Patch Set: CR Comments Created 3 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 side-by-side diff with in-line comments
Download patch
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(&params);
+ }
+}
+
+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(&params);
- }
- }
-
// 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,

Powered by Google App Engine
This is Rietveld 408576698