sync_status_code.cc revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
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_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
98SyncStatusCode 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
111SyncStatusCode 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    default:
149      return SYNC_FILE_ERROR_FAILED;
150  }
151}
152
153base::PlatformFileError SyncStatusCodeToPlatformFileError(
154    SyncStatusCode status) {
155  switch (status) {
156    case SYNC_STATUS_OK:
157      return base::PLATFORM_FILE_OK;
158    case SYNC_FILE_ERROR_FAILED:
159      return base::PLATFORM_FILE_ERROR_FAILED;
160    case SYNC_FILE_ERROR_IN_USE:
161      return base::PLATFORM_FILE_ERROR_IN_USE;
162    case SYNC_FILE_ERROR_EXISTS:
163      return base::PLATFORM_FILE_ERROR_EXISTS;
164    case SYNC_FILE_ERROR_NOT_FOUND:
165      return base::PLATFORM_FILE_ERROR_NOT_FOUND;
166    case SYNC_FILE_ERROR_ACCESS_DENIED:
167      return base::PLATFORM_FILE_ERROR_ACCESS_DENIED;
168    case SYNC_FILE_ERROR_TOO_MANY_OPENED:
169      return base::PLATFORM_FILE_ERROR_TOO_MANY_OPENED;
170    case SYNC_FILE_ERROR_NO_MEMORY:
171      return base::PLATFORM_FILE_ERROR_NO_MEMORY;
172    case SYNC_FILE_ERROR_NO_SPACE:
173      return base::PLATFORM_FILE_ERROR_NO_SPACE;
174    case SYNC_FILE_ERROR_NOT_A_DIRECTORY:
175      return base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY;
176    case SYNC_FILE_ERROR_INVALID_OPERATION:
177      return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
178    case SYNC_FILE_ERROR_SECURITY:
179      return base::PLATFORM_FILE_ERROR_SECURITY;
180    case SYNC_FILE_ERROR_ABORT:
181      return base::PLATFORM_FILE_ERROR_ABORT;
182    case SYNC_FILE_ERROR_NOT_A_FILE:
183      return base::PLATFORM_FILE_ERROR_NOT_A_FILE;
184    case SYNC_FILE_ERROR_NOT_EMPTY:
185      return base::PLATFORM_FILE_ERROR_NOT_EMPTY;
186    case SYNC_FILE_ERROR_INVALID_URL:
187      return base::PLATFORM_FILE_ERROR_INVALID_URL;
188    case SYNC_FILE_ERROR_IO:
189      return base::PLATFORM_FILE_ERROR_IO;
190    default:
191      return base::PLATFORM_FILE_ERROR_FAILED;
192  }
193}
194
195}  // namespace sync_file_system
196