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

Unified Diff: ppapi/proxy/ppb_flash_proxy.cc

Issue 10387195: Open pepper files directly in browser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/proxy/ppb_flash_proxy.h ('k') | ppapi/shared_impl/dir_contents.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « ppapi/proxy/ppb_flash_proxy.h ('k') | ppapi/shared_impl/dir_contents.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698