// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/sync_file_system/sync_status_code.h" #include "base/logging.h" #include "third_party/leveldatabase/src/include/leveldb/db.h" namespace sync_file_system { const char* SyncStatusCodeToString(SyncStatusCode status) { switch (status) { case SYNC_STATUS_OK: return "OK."; case SYNC_STATUS_UNKNOWN: return "Unknown sync status."; case SYNC_STATUS_FAILED: return "Failed."; // PlatformFile related errors. // TODO(nhiroki): add stringize function for File::Error into base/. case SYNC_FILE_ERROR_FAILED: return "File operation failed."; case SYNC_FILE_ERROR_IN_USE: return "File currently in use."; case SYNC_FILE_ERROR_EXISTS: return "File already exists."; case SYNC_FILE_ERROR_NOT_FOUND: return "File not found."; case SYNC_FILE_ERROR_ACCESS_DENIED: return "File access denied."; case SYNC_FILE_ERROR_TOO_MANY_OPENED: return "Too many files open."; case SYNC_FILE_ERROR_NO_MEMORY: return "Out of memory."; case SYNC_FILE_ERROR_NO_SPACE: return "No space left on disk."; case SYNC_FILE_ERROR_NOT_A_DIRECTORY: return "Not a directory."; case SYNC_FILE_ERROR_INVALID_OPERATION: return "Invalid file operation."; case SYNC_FILE_ERROR_SECURITY: return "Security error."; case SYNC_FILE_ERROR_ABORT: return "File operation aborted."; case SYNC_FILE_ERROR_NOT_A_FILE: return "Not a file."; case SYNC_FILE_ERROR_NOT_EMPTY: return "File not empty."; case SYNC_FILE_ERROR_INVALID_URL: return "Invalid URL."; case SYNC_FILE_ERROR_IO: return "OS or hardware error."; // Database related errors. case SYNC_DATABASE_ERROR_NOT_FOUND: return "Database not found."; case SYNC_DATABASE_ERROR_CORRUPTION: return "Database was corrupted."; case SYNC_DATABASE_ERROR_IO_ERROR: return "Database I/O error."; case SYNC_DATABASE_ERROR_FAILED: return "Database operation failed."; // Sync specific status code. case SYNC_STATUS_FILE_BUSY: return "Sync: file is busy."; case SYNC_STATUS_HAS_CONFLICT: return "Sync: file has conflict."; case SYNC_STATUS_NO_CONFLICT: return "Sync: file has no conflict."; case SYNC_STATUS_ABORT: return "Sync: operation aborted."; case SYNC_STATUS_NO_CHANGE_TO_SYNC: return "Sync: no change to synchronize."; case SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE: return "Sync: service is temporarily unavailable."; case SYNC_STATUS_NETWORK_ERROR: return "Sync: network error."; case SYNC_STATUS_AUTHENTICATION_FAILED: return "Sync: authentication failed."; case SYNC_STATUS_UNKNOWN_ORIGIN: return "Sync: unknown origin."; case SYNC_STATUS_NOT_MODIFIED: return "Sync: file not modified."; case SYNC_STATUS_SYNC_DISABLED: return "Sync: sync is disabled."; case SYNC_STATUS_ACCESS_FORBIDDEN: return "Sync: service access forbidden."; case SYNC_STATUS_RETRY: return "Sync: retry the operation."; } NOTREACHED(); return "Unknown error."; } SyncStatusCode LevelDBStatusToSyncStatusCode(const leveldb::Status& status) { if (status.ok()) return SYNC_STATUS_OK; else if (status.IsNotFound()) return SYNC_DATABASE_ERROR_NOT_FOUND; else if (status.IsCorruption()) return SYNC_DATABASE_ERROR_CORRUPTION; else if (status.IsIOError()) return SYNC_DATABASE_ERROR_IO_ERROR; else return SYNC_DATABASE_ERROR_FAILED; } SyncStatusCode FileErrorToSyncStatusCode( base::File::Error file_error) { switch (file_error) { case base::File::FILE_OK: return SYNC_STATUS_OK; case base::File::FILE_ERROR_FAILED: return SYNC_FILE_ERROR_FAILED; case base::File::FILE_ERROR_IN_USE: return SYNC_FILE_ERROR_IN_USE; case base::File::FILE_ERROR_EXISTS: return SYNC_FILE_ERROR_EXISTS; case base::File::FILE_ERROR_NOT_FOUND: return SYNC_FILE_ERROR_NOT_FOUND; case base::File::FILE_ERROR_ACCESS_DENIED: return SYNC_FILE_ERROR_ACCESS_DENIED; case base::File::FILE_ERROR_TOO_MANY_OPENED: return SYNC_FILE_ERROR_TOO_MANY_OPENED; case base::File::FILE_ERROR_NO_MEMORY: return SYNC_FILE_ERROR_NO_MEMORY; case base::File::FILE_ERROR_NO_SPACE: return SYNC_FILE_ERROR_NO_SPACE; case base::File::FILE_ERROR_NOT_A_DIRECTORY: return SYNC_FILE_ERROR_NOT_A_DIRECTORY; case base::File::FILE_ERROR_INVALID_OPERATION: return SYNC_FILE_ERROR_INVALID_OPERATION; case base::File::FILE_ERROR_SECURITY: return SYNC_FILE_ERROR_SECURITY; case base::File::FILE_ERROR_ABORT: return SYNC_FILE_ERROR_ABORT; case base::File::FILE_ERROR_NOT_A_FILE: return SYNC_FILE_ERROR_NOT_A_FILE; case base::File::FILE_ERROR_NOT_EMPTY: return SYNC_FILE_ERROR_NOT_EMPTY; case base::File::FILE_ERROR_INVALID_URL: return SYNC_FILE_ERROR_INVALID_URL; case base::File::FILE_ERROR_IO: return SYNC_FILE_ERROR_IO; case base::File::FILE_ERROR_MAX: NOTREACHED(); return SYNC_FILE_ERROR_FAILED; } // Return the value as is, so the value converted by // SyncStatusCodeToFileError could be restored. return static_cast(file_error); } base::File::Error SyncStatusCodeToFileError( SyncStatusCode status) { switch (status) { case SYNC_STATUS_OK: return base::File::FILE_OK; case SYNC_FILE_ERROR_FAILED: return base::File::FILE_ERROR_FAILED; case SYNC_FILE_ERROR_IN_USE: return base::File::FILE_ERROR_IN_USE; case SYNC_FILE_ERROR_EXISTS: return base::File::FILE_ERROR_EXISTS; case SYNC_FILE_ERROR_NOT_FOUND: return base::File::FILE_ERROR_NOT_FOUND; case SYNC_FILE_ERROR_ACCESS_DENIED: return base::File::FILE_ERROR_ACCESS_DENIED; case SYNC_FILE_ERROR_TOO_MANY_OPENED: return base::File::FILE_ERROR_TOO_MANY_OPENED; case SYNC_FILE_ERROR_NO_MEMORY: return base::File::FILE_ERROR_NO_MEMORY; case SYNC_FILE_ERROR_NO_SPACE: return base::File::FILE_ERROR_NO_SPACE; case SYNC_FILE_ERROR_NOT_A_DIRECTORY: return base::File::FILE_ERROR_NOT_A_DIRECTORY; case SYNC_FILE_ERROR_INVALID_OPERATION: return base::File::FILE_ERROR_INVALID_OPERATION; case SYNC_FILE_ERROR_SECURITY: return base::File::FILE_ERROR_SECURITY; case SYNC_FILE_ERROR_ABORT: return base::File::FILE_ERROR_ABORT; case SYNC_FILE_ERROR_NOT_A_FILE: return base::File::FILE_ERROR_NOT_A_FILE; case SYNC_FILE_ERROR_NOT_EMPTY: return base::File::FILE_ERROR_NOT_EMPTY; case SYNC_FILE_ERROR_INVALID_URL: return base::File::FILE_ERROR_INVALID_URL; case SYNC_FILE_ERROR_IO: return base::File::FILE_ERROR_IO; default: // Return the value as is, so that caller may be able to // restore the information. return static_cast(status); } } } // namespace sync_file_system