blob: 85a989ce5fa51258d33687274b3425a95f01b1f9 [file] [log] [blame]
// 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<SyncStatusCode>(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<base::File::Error>(status);
}
}
} // namespace sync_file_system