OLD | NEW |
| (Empty) |
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/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_RETRY; | |
54 | |
55 case google_apis::HTTP_NOT_FOUND: | |
56 return SYNC_FILE_ERROR_NOT_FOUND; | |
57 | |
58 case google_apis::GDATA_FILE_ERROR: | |
59 return SYNC_FILE_ERROR_FAILED; | |
60 | |
61 case google_apis::HTTP_FORBIDDEN: | |
62 return SYNC_STATUS_ACCESS_FORBIDDEN; | |
63 | |
64 case google_apis::HTTP_RESUME_INCOMPLETE: | |
65 case google_apis::HTTP_BAD_REQUEST: | |
66 case google_apis::HTTP_LENGTH_REQUIRED: | |
67 case google_apis::HTTP_NOT_IMPLEMENTED: | |
68 case google_apis::GDATA_PARSE_ERROR: | |
69 case google_apis::GDATA_OTHER_ERROR: | |
70 return SYNC_STATUS_FAILED; | |
71 | |
72 case google_apis::GDATA_NO_SPACE: | |
73 return SYNC_FILE_ERROR_NO_SPACE; | |
74 } | |
75 | |
76 // There's a case where DriveService layer returns GDataErrorCode==-1 | |
77 // when network is unavailable. (http://crbug.com/223042) | |
78 // TODO(kinuko,nhiroki): We should identify from where this undefined error | |
79 // code is coming. | |
80 if (error == -1) | |
81 return SYNC_STATUS_NETWORK_ERROR; | |
82 | |
83 util::Log(logging::LOG_WARNING, | |
84 FROM_HERE, | |
85 "Got unexpected error: %d", | |
86 static_cast<int>(error)); | |
87 return SYNC_STATUS_FAILED; | |
88 } | |
89 | |
90 void SetDisableDriveAPI(bool flag) { | |
91 is_drive_api_disabled = flag; | |
92 } | |
93 | |
94 bool IsDriveAPIDisabled() { | |
95 return is_drive_api_disabled || | |
96 CommandLine::ForCurrentProcess()->HasSwitch(kDisableDriveAPI); | |
97 } | |
98 | |
99 ScopedDisableDriveAPI::ScopedDisableDriveAPI() | |
100 : was_disabled_(IsDriveAPIDisabled()) { | |
101 SetDisableDriveAPI(true); | |
102 } | |
103 | |
104 ScopedDisableDriveAPI::~ScopedDisableDriveAPI() { | |
105 DCHECK(IsDriveAPIDisabled()); | |
106 SetDisableDriveAPI(was_disabled_); | |
107 } | |
108 | |
109 } // namespace sync_file_system | |
OLD | NEW |