Chromium Code Reviews| Index: ppapi/proxy/ppb_flash_proxy.cc |
| =================================================================== |
| --- ppapi/proxy/ppb_flash_proxy.cc (revision 140544) |
| +++ ppapi/proxy/ppb_flash_proxy.cc (working copy) |
| @@ -20,12 +20,15 @@ |
| #include "ppapi/c/private/ppb_flash.h" |
| #include "ppapi/c/private/ppb_flash_print.h" |
| #include "ppapi/proxy/host_dispatcher.h" |
| +#include "ppapi/proxy/pepper_file_messages.h" |
| #include "ppapi/proxy/plugin_dispatcher.h" |
| #include "ppapi/proxy/plugin_globals.h" |
| #include "ppapi/proxy/plugin_proxy_delegate.h" |
| #include "ppapi/proxy/ppapi_messages.h" |
| #include "ppapi/proxy/proxy_module.h" |
| #include "ppapi/proxy/serialized_var.h" |
| +#include "ppapi/shared_impl/dir_contents.h" |
| +#include "ppapi/shared_impl/file_type_conversion.h" |
| #include "ppapi/shared_impl/ppapi_globals.h" |
| #include "ppapi/shared_impl/proxy_lock.h" |
| #include "ppapi/shared_impl/resource.h" |
| @@ -427,18 +430,6 @@ |
| OnHostMsgReadClipboardData) |
| IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_WriteClipboardData, |
| OnHostMsgWriteClipboardData) |
| - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_OpenFile, |
| - OnHostMsgOpenFile) |
| - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_RenameFile, |
| - OnHostMsgRenameFile) |
| - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_DeleteFileOrDir, |
| - OnHostMsgDeleteFileOrDir) |
| - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_CreateDir, |
| - OnHostMsgCreateDir) |
| - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_QueryFile, |
| - OnHostMsgQueryFile) |
| - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_GetDirContents, |
| - OnHostMsgGetDirContents) |
| IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_OpenFileRef, |
| OnHostMsgOpenFileRef) |
| IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_QueryFileRef, |
| @@ -687,102 +678,128 @@ |
| g_module_local_thread_adapter->ClearInstanceRouting(instance); |
| } |
| -int32_t PPB_Flash_Proxy::OpenFile(PP_Instance instance, |
| +int32_t PPB_Flash_Proxy::OpenFile(PP_Instance, |
| const char* path, |
| int32_t mode, |
| PP_FileHandle* file) { |
| - if (!g_module_local_thread_adapter) |
| - return PP_ERROR_FAILED; |
| + int flags = 0; |
| + if (!path || |
| + !ppapi::PepperFileOpenFlagsToPlatformFileFlags(mode, &flags) || |
| + !file) |
| + return PP_ERROR_BADARGUMENT; |
| - int32_t result = PP_ERROR_FAILED; |
| - IPC::PlatformFileForTransit transit; |
| - g_module_local_thread_adapter->Send(instance, |
| - new PpapiHostMsg_PPBFlash_OpenFile( |
| - API_ID_PPB_FLASH, instance, path, mode, &transit, &result)); |
| - *file = IPC::PlatformFileForTransitToPlatformFile(transit); |
| - return result; |
| + base::PlatformFileError error; |
| + IPC::PlatformFileForTransit transit_file; |
| + ppapi::PepperFilePath pepper_path(ppapi::PepperFilePath::DOMAIN_MODULE_LOCAL, |
| + FilePath::FromUTF8Unsafe(path)); |
| + |
| + if (PluginGlobals::Get()->plugin_proxy_delegate()->SendToBrowser( |
|
yzshen1
2012/06/06 16:56:37
I don't think it is safe to do so. OpenFile and ot
|
| + new PepperFileMsg_OpenFile(pepper_path, flags, |
| + &error, &transit_file))) { |
| + *file = IPC::PlatformFileForTransitToPlatformFile(transit_file); |
| + } else { |
| + *file = base::kInvalidPlatformFileValue; |
| + error = base::PLATFORM_FILE_ERROR_FAILED; |
| + } |
| + |
| + return ppapi::PlatformFileErrorToPepperError(error); |
| } |
| -int32_t PPB_Flash_Proxy::RenameFile(PP_Instance instance, |
| - const char* path_from, |
| - const char* path_to) { |
| - if (!g_module_local_thread_adapter) |
| - return PP_ERROR_FAILED; |
| +int32_t PPB_Flash_Proxy::RenameFile(PP_Instance, |
| + const char* from_path, |
| + const char* to_path) { |
| + base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED; |
| + ppapi::PepperFilePath pepper_from(ppapi::PepperFilePath::DOMAIN_MODULE_LOCAL, |
| + FilePath::FromUTF8Unsafe(from_path)); |
| + ppapi::PepperFilePath pepper_to(ppapi::PepperFilePath::DOMAIN_MODULE_LOCAL, |
| + FilePath::FromUTF8Unsafe(to_path)); |
| - int32_t result = PP_ERROR_FAILED; |
| - g_module_local_thread_adapter->Send(instance, |
| - new PpapiHostMsg_PPBFlash_RenameFile( |
| - API_ID_PPB_FLASH, instance, path_from, path_to, &result)); |
| - return result; |
| + PluginGlobals::Get()->plugin_proxy_delegate()->SendToBrowser( |
| + new PepperFileMsg_RenameFile(pepper_from, pepper_to, &error)); |
| + |
| + return ppapi::PlatformFileErrorToPepperError(error); |
| } |
| -int32_t PPB_Flash_Proxy::DeleteFileOrDir(PP_Instance instance, |
| +int32_t PPB_Flash_Proxy::DeleteFileOrDir(PP_Instance, |
| const char* path, |
| PP_Bool recursive) { |
| - if (!g_module_local_thread_adapter) |
| - return PP_ERROR_FAILED; |
| + base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED; |
| + ppapi::PepperFilePath pepper_path(ppapi::PepperFilePath::DOMAIN_MODULE_LOCAL, |
| + FilePath::FromUTF8Unsafe(path)); |
| - int32_t result = PP_ERROR_FAILED; |
| - g_module_local_thread_adapter->Send(instance, |
| - new PpapiHostMsg_PPBFlash_DeleteFileOrDir( |
| - API_ID_PPB_FLASH, instance, path, recursive, &result)); |
| - return result; |
| + PluginGlobals::Get()->plugin_proxy_delegate()->SendToBrowser( |
| + new PepperFileMsg_DeleteFileOrDir(pepper_path, |
| + PP_ToBool(recursive), |
| + &error)); |
| + |
| + return ppapi::PlatformFileErrorToPepperError(error); |
| } |
| -int32_t PPB_Flash_Proxy::CreateDir(PP_Instance instance, const char* path) { |
| - if (!g_module_local_thread_adapter) |
| - return PP_ERROR_FAILED; |
| +int32_t PPB_Flash_Proxy::CreateDir(PP_Instance, const char* path) { |
| + base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED; |
| + ppapi::PepperFilePath pepper_path(ppapi::PepperFilePath::DOMAIN_MODULE_LOCAL, |
| + FilePath::FromUTF8Unsafe(path)); |
| - int32_t result = PP_ERROR_FAILED; |
| - g_module_local_thread_adapter->Send(instance, |
| - new PpapiHostMsg_PPBFlash_CreateDir( |
| - API_ID_PPB_FLASH, instance, path, &result)); |
| - return result; |
| + PluginGlobals::Get()->plugin_proxy_delegate()->SendToBrowser( |
| + new PepperFileMsg_CreateDir(pepper_path, &error)); |
| + |
| + return ppapi::PlatformFileErrorToPepperError(error); |
| } |
| -int32_t PPB_Flash_Proxy::QueryFile(PP_Instance instance, |
| +int32_t PPB_Flash_Proxy::QueryFile(PP_Instance, |
| const char* path, |
| PP_FileInfo* info) { |
| - if (!g_module_local_thread_adapter) |
| - return PP_ERROR_FAILED; |
| + base::PlatformFileInfo file_info; |
| + base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED; |
| + ppapi::PepperFilePath pepper_path(ppapi::PepperFilePath::DOMAIN_MODULE_LOCAL, |
| + FilePath::FromUTF8Unsafe(path)); |
| - int32_t result = PP_ERROR_FAILED; |
| - g_module_local_thread_adapter->Send(instance, |
| - new PpapiHostMsg_PPBFlash_QueryFile( |
| - API_ID_PPB_FLASH, instance, path, info, &result)); |
| - return result; |
| + PluginGlobals::Get()->plugin_proxy_delegate()->SendToBrowser( |
| + new PepperFileMsg_QueryFile(pepper_path, &file_info, &error)); |
| + |
| + if (error == base::PLATFORM_FILE_OK) { |
| + info->size = file_info.size; |
| + info->creation_time = TimeToPPTime(file_info.creation_time); |
| + info->last_access_time = TimeToPPTime(file_info.last_accessed); |
| + info->last_modified_time = TimeToPPTime(file_info.last_modified); |
| + info->system_type = PP_FILESYSTEMTYPE_EXTERNAL; |
| + if (file_info.is_directory) |
| + info->type = PP_FILETYPE_DIRECTORY; |
| + else |
| + info->type = PP_FILETYPE_REGULAR; |
| + } |
| + |
| + return ppapi::PlatformFileErrorToPepperError(error); |
| } |
| -int32_t PPB_Flash_Proxy::GetDirContents(PP_Instance instance, |
| +int32_t PPB_Flash_Proxy::GetDirContents(PP_Instance, |
| const char* path, |
| PP_DirContents_Dev** contents) { |
| - if (!g_module_local_thread_adapter) |
| - return PP_ERROR_FAILED; |
| + ppapi::DirContents entries; |
| + base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED; |
| + ppapi::PepperFilePath pepper_path(ppapi::PepperFilePath::DOMAIN_MODULE_LOCAL, |
| + FilePath::FromUTF8Unsafe(path)); |
| - int32_t result = PP_ERROR_FAILED; |
| - std::vector<SerializedDirEntry> entries; |
| - g_module_local_thread_adapter->Send(instance, |
| - new PpapiHostMsg_PPBFlash_GetDirContents( |
| - API_ID_PPB_FLASH, instance, path, &entries, &result)); |
| + PluginGlobals::Get()->plugin_proxy_delegate()->SendToBrowser( |
| + new PepperFileMsg_GetDirContents(pepper_path, &entries, &error)); |
| - if (result != PP_OK) |
| - return result; |
| - |
| - // Copy the serialized dir entries to the output struct. |
| - *contents = new PP_DirContents_Dev; |
| - (*contents)->count = static_cast<int32_t>(entries.size()); |
| - (*contents)->entries = new PP_DirEntry_Dev[entries.size()]; |
| - for (size_t i = 0; i < entries.size(); i++) { |
| - const SerializedDirEntry& source = entries[i]; |
| - PP_DirEntry_Dev* dest = &(*contents)->entries[i]; |
| - |
| - char* name_copy = new char[source.name.size() + 1]; |
| - memcpy(name_copy, source.name.c_str(), source.name.size() + 1); |
| - dest->name = name_copy; |
| - dest->is_dir = PP_FromBool(source.is_dir); |
| + if (error == base::PLATFORM_FILE_OK) { |
| + // Copy the serialized dir entries to the output struct. |
| + *contents = new PP_DirContents_Dev; |
| + (*contents)->count = static_cast<int32_t>(entries.size()); |
| + (*contents)->entries = new PP_DirEntry_Dev[entries.size()]; |
| + for (size_t i = 0; i < entries.size(); i++) { |
| + const ppapi::DirEntry& source = entries[i]; |
| + PP_DirEntry_Dev* dest = &(*contents)->entries[i]; |
| + std::string name = source.name.AsUTF8Unsafe(); |
| + char* name_copy = new char[name.size() + 1]; |
| + memcpy(name_copy, name.c_str(), name.size() + 1); |
| + dest->name = name_copy; |
| + dest->is_dir = PP_FromBool(source.is_dir); |
| + } |
| } |
| - return result; |
| + return ppapi::PlatformFileErrorToPepperError(error); |
| } |
| int32_t PPB_Flash_Proxy::OpenFileRef(PP_Instance instance, |
| @@ -1048,101 +1065,6 @@ |
| } |
| } |
| -void PPB_Flash_Proxy::OnHostMsgOpenFile( |
| - PP_Instance instance, |
| - const std::string& path, |
| - int32_t mode, |
| - IPC::PlatformFileForTransit* file_handle, |
| - int32_t* result) { |
| - EnterInstanceNoLock enter(instance); |
| - if (enter.succeeded()) { |
| - base::PlatformFile file; |
| - *result = enter.functions()->GetFlashAPI()->OpenFile( |
| - instance, path.c_str(), mode, &file); |
| - *file_handle = PlatformFileToPlatformFileForTransit( |
| - dispatcher(), result, file); |
| - } else { |
| - *result = PP_ERROR_BADARGUMENT; |
| - } |
| -} |
| - |
| -void PPB_Flash_Proxy::OnHostMsgRenameFile(PP_Instance instance, |
| - const std::string& from_path, |
| - const std::string& to_path, |
| - int32_t* result) { |
| - EnterInstanceNoLock enter(instance); |
| - if (enter.succeeded()) { |
| - *result = enter.functions()->GetFlashAPI()->RenameFile( |
| - instance, from_path.c_str(), to_path.c_str()); |
| - } else { |
| - *result = PP_ERROR_BADARGUMENT; |
| - } |
| -} |
| - |
| -void PPB_Flash_Proxy::OnHostMsgDeleteFileOrDir(PP_Instance instance, |
| - const std::string& path, |
| - PP_Bool recursive, |
| - int32_t* result) { |
| - EnterInstanceNoLock enter(instance); |
| - if (enter.succeeded()) { |
| - *result = enter.functions()->GetFlashAPI()->DeleteFileOrDir( |
| - instance, path.c_str(), recursive); |
| - } else { |
| - *result = PP_ERROR_BADARGUMENT; |
| - } |
| -} |
| - |
| -void PPB_Flash_Proxy::OnHostMsgCreateDir(PP_Instance instance, |
| - const std::string& path, |
| - int32_t* result) { |
| - EnterInstanceNoLock enter(instance); |
| - if (enter.succeeded()) { |
| - *result = enter.functions()->GetFlashAPI()->CreateDir( |
| - instance, path.c_str()); |
| - } else { |
| - *result = PP_ERROR_BADARGUMENT; |
| - } |
| -} |
| - |
| -void PPB_Flash_Proxy::OnHostMsgQueryFile(PP_Instance instance, |
| - const std::string& path, |
| - PP_FileInfo* info, |
| - int32_t* result) { |
| - EnterInstanceNoLock enter(instance); |
| - if (enter.succeeded()) { |
| - *result = enter.functions()->GetFlashAPI()->QueryFile( |
| - instance, path.c_str(), info); |
| - } else { |
| - *result = PP_ERROR_BADARGUMENT; |
| - } |
| -} |
| - |
| -void PPB_Flash_Proxy::OnHostMsgGetDirContents( |
| - PP_Instance instance, |
| - const std::string& path, |
| - std::vector<SerializedDirEntry>* entries, |
| - int32_t* result) { |
| - EnterInstanceNoLock enter(instance); |
| - if (enter.failed()) { |
| - *result = PP_ERROR_BADARGUMENT; |
| - return; |
| - } |
| - |
| - PP_DirContents_Dev* contents = NULL; |
| - *result = enter.functions()->GetFlashAPI()->GetDirContents( |
| - instance, path.c_str(), &contents); |
| - if (*result != PP_OK) |
| - return; |
| - |
| - // Convert the list of entries to the serialized version. |
| - entries->resize(contents->count); |
| - for (int32_t i = 0; i < contents->count; i++) { |
| - (*entries)[i].name.assign(contents->entries[i].name); |
| - (*entries)[i].is_dir = PP_ToBool(contents->entries[i].is_dir); |
| - } |
| - enter.functions()->GetFlashAPI()->FreeDirContents(instance, contents); |
| -} |
| - |
| void PPB_Flash_Proxy::OnHostMsgOpenFileRef( |
| PP_Instance instance, |
| const HostResource& host_resource, |