| 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;
|
| +}
|
|
|