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/drive_backend_v1/drive_file_sync_util.h" 6 7 #include "base/command_line.h" 8 #include "base/logging.h" 9 #include "chrome/browser/sync_file_system/logger.h" 10 11 namespace sync_file_system { 12 13 namespace { 14 15 // A command-line switch to disable Drive API and to make Sync FileSystem API 16 // work on WAPI (http://crbug.com/234557) 17 // TODO(nhiroki): this command-line switch should be temporary. 18 const char kDisableDriveAPI[] = "disable-drive-api-for-syncfs"; 19 20 bool is_drive_api_disabled = false; 21 22 } // namespace 23 24 SyncStatusCode GDataErrorCodeToSyncStatusCode( 25 google_apis::GDataErrorCode error) { 26 // NOTE: Please update DriveFileSyncService::UpdateServiceState when you add 27 // more error code mapping. 28 switch (error) { 29 case google_apis::HTTP_SUCCESS: 30 case google_apis::HTTP_CREATED: 31 case google_apis::HTTP_NO_CONTENT: 32 case google_apis::HTTP_FOUND: 33 return SYNC_STATUS_OK; 34 35 case google_apis::HTTP_NOT_MODIFIED: 36 return SYNC_STATUS_NOT_MODIFIED; 37 38 case google_apis::HTTP_CONFLICT: 39 case google_apis::HTTP_PRECONDITION: 40 return SYNC_STATUS_HAS_CONFLICT; 41 42 case google_apis::HTTP_UNAUTHORIZED: 43 return SYNC_STATUS_AUTHENTICATION_FAILED; 44 45 case google_apis::GDATA_NO_CONNECTION: 46 return SYNC_STATUS_NETWORK_ERROR; 47 48 case google_apis::HTTP_INTERNAL_SERVER_ERROR: 49 case google_apis::HTTP_BAD_GATEWAY: 50 case google_apis::HTTP_SERVICE_UNAVAILABLE: 51 case google_apis::GDATA_CANCELLED: 52 case google_apis::GDATA_NOT_READY: 53 return SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE; 54 55 case google_apis::HTTP_NOT_FOUND: 56 case google_apis::HTTP_GONE: 57 return SYNC_FILE_ERROR_NOT_FOUND; 58 59 case google_apis::GDATA_FILE_ERROR: 60 return SYNC_FILE_ERROR_FAILED; 61 62 case google_apis::HTTP_FORBIDDEN: 63 return SYNC_STATUS_ACCESS_FORBIDDEN; 64 65 case google_apis::HTTP_RESUME_INCOMPLETE: 66 case google_apis::HTTP_BAD_REQUEST: 67 case google_apis::HTTP_LENGTH_REQUIRED: 68 case google_apis::HTTP_NOT_IMPLEMENTED: 69 case google_apis::GDATA_PARSE_ERROR: 70 case google_apis::GDATA_OTHER_ERROR: 71 return SYNC_STATUS_FAILED; 72 73 case google_apis::GDATA_NO_SPACE: 74 return SYNC_FILE_ERROR_NO_SPACE; 75 } 76 77 // There's a case where DriveService layer returns GDataErrorCode==-1 78 // when network is unavailable. (http://crbug.com/223042) 79 // TODO(kinuko,nhiroki): We should identify from where this undefined error 80 // code is coming. 81 if (error == -1) 82 return SYNC_STATUS_NETWORK_ERROR; 83 84 util::Log(logging::LOG_WARNING, 85 FROM_HERE, 86 "Got unexpected error: %d", 87 static_cast<int>(error)); 88 return SYNC_STATUS_FAILED; 89 } 90 91 void SetDisableDriveAPI(bool flag) { 92 is_drive_api_disabled = flag; 93 } 94 95 bool IsDriveAPIDisabled() { 96 return is_drive_api_disabled || 97 CommandLine::ForCurrentProcess()->HasSwitch(kDisableDriveAPI); 98 } 99 100 ScopedDisableDriveAPI::ScopedDisableDriveAPI() 101 : was_disabled_(IsDriveAPIDisabled()) { 102 SetDisableDriveAPI(true); 103 } 104 105 ScopedDisableDriveAPI::~ScopedDisableDriveAPI() { 106 DCHECK(IsDriveAPIDisabled()); 107 SetDisableDriveAPI(was_disabled_); 108 } 109 110 } // namespace sync_file_system 111