Index: ppapi/proxy/ppb_url_loader_proxy.cc |
diff --git a/ppapi/proxy/ppb_url_loader_proxy.cc b/ppapi/proxy/ppb_url_loader_proxy.cc |
index 1f398ceaada75e7b09cd6244713cd6121ca3e865..91c1bba3020bd3ebb0ed6d22f0db126c453f29d5 100644 |
--- a/ppapi/proxy/ppb_url_loader_proxy.cc |
+++ b/ppapi/proxy/ppb_url_loader_proxy.cc |
@@ -22,7 +22,7 @@ |
#include "ppapi/proxy/plugin_dispatcher.h" |
#include "ppapi/proxy/plugin_resource_tracker.h" |
#include "ppapi/proxy/ppapi_messages.h" |
-#include "ppapi/proxy/ppb_url_response_info_proxy.h" |
+#include "ppapi/proxy/ppb_file_ref_proxy.h" |
#include "ppapi/shared_impl/scoped_pp_resource.h" |
#include "ppapi/shared_impl/tracked_callback.h" |
#include "ppapi/thunk/enter.h" |
@@ -114,6 +114,7 @@ class URLLoader : public Resource, public PPB_URLLoader_API { |
virtual void GrantUniversalAccess() OVERRIDE; |
virtual void SetStatusCallback( |
PP_URLLoaderTrusted_StatusCallback cb) OVERRIDE; |
+ virtual bool GetResponseInfoData(URLResponseInfoData* data) OVERRIDE; |
// Called when the browser has new up/download progress to report. |
void UpdateProgress(const PPBURLLoader_UpdateProgress_Params& params); |
@@ -249,14 +250,24 @@ PP_Bool URLLoader::GetDownloadProgress( |
PP_Resource URLLoader::GetResponseInfo() { |
if (!response_info_) { |
- HostResource response_id; |
+ bool success = false; |
+ URLResponseInfoData data; |
GetDispatcher()->Send(new PpapiHostMsg_PPBURLLoader_GetResponseInfo( |
- API_ID_PPB_URL_LOADER, host_resource(), &response_id)); |
- if (response_id.is_null()) |
+ API_ID_PPB_URL_LOADER, host_resource(), &success, &data)); |
+ if (!success) |
return 0; |
- response_info_ = PPB_URLResponseInfo_Proxy::CreateResponseForResource( |
- response_id); |
+ // Create a proxy resource for the the file ref host resource if needed. |
+ PP_Resource body_as_file_ref = 0; |
+ if (!data.body_as_file_ref.resource.is_null()) { |
+ body_as_file_ref = |
+ PPB_FileRef_Proxy::DeserializeFileRef(data.body_as_file_ref); |
+ } |
+ |
+ // Assumes ownership of body_as_file_ref. |
+ thunk::EnterResourceCreationNoLock enter(pp_instance()); |
+ response_info_ = enter.functions()->CreateURLResponseInfo( |
+ pp_instance(), data, body_as_file_ref); |
} |
// The caller expects to get a ref, and we want to keep holding ours. |
@@ -319,6 +330,12 @@ void URLLoader::SetStatusCallback( |
// proxy itself in the host. |
} |
+bool URLLoader::GetResponseInfoData(URLResponseInfoData* data) { |
+ // Not implemented in the proxied version, this is for implementing the |
+ // proxy itself in the host. |
+ return false; |
+} |
+ |
void URLLoader::UpdateProgress( |
const PPBURLLoader_UpdateProgress_Params& params) { |
bytes_sent_ = params.bytes_sent; |
@@ -484,12 +501,13 @@ void PPB_URLLoader_Proxy::OnMsgFollowRedirect( |
} |
void PPB_URLLoader_Proxy::OnMsgGetResponseInfo(const HostResource& loader, |
- HostResource* result) { |
+ bool* success, |
+ URLResponseInfoData* result) { |
EnterHostFromHostResource<PPB_URLLoader_API> enter(loader); |
- if (enter.succeeded()) { |
- result->SetHostResource(loader.instance(), |
- enter.object()->GetResponseInfo()); |
- } |
+ if (enter.succeeded()) |
+ *success = enter.object()->GetResponseInfoData(result); |
+ else |
+ *success = false; |
} |
void PPB_URLLoader_Proxy::OnMsgReadResponseBody( |