Index: ppapi/proxy/ppb_url_request_info_proxy.cc |
=================================================================== |
--- ppapi/proxy/ppb_url_request_info_proxy.cc (revision 72840) |
+++ ppapi/proxy/ppb_url_request_info_proxy.cc (working copy) |
@@ -14,8 +14,10 @@ |
class URLRequestInfo : public PluginResource { |
public: |
- URLRequestInfo(PP_Instance instance) : PluginResource(instance) {} |
- virtual ~URLRequestInfo() {} |
+ URLRequestInfo(const HostResource& resource) : PluginResource(resource) { |
+ } |
+ virtual ~URLRequestInfo() { |
+ } |
// Resource overrides. |
virtual URLRequestInfo* AsURLRequestInfo() { return this; } |
@@ -26,13 +28,16 @@ |
namespace { |
-// Returns the dispatcher associated with the given URLRequestInfo, or NULL if |
-// none exists. |
-PluginDispatcher* DispatcherFromURLRequestInfo(PP_Resource resource) { |
- URLRequestInfo* object = PluginResource::GetAs<URLRequestInfo>(resource); |
- if (!object) |
- return NULL; |
- return PluginDispatcher::GetForInstance(object->instance()); |
+// Computes the dispatcher and request object for the given plugin resource, |
+// returning true on success. |
+bool DispatcherFromURLRequestInfo(PP_Resource resource, |
+ PluginDispatcher** dispatcher, |
+ URLRequestInfo** request_info) { |
+ *request_info = PluginResource::GetAs<URLRequestInfo>(resource); |
+ if (!*request_info) |
+ return false; |
+ *dispatcher = PluginDispatcher::GetForInstance((*request_info)->instance()); |
+ return !!*dispatcher; |
} |
PP_Resource Create(PP_Instance instance) { |
@@ -40,14 +45,14 @@ |
if (!dispatcher) |
return 0; |
- PP_Resource result; |
+ HostResource result; |
dispatcher->Send(new PpapiHostMsg_PPBURLRequestInfo_Create( |
INTERFACE_ID_PPB_URL_REQUEST_INFO, instance, &result)); |
- if (result) { |
- linked_ptr<URLRequestInfo> object(new URLRequestInfo(instance)); |
- PluginResourceTracker::GetInstance()->AddResource(result, object); |
- } |
- return result; |
+ if (result.is_null()) |
+ return 0; |
+ |
+ linked_ptr<URLRequestInfo> object(new URLRequestInfo(result)); |
+ return PluginResourceTracker::GetInstance()->AddResource(object); |
} |
PP_Bool IsURLRequestInfo(PP_Resource resource) { |
@@ -58,12 +63,13 @@ |
PP_Bool SetProperty(PP_Resource request_id, |
PP_URLRequestProperty property, |
PP_Var var) { |
- PluginDispatcher* dispatcher = DispatcherFromURLRequestInfo(request_id); |
- if (!dispatcher) |
+ PluginDispatcher* dispatcher; |
+ URLRequestInfo* request_info; |
+ if (!DispatcherFromURLRequestInfo(request_id, &dispatcher, &request_info)) |
return PP_FALSE; |
dispatcher->Send(new PpapiHostMsg_PPBURLRequestInfo_SetProperty( |
- INTERFACE_ID_PPB_URL_REQUEST_INFO, request_id, |
+ INTERFACE_ID_PPB_URL_REQUEST_INFO, request_info->host_resource(), |
static_cast<int32_t>(property), |
SerializedVarSendInput(dispatcher, var))); |
@@ -74,12 +80,14 @@ |
PP_Bool AppendDataToBody(PP_Resource request_id, |
const char* data, uint32_t len) { |
- PluginDispatcher* dispatcher = DispatcherFromURLRequestInfo(request_id); |
- if (!dispatcher) |
+ PluginDispatcher* dispatcher; |
+ URLRequestInfo* request_info; |
+ if (!DispatcherFromURLRequestInfo(request_id, &dispatcher, &request_info)) |
return PP_FALSE; |
dispatcher->Send(new PpapiHostMsg_PPBURLRequestInfo_AppendDataToBody( |
- INTERFACE_ID_PPB_URL_REQUEST_INFO, request_id, std::string(data, len))); |
+ INTERFACE_ID_PPB_URL_REQUEST_INFO, request_info->host_resource(), |
+ std::string(data, len))); |
// TODO(brettw) do some validation. We should be able to tell on the plugin |
// side whether the request will succeed or fail in the renderer. |
@@ -91,12 +99,18 @@ |
int64_t start_offset, |
int64_t number_of_bytes, |
PP_Time expected_last_modified_time) { |
- PluginDispatcher* dispatcher = DispatcherFromURLRequestInfo(request_id); |
- if (!dispatcher) |
+ PluginDispatcher* dispatcher; |
+ URLRequestInfo* request_info; |
+ if (!DispatcherFromURLRequestInfo(request_id, &dispatcher, &request_info)) |
return PP_FALSE; |
+ PluginResource* file_ref_object = |
+ PluginResourceTracker::GetInstance()->GetResourceObject(file_ref_id); |
+ if (!file_ref_object) |
+ return PP_FALSE; |
dispatcher->Send(new PpapiHostMsg_PPBURLRequestInfo_AppendFileToBody( |
- INTERFACE_ID_PPB_URL_REQUEST_INFO, request_id, file_ref_id, |
+ INTERFACE_ID_PPB_URL_REQUEST_INFO, request_info->host_resource(), |
+ file_ref_object->host_resource(), |
start_offset, number_of_bytes, expected_last_modified_time)); |
// TODO(brettw) do some validation. We should be able to tell on the plugin |
@@ -149,35 +163,36 @@ |
void PPB_URLRequestInfo_Proxy::OnMsgCreate( |
PP_Instance instance, |
- PP_Resource* result) { |
- *result = ppb_url_request_info_target()->Create(instance); |
+ HostResource* result) { |
+ result->SetHostResource(instance, |
+ ppb_url_request_info_target()->Create(instance)); |
} |
void PPB_URLRequestInfo_Proxy::OnMsgSetProperty( |
- PP_Resource request, |
+ HostResource request, |
int32_t property, |
SerializedVarReceiveInput value) { |
- ppb_url_request_info_target()->SetProperty(request, |
+ ppb_url_request_info_target()->SetProperty(request.host_resource(), |
static_cast<PP_URLRequestProperty>(property), |
value.Get(dispatcher())); |
} |
void PPB_URLRequestInfo_Proxy::OnMsgAppendDataToBody( |
- PP_Resource request, |
+ HostResource request, |
const std::string& data) { |
- ppb_url_request_info_target()->AppendDataToBody(request, data.c_str(), |
- data.size()); |
+ ppb_url_request_info_target()->AppendDataToBody(request.host_resource(), |
+ data.c_str(), data.size()); |
} |
void PPB_URLRequestInfo_Proxy::OnMsgAppendFileToBody( |
- PP_Resource request, |
- PP_Resource file_ref, |
+ HostResource request, |
+ HostResource file_ref, |
int64_t start_offset, |
int64_t number_of_bytes, |
double expected_last_modified_time) { |
ppb_url_request_info_target()->AppendFileToBody( |
- request, file_ref, start_offset, number_of_bytes, |
- expected_last_modified_time); |
+ request.host_resource(), file_ref.host_resource(), |
+ start_offset, number_of_bytes, expected_last_modified_time); |
} |
} // namespace proxy |