Index: ppapi/proxy/ppb_url_loader_proxy.cc |
=================================================================== |
--- ppapi/proxy/ppb_url_loader_proxy.cc (revision 71973) |
+++ ppapi/proxy/ppb_url_loader_proxy.cc (working copy) |
@@ -28,7 +28,7 @@ |
class URLLoader : public PluginResource { |
public: |
- URLLoader(); |
+ URLLoader(PP_Instance instance); |
virtual ~URLLoader(); |
// Resource overrides. |
@@ -50,8 +50,9 @@ |
DISALLOW_COPY_AND_ASSIGN(URLLoader); |
}; |
-URLLoader::URLLoader() |
- : bytes_sent_(-1), |
+URLLoader::URLLoader(PP_Instance instance) |
+ : PluginResource(instance), |
+ bytes_sent_(-1), |
total_bytes_to_be_sent_(-1), |
bytes_received_(-1), |
total_bytes_to_be_received_(-1), |
@@ -64,15 +65,27 @@ |
namespace { |
+// Converts the given loader ID to the dispatcher associated with it, or NULL |
+// if it couldn't be found. |
+PluginDispatcher* DispatcherFromURLLoader(PP_Resource loader_id) { |
+ URLLoader* object = PluginResource::GetAs<URLLoader>(loader_id); |
+ if (!object) |
+ return NULL; |
+ return PluginDispatcher::GetForInstance(object->instance()); |
+} |
+ |
// Plugin PPB_URLLoader implmentation ------------------------------------------ |
PP_Resource Create(PP_Instance instance_id) { |
- PluginDispatcher* dispatcher = PluginDispatcher::Get(); |
+ PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance_id); |
+ if (!dispatcher) |
+ return 0; |
+ |
PP_Resource result = 0; |
dispatcher->Send(new PpapiHostMsg_PPBURLLoader_Create( |
INTERFACE_ID_PPB_URL_LOADER, instance_id, &result)); |
if (result) |
- PPB_URLLoader_Proxy::TrackPluginResource(result); |
+ PPB_URLLoader_Proxy::TrackPluginResource(instance_id, result); |
return result; |
} |
@@ -84,7 +97,10 @@ |
int32_t Open(PP_Resource loader_id, |
PP_Resource request_id, |
PP_CompletionCallback callback) { |
- Dispatcher* dispatcher = PluginDispatcher::Get(); |
+ PluginDispatcher* dispatcher = DispatcherFromURLLoader(loader_id); |
+ if (!dispatcher) |
+ return PP_ERROR_BADRESOURCE; |
+ |
dispatcher->Send(new PpapiHostMsg_PPBURLLoader_Open( |
INTERFACE_ID_PPB_URL_LOADER, loader_id, request_id, |
dispatcher->callback_tracker().SendCallback(callback))); |
@@ -93,7 +109,10 @@ |
int32_t FollowRedirect(PP_Resource loader_id, |
PP_CompletionCallback callback) { |
- Dispatcher* dispatcher = PluginDispatcher::Get(); |
+ PluginDispatcher* dispatcher = DispatcherFromURLLoader(loader_id); |
+ if (!dispatcher) |
+ return PP_ERROR_BADRESOURCE; |
+ |
dispatcher->Send(new PpapiHostMsg_PPBURLLoader_FollowRedirect( |
INTERFACE_ID_PPB_URL_LOADER, loader_id, |
dispatcher->callback_tracker().SendCallback(callback))); |
@@ -129,6 +148,10 @@ |
} |
PP_Resource GetResponseInfo(PP_Resource loader_id) { |
+ URLLoader* object = PluginResource::GetAs<URLLoader>(loader_id); |
+ if (!object) |
+ return 0; |
+ |
// If we find that plugins are frequently requesting the response info, we |
// can improve performance by caching the PP_Resource in the URLLoader |
// object. This way we only have to do IPC for the first request. However, |
@@ -136,16 +159,20 @@ |
// optimizing this case. |
PP_Resource result; |
- PluginDispatcher* dispatcher = PluginDispatcher::Get(); |
+ PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance( |
+ object->instance()); |
+ if (!dispatcher) |
+ return PP_ERROR_BADRESOURCE; |
+ |
dispatcher->Send(new PpapiHostMsg_PPBURLLoader_GetResponseInfo( |
INTERFACE_ID_PPB_URL_LOADER, loader_id, &result)); |
- if (dispatcher->plugin_resource_tracker()->PreparePreviouslyTrackedResource( |
- result)) |
+ if (PluginResourceTracker::GetInstance()-> |
+ PreparePreviouslyTrackedResource(result)) |
return result; |
// Tell the response info to create a tracking object and add it to the |
// resource tracker. |
- PPB_URLResponseInfo_Proxy::TrackPluginResource(result); |
+ PPB_URLResponseInfo_Proxy::TrackPluginResource(object->instance(), result); |
return result; |
} |
@@ -156,6 +183,10 @@ |
URLLoader* object = PluginResource::GetAs<URLLoader>(loader_id); |
if (!object) |
return PP_ERROR_BADRESOURCE; |
+ PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance( |
+ object->instance()); |
+ if (!dispatcher) |
+ return PP_ERROR_BADRESOURCE; |
if (!buffer) |
return PP_ERROR_BADARGUMENT; // Must specify an output buffer. |
@@ -170,14 +201,17 @@ |
object->current_read_callback_ = callback; |
object->current_read_buffer_ = buffer; |
- PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBURLLoader_ReadResponseBody( |
+ dispatcher->Send(new PpapiHostMsg_PPBURLLoader_ReadResponseBody( |
INTERFACE_ID_PPB_URL_LOADER, loader_id, bytes_to_read)); |
return PP_ERROR_WOULDBLOCK; |
} |
int32_t FinishStreamingToFile(PP_Resource loader_id, |
PP_CompletionCallback callback) { |
- Dispatcher* dispatcher = PluginDispatcher::Get(); |
+ PluginDispatcher* dispatcher = DispatcherFromURLLoader(loader_id); |
+ if (!dispatcher) |
+ return PP_ERROR_BADRESOURCE; |
+ |
dispatcher->Send(new PpapiHostMsg_PPBURLLoader_FinishStreamingToFile( |
INTERFACE_ID_PPB_URL_LOADER, loader_id, |
dispatcher->callback_tracker().SendCallback(callback))); |
@@ -185,7 +219,11 @@ |
} |
void Close(PP_Resource loader_id) { |
- PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBURLLoader_Close( |
+ PluginDispatcher* dispatcher = DispatcherFromURLLoader(loader_id); |
+ if (!dispatcher) |
+ return; |
+ |
+ dispatcher->Send(new PpapiHostMsg_PPBURLLoader_Close( |
INTERFACE_ID_PPB_URL_LOADER, loader_id)); |
} |
@@ -234,10 +272,11 @@ |
} |
// static |
-void PPB_URLLoader_Proxy::TrackPluginResource(PP_Resource url_loader_resource) { |
- linked_ptr<URLLoader> object(new URLLoader); |
- PluginDispatcher::Get()->plugin_resource_tracker()->AddResource( |
- url_loader_resource, object); |
+void PPB_URLLoader_Proxy::TrackPluginResource(PP_Instance instance, |
+ PP_Resource url_loader_resource) { |
+ linked_ptr<URLLoader> object(new URLLoader(instance)); |
+ PluginResourceTracker::GetInstance()->AddResource(url_loader_resource, |
+ object); |
} |
const void* PPB_URLLoader_Proxy::GetSourceInterface() const { |