Index: ppapi/proxy/ppb_image_data_proxy.h |
diff --git a/ppapi/proxy/ppb_image_data_proxy.h b/ppapi/proxy/ppb_image_data_proxy.h |
index 2f2cd60a6831dc596e448454509b3a64e80b41cb..f85a7e405ecf28a8d1ad6cd1256771034363969c 100644 |
--- a/ppapi/proxy/ppb_image_data_proxy.h |
+++ b/ppapi/proxy/ppb_image_data_proxy.h |
@@ -31,26 +31,14 @@ namespace proxy { |
class SerializedHandle; |
-// The proxied image data resource. Unlike most resources, this needs to be |
-// public in the header since a number of other resources need to access it. |
+// ImageData is an abstract base class for image data resources. Unlike most |
+// resources, ImageData must be public in the header since a number of other |
+// resources need to access it. |
class PPAPI_PROXY_EXPORT ImageData |
: public ppapi::Resource, |
public NON_EXPORTED_BASE(ppapi::thunk::PPB_ImageData_API), |
public ppapi::PPB_ImageData_Shared { |
public: |
-#if !defined(OS_NACL) |
- ImageData(const ppapi::HostResource& resource, |
- const PP_ImageDataDesc& desc, |
- ImageHandle handle); |
-#else |
- // In NaCl, we only allow creating an ImageData using a SharedMemoryHandle. |
- // ImageHandle can differ by host platform. We need something that is |
- // more consistent across platforms for NaCl, so that we can communicate to |
- // the host OS in a consistent way. |
- ImageData(const ppapi::HostResource& resource, |
- const PP_ImageDataDesc& desc, |
- const base::SharedMemoryHandle& handle); |
-#endif |
virtual ~ImageData(); |
// Resource overrides. |
@@ -60,42 +48,82 @@ class PPAPI_PROXY_EXPORT ImageData |
// PPB_ImageData API. |
virtual PP_Bool Describe(PP_ImageDataDesc* desc) OVERRIDE; |
- virtual void* Map() OVERRIDE; |
- virtual void Unmap() OVERRIDE; |
virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) OVERRIDE; |
- virtual SkCanvas* GetPlatformCanvas() OVERRIDE; |
- virtual SkCanvas* GetCanvas() OVERRIDE; |
virtual void SetIsCandidateForReuse() OVERRIDE; |
+ PPB_ImageData_Shared::ImageDataType type() const { return type_; } |
const PP_ImageDataDesc& desc() const { return desc_; } |
- // Prepares this image data to be recycled to the plugin. The contents will be |
- // cleared if zero_contents is set. |
+ // Prepares this image data to be recycled to the plugin. Clears the contents |
+ // if zero_contents is true. |
void RecycleToPlugin(bool zero_contents); |
+ protected: |
+ ImageData(const ppapi::HostResource& resource, |
+ PPB_ImageData_Shared::ImageDataType type, |
+ const PP_ImageDataDesc& desc); |
+ |
+ PPB_ImageData_Shared::ImageDataType type_; |
+ PP_ImageDataDesc desc_; |
+ |
+ // Set to true when this ImageData is a good candidate for reuse. |
+ bool is_candidate_for_reuse_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ImageData); |
+}; |
+ |
+// PlatformImageData is a full featured image data resource which can access |
+// the underlying platform-specific canvas and ImageHandle. This can't be used |
+// by NaCl apps. |
#if !defined(OS_NACL) |
+class PPAPI_PROXY_EXPORT PlatformImageData : public ImageData { |
+ public: |
+ PlatformImageData(const ppapi::HostResource& resource, |
+ const PP_ImageDataDesc& desc, |
+ ImageHandle handle); |
+ virtual ~PlatformImageData(); |
+ |
+ // PPB_ImageData API. |
+ virtual void* Map() OVERRIDE; |
+ virtual void Unmap() OVERRIDE; |
+ virtual SkCanvas* GetPlatformCanvas() OVERRIDE; |
+ virtual SkCanvas* GetCanvas() OVERRIDE; |
+ |
static ImageHandle NullHandle(); |
static ImageHandle HandleFromInt(int32_t i); |
-#endif |
private: |
- PP_ImageDataDesc desc_; |
- |
-#if defined(OS_NACL) |
- base::SharedMemory shm_; |
- uint32 size_; |
- int map_count_; |
-#else |
scoped_ptr<TransportDIB> transport_dib_; |
// Null when the image isn't mapped. |
scoped_ptr<SkCanvas> mapped_canvas_; |
-#endif |
- // Set to true when this ImageData is a good candidate for reuse. |
- bool is_candidate_for_reuse_; |
+ DISALLOW_COPY_AND_ASSIGN(PlatformImageData); |
+}; |
+#endif // !defined(OS_NACL) |
- DISALLOW_COPY_AND_ASSIGN(ImageData); |
+// SimpleImageData is a simple, platform-independent image data resource which |
+// can be used by NaCl. It can also be used by trusted apps when access to the |
+// platform canvas isn't needed. |
+class PPAPI_PROXY_EXPORT SimpleImageData : public ImageData { |
+ public: |
+ SimpleImageData(const ppapi::HostResource& resource, |
+ const PP_ImageDataDesc& desc, |
+ const base::SharedMemoryHandle& handle); |
+ virtual ~SimpleImageData(); |
+ |
+ // PPB_ImageData API. |
+ virtual void* Map() OVERRIDE; |
+ virtual void Unmap() OVERRIDE; |
+ virtual SkCanvas* GetPlatformCanvas() OVERRIDE; |
+ virtual SkCanvas* GetCanvas() OVERRIDE; |
+ |
+ private: |
+ base::SharedMemory shm_; |
+ uint32 size_; |
+ int map_count_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SimpleImageData); |
}; |
class PPB_ImageData_Proxy : public InterfaceProxy { |
@@ -103,10 +131,12 @@ class PPB_ImageData_Proxy : public InterfaceProxy { |
PPB_ImageData_Proxy(Dispatcher* dispatcher); |
virtual ~PPB_ImageData_Proxy(); |
- static PP_Resource CreateProxyResource(PP_Instance instance, |
- PP_ImageDataFormat format, |
- const PP_Size& size, |
- PP_Bool init_to_zero); |
+ static PP_Resource CreateProxyResource( |
+ PP_Instance instance, |
+ PPB_ImageData_Shared::ImageDataType type, |
+ PP_ImageDataFormat format, |
+ const PP_Size& size, |
+ PP_Bool init_to_zero); |
// InterfaceProxy implementation. |
virtual bool OnMessageReceived(const IPC::Message& msg); |
@@ -121,10 +151,10 @@ class PPB_ImageData_Proxy : public InterfaceProxy { |
// to avoid leaking sensitive data to a less privileged process. |
PPAPI_PROXY_EXPORT static PP_Resource CreateImageData( |
PP_Instance instance, |
+ PPB_ImageData_Shared::ImageDataType type, |
PP_ImageDataFormat format, |
const PP_Size& size, |
bool init_to_zero, |
- bool is_nacl_plugin, |
PP_ImageDataDesc* desc, |
IPC::PlatformFileForTransit* image_handle, |
uint32_t* byte_count); |
@@ -133,20 +163,22 @@ class PPB_ImageData_Proxy : public InterfaceProxy { |
private: |
// Plugin->Host message handlers. |
- void OnHostMsgCreate(PP_Instance instance, |
- int32_t format, |
- const PP_Size& size, |
- PP_Bool init_to_zero, |
- HostResource* result, |
- std::string* image_data_desc, |
- ImageHandle* result_image_handle); |
- void OnHostMsgCreateNaCl(PP_Instance instance, |
- int32_t format, |
- const PP_Size& size, |
- PP_Bool init_to_zero, |
- HostResource* result, |
- std::string* image_data_desc, |
- ppapi::proxy::SerializedHandle* result_image_handle); |
+ void OnHostMsgCreatePlatform( |
+ PP_Instance instance, |
+ int32_t format, |
+ const PP_Size& size, |
+ PP_Bool init_to_zero, |
+ HostResource* result, |
+ PP_ImageDataDesc* desc, |
+ ImageHandle* result_image_handle); |
+ void OnHostMsgCreateSimple( |
+ PP_Instance instance, |
+ int32_t format, |
+ const PP_Size& size, |
+ PP_Bool init_to_zero, |
+ HostResource* result, |
+ PP_ImageDataDesc* desc, |
+ ppapi::proxy::SerializedHandle* result_image_handle); |
// Host->Plugin message handlers. |
void OnPluginMsgNotifyUnusedImageData(const HostResource& old_image_data); |