1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/sync_file_system/sync_status_code.h" 6 7 #include "base/logging.h" 8 #include "third_party/leveldatabase/src/include/leveldb/db.h" 9 10 namespace sync_file_system { 11 12 const char* SyncStatusCodeToString(SyncStatusCode status) { 13 switch (status) { 14 case SYNC_STATUS_OK: 15 return "OK."; 16 case SYNC_STATUS_UNKNOWN: 17 return "Unknown sync status."; 18 case SYNC_STATUS_FAILED: 19 return "Failed."; 20 21 // PlatformFile related errors. 22 // TODO(nhiroki): add stringize function for PlatformFileError into base/. 23 case SYNC_FILE_ERROR_FAILED: 24 return "File operation failed."; 25 case SYNC_FILE_ERROR_IN_USE: 26 return "File currently in use."; 27 case SYNC_FILE_ERROR_EXISTS: 28 return "File already exists."; 29 case SYNC_FILE_ERROR_NOT_FOUND: 30 return "File not found."; 31 case SYNC_FILE_ERROR_ACCESS_DENIED: 32 return "File access denied."; 33 case SYNC_FILE_ERROR_TOO_MANY_OPENED: 34 return "Too many files open."; 35 case SYNC_FILE_ERROR_NO_MEMORY: 36 return "Out of memory."; 37 case SYNC_FILE_ERROR_NO_SPACE: 38 return "No space left on disk."; 39 case SYNC_FILE_ERROR_NOT_A_DIRECTORY: 40 return "Not a directory."; 41 case SYNC_FILE_ERROR_INVALID_OPERATION: 42 return "Invalid file operation."; 43 case SYNC_FILE_ERROR_SECURITY: 44 return "Security error."; 45 case SYNC_FILE_ERROR_ABORT: 46 return "File operation aborted."; 47 case SYNC_FILE_ERROR_NOT_A_FILE: 48 return "Not a file."; 49 case SYNC_FILE_ERROR_NOT_EMPTY: 50 return "File not empty."; 51 case SYNC_FILE_ERROR_INVALID_URL: 52 return "Invalid URL."; 53 case SYNC_FILE_ERROR_IO: 54 return "OS or hardware error."; 55 56 // Database related errors. 57 case SYNC_DATABASE_ERROR_NOT_FOUND: 58 return "Database not found."; 59 case SYNC_DATABASE_ERROR_CORRUPTION: 60 return "Database was corrupted."; 61 case SYNC_DATABASE_ERROR_IO_ERROR: 62 return "Database I/O error."; 63 case SYNC_DATABASE_ERROR_FAILED: 64 return "Database operation failed."; 65 66 // Sync specific status code. 67 case SYNC_STATUS_FILE_BUSY: 68 return "Sync: file is busy."; 69 case SYNC_STATUS_HAS_CONFLICT: 70 return "Sync: file has conflict."; 71 case SYNC_STATUS_NO_CONFLICT: 72 return "Sync: file has no conflict."; 73 case SYNC_STATUS_ABORT: 74 return "Sync: operation aborted."; 75 case SYNC_STATUS_NO_CHANGE_TO_SYNC: 76 return "Sync: no change to synchronize."; 77 case SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE: 78 return "Sync: service is temporarily unavailable."; 79 case SYNC_STATUS_NETWORK_ERROR: 80 return "Sync: network error."; 81 case SYNC_STATUS_AUTHENTICATION_FAILED: 82 return "Sync: authentication failed."; 83 case SYNC_STATUS_UNKNOWN_ORIGIN: 84 return "Sync: unknown origin."; 85 case SYNC_STATUS_NOT_MODIFIED: 86 return "Sync: file not modified."; 87 case SYNC_STATUS_SYNC_DISABLED: 88 return "Sync: sync is disabled."; 89 case SYNC_STATUS_ACCESS_FORBIDDEN: 90 return "Sync: service access forbidden."; 91 case SYNC_STATUS_RETRY: 92 return "Sync: retry the operation."; 93 } 94 NOTREACHED(); 95 return "Unknown error."; 96 } 97 98 SyncStatusCode LevelDBStatusToSyncStatusCode(const leveldb::Status& status) { 99 if (status.ok()) 100 return SYNC_STATUS_OK; 101 else if (status.IsNotFound()) 102 return SYNC_DATABASE_ERROR_NOT_FOUND; 103 else if (status.IsCorruption()) 104 return SYNC_DATABASE_ERROR_CORRUPTION; 105 else if (status.IsIOError()) 106 return SYNC_DATABASE_ERROR_IO_ERROR; 107 else 108 return SYNC_DATABASE_ERROR_FAILED; 109 } 110 111 SyncStatusCode PlatformFileErrorToSyncStatusCode( 112 base::PlatformFileError file_error) { 113 switch (file_error) { 114 case base::PLATFORM_FILE_OK: 115 return SYNC_STATUS_OK; 116 case base::PLATFORM_FILE_ERROR_FAILED: 117 return SYNC_FILE_ERROR_FAILED; 118 case base::PLATFORM_FILE_ERROR_IN_USE: 119 return SYNC_FILE_ERROR_IN_USE; 120 case base::PLATFORM_FILE_ERROR_EXISTS: 121 return SYNC_FILE_ERROR_EXISTS; 122 case base::PLATFORM_FILE_ERROR_NOT_FOUND: 123 return SYNC_FILE_ERROR_NOT_FOUND; 124 case base::PLATFORM_FILE_ERROR_ACCESS_DENIED: 125 return SYNC_FILE_ERROR_ACCESS_DENIED; 126 case base::PLATFORM_FILE_ERROR_TOO_MANY_OPENED: 127 return SYNC_FILE_ERROR_TOO_MANY_OPENED; 128 case base::PLATFORM_FILE_ERROR_NO_MEMORY: 129 return SYNC_FILE_ERROR_NO_MEMORY; 130 case base::PLATFORM_FILE_ERROR_NO_SPACE: 131 return SYNC_FILE_ERROR_NO_SPACE; 132 case base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY: 133 return SYNC_FILE_ERROR_NOT_A_DIRECTORY; 134 case base::PLATFORM_FILE_ERROR_INVALID_OPERATION: 135 return SYNC_FILE_ERROR_INVALID_OPERATION; 136 case base::PLATFORM_FILE_ERROR_SECURITY: 137 return SYNC_FILE_ERROR_SECURITY; 138 case base::PLATFORM_FILE_ERROR_ABORT: 139 return SYNC_FILE_ERROR_ABORT; 140 case base::PLATFORM_FILE_ERROR_NOT_A_FILE: 141 return SYNC_FILE_ERROR_NOT_A_FILE; 142 case base::PLATFORM_FILE_ERROR_NOT_EMPTY: 143 return SYNC_FILE_ERROR_NOT_EMPTY; 144 case base::PLATFORM_FILE_ERROR_INVALID_URL: 145 return SYNC_FILE_ERROR_INVALID_URL; 146 case base::PLATFORM_FILE_ERROR_IO: 147 return SYNC_FILE_ERROR_IO; 148 case base::PLATFORM_FILE_ERROR_MAX: 149 NOTREACHED(); 150 return SYNC_FILE_ERROR_FAILED; 151 } 152 // Return the value as is, so the value converted by 153 // SyncStatusCodeToPlatformFileError could be restored. 154 return static_cast<SyncStatusCode>(file_error); 155 } 156 157 base::PlatformFileError SyncStatusCodeToPlatformFileError( 158 SyncStatusCode status) { 159 switch (status) { 160 case SYNC_STATUS_OK: 161 return base::PLATFORM_FILE_OK; 162 case SYNC_FILE_ERROR_FAILED: 163 return base::PLATFORM_FILE_ERROR_FAILED; 164 case SYNC_FILE_ERROR_IN_USE: 165 return base::PLATFORM_FILE_ERROR_IN_USE; 166 case SYNC_FILE_ERROR_EXISTS: 167 return base::PLATFORM_FILE_ERROR_EXISTS; 168 case SYNC_FILE_ERROR_NOT_FOUND: 169 return base::PLATFORM_FILE_ERROR_NOT_FOUND; 170 case SYNC_FILE_ERROR_ACCESS_DENIED: 171 return base::PLATFORM_FILE_ERROR_ACCESS_DENIED; 172 case SYNC_FILE_ERROR_TOO_MANY_OPENED: 173 return base::PLATFORM_FILE_ERROR_TOO_MANY_OPENED; 174 case SYNC_FILE_ERROR_NO_MEMORY: 175 return base::PLATFORM_FILE_ERROR_NO_MEMORY; 176 case SYNC_FILE_ERROR_NO_SPACE: 177 return base::PLATFORM_FILE_ERROR_NO_SPACE; 178 case SYNC_FILE_ERROR_NOT_A_DIRECTORY: 179 return base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY; 180 case SYNC_FILE_ERROR_INVALID_OPERATION: 181 return base::PLATFORM_FILE_ERROR_INVALID_OPERATION; 182 case SYNC_FILE_ERROR_SECURITY: 183 return base::PLATFORM_FILE_ERROR_SECURITY; 184 case SYNC_FILE_ERROR_ABORT: 185 return base::PLATFORM_FILE_ERROR_ABORT; 186 case SYNC_FILE_ERROR_NOT_A_FILE: 187 return base::PLATFORM_FILE_ERROR_NOT_A_FILE; 188 case SYNC_FILE_ERROR_NOT_EMPTY: 189 return base::PLATFORM_FILE_ERROR_NOT_EMPTY; 190 case SYNC_FILE_ERROR_INVALID_URL: 191 return base::PLATFORM_FILE_ERROR_INVALID_URL; 192 case SYNC_FILE_ERROR_IO: 193 return base::PLATFORM_FILE_ERROR_IO; 194 default: 195 // Return the value as is, so that caller may be able to 196 // restore the information. 197 return static_cast<base::PlatformFileError>(status); 198 } 199 } 200 201 } // namespace sync_file_system 202