| Index: ppapi/proxy/ppb_graphics_2d_proxy.cc | 
| =================================================================== | 
| --- ppapi/proxy/ppb_graphics_2d_proxy.cc	(revision 72840) | 
| +++ ppapi/proxy/ppb_graphics_2d_proxy.cc	(working copy) | 
| @@ -1,4 +1,4 @@ | 
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved. | 
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
| // Use of this source code is governed by a BSD-style license that can be | 
| // found in the LICENSE file. | 
|  | 
| @@ -21,14 +21,16 @@ | 
|  | 
| class Graphics2D : public PluginResource { | 
| public: | 
| -  Graphics2D(PP_Instance instance, | 
| +  Graphics2D(const HostResource& host_resource, | 
| const PP_Size& size, | 
| PP_Bool is_always_opaque) | 
| -      : PluginResource(instance), | 
| +      : PluginResource(host_resource), | 
| size_(size), | 
| is_always_opaque_(is_always_opaque), | 
| current_flush_callback_(PP_BlockUntilComplete()) { | 
| } | 
| +  virtual ~Graphics2D() { | 
| +  } | 
|  | 
| // Resource overrides. | 
| virtual Graphics2D* AsGraphics2D() { return this; } | 
| @@ -65,16 +67,15 @@ | 
| if (!dispatcher) | 
| return PP_ERROR_BADARGUMENT; | 
|  | 
| -  PP_Resource result = 0; | 
| +  HostResource result; | 
| dispatcher->Send(new PpapiHostMsg_PPBGraphics2D_Create( | 
| INTERFACE_ID_PPB_GRAPHICS_2D, instance, *size, is_always_opaque, | 
| &result)); | 
| -  if (result) { | 
| -    linked_ptr<Graphics2D> graphics_2d(new Graphics2D(instance, *size, | 
| -                                                      is_always_opaque)); | 
| -    PluginResourceTracker::GetInstance()->AddResource(result, graphics_2d); | 
| -  } | 
| -  return result; | 
| +  if (result.is_null()) | 
| +    return 0; | 
| +  linked_ptr<Graphics2D> graphics_2d(new Graphics2D(result, *size, | 
| +                                                    is_always_opaque)); | 
| +  return PluginResourceTracker::GetInstance()->AddResource(graphics_2d); | 
| } | 
|  | 
| PP_Bool IsGraphics2D(PP_Resource resource) { | 
| @@ -102,19 +103,27 @@ | 
| PP_Resource image_data, | 
| const PP_Point* top_left, | 
| const PP_Rect* src_rect) { | 
| -  Graphics2D* object = PluginResource::GetAs<Graphics2D>(graphics_2d); | 
| -  if (!object) | 
| +  Graphics2D* graphics_object = PluginResource::GetAs<Graphics2D>(graphics_2d); | 
| +  if (!graphics_object) | 
| return; | 
| +  PluginResource* image_object = PluginResourceTracker::GetInstance()-> | 
| +      GetResourceObject(image_data); | 
| +  if (!image_object) | 
| +    return; | 
| +  if (graphics_object->instance() != image_object->instance()) | 
| +    return; | 
| + | 
| PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance( | 
| -      object->instance()); | 
| +      graphics_object->instance()); | 
| if (!dispatcher) | 
| return; | 
|  | 
| PP_Rect dummy; | 
| memset(&dummy, 0, sizeof(PP_Rect)); | 
| dispatcher->Send(new PpapiHostMsg_PPBGraphics2D_PaintImageData( | 
| -      INTERFACE_ID_PPB_GRAPHICS_2D, graphics_2d, image_data, *top_left, | 
| -      !!src_rect, src_rect ? *src_rect : dummy)); | 
| +      INTERFACE_ID_PPB_GRAPHICS_2D, graphics_object->host_resource(), | 
| +      image_object->host_resource(), *top_left, !!src_rect, | 
| +      src_rect ? *src_rect : dummy)); | 
| } | 
|  | 
| void Scroll(PP_Resource graphics_2d, | 
| @@ -131,21 +140,29 @@ | 
| PP_Rect dummy; | 
| memset(&dummy, 0, sizeof(PP_Rect)); | 
| dispatcher->Send(new PpapiHostMsg_PPBGraphics2D_Scroll( | 
| -      INTERFACE_ID_PPB_GRAPHICS_2D, graphics_2d, !!clip_rect, | 
| -      clip_rect ? *clip_rect : dummy, *amount)); | 
| +      INTERFACE_ID_PPB_GRAPHICS_2D, object->host_resource(), | 
| +      !!clip_rect, clip_rect ? *clip_rect : dummy, *amount)); | 
| } | 
|  | 
| void ReplaceContents(PP_Resource graphics_2d, PP_Resource image_data) { | 
| -  Graphics2D* object = PluginResource::GetAs<Graphics2D>(graphics_2d); | 
| -  if (!object) | 
| +  Graphics2D* graphics_object = PluginResource::GetAs<Graphics2D>(graphics_2d); | 
| +  if (!graphics_object) | 
| return; | 
| +  PluginResource* image_object = PluginResourceTracker::GetInstance()-> | 
| +      GetResourceObject(image_data); | 
| +  if (!image_object) | 
| +    return; | 
| +  if (graphics_object->instance() != image_object->instance()) | 
| +    return; | 
| + | 
| PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance( | 
| -      object->instance()); | 
| +      graphics_object->instance()); | 
| if (!dispatcher) | 
| return; | 
|  | 
| dispatcher->Send(new PpapiHostMsg_PPBGraphics2D_ReplaceContents( | 
| -      INTERFACE_ID_PPB_GRAPHICS_2D, graphics_2d, image_data)); | 
| +      INTERFACE_ID_PPB_GRAPHICS_2D, graphics_object->host_resource(), | 
| +      image_object->host_resource())); | 
| } | 
|  | 
| int32_t Flush(PP_Resource graphics_2d, | 
| @@ -168,7 +185,7 @@ | 
| object->set_current_flush_callback(callback); | 
|  | 
| dispatcher->Send(new PpapiHostMsg_PPBGraphics2D_Flush( | 
| -      INTERFACE_ID_PPB_GRAPHICS_2D, graphics_2d)); | 
| +      INTERFACE_ID_PPB_GRAPHICS_2D, object->host_resource())); | 
| return PP_ERROR_WOULDBLOCK; | 
| } | 
|  | 
| @@ -226,40 +243,42 @@ | 
| void PPB_Graphics2D_Proxy::OnMsgCreate(PP_Instance instance, | 
| const PP_Size& size, | 
| PP_Bool is_always_opaque, | 
| -                                       PP_Resource* result) { | 
| -  *result = ppb_graphics_2d_target()->Create( | 
| -      instance, &size, is_always_opaque); | 
| +                                       HostResource* result) { | 
| +  result->SetHostResource(instance, ppb_graphics_2d_target()->Create( | 
| +      instance, &size, is_always_opaque)); | 
| } | 
|  | 
| -void PPB_Graphics2D_Proxy::OnMsgPaintImageData(PP_Resource graphics_2d, | 
| -                                               PP_Resource image_data, | 
| -                                               const PP_Point& top_left, | 
| -                                               bool src_rect_specified, | 
| -                                               const PP_Rect& src_rect) { | 
| +void PPB_Graphics2D_Proxy::OnMsgPaintImageData( | 
| +    const HostResource& graphics_2d, | 
| +    const HostResource& image_data, | 
| +    const PP_Point& top_left, | 
| +    bool src_rect_specified, | 
| +    const PP_Rect& src_rect) { | 
| ppb_graphics_2d_target()->PaintImageData( | 
| -      graphics_2d, image_data, &top_left, | 
| +      graphics_2d.host_resource(), image_data.host_resource(), &top_left, | 
| src_rect_specified ? &src_rect : NULL); | 
| } | 
|  | 
| -void PPB_Graphics2D_Proxy::OnMsgScroll(PP_Resource graphics_2d, | 
| +void PPB_Graphics2D_Proxy::OnMsgScroll(const HostResource& graphics_2d, | 
| bool clip_specified, | 
| const PP_Rect& clip, | 
| const PP_Point& amount) { | 
| -  ppb_graphics_2d_target()->Scroll( | 
| -      graphics_2d, | 
| -      clip_specified ? &clip : NULL, &amount); | 
| +  ppb_graphics_2d_target()->Scroll(graphics_2d.host_resource(), | 
| +                                   clip_specified ? &clip : NULL, &amount); | 
| } | 
|  | 
| -void PPB_Graphics2D_Proxy::OnMsgReplaceContents(PP_Resource graphics_2d, | 
| -                                                PP_Resource image_data) { | 
| -  ppb_graphics_2d_target()->ReplaceContents(graphics_2d, image_data); | 
| +void PPB_Graphics2D_Proxy::OnMsgReplaceContents( | 
| +    const HostResource& graphics_2d, | 
| +    const HostResource& image_data) { | 
| +  ppb_graphics_2d_target()->ReplaceContents(graphics_2d.host_resource(), | 
| +                                            image_data.host_resource()); | 
| } | 
|  | 
| -void PPB_Graphics2D_Proxy::OnMsgFlush(PP_Resource graphics_2d) { | 
| +void PPB_Graphics2D_Proxy::OnMsgFlush(const HostResource& graphics_2d) { | 
| CompletionCallback callback = callback_factory_.NewCallback( | 
| &PPB_Graphics2D_Proxy::SendFlushACKToPlugin, graphics_2d); | 
| int32_t result = ppb_graphics_2d_target()->Flush( | 
| -      graphics_2d, callback.pp_completion_callback()); | 
| +      graphics_2d.host_resource(), callback.pp_completion_callback()); | 
| if (result != PP_ERROR_WOULDBLOCK) { | 
| // There was some error, so we won't get a flush callback. We need to now | 
| // issue the ACK to the plugin hears about the error. This will also clean | 
| @@ -268,9 +287,15 @@ | 
| } | 
| } | 
|  | 
| -void PPB_Graphics2D_Proxy::OnMsgFlushACK(PP_Resource resource, | 
| +void PPB_Graphics2D_Proxy::OnMsgFlushACK(const HostResource& host_resource, | 
| int32_t pp_error) { | 
| -  Graphics2D* object = PluginResource::GetAs<Graphics2D>(resource); | 
| +  PP_Resource plugin_resource = | 
| +      PluginResourceTracker::GetInstance()->PluginResourceForHostResource( | 
| +          host_resource); | 
| +  if (!plugin_resource) | 
| +    return; | 
| + | 
| +  Graphics2D* object = PluginResource::GetAs<Graphics2D>(plugin_resource); | 
| if (!object) { | 
| // The plugin has released the graphics 2D object so don't issue the | 
| // callback. | 
| @@ -284,8 +309,9 @@ | 
| PP_RunCompletionCallback(&callback, pp_error); | 
| } | 
|  | 
| -void PPB_Graphics2D_Proxy::SendFlushACKToPlugin(int32_t result, | 
| -                                                PP_Resource graphics_2d) { | 
| +void PPB_Graphics2D_Proxy::SendFlushACKToPlugin( | 
| +    int32_t result, | 
| +    const HostResource& graphics_2d) { | 
| dispatcher()->Send(new PpapiMsg_PPBGraphics2D_FlushACK( | 
| INTERFACE_ID_PPB_GRAPHICS_2D, graphics_2d, result)); | 
| } | 
|  |