OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ppapi/proxy/ppb_flash_file_proxy.h" | 5 #include "ppapi/proxy/ppb_flash_file_proxy.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
9 #include "ppapi/c/dev/pp_file_info_dev.h" | 9 #include "ppapi/c/dev/pp_file_info_dev.h" |
10 #include "ppapi/c/pp_errors.h" | 10 #include "ppapi/c/pp_errors.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 } | 35 } |
36 | 36 |
37 void FreeDirContents(PP_Instance /* instance */, | 37 void FreeDirContents(PP_Instance /* instance */, |
38 PP_DirContents_Dev* contents) { | 38 PP_DirContents_Dev* contents) { |
39 for (int32_t i = 0; i < contents->count; ++i) | 39 for (int32_t i = 0; i < contents->count; ++i) |
40 delete[] contents->entries[i].name; | 40 delete[] contents->entries[i].name; |
41 delete[] contents->entries; | 41 delete[] contents->entries; |
42 delete contents; | 42 delete contents; |
43 } | 43 } |
44 | 44 |
| 45 } // namespace |
| 46 |
| 47 // PPB_Flash_File_ModuleLocal -------------------------------------------------- |
| 48 |
| 49 namespace { |
| 50 |
45 int32_t OpenModuleLocalFile(PP_Instance instance, | 51 int32_t OpenModuleLocalFile(PP_Instance instance, |
46 const char* path, | 52 const char* path, |
47 int32_t mode, | 53 int32_t mode, |
48 PP_FileHandle* file) { | 54 PP_FileHandle* file) { |
49 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); | 55 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
50 if (!dispatcher) | 56 if (!dispatcher) |
51 return PP_ERROR_BADARGUMENT; | 57 return PP_ERROR_BADARGUMENT; |
52 | 58 |
53 int32_t result = PP_ERROR_FAILED; | 59 int32_t result = PP_ERROR_FAILED; |
54 IPC::PlatformFileForTransit transit; | 60 IPC::PlatformFileForTransit transit; |
55 dispatcher->Send(new PpapiHostMsg_PPBFlashFile_ModuleLocal_OpenFile( | 61 dispatcher->Send(new PpapiHostMsg_PPBFlashFile_ModuleLocal_OpenFile( |
56 INTERFACE_ID_PPB_FLASH_FILE_MODULELOCAL, | 62 INTERFACE_ID_PPB_FLASH_FILE_MODULELOCAL, |
57 instance, path, mode, &transit, &result)); | 63 instance, path, mode, &transit, &result)); |
58 *file = IPC::PlatformFileForTransitToPlatformFile(transit); | 64 *file = IPC::PlatformFileForTransitToPlatformFile(transit); |
59 return result; | 65 return result; |
60 } | 66 } |
61 | 67 |
62 int32_t RenameModuleLocalFile(PP_Instance instance, | 68 int32_t RenameModuleLocalFile(PP_Instance instance, |
63 const char* path_from, | 69 const char* from_path, |
64 const char* path_to) { | 70 const char* to_path) { |
65 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); | 71 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
66 if (!dispatcher) | 72 if (!dispatcher) |
67 return PP_ERROR_BADARGUMENT; | 73 return PP_ERROR_BADARGUMENT; |
68 | 74 |
69 int32_t result = PP_ERROR_FAILED; | 75 int32_t result = PP_ERROR_FAILED; |
70 dispatcher->Send(new PpapiHostMsg_PPBFlashFile_ModuleLocal_RenameFile( | 76 dispatcher->Send(new PpapiHostMsg_PPBFlashFile_ModuleLocal_RenameFile( |
71 INTERFACE_ID_PPB_FLASH_FILE_MODULELOCAL, | 77 INTERFACE_ID_PPB_FLASH_FILE_MODULELOCAL, |
72 instance, path_from, path_to, &result)); | 78 instance, from_path, to_path, &result)); |
73 return result; | 79 return result; |
74 } | 80 } |
75 | 81 |
76 int32_t DeleteModuleLocalFileOrDir(PP_Instance instance, | 82 int32_t DeleteModuleLocalFileOrDir(PP_Instance instance, |
77 const char* path, | 83 const char* path, |
78 PP_Bool recursive) { | 84 PP_Bool recursive) { |
79 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); | 85 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
80 if (!dispatcher) | 86 if (!dispatcher) |
81 return PP_ERROR_BADARGUMENT; | 87 return PP_ERROR_BADARGUMENT; |
82 | 88 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 | 143 |
138 char* name_copy = new char[source.name.size() + 1]; | 144 char* name_copy = new char[source.name.size() + 1]; |
139 memcpy(name_copy, source.name.c_str(), source.name.size() + 1); | 145 memcpy(name_copy, source.name.c_str(), source.name.size() + 1); |
140 dest->name = name_copy; | 146 dest->name = name_copy; |
141 dest->is_dir = BoolToPPBool(source.is_dir); | 147 dest->is_dir = BoolToPPBool(source.is_dir); |
142 } | 148 } |
143 | 149 |
144 return result; | 150 return result; |
145 } | 151 } |
146 | 152 |
147 const PPB_Flash_File_ModuleLocal flash_file_module_local_interface = { | 153 const PPB_Flash_File_ModuleLocal flash_file_modulelocal_interface = { |
148 &OpenModuleLocalFile, | 154 &OpenModuleLocalFile, |
149 &RenameModuleLocalFile, | 155 &RenameModuleLocalFile, |
150 &DeleteModuleLocalFileOrDir, | 156 &DeleteModuleLocalFileOrDir, |
151 &CreateModuleLocalDir, | 157 &CreateModuleLocalDir, |
152 &QueryModuleLocalFile, | 158 &QueryModuleLocalFile, |
153 &GetModuleLocalDirContents, | 159 &GetModuleLocalDirContents, |
154 &FreeDirContents, | 160 &FreeDirContents, |
155 }; | 161 }; |
156 | 162 |
157 InterfaceProxy* CreateFlashFileModuleLocalProxy(Dispatcher* dispatcher, | 163 InterfaceProxy* CreateFlashFileModuleLocalProxy(Dispatcher* dispatcher, |
158 const void* target_interface) { | 164 const void* target_interface) { |
159 return new PPB_Flash_File_ModuleLocal_Proxy(dispatcher, target_interface); | 165 return new PPB_Flash_File_ModuleLocal_Proxy(dispatcher, target_interface); |
160 } | 166 } |
161 | 167 |
162 } // namespace | 168 } // namespace |
163 | 169 |
164 PPB_Flash_File_ModuleLocal_Proxy::PPB_Flash_File_ModuleLocal_Proxy( | 170 PPB_Flash_File_ModuleLocal_Proxy::PPB_Flash_File_ModuleLocal_Proxy( |
165 Dispatcher* dispatcher, | 171 Dispatcher* dispatcher, |
166 const void* target_interface) | 172 const void* target_interface) |
167 : InterfaceProxy(dispatcher, target_interface) { | 173 : InterfaceProxy(dispatcher, target_interface) { |
168 } | 174 } |
169 | 175 |
170 PPB_Flash_File_ModuleLocal_Proxy::~PPB_Flash_File_ModuleLocal_Proxy() { | 176 PPB_Flash_File_ModuleLocal_Proxy::~PPB_Flash_File_ModuleLocal_Proxy() { |
171 } | 177 } |
172 | 178 |
173 // static | 179 // static |
174 const InterfaceProxy::Info* PPB_Flash_File_ModuleLocal_Proxy::GetInfo() { | 180 const InterfaceProxy::Info* PPB_Flash_File_ModuleLocal_Proxy::GetInfo() { |
175 static const Info info = { | 181 static const Info info = { |
176 &flash_file_module_local_interface, | 182 &flash_file_modulelocal_interface, |
177 PPB_FLASH_FILE_MODULELOCAL_INTERFACE, | 183 PPB_FLASH_FILE_MODULELOCAL_INTERFACE, |
178 INTERFACE_ID_PPB_FLASH_FILE_MODULELOCAL, | 184 INTERFACE_ID_PPB_FLASH_FILE_MODULELOCAL, |
179 true, | 185 true, |
180 &CreateFlashFileModuleLocalProxy, | 186 &CreateFlashFileModuleLocalProxy, |
181 }; | 187 }; |
182 return &info; | 188 return &info; |
183 } | 189 } |
184 | 190 |
185 bool PPB_Flash_File_ModuleLocal_Proxy::OnMessageReceived( | 191 bool PPB_Flash_File_ModuleLocal_Proxy::OnMessageReceived( |
186 const IPC::Message& msg) { | 192 const IPC::Message& msg) { |
(...skipping 25 matching lines...) Expand all Loading... |
212 int32_t* result) { | 218 int32_t* result) { |
213 base::PlatformFile file; | 219 base::PlatformFile file; |
214 *result = ppb_flash_file_module_local_target()-> | 220 *result = ppb_flash_file_module_local_target()-> |
215 OpenFile(instance, path.c_str(), mode, &file); | 221 OpenFile(instance, path.c_str(), mode, &file); |
216 *file_handle = PlatformFileToPlatformFileForTransit( | 222 *file_handle = PlatformFileToPlatformFileForTransit( |
217 dispatcher(), result, file); | 223 dispatcher(), result, file); |
218 } | 224 } |
219 | 225 |
220 void PPB_Flash_File_ModuleLocal_Proxy::OnMsgRenameFile( | 226 void PPB_Flash_File_ModuleLocal_Proxy::OnMsgRenameFile( |
221 PP_Instance instance, | 227 PP_Instance instance, |
222 const std::string& path_from, | 228 const std::string& from_path, |
223 const std::string& path_to, | 229 const std::string& to_path, |
224 int32_t* result) { | 230 int32_t* result) { |
225 *result = ppb_flash_file_module_local_target()-> | 231 *result = ppb_flash_file_module_local_target()-> |
226 RenameFile(instance, path_from.c_str(), path_to.c_str()); | 232 RenameFile(instance, from_path.c_str(), to_path.c_str()); |
227 } | 233 } |
228 | 234 |
229 void PPB_Flash_File_ModuleLocal_Proxy::OnMsgDeleteFileOrDir( | 235 void PPB_Flash_File_ModuleLocal_Proxy::OnMsgDeleteFileOrDir( |
230 PP_Instance instance, | 236 PP_Instance instance, |
231 const std::string& path, | 237 const std::string& path, |
232 PP_Bool recursive, | 238 PP_Bool recursive, |
233 int32_t* result) { | 239 int32_t* result) { |
234 *result = ppb_flash_file_module_local_target()-> | 240 *result = ppb_flash_file_module_local_target()-> |
235 DeleteFileOrDir(instance, path.c_str(), recursive); | 241 DeleteFileOrDir(instance, path.c_str(), recursive); |
236 } | 242 } |
(...skipping 26 matching lines...) Expand all Loading... |
263 | 269 |
264 // Convert the list of entries to the serialized version. | 270 // Convert the list of entries to the serialized version. |
265 entries->resize(contents->count); | 271 entries->resize(contents->count); |
266 for (int32_t i = 0; i < contents->count; i++) { | 272 for (int32_t i = 0; i < contents->count; i++) { |
267 (*entries)[i].name.assign(contents->entries[i].name); | 273 (*entries)[i].name.assign(contents->entries[i].name); |
268 (*entries)[i].is_dir = PPBoolToBool(contents->entries[i].is_dir); | 274 (*entries)[i].is_dir = PPBoolToBool(contents->entries[i].is_dir); |
269 } | 275 } |
270 ppb_flash_file_module_local_target()->FreeDirContents(instance, contents); | 276 ppb_flash_file_module_local_target()->FreeDirContents(instance, contents); |
271 } | 277 } |
272 | 278 |
| 279 // PPB_Flash_File_FileRef ------------------------------------------------------ |
| 280 |
| 281 namespace { |
| 282 |
| 283 int32_t OpenFileRefFile(PP_Resource file_ref_id, |
| 284 int32_t mode, |
| 285 PP_FileHandle* file) { |
| 286 PluginResource* file_ref = |
| 287 PluginResourceTracker::GetInstance()->GetResourceObject(file_ref_id); |
| 288 if (!file_ref) |
| 289 return PP_ERROR_BADRESOURCE; |
| 290 |
| 291 PluginDispatcher* dispatcher = |
| 292 PluginDispatcher::GetForInstance(file_ref->instance()); |
| 293 if (!dispatcher) |
| 294 return PP_ERROR_BADARGUMENT; |
| 295 |
| 296 int32_t result = PP_ERROR_FAILED; |
| 297 IPC::PlatformFileForTransit transit; |
| 298 dispatcher->Send(new PpapiHostMsg_PPBFlashFile_FileRef_OpenFile( |
| 299 INTERFACE_ID_PPB_FLASH_FILE_FILEREF, |
| 300 file_ref->host_resource(), mode, &transit, &result)); |
| 301 *file = IPC::PlatformFileForTransitToPlatformFile(transit); |
| 302 return result; |
| 303 } |
| 304 |
| 305 int32_t QueryFileRefFile(PP_Resource file_ref_id, |
| 306 PP_FileInfo_Dev* info) { |
| 307 PluginResource* file_ref = |
| 308 PluginResourceTracker::GetInstance()->GetResourceObject(file_ref_id); |
| 309 if (!file_ref) |
| 310 return PP_ERROR_BADRESOURCE; |
| 311 |
| 312 PluginDispatcher* dispatcher = |
| 313 PluginDispatcher::GetForInstance(file_ref->instance()); |
| 314 if (!dispatcher) |
| 315 return PP_ERROR_BADARGUMENT; |
| 316 |
| 317 int32_t result = PP_ERROR_FAILED; |
| 318 dispatcher->Send(new PpapiHostMsg_PPBFlashFile_FileRef_QueryFile( |
| 319 INTERFACE_ID_PPB_FLASH_FILE_FILEREF, |
| 320 file_ref->host_resource(), info, &result)); |
| 321 return result; |
| 322 } |
| 323 |
| 324 const PPB_Flash_File_FileRef flash_file_fileref_interface = { |
| 325 &OpenFileRefFile, |
| 326 &QueryFileRefFile, |
| 327 }; |
| 328 |
| 329 InterfaceProxy* CreateFlashFileFileRefProxy(Dispatcher* dispatcher, |
| 330 const void* target_interface) { |
| 331 return new PPB_Flash_File_FileRef_Proxy(dispatcher, target_interface); |
| 332 } |
| 333 |
| 334 } // namespace |
| 335 |
| 336 PPB_Flash_File_FileRef_Proxy::PPB_Flash_File_FileRef_Proxy( |
| 337 Dispatcher* dispatcher, |
| 338 const void* target_interface) |
| 339 : InterfaceProxy(dispatcher, target_interface) { |
| 340 } |
| 341 |
| 342 PPB_Flash_File_FileRef_Proxy::~PPB_Flash_File_FileRef_Proxy() { |
| 343 } |
| 344 |
| 345 // static |
| 346 const InterfaceProxy::Info* PPB_Flash_File_FileRef_Proxy::GetInfo() { |
| 347 static const Info info = { |
| 348 &flash_file_fileref_interface, |
| 349 PPB_FLASH_FILE_FILEREF_INTERFACE, |
| 350 INTERFACE_ID_PPB_FLASH_FILE_FILEREF, |
| 351 true, |
| 352 &CreateFlashFileFileRefProxy, |
| 353 }; |
| 354 return &info; |
| 355 } |
| 356 |
| 357 bool PPB_Flash_File_FileRef_Proxy::OnMessageReceived( |
| 358 const IPC::Message& msg) { |
| 359 bool handled = true; |
| 360 IPC_BEGIN_MESSAGE_MAP(PPB_Flash_File_FileRef_Proxy, msg) |
| 361 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlashFile_FileRef_OpenFile, |
| 362 OnMsgOpenFile) |
| 363 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlashFile_FileRef_QueryFile, |
| 364 OnMsgQueryFile) |
| 365 IPC_MESSAGE_UNHANDLED(handled = false) |
| 366 IPC_END_MESSAGE_MAP() |
| 367 // TODO(brettw) handle bad messages! |
| 368 return handled; |
| 369 } |
| 370 |
| 371 void PPB_Flash_File_FileRef_Proxy::OnMsgOpenFile( |
| 372 const HostResource& host_resource, |
| 373 int32_t mode, |
| 374 IPC::PlatformFileForTransit* file_handle, |
| 375 int32_t* result) { |
| 376 base::PlatformFile file; |
| 377 *result = ppb_flash_file_module_local_target()-> |
| 378 OpenFile(host_resource.host_resource(), mode, &file); |
| 379 *file_handle = PlatformFileToPlatformFileForTransit( |
| 380 dispatcher(), result, file); |
| 381 } |
| 382 |
| 383 void PPB_Flash_File_FileRef_Proxy::OnMsgQueryFile( |
| 384 const HostResource& host_resource, |
| 385 PP_FileInfo_Dev* info, |
| 386 int32_t* result) { |
| 387 *result = ppb_flash_file_module_local_target()-> |
| 388 QueryFile(host_resource.host_resource(), info); |
| 389 } |
| 390 |
273 } // namespace proxy | 391 } // namespace proxy |
274 } // namespace pp | 392 } // namespace pp |
OLD | NEW |