Index: chrome/browser/sessions/session_common_utils.cc |
diff --git a/chrome/browser/sessions/session_common_utils.cc b/chrome/browser/sessions/session_common_utils.cc |
index a46d983c6ab75ee65544ffeb3939d46cfbd00151..938b6e978d636128d85ec32c0e3742b240704012 100644 |
--- a/chrome/browser/sessions/session_common_utils.cc |
+++ b/chrome/browser/sessions/session_common_utils.cc |
@@ -4,7 +4,11 @@ |
#include "chrome/browser/sessions/session_common_utils.h" |
+#include <algorithm> |
+#include <string> |
+ |
#include "chrome/common/url_constants.h" |
+#include "components/sessions/core/session_types.h" |
#include "url/gurl.h" |
bool ShouldTrackURLForRestore(const GURL& url) { |
@@ -13,3 +17,26 @@ bool ShouldTrackURLForRestore(const GURL& url) { |
(url.host_piece() == chrome::kChromeUIQuitHost || |
url.host_piece() == chrome::kChromeUIRestartHost)); |
} |
+ |
+int GetNavigationIndexToSelect(const sessions::SessionTab& tab) { |
+ DCHECK(!tab.navigations.empty()); |
+ const int selected_index = |
+ std::max(0, std::min(tab.current_navigation_index, |
+ static_cast<int>(tab.navigations.size() - 1))); |
+ |
+ // After user sign out, Chrome may navigate to the setting page from the |
+ // sign out page asynchronously. The browser may be closed before the |
+ // navigation callback finished. |
+ std::string setting_page_url = std::string(chrome::kChromeUISettingsURL); |
+ std::string sign_out_page_url = |
+ setting_page_url + std::string(chrome::kSignOutSubPage); |
+ if (selected_index > 0 && |
+ tab.navigations[selected_index].virtual_url().spec() == |
+ sign_out_page_url && |
+ tab.navigations[selected_index - 1].virtual_url().spec() == |
+ setting_page_url) { |
+ return selected_index - 1; |
+ } |
+ |
+ return selected_index; |
+} |