Home | History | Annotate | Download | only in sync_file_system
      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 File::Error 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 FileErrorToSyncStatusCode(
    112     base::File::Error file_error) {
    113   switch (file_error) {
    114     case base::File::FILE_OK:
    115       return SYNC_STATUS_OK;
    116     case base::File::FILE_ERROR_FAILED:
    117       return SYNC_FILE_ERROR_FAILED;
    118     case base::File::FILE_ERROR_IN_USE:
    119       return SYNC_FILE_ERROR_IN_USE;
    120     case base::File::FILE_ERROR_EXISTS:
    121       return SYNC_FILE_ERROR_EXISTS;
    122     case base::File::FILE_ERROR_NOT_FOUND:
    123       return SYNC_FILE_ERROR_NOT_FOUND;
    124     case base::File::FILE_ERROR_ACCESS_DENIED:
    125       return SYNC_FILE_ERROR_ACCESS_DENIED;
    126     case base::File::FILE_ERROR_TOO_MANY_OPENED:
    127       return SYNC_FILE_ERROR_TOO_MANY_OPENED;
    128     case base::File::FILE_ERROR_NO_MEMORY:
    129       return SYNC_FILE_ERROR_NO_MEMORY;
    130     case base::File::FILE_ERROR_NO_SPACE:
    131       return SYNC_FILE_ERROR_NO_SPACE;
    132     case base::File::FILE_ERROR_NOT_A_DIRECTORY:
    133       return SYNC_FILE_ERROR_NOT_A_DIRECTORY;
    134     case base::File::FILE_ERROR_INVALID_OPERATION:
    135       return SYNC_FILE_ERROR_INVALID_OPERATION;
    136     case base::File::FILE_ERROR_SECURITY:
    137       return SYNC_FILE_ERROR_SECURITY;
    138     case base::File::FILE_ERROR_ABORT:
    139       return SYNC_FILE_ERROR_ABORT;
    140     case base::File::FILE_ERROR_NOT_A_FILE:
    141       return SYNC_FILE_ERROR_NOT_A_FILE;
    142     case base::File::FILE_ERROR_NOT_EMPTY:
    143       return SYNC_FILE_ERROR_NOT_EMPTY;
    144     case base::File::FILE_ERROR_INVALID_URL:
    145       return SYNC_FILE_ERROR_INVALID_URL;
    146     case base::File::FILE_ERROR_IO:
    147       return SYNC_FILE_ERROR_IO;
    148     case base::File::FILE_ERROR_MAX:
    149       NOTREACHED();
    150       return SYNC_FILE_ERROR_FAILED;
    151   }
    152   // Return the value as is, so the value converted by
    153   // SyncStatusCodeToFileError could be restored.
    154   return static_cast<SyncStatusCode>(file_error);
    155 }
    156 
    157 base::File::Error SyncStatusCodeToFileError(
    158     SyncStatusCode status) {
    159   switch (status) {
    160     case SYNC_STATUS_OK:
    161       return base::File::FILE_OK;
    162     case SYNC_FILE_ERROR_FAILED:
    163       return base::File::FILE_ERROR_FAILED;
    164     case SYNC_FILE_ERROR_IN_USE:
    165       return base::File::FILE_ERROR_IN_USE;
    166     case SYNC_FILE_ERROR_EXISTS:
    167       return base::File::FILE_ERROR_EXISTS;
    168     case SYNC_FILE_ERROR_NOT_FOUND:
    169       return base::File::FILE_ERROR_NOT_FOUND;
    170     case SYNC_FILE_ERROR_ACCESS_DENIED:
    171       return base::File::FILE_ERROR_ACCESS_DENIED;
    172     case SYNC_FILE_ERROR_TOO_MANY_OPENED:
    173       return base::File::FILE_ERROR_TOO_MANY_OPENED;
    174     case SYNC_FILE_ERROR_NO_MEMORY:
    175       return base::File::FILE_ERROR_NO_MEMORY;
    176     case SYNC_FILE_ERROR_NO_SPACE:
    177       return base::File::FILE_ERROR_NO_SPACE;
    178     case SYNC_FILE_ERROR_NOT_A_DIRECTORY:
    179       return base::File::FILE_ERROR_NOT_A_DIRECTORY;
    180     case SYNC_FILE_ERROR_INVALID_OPERATION:
    181       return base::File::FILE_ERROR_INVALID_OPERATION;
    182     case SYNC_FILE_ERROR_SECURITY:
    183       return base::File::FILE_ERROR_SECURITY;
    184     case SYNC_FILE_ERROR_ABORT:
    185       return base::File::FILE_ERROR_ABORT;
    186     case SYNC_FILE_ERROR_NOT_A_FILE:
    187       return base::File::FILE_ERROR_NOT_A_FILE;
    188     case SYNC_FILE_ERROR_NOT_EMPTY:
    189       return base::File::FILE_ERROR_NOT_EMPTY;
    190     case SYNC_FILE_ERROR_INVALID_URL:
    191       return base::File::FILE_ERROR_INVALID_URL;
    192     case SYNC_FILE_ERROR_IO:
    193       return base::File::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::File::Error>(status);
    198   }
    199 }
    200 
    201 }  // namespace sync_file_system
    202