Index: content/browser/renderer_host/pepper/pepper_renderer_connection.cc |
diff --git a/content/browser/renderer_host/pepper/pepper_renderer_connection.cc b/content/browser/renderer_host/pepper/pepper_renderer_connection.cc |
index a5b95ceb223e40e975efee08bed58b0d2cb84e6b..821b79867690d63567e5f2bf1ba9750284ff5e7c 100644 |
--- a/content/browser/renderer_host/pepper/pepper_renderer_connection.cc |
+++ b/content/browser/renderer_host/pepper/pepper_renderer_connection.cc |
@@ -4,6 +4,7 @@ |
#include "content/browser/renderer_host/pepper/pepper_renderer_connection.h" |
+#include "base/debug/stack_trace.h" |
#include "content/browser/browser_child_process_host_impl.h" |
#include "content/browser/ppapi_plugin_process_host.h" |
#include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h" |
@@ -16,7 +17,9 @@ |
#include "ppapi/host/resource_host.h" |
#include "ppapi/proxy/ppapi_message_utils.h" |
#include "ppapi/proxy/ppapi_messages.h" |
+#include "ppapi/proxy/ppapi_message_utils.h" |
#include "ppapi/proxy/resource_message_params.h" |
+#include "ppapi/shared_impl/file_ref_detailed_info.h" |
namespace content { |
@@ -76,6 +79,8 @@ bool PepperRendererConnection::OnMessageReceived(const IPC::Message& msg, |
OnMsgCreateResourceHostFromHost) |
IPC_MESSAGE_HANDLER(PpapiHostMsg_FileRef_GetInfoForRenderer, |
OnMsgFileRefGetInfoForRenderer) |
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_FileRef_SyncGetInfoForRenderer, |
+ OnMsgFileRefSyncGetInfoForRenderer) |
IPC_MESSAGE_HANDLER(ViewHostMsg_DidCreateInProcessInstance, |
OnMsgDidCreateInProcessInstance) |
IPC_MESSAGE_HANDLER(ViewHostMsg_DidDeleteInProcessInstance, |
@@ -132,12 +137,16 @@ void PepperRendererConnection::OnMsgFileRefGetInfoForRenderer( |
int child_process_id, |
int32_t sequence, |
const std::vector<PP_Resource>& resources) { |
- std::vector<PP_Resource> out_resources; |
- std::vector<PP_FileSystemType> fs_types; |
- std::vector<std::string> file_system_url_specs; |
- std::vector<base::FilePath> external_paths; |
+ std::vector<ppapi::FileRef_DetailedInfo> infos; |
BrowserPpapiHostImpl* host = GetHostForChildProcess(child_process_id); |
+ |
+ // If the message is being sent from an in-process plugin, we own the |
+ // BrowserPpapiHost. |
+ if (!host && child_process_id == 0) { |
+ host = in_process_host_.get(); |
+ } |
+ |
if (host) { |
for (size_t i = 0; i < resources.size(); ++i) { |
ppapi::host::ResourceHost* resource_host = |
@@ -145,20 +154,49 @@ void PepperRendererConnection::OnMsgFileRefGetInfoForRenderer( |
if (resource_host && resource_host->IsFileRefHost()) { |
PepperFileRefHost* file_ref_host = |
static_cast<PepperFileRefHost*>(resource_host); |
- out_resources.push_back(resources[i]); |
- fs_types.push_back(file_ref_host->GetFileSystemType()); |
- file_system_url_specs.push_back(file_ref_host->GetFileSystemURLSpec()); |
- external_paths.push_back(file_ref_host->GetExternalPath()); |
+ ppapi::FileRef_DetailedInfo info; |
+ info.resource = resources[i]; |
+ info.file_system_type = file_ref_host->GetFileSystemType(); |
+ info.file_system_url_spec = file_ref_host->GetFileSystemURLSpec(); |
+ info.external_path = file_ref_host->GetExternalPath(); |
+ infos.push_back(info); |
} |
} |
} |
Send(new PpapiHostMsg_FileRef_GetInfoForRendererReply( |
routing_id, |
sequence, |
- out_resources, |
- fs_types, |
- file_system_url_specs, |
- external_paths)); |
+ infos)); |
+} |
+ |
+void PepperRendererConnection::OnMsgFileRefSyncGetInfoForRenderer( |
+ int child_process_id, |
+ const std::vector<PP_Resource>& resources, |
+ std::vector<ppapi::FileRef_DetailedInfo>* out_infos) { |
+ BrowserPpapiHostImpl* host = GetHostForChildProcess(child_process_id); |
+ |
+ // If the message is being sent from an in-process plugin, we own the |
+ // BrowserPpapiHost. |
+ if (!host && child_process_id == 0) { |
+ host = in_process_host_.get(); |
+ } |
+ |
+ if (host) { |
+ for (size_t i = 0; i < resources.size(); ++i) { |
+ ppapi::host::ResourceHost* resource_host = |
+ host->GetPpapiHost()->GetResourceHost(resources[i]); |
+ if (resource_host && resource_host->IsFileRefHost()) { |
+ PepperFileRefHost* file_ref_host = |
+ static_cast<PepperFileRefHost*>(resource_host); |
+ ppapi::FileRef_DetailedInfo info; |
+ info.resource = resources[i]; |
+ info.file_system_type = file_ref_host->GetFileSystemType(); |
+ info.file_system_url_spec = file_ref_host->GetFileSystemURLSpec(); |
+ info.external_path = file_ref_host->GetExternalPath(); |
+ out_infos->push_back(info); |
+ } |
+ } |
+ } |
} |
void PepperRendererConnection::OnMsgDidCreateInProcessInstance( |