Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(757)

Side by Side Diff: chrome/browser/chromeos/file_system_provider/file_system_plugin/provided_file_system_adapter.cc

Issue 1093383002: [WIP] Provided file system from NACL. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved several modules to chromeos folder. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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/chromeos/file_system_provider/file_system_plugin/provid ed_file_system_adapter.h"
6
7 using extensions::api::file_system_provider::ProviderError;
8
9 namespace chromeos {
10 namespace file_system_provider {
11
12 //static
13 RequestType
14 ProvidedFileSystemAdapter::OperationTypeFromExtensionEvent(
15 const std::string& extension_operation) {
16 using namespace extensions::api::file_system_provider;
17 if (extension_operation==OnGetMetadataRequested::kEventName )
18 return GET_METADATA;
19 else if (extension_operation==OnReadDirectoryRequested::kEventName )
20 return READ_DIRECTORY;
21 else if (extension_operation==OnOpenFileRequested::kEventName)
22 return OPEN_FILE;
23 else if (extension_operation==OnReadFileRequested::kEventName)
24 return READ_FILE;
25 else if (extension_operation==OnWriteFileRequested::kEventName)
26 return WRITE_FILE;
27 else if (extension_operation==OnCloseFileRequested::kEventName)
28 return CLOSE_FILE;
29 else if (extension_operation==OnAbortRequested::kEventName)
30 return ABORT;
31 else if (extension_operation==OnAddWatcherRequested::kEventName)
32 return ADD_WATCHER;
33 else if (extension_operation==OnRemoveWatcherRequested::kEventName)
34 return REMOVE_WATCHER;
35 else if (extension_operation==OnConfigureRequested::kEventName)
36 return CONFIGURE;
37 else if (extension_operation==OnCopyEntryRequested::kEventName)
38 return COPY_ENTRY;
39 else if (extension_operation==OnMoveEntryRequested::kEventName)
40 return MOVE_ENTRY;
41 else if (extension_operation==OnCreateDirectoryRequested::kEventName)
42 return CREATE_DIRECTORY;
43 else if (extension_operation==OnCreateFileRequested::kEventName)
44 return CREATE_FILE;
45 else if (extension_operation==OnDeleteEntryRequested::kEventName)
46 return DELETE_ENTRY;
47 else if (extension_operation==OnUnmountRequested::kEventName)
48 return REQUEST_UNMOUNT;
49 else if (extension_operation==OnTruncateRequested::kEventName)
50 return TRUNCATE;
51
52 return ABORT;
53 NOTREACHED();
54 }
55
56 // Translate the error returned by the extensions decoders to base::File errors
57 base::File::Error PP_ProviderErrorToFileError(
58 ProviderError error) {
59 switch (error) {
60 case ProviderError::PROVIDER_ERROR_OK:
61 return base::File::FILE_OK;
62 case ProviderError::PROVIDER_ERROR_FAILED:
63 return base::File::FILE_ERROR_FAILED;
64 case ProviderError::PROVIDER_ERROR_IN_USE:
65 return base::File::FILE_ERROR_IN_USE;
66 case ProviderError::PROVIDER_ERROR_EXISTS:
67 return base::File::FILE_ERROR_EXISTS;
68 case ProviderError::PROVIDER_ERROR_NOT_FOUND:
69 return base::File::FILE_ERROR_NOT_FOUND;
70 case ProviderError::PROVIDER_ERROR_ACCESS_DENIED:
71 return base::File::FILE_ERROR_ACCESS_DENIED;
72 case ProviderError::PROVIDER_ERROR_TOO_MANY_OPENED:
73 return base::File::FILE_ERROR_TOO_MANY_OPENED;
74 case ProviderError::PROVIDER_ERROR_NO_MEMORY:
75 return base::File::FILE_ERROR_NO_MEMORY;
76 case ProviderError::PROVIDER_ERROR_NO_SPACE:
77 return base::File::FILE_ERROR_NO_SPACE;
78 case ProviderError::PROVIDER_ERROR_NOT_A_DIRECTORY:
79 return base::File::FILE_ERROR_NOT_A_DIRECTORY;
80 case ProviderError::PROVIDER_ERROR_INVALID_OPERATION:
81 return base::File::FILE_ERROR_INVALID_OPERATION;
82 case ProviderError::PROVIDER_ERROR_SECURITY:
83 return base::File::FILE_ERROR_SECURITY;
84 case ProviderError::PROVIDER_ERROR_ABORT:
85 return base::File::FILE_ERROR_ABORT;
86 case ProviderError::PROVIDER_ERROR_NOT_A_FILE:
87 return base::File::FILE_ERROR_NOT_A_FILE;
88 case ProviderError::PROVIDER_ERROR_NOT_EMPTY:
89 return base::File::FILE_ERROR_NOT_EMPTY;
90 case ProviderError::PROVIDER_ERROR_INVALID_URL:
91 return base::File::FILE_ERROR_INVALID_URL;
92 case ProviderError::PROVIDER_ERROR_IO:
93 return base::File::FILE_ERROR_IO;
94 case ProviderError::PROVIDER_ERROR_NONE:
95 NOTREACHED();
96 }
97 return base::File::FILE_ERROR_FAILED;
98 }
99
100 bool ProvidedFileSystemAdapter::PushSuccessResponse(
101 int32_t operation_type,
102 scoped_ptr<base::ListValue> response) {
103 switch(operation_type) {
104 case READ_DIRECTORY: {
105 using extensions::api::
106 file_system_provider_internal::ReadDirectoryRequestedSuccess::
107 Params;
108 scoped_ptr<Params> params(Params::Create(*response));
109 if(!params.get())
110 return false;
111
112 const bool has_more = params->has_more;
113 const int32_t request_id = params->request_id;
114 if ( base::File::FILE_OK!=
115 provided_file_system_impl_->GetRequestManager()->FulfillRequest(
116 request_id,
117 chromeos::file_system_provider::RequestValue::
118 CreateForReadDirectorySuccess(params.Pass()),
119 has_more)
120 )
121 return false;
122 }
123 break;
124 case GET_METADATA: {
125 using extensions::api::file_system_provider_internal::
126 GetMetadataRequestedSuccess::Params;
127 scoped_ptr<Params> params(Params::Create(*response));
128 if(!params.get())
129 return false;
130
131 const int32_t request_id =params->request_id;
132 if (base::File::FILE_OK!=
133 provided_file_system_impl_->GetRequestManager()->FulfillRequest(
134 request_id,
135 chromeos::file_system_provider::RequestValue::
136 CreateForGetMetadataSuccess(params.Pass()),
137 false)
138 )
139 return false;
140 }
141 break;
142 case READ_FILE: {
143 using extensions::api::file_system_provider_internal::
144 ReadFileRequestedSuccess::Params;
145 scoped_ptr<Params> params(Params::Create(*response));
146 if (!params.get())
147 return false;
148
149 const bool has_more = params->has_more;
150 const int32_t request_id = params->request_id;
151 if (base::File::FILE_OK!=
152 provided_file_system_impl_->GetRequestManager()->FulfillRequest(
153 request_id,
154 chromeos::file_system_provider::RequestValue::
155 CreateForReadFileSuccess(params.Pass()),
156 has_more) )
157 return false;
158 }
159 break;
160 case REQUEST_UNMOUNT: {
161 using extensions::api::file_system_provider_internal::
162 UnmountRequestedSuccess::Params;
163 scoped_ptr<Params> params(Params::Create(*response));
164 if(!params.get())
165 return false;
166 const int32_t request_id = params->request_id;
167 if (base::File::FILE_OK!=
168 provided_file_system_impl_->GetRequestManager()->FulfillRequest(
169 request_id,
170 chromeos::file_system_provider::RequestValue::
171 CreateForUnmountSuccess( params.Pass()),
172 false)
173 )
174 return false;
175 }
176 break;
177 default: {
178 using extensions::api::file_system_provider_internal::
179 OperationRequestedSuccess::Params;
180 scoped_ptr<Params> params(Params::Create(*response));
181 if(!params.get())
182 return false;
183
184 const int32_t request_id = params->request_id;
185 if (base::File::FILE_OK!=
186 provided_file_system_impl_->GetRequestManager()->FulfillRequest(
187 request_id,
188 chromeos::file_system_provider::RequestValue::
189 CreateForOperationSuccess(params.Pass()),
190 false)
191 )
192 return false;
193 }
194 break;
195 }
196 return true;
197 }
198
199 bool ProvidedFileSystemAdapter::PushErrorResponse(
200 scoped_ptr<base::ListValue> reponse) {
201
202 using extensions::api::file_system_provider_internal::
203 OperationRequestedError::Params;
204
205 scoped_ptr<Params> params(Params::Create(*reponse));
206 if(!params.get())
207 return false;
208
209 const base::File::Error error = PP_ProviderErrorToFileError(params->error);
210
211 const int32_t request_id = params->request_id;
212 if( base::File::FILE_OK!=
213 provided_file_system_impl_->GetRequestManager()->RejectRequest(
214 request_id,
215 chromeos::file_system_provider::RequestValue::
216 CreateForOperationError(params.Pass()),
217 error)
218 )
219 return false;
220 return true;
221 }
222
223 storage::WatcherManager::ChangeType ParseChangeType(
224 const extensions::api::file_system_provider::ChangeType& change_type) {
225 switch (change_type) {
226 case extensions::api::file_system_provider::CHANGE_TYPE_CHANGED:
227 return storage::WatcherManager::CHANGED;
228 case extensions::api::file_system_provider::CHANGE_TYPE_DELETED:
229 return storage::WatcherManager::DELETED;
230 default:
231 break;
232 }
233 NOTREACHED();
234 return storage::WatcherManager::CHANGED;
235 }
236
237 // Convert the change from the IDL type to a native type. The reason IDL types
238 // are not used is since they are imperfect, eg. paths are stored as strings.
239 ProvidedFileSystemObserver::Change ParseChange(
240 const extensions::api::file_system_provider::Change& change) {
241 ProvidedFileSystemObserver::Change result;
242 result.entry_path = base::FilePath::FromUTF8Unsafe(change.entry_path);
243 result.change_type = ParseChangeType(change.change_type);
244 return result;
245 }
246
247 // Converts a list of child changes from the IDL type to a native type.
248 scoped_ptr<ProvidedFileSystemObserver::Changes> ParseChanges(
249 const std::vector<
250 linked_ptr<extensions::api::file_system_provider::Change>>& changes) {
251 scoped_ptr<ProvidedFileSystemObserver::Changes> results(
252 new ProvidedFileSystemObserver::Changes);
253 for (const auto& change : changes) {
254 results->push_back(ParseChange(*change));
255 }
256 return results;
257 }
258
259 bool ProvidedFileSystemAdapter::PushChangeNotificationResponse(
260 scoped_ptr<base::ListValue> response,
261 StatusCallback callback) {
262 using extensions::api::file_system_provider::Notify::Params;
263 scoped_ptr<Params> params(Params::Create(*response));
264 if (!params.get())
265 return false;
266
267 provided_file_system_impl_->Notify(
268 base::FilePath::FromUTF8Unsafe(params->options.observed_path),
269 params->options.recursive, ParseChangeType(params->options.change_type),
270 params->options.changes.get()
271 ? ParseChanges(*params->options.changes.get())
272 : make_scoped_ptr(new ProvidedFileSystemObserver::Changes),
273 params->options.tag.get() ? *params->options.tag.get() : "",
274 callback );
275 return true;
276 }
277
278 ProvidedFileSystemInterface*
279 ProvidedFileSystemAdapter::GetProvidedFileSystem() {
280 return provided_file_system_impl_.get();
281 }
282
283 ProvidedFileSystemAdapter::ProvidedFileSystemAdapter(
284 scoped_ptr<ProvidedFileSystemInterface> file_system)
285 : provided_file_system_impl_(file_system.Pass()) {
286
287 }
288
289 ProvidedFileSystemAdapter::~ProvidedFileSystemAdapter() {}
290
291 } // namespace file_system_provider
292 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698