| Index: ppapi/proxy/ppb_url_response_info_proxy.cc
|
| ===================================================================
|
| --- ppapi/proxy/ppb_url_response_info_proxy.cc (revision 75471)
|
| +++ ppapi/proxy/ppb_url_response_info_proxy.cc (working copy)
|
| @@ -5,9 +5,11 @@
|
| #include "ppapi/proxy/ppb_url_response_info_proxy.h"
|
|
|
| #include "ppapi/c/ppb_url_response_info.h"
|
| +#include "ppapi/proxy/host_dispatcher.h"
|
| #include "ppapi/proxy/plugin_dispatcher.h"
|
| #include "ppapi/proxy/plugin_resource.h"
|
| #include "ppapi/proxy/ppapi_messages.h"
|
| +#include "ppapi/proxy/ppb_file_ref_proxy.h"
|
| #include "ppapi/proxy/serialized_var.h"
|
|
|
| namespace pp {
|
| @@ -51,13 +53,23 @@
|
| }
|
|
|
| PP_Resource GetBodyAsFileRef(PP_Resource response) {
|
| - /*
|
| + URLResponseInfo* object = PluginResource::GetAs<URLResponseInfo>(response);
|
| + if (!object)
|
| + return 0;
|
| + PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(
|
| + object->instance());
|
| + if (!dispatcher)
|
| + return 0;
|
| +
|
| + // This could be more efficient by having the host automatically send us the
|
| + // file ref when the request is streaming to a file and it's in the state
|
| + // where the file is ready. This will prevent us from having to do this sync
|
| + // IPC here.
|
| + PPBFileRef_CreateInfo create_info;
|
| dispatcher->Send(new PpapiHostMsg_PPBURLResponseInfo_GetBodyAsFileRef(
|
| - INTERFACE_ID_PPB_URL_RESPONSE_INFO, response, &result));
|
| - // TODO(brettw) when we have FileRef proxied, make an object from that
|
| - // ref so we can track it properly and then uncomment this.
|
| - */
|
| - return 0;
|
| + INTERFACE_ID_PPB_URL_RESPONSE_INFO,
|
| + object->host_resource(), &create_info));
|
| + return PPB_FileRef_Proxy::DeserializeFileRef(create_info);
|
| }
|
|
|
| const PPB_URLResponseInfo urlresponseinfo_interface = {
|
| @@ -124,11 +136,16 @@
|
|
|
| void PPB_URLResponseInfo_Proxy::OnMsgGetBodyAsFileRef(
|
| HostResource response,
|
| - HostResource* file_ref_result) {
|
| - file_ref_result->SetHostResource(
|
| - response.instance(),
|
| - ppb_url_response_info_target()->GetBodyAsFileRef(
|
| - response.host_resource()));
|
| + PPBFileRef_CreateInfo* result) {
|
| + PP_Resource file_ref = ppb_url_response_info_target()->GetBodyAsFileRef(
|
| + response.host_resource());
|
| +
|
| + // Use the FileRef proxy to serialize.
|
| + DCHECK(!dispatcher()->IsPlugin());
|
| + HostDispatcher* host_disp = static_cast<HostDispatcher*>(dispatcher());
|
| + PPB_FileRef_Proxy* file_ref_proxy = static_cast<PPB_FileRef_Proxy*>(
|
| + host_disp->GetOrCreatePPBInterfaceProxy(INTERFACE_ID_PPB_FILE_REF));
|
| + file_ref_proxy->SerializeFileRef(file_ref, result);
|
| }
|
|
|
| } // namespace proxy
|
|
|