190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "chrome/browser/sync_file_system/sync_status_code.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/leveldatabase/src/include/leveldb/db.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace sync_file_system {
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char* SyncStatusCodeToString(SyncStatusCode status) {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  switch (status) {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_STATUS_OK:
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "OK.";
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_STATUS_UNKNOWN:
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Unknown sync status.";
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_STATUS_FAILED:
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Failed.";
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // PlatformFile related errors.
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // TODO(nhiroki): add stringize function for File::Error into base/.
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_FAILED:
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "File operation failed.";
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_IN_USE:
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "File currently in use.";
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_EXISTS:
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "File already exists.";
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_NOT_FOUND:
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "File not found.";
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_ACCESS_DENIED:
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "File access denied.";
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_TOO_MANY_OPENED:
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Too many files open.";
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_NO_MEMORY:
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Out of memory.";
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_NO_SPACE:
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "No space left on disk.";
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_NOT_A_DIRECTORY:
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Not a directory.";
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_INVALID_OPERATION:
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Invalid file operation.";
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_SECURITY:
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Security error.";
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_ABORT:
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "File operation aborted.";
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_NOT_A_FILE:
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Not a file.";
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_NOT_EMPTY:
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "File not empty.";
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_FILE_ERROR_INVALID_URL:
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Invalid URL.";
533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    case SYNC_FILE_ERROR_IO:
543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      return "OS or hardware error.";
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Database related errors.
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_DATABASE_ERROR_NOT_FOUND:
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Database not found.";
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_DATABASE_ERROR_CORRUPTION:
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Database was corrupted.";
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_DATABASE_ERROR_IO_ERROR:
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Database I/O error.";
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_DATABASE_ERROR_FAILED:
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Database operation failed.";
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Sync specific status code.
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_STATUS_FILE_BUSY:
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Sync: file is busy.";
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_STATUS_HAS_CONFLICT:
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Sync: file has conflict.";
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_STATUS_NO_CONFLICT:
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Sync: file has no conflict.";
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_STATUS_ABORT:
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Sync: operation aborted.";
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_STATUS_NO_CHANGE_TO_SYNC:
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Sync: no change to synchronize.";
77d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    case SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE:
78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      return "Sync: service is temporarily unavailable.";
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_STATUS_NETWORK_ERROR:
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Sync: network error.";
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_STATUS_AUTHENTICATION_FAILED:
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Sync: authentication failed.";
83b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    case SYNC_STATUS_UNKNOWN_ORIGIN:
84b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      return "Sync: unknown origin.";
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_STATUS_NOT_MODIFIED:
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Sync: file not modified.";
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case SYNC_STATUS_SYNC_DISABLED:
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return "Sync: sync is disabled.";
897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case SYNC_STATUS_ACCESS_FORBIDDEN:
907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return "Sync: service access forbidden.";
91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    case SYNC_STATUS_RETRY:
92d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      return "Sync: retry the operation.";
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NOTREACHED();
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return "Unknown error.";
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SyncStatusCode LevelDBStatusToSyncStatusCode(const leveldb::Status& status) {
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (status.ok())
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return SYNC_STATUS_OK;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (status.IsNotFound())
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return SYNC_DATABASE_ERROR_NOT_FOUND;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (status.IsCorruption())
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return SYNC_DATABASE_ERROR_CORRUPTION;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (status.IsIOError())
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return SYNC_DATABASE_ERROR_IO_ERROR;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return SYNC_DATABASE_ERROR_FAILED;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)SyncStatusCode FileErrorToSyncStatusCode(
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::File::Error file_error) {
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (file_error) {
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_OK:
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_STATUS_OK;
1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_FAILED:
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_FAILED;
1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_IN_USE:
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_IN_USE;
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_EXISTS:
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_EXISTS;
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_NOT_FOUND:
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_NOT_FOUND;
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_ACCESS_DENIED:
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_ACCESS_DENIED;
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_TOO_MANY_OPENED:
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_TOO_MANY_OPENED;
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_NO_MEMORY:
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_NO_MEMORY;
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_NO_SPACE:
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_NO_SPACE;
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_NOT_A_DIRECTORY:
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_NOT_A_DIRECTORY;
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_INVALID_OPERATION:
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_INVALID_OPERATION;
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_SECURITY:
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_SECURITY;
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_ABORT:
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_ABORT;
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_NOT_A_FILE:
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_NOT_A_FILE;
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_NOT_EMPTY:
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_NOT_EMPTY;
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_INVALID_URL:
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_INVALID_URL;
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_IO:
1473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      return SYNC_FILE_ERROR_IO;
1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case base::File::FILE_ERROR_MAX:
149a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      NOTREACHED();
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SYNC_FILE_ERROR_FAILED;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
152a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Return the value as is, so the value converted by
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // SyncStatusCodeToFileError could be restored.
154a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return static_cast<SyncStatusCode>(file_error);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::File::Error SyncStatusCodeToFileError(
15858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    SyncStatusCode status) {
15958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  switch (status) {
16058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_STATUS_OK:
1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_OK;
16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_FAILED:
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_FAILED;
16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_IN_USE:
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_IN_USE;
16658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_EXISTS:
1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_EXISTS;
16858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_NOT_FOUND:
1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_NOT_FOUND;
17058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_ACCESS_DENIED:
1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_ACCESS_DENIED;
17258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_TOO_MANY_OPENED:
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_TOO_MANY_OPENED;
17458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_NO_MEMORY:
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_NO_MEMORY;
17658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_NO_SPACE:
1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_NO_SPACE;
17858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_NOT_A_DIRECTORY:
1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_NOT_A_DIRECTORY;
18058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_INVALID_OPERATION:
1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_INVALID_OPERATION;
18258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_SECURITY:
1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_SECURITY;
18458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_ABORT:
1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_ABORT;
18658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_NOT_A_FILE:
1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_NOT_A_FILE;
18858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_NOT_EMPTY:
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_NOT_EMPTY;
19058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_INVALID_URL:
1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_INVALID_URL;
19258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    case SYNC_FILE_ERROR_IO:
1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return base::File::FILE_ERROR_IO;
19458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    default:
195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      // Return the value as is, so that caller may be able to
196a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      // restore the information.
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return static_cast<base::File::Error>(status);
19858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
19958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
20058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace sync_file_system
202