| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/chrome/browser/sessions/model/session_util.h" |
| |
| #import <string_view> |
| |
| #import "base/check_op.h" |
| #import "base/files/file_path.h" |
| #import "base/strings/strcat.h" |
| #import "base/strings/sys_string_conversions.h" |
| #import "components/sessions/core/serialized_navigation_entry.h" |
| #import "components/sessions/ios/ios_serialized_navigation_builder.h" |
| #import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" |
| #import "ios/chrome/browser/shared/model/browser/browser.h" |
| #import "ios/chrome/browser/shared/model/profile/profile_ios.h" |
| #import "ios/web/public/navigation/navigation_item.h" |
| #import "ios/web/public/navigation/navigation_manager.h" |
| #import "ios/web/public/web_state.h" |
| |
| namespace session_util { |
| namespace { |
| |
| // Suffix appended to the SceneState session identifier for inactive Browsers. |
| constexpr std::string_view kInactiveBrowserIdentifierSuffix = "-Inactive"; |
| |
| } // namespace |
| |
| std::unique_ptr<web::WebState> CreateWebStateWithNavigationEntries( |
| ProfileIOS* profile, |
| int last_committed_item_index, |
| const std::vector<sessions::SerializedNavigationEntry>& navigations) { |
| DCHECK_GE(last_committed_item_index, 0); |
| DCHECK_LT(static_cast<size_t>(last_committed_item_index), navigations.size()); |
| |
| web::WebState::CreateParams params(profile); |
| auto web_state = web::WebState::Create(params); |
| web_state->GetNavigationManager()->Restore( |
| last_committed_item_index, |
| sessions::IOSSerializedNavigationBuilder::ToNavigationItems(navigations)); |
| return web_state; |
| } |
| |
| std::string GetSessionIdentifier(Browser* browser) { |
| SceneState* scene_state = browser->GetSceneState(); |
| const std::string& scene_session = scene_state.sceneSessionID; |
| DCHECK(!scene_session.empty()); |
| |
| return GetSessionIdentifier(scene_session, browser->IsInactive()); |
| } |
| |
| std::string GetSessionIdentifier(const std::string& scene_session_identifier, |
| bool inactive_browser) { |
| if (!inactive_browser) { |
| return scene_session_identifier; |
| } |
| |
| return base::StrCat( |
| {scene_session_identifier, kInactiveBrowserIdentifierSuffix}); |
| } |
| |
| } // namespace session_util |