| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef IOS_CHROME_BROWSER_SESSIONS_MODEL_SESSION_MIGRATION_H_ |
| #define IOS_CHROME_BROWSER_SESSIONS_MODEL_SESSION_MIGRATION_H_ |
| |
| #include <ostream> |
| #include <string> |
| #include <vector> |
| |
| namespace base { |
| class FilePath; |
| } // namespace base |
| |
| namespace ios::sessions { |
| |
| // Result of the storage migration. |
| struct MigrationResult { |
| // Represents the possible migration values. |
| enum class Status { |
| kSuccess, |
| kFailure, |
| }; |
| |
| Status status; |
| int32_t next_session_identifier; |
| |
| static MigrationResult Success(int32_t next_session_identifier) { |
| return { |
| .status = Status::kSuccess, |
| .next_session_identifier = next_session_identifier, |
| }; |
| } |
| |
| static MigrationResult Failure() { |
| return { |
| .status = Status::kFailure, |
| .next_session_identifier = 0, |
| }; |
| } |
| }; |
| |
| // Migrates all sessions found in `paths` from legacy to optimized format |
| // and returns the status of the migration. |
| // |
| // If the migration was a success, all storage is in optimized format and |
| // all legacy data has been deleted. Otherwise, the original data is left |
| // untouched and the partially migrated data deleted. |
| MigrationResult MigrateSessionsInPathsToOptimized( |
| const std::vector<base::FilePath>& paths, |
| int32_t next_session_identifier); |
| |
| // Migrates all sessions found in `paths` from optimized to legacy format |
| // and returns the status of the migration. |
| // |
| // If the migration was a success, all storage is in legacy format and all |
| // optimized data has been deleted. Otherwise, the original data is left |
| // untouched and the partially migrated data deleted. |
| MigrationResult MigrateSessionsInPathsToLegacy( |
| const std::vector<base::FilePath>& paths, |
| int32_t next_session_identifier); |
| |
| // Comparison operators for testing. |
| bool operator==(const MigrationResult& lhs, const MigrationResult& rhs); |
| bool operator!=(const MigrationResult& lhs, const MigrationResult& rhs); |
| |
| // Insertion operator for testing. |
| std::ostream& operator<<(std::ostream& stream, const MigrationResult& result); |
| |
| } // namespace ios::sessions |
| |
| #endif // IOS_CHROME_BROWSER_SESSIONS_MODEL_SESSION_MIGRATION_H_ |