1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
|
// Copyright 2013 The Chromium Authors
// 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/notreached.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();
}
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 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
|