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 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 
     54     // Database related errors.
     55     case SYNC_DATABASE_ERROR_NOT_FOUND:
     56       return "Database not found.";
     57     case SYNC_DATABASE_ERROR_CORRUPTION:
     58       return "Database was corrupted.";
     59     case SYNC_DATABASE_ERROR_IO_ERROR:
     60       return "Database I/O error.";
     61     case SYNC_DATABASE_ERROR_FAILED:
     62       return "Database operation failed.";
     63 
     64     // Sync specific status code.
     65     case SYNC_STATUS_FILE_BUSY:
     66       return "Sync: file is busy.";
     67     case SYNC_STATUS_HAS_CONFLICT:
     68       return "Sync: file has conflict.";
     69     case SYNC_STATUS_NO_CONFLICT:
     70       return "Sync: file has no conflict.";
     71     case SYNC_STATUS_ABORT:
     72       return "Sync: operation aborted.";
     73     case SYNC_STATUS_NO_CHANGE_TO_SYNC:
     74       return "Sync: no change to synchronize.";
     75     case SYNC_STATUS_RETRY:
     76       return "Sync: retry to synchronize.";
     77     case SYNC_STATUS_NETWORK_ERROR:
     78       return "Sync: network error.";
     79     case SYNC_STATUS_AUTHENTICATION_FAILED:
     80       return "Sync: authentication failed.";
     81     case SYNC_STATUS_UNKNOWN_ORIGIN:
     82       return "Sync: unknown origin.";
     83     case SYNC_STATUS_NOT_MODIFIED:
     84       return "Sync: file not modified.";
     85     case SYNC_STATUS_SYNC_DISABLED:
     86       return "Sync: sync is disabled.";
     87     case SYNC_STATUS_ACCESS_FORBIDDEN:
     88       return "Sync: service access forbidden.";
     89   }
     90   NOTREACHED();
     91   return "Unknown error.";
     92 }
     93 
     94 SyncStatusCode LevelDBStatusToSyncStatusCode(const leveldb::Status& status) {
     95   if (status.ok())
     96     return SYNC_STATUS_OK;
     97   else if (status.IsNotFound())
     98     return SYNC_DATABASE_ERROR_NOT_FOUND;
     99   else if (status.IsCorruption())
    100     return SYNC_DATABASE_ERROR_CORRUPTION;
    101   else if (status.IsIOError())
    102     return SYNC_DATABASE_ERROR_IO_ERROR;
    103   else
    104     return SYNC_DATABASE_ERROR_FAILED;
    105 }
    106 
    107 SyncStatusCode PlatformFileErrorToSyncStatusCode(
    108     base::PlatformFileError file_error) {
    109   switch (file_error) {
    110     case base::PLATFORM_FILE_OK:
    111       return SYNC_STATUS_OK;
    112     case base::PLATFORM_FILE_ERROR_FAILED:
    113       return SYNC_FILE_ERROR_FAILED;
    114     case base::PLATFORM_FILE_ERROR_IN_USE:
    115       return SYNC_FILE_ERROR_IN_USE;
    116     case base::PLATFORM_FILE_ERROR_EXISTS:
    117       return SYNC_FILE_ERROR_EXISTS;
    118     case base::PLATFORM_FILE_ERROR_NOT_FOUND:
    119       return SYNC_FILE_ERROR_NOT_FOUND;
    120     case base::PLATFORM_FILE_ERROR_ACCESS_DENIED:
    121       return SYNC_FILE_ERROR_ACCESS_DENIED;
    122     case base::PLATFORM_FILE_ERROR_TOO_MANY_OPENED:
    123       return SYNC_FILE_ERROR_TOO_MANY_OPENED;
    124     case base::PLATFORM_FILE_ERROR_NO_MEMORY:
    125       return SYNC_FILE_ERROR_NO_MEMORY;
    126     case base::PLATFORM_FILE_ERROR_NO_SPACE:
    127       return SYNC_FILE_ERROR_NO_SPACE;
    128     case base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY:
    129       return SYNC_FILE_ERROR_NOT_A_DIRECTORY;
    130     case base::PLATFORM_FILE_ERROR_INVALID_OPERATION:
    131       return SYNC_FILE_ERROR_INVALID_OPERATION;
    132     case base::PLATFORM_FILE_ERROR_SECURITY:
    133       return SYNC_FILE_ERROR_SECURITY;
    134     case base::PLATFORM_FILE_ERROR_ABORT:
    135       return SYNC_FILE_ERROR_ABORT;
    136     case base::PLATFORM_FILE_ERROR_NOT_A_FILE:
    137       return SYNC_FILE_ERROR_NOT_A_FILE;
    138     case base::PLATFORM_FILE_ERROR_NOT_EMPTY:
    139       return SYNC_FILE_ERROR_NOT_EMPTY;
    140     case base::PLATFORM_FILE_ERROR_INVALID_URL:
    141       return SYNC_FILE_ERROR_INVALID_URL;
    142     default:
    143       return SYNC_FILE_ERROR_FAILED;
    144   }
    145 }
    146 
    147 }  // namespace sync_file_system
    148