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

Unified Diff: ppapi/proxy/ppb_flash_proxy.cc

Issue 11437038: Revert 171408 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years 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/proxy/ppb_instance_proxy.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/proxy/ppb_flash_proxy.cc
diff --git a/ppapi/proxy/ppb_flash_proxy.cc b/ppapi/proxy/ppb_flash_proxy.cc
index 919dd3af8da427ef0aabc118ec65cd7753fa18c9..4a9cd8f25b03ad37ed3c8ecb94bcf47861c77f10 100644
--- a/ppapi/proxy/ppb_flash_proxy.cc
+++ b/ppapi/proxy/ppb_flash_proxy.cc
@@ -19,11 +19,14 @@
#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/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"
@@ -50,6 +53,19 @@ bool InSameMinute(PP_Time t1, PP_Time t2) {
return floor(t1 / 60.0) == floor(t2 / 60.0);
}
+IPC::PlatformFileForTransit PlatformFileToPlatformFileForTransit(
+ Dispatcher* dispatcher,
+ int32_t* error,
+ base::PlatformFile file) {
+ if (*error != PP_OK)
+ return IPC::InvalidPlatformFileForTransit();
+ IPC::PlatformFileForTransit out_handle =
+ dispatcher->ShareHandleWithRemote(file, true);
+ if (out_handle == IPC::InvalidPlatformFileForTransit())
+ *error = PP_ERROR_NOACCESS;
+ return out_handle;
+}
+
void InvokePrinting(PP_Instance instance) {
ProxyAutoLock lock;
@@ -95,6 +111,10 @@ bool PPB_Flash_Proxy::OnMessageReceived(const IPC::Message& msg) {
OnHostMsgGetLocalTimeZoneOffset)
IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_IsRectTopmost,
OnHostMsgIsRectTopmost)
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_OpenFileRef,
+ OnHostMsgOpenFileRef)
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_QueryFileRef,
+ OnHostMsgQueryFileRef)
IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_InvokePrinting,
OnHostMsgInvokePrinting)
IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_GetSetting,
@@ -260,6 +280,187 @@ PP_Var PPB_Flash_Proxy::GetSetting(PP_Instance instance,
return PP_MakeUndefined();
}
+bool PPB_Flash_Proxy::CreateThreadAdapterForInstance(PP_Instance instance) {
+ return true;
+}
+
+void PPB_Flash_Proxy::ClearThreadAdapterForInstance(PP_Instance instance) {
+}
+
+int32_t PPB_Flash_Proxy::OpenFile(PP_Instance,
+ const char* path,
+ int32_t mode,
+ PP_FileHandle* file) {
+ int flags = 0;
+ if (!path ||
+ !ppapi::PepperFileOpenFlagsToPlatformFileFlags(mode, &flags) ||
+ !file)
+ return PP_ERROR_BADARGUMENT;
+
+ base::PlatformFileError error;
+ IPC::PlatformFileForTransit transit_file;
+ ppapi::PepperFilePath pepper_path(ppapi::PepperFilePath::DOMAIN_MODULE_LOCAL,
+ FilePath::FromUTF8Unsafe(path));
+
+ if (PluginGlobals::Get()->GetBrowserSender()->Send(
+ 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,
+ 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));
+
+ PluginGlobals::Get()->GetBrowserSender()->Send(
+ new PepperFileMsg_RenameFile(pepper_from, pepper_to, &error));
+
+ return ppapi::PlatformFileErrorToPepperError(error);
+}
+
+int32_t PPB_Flash_Proxy::DeleteFileOrDir(PP_Instance,
+ const char* path,
+ PP_Bool recursive) {
+ base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED;
+ ppapi::PepperFilePath pepper_path(ppapi::PepperFilePath::DOMAIN_MODULE_LOCAL,
+ FilePath::FromUTF8Unsafe(path));
+
+ PluginGlobals::Get()->GetBrowserSender()->Send(
+ new PepperFileMsg_DeleteFileOrDir(pepper_path,
+ PP_ToBool(recursive),
+ &error));
+
+ return ppapi::PlatformFileErrorToPepperError(error);
+}
+
+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));
+
+ PluginGlobals::Get()->GetBrowserSender()->Send(
+ new PepperFileMsg_CreateDir(pepper_path, &error));
+
+ return ppapi::PlatformFileErrorToPepperError(error);
+}
+
+int32_t PPB_Flash_Proxy::QueryFile(PP_Instance,
+ const char* path,
+ PP_FileInfo* info) {
+ base::PlatformFileInfo file_info;
+ base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED;
+ ppapi::PepperFilePath pepper_path(ppapi::PepperFilePath::DOMAIN_MODULE_LOCAL,
+ FilePath::FromUTF8Unsafe(path));
+
+ PluginGlobals::Get()->GetBrowserSender()->Send(
+ 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,
+ const char* path,
+ PP_DirContents_Dev** contents) {
+ ppapi::DirContents entries;
+ base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED;
+ ppapi::PepperFilePath pepper_path(ppapi::PepperFilePath::DOMAIN_MODULE_LOCAL,
+ FilePath::FromUTF8Unsafe(path));
+
+ PluginGlobals::Get()->GetBrowserSender()->Send(
+ new PepperFileMsg_GetDirContents(pepper_path, &entries, &error));
+
+ 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 ppapi::PlatformFileErrorToPepperError(error);
+}
+
+int32_t PPB_Flash_Proxy::CreateTemporaryFile(PP_Instance instance,
+ PP_FileHandle* file) {
+ if (!file)
+ return PP_ERROR_BADARGUMENT;
+
+ base::PlatformFileError error;
+ IPC::PlatformFileForTransit transit_file;
+
+ if (PluginGlobals::Get()->GetBrowserSender()->Send(
+ new PepperFileMsg_CreateTemporaryFile(&error, &transit_file))) {
+ *file = IPC::PlatformFileForTransitToPlatformFile(transit_file);
+ } else {
+ error = base::PLATFORM_FILE_ERROR_FAILED;
+ *file = base::kInvalidPlatformFileValue;
+ }
+
+ return ppapi::PlatformFileErrorToPepperError(error);
+}
+
+int32_t PPB_Flash_Proxy::OpenFileRef(PP_Instance instance,
+ PP_Resource file_ref_id,
+ int32_t mode,
+ PP_FileHandle* file) {
+ EnterResourceNoLock<thunk::PPB_FileRef_API> enter(file_ref_id, true);
+ if (enter.failed())
+ return PP_ERROR_BADRESOURCE;
+
+ int32_t result = PP_ERROR_FAILED;
+ IPC::PlatformFileForTransit transit;
+ dispatcher()->Send(new PpapiHostMsg_PPBFlash_OpenFileRef(
+ API_ID_PPB_FLASH, instance, enter.resource()->host_resource(), mode,
+ &transit, &result));
+ *file = IPC::PlatformFileForTransitToPlatformFile(transit);
+ return result;
+}
+
+int32_t PPB_Flash_Proxy::QueryFileRef(PP_Instance instance,
+ PP_Resource file_ref_id,
+ PP_FileInfo* info) {
+ EnterResourceNoLock<thunk::PPB_FileRef_API> enter(file_ref_id, true);
+ if (enter.failed())
+ return PP_ERROR_BADRESOURCE;
+
+ int32_t result = PP_ERROR_FAILED;
+ dispatcher()->Send(new PpapiHostMsg_PPBFlash_QueryFileRef(
+ API_ID_PPB_FLASH, instance, enter.resource()->host_resource(), info,
+ &result));
+ return result;
+}
+
void PPB_Flash_Proxy::OnHostMsgSetInstanceAlwaysOnTop(PP_Instance instance,
PP_Bool on_top) {
EnterInstanceNoLock enter(instance);
@@ -350,6 +551,39 @@ void PPB_Flash_Proxy::OnHostMsgIsRectTopmost(PP_Instance instance,
*result = PP_FALSE;
}
+void PPB_Flash_Proxy::OnHostMsgOpenFileRef(
+ PP_Instance instance,
+ const HostResource& host_resource,
+ int32_t mode,
+ IPC::PlatformFileForTransit* file_handle,
+ int32_t* result) {
+ EnterInstanceNoLock enter(instance);
+ if (enter.failed()) {
+ *result = PP_ERROR_BADARGUMENT;
+ return;
+ }
+
+ base::PlatformFile file;
+ *result = enter.functions()->GetFlashAPI()->OpenFileRef(
+ instance, host_resource.host_resource(), mode, &file);
+ *file_handle = PlatformFileToPlatformFileForTransit(dispatcher(),
+ result, file);
+}
+
+void PPB_Flash_Proxy::OnHostMsgQueryFileRef(
+ PP_Instance instance,
+ const HostResource& host_resource,
+ PP_FileInfo* info,
+ int32_t* result) {
+ EnterInstanceNoLock enter(instance);
+ if (enter.failed()) {
+ *result = PP_ERROR_BADARGUMENT;
+ return;
+ }
+ *result = enter.functions()->GetFlashAPI()->QueryFileRef(
+ instance, host_resource.host_resource(), info);
+}
+
void PPB_Flash_Proxy::OnHostMsgGetSetting(PP_Instance instance,
PP_FlashSetting setting,
SerializedVarReturnValue id) {
« no previous file with comments | « ppapi/proxy/ppb_flash_proxy.h ('k') | ppapi/proxy/ppb_instance_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698