sync_status_code.cc revision 3551c9c881056c480085172ff9840cab31610854
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
10namespace sync_file_system {
11
12const 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_RETRY:
78      return "Sync: retry to synchronize.";
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  }
92  NOTREACHED();
93  return "Unknown error.";
94}
95
96SyncStatusCode LevelDBStatusToSyncStatusCode(const leveldb::Status& status) {
97  if (status.ok())
98    return SYNC_STATUS_OK;
99  else if (status.IsNotFound())
100    return SYNC_DATABASE_ERROR_NOT_FOUND;
101  else if (status.IsCorruption())
102    return SYNC_DATABASE_ERROR_CORRUPTION;
103  else if (status.IsIOError())
104    return SYNC_DATABASE_ERROR_IO_ERROR;
105  else
106    return SYNC_DATABASE_ERROR_FAILED;
107}
108
109SyncStatusCode PlatformFileErrorToSyncStatusCode(
110    base::PlatformFileError file_error) {
111  switch (file_error) {
112    case base::PLATFORM_FILE_OK:
113      return SYNC_STATUS_OK;
114    case base::PLATFORM_FILE_ERROR_FAILED:
115      return SYNC_FILE_ERROR_FAILED;
116    case base::PLATFORM_FILE_ERROR_IN_USE:
117      return SYNC_FILE_ERROR_IN_USE;
118    case base::PLATFORM_FILE_ERROR_EXISTS:
119      return SYNC_FILE_ERROR_EXISTS;
120    case base::PLATFORM_FILE_ERROR_NOT_FOUND:
121      return SYNC_FILE_ERROR_NOT_FOUND;
122    case base::PLATFORM_FILE_ERROR_ACCESS_DENIED:
123      return SYNC_FILE_ERROR_ACCESS_DENIED;
124    case base::PLATFORM_FILE_ERROR_TOO_MANY_OPENED:
125      return SYNC_FILE_ERROR_TOO_MANY_OPENED;
126    case base::PLATFORM_FILE_ERROR_NO_MEMORY:
127      return SYNC_FILE_ERROR_NO_MEMORY;
128    case base::PLATFORM_FILE_ERROR_NO_SPACE:
129      return SYNC_FILE_ERROR_NO_SPACE;
130    case base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY:
131      return SYNC_FILE_ERROR_NOT_A_DIRECTORY;
132    case base::PLATFORM_FILE_ERROR_INVALID_OPERATION:
133      return SYNC_FILE_ERROR_INVALID_OPERATION;
134    case base::PLATFORM_FILE_ERROR_SECURITY:
135      return SYNC_FILE_ERROR_SECURITY;
136    case base::PLATFORM_FILE_ERROR_ABORT:
137      return SYNC_FILE_ERROR_ABORT;
138    case base::PLATFORM_FILE_ERROR_NOT_A_FILE:
139      return SYNC_FILE_ERROR_NOT_A_FILE;
140    case base::PLATFORM_FILE_ERROR_NOT_EMPTY:
141      return SYNC_FILE_ERROR_NOT_EMPTY;
142    case base::PLATFORM_FILE_ERROR_INVALID_URL:
143      return SYNC_FILE_ERROR_INVALID_URL;
144    case base::PLATFORM_FILE_ERROR_IO:
145      return SYNC_FILE_ERROR_IO;
146    default:
147      return SYNC_FILE_ERROR_FAILED;
148  }
149}
150
151}  // namespace sync_file_system
152