| Index: webkit/plugins/ppapi/ppb_image_data_impl.h
|
| diff --git a/webkit/plugins/ppapi/ppb_image_data_impl.h b/webkit/plugins/ppapi/ppb_image_data_impl.h
|
| index 817b238fcca0b38ff0869b22e0c9a4bfc4c768e6..d84ce9384cb5b3dc1dd3b2b798506c336d4b00a4 100644
|
| --- a/webkit/plugins/ppapi/ppb_image_data_impl.h
|
| +++ b/webkit/plugins/ppapi/ppb_image_data_impl.h
|
| @@ -11,6 +11,7 @@
|
| #include "ppapi/shared_impl/ppb_image_data_shared.h"
|
| #include "ppapi/shared_impl/resource.h"
|
| #include "ppapi/thunk/ppb_image_data_api.h"
|
| +#include "third_party/skia/include/core/SkCanvas.h"
|
| #include "webkit/plugins/ppapi/plugin_delegate.h"
|
| #include "webkit/plugins/webkit_plugins_export.h"
|
|
|
| @@ -30,33 +31,42 @@ class PPB_ImageData_Impl : public ::ppapi::Resource,
|
| // If you call this constructor, you must also call Init before use. Normally
|
| // you should use the static Create function, but this constructor is needed
|
| // for some internal uses of ImageData (like Graphics2D).
|
| - WEBKIT_PLUGINS_EXPORT explicit PPB_ImageData_Impl(PP_Instance instance);
|
| + enum ImageDataType { PLATFORM, NACL };
|
| + WEBKIT_PLUGINS_EXPORT PPB_ImageData_Impl(PP_Instance instance,
|
| + ImageDataType type);
|
| virtual ~PPB_ImageData_Impl();
|
|
|
| - static PP_Resource Create(PP_Instance pp_instance,
|
| - PP_ImageDataFormat format,
|
| - const PP_Size& size,
|
| - PP_Bool init_to_zero);
|
| -
|
| WEBKIT_PLUGINS_EXPORT bool Init(PP_ImageDataFormat format,
|
| int width, int height,
|
| bool init_to_zero);
|
|
|
| + // Create an ImageData backed by a PlatformCanvas. You must use this if you
|
| + // intend the ImageData to be usable in platform-specific APIs (like font
|
| + // rendering or rendering widgets like scrollbars).
|
| + static PP_Resource CreatePlatform(PP_Instance pp_instance,
|
| + PP_ImageDataFormat format,
|
| + const PP_Size& size,
|
| + PP_Bool init_to_zero);
|
| + // Use this to create an ImageData for use with NaCl. This is backed by a
|
| + // simple shared memory buffer.
|
| + static PP_Resource CreateNaCl(PP_Instance pp_instance,
|
| + PP_ImageDataFormat format,
|
| + const PP_Size& size,
|
| + PP_Bool init_to_zero);
|
| +
|
| int width() const { return width_; }
|
| int height() const { return height_; }
|
|
|
| // Returns the image format.
|
| PP_ImageDataFormat format() const { return format_; }
|
|
|
| + // Resource override.
|
| + virtual ::ppapi::thunk::PPB_ImageData_API* AsPPB_ImageData_API() OVERRIDE;
|
| +
|
| // Returns true if this image is mapped. False means that the image is either
|
| // invalid or not mapped. See ImageDataAutoMapper below.
|
| - bool is_mapped() const { return !!mapped_canvas_.get(); }
|
| -
|
| - PluginDelegate::PlatformImage2D* platform_image() const {
|
| - return platform_image_.get();
|
| - }
|
| -
|
| - virtual ::ppapi::thunk::PPB_ImageData_API* AsPPB_ImageData_API() OVERRIDE;
|
| + WEBKIT_PLUGINS_EXPORT bool IsMapped() const;
|
| + PluginDelegate::PlatformImage2D* PlatformImage() const;
|
|
|
| // PPB_ImageData_API implementation.
|
| virtual PP_Bool Describe(PP_ImageDataDesc* desc) OVERRIDE;
|
| @@ -64,12 +74,57 @@ class PPB_ImageData_Impl : public ::ppapi::Resource,
|
| virtual void Unmap() OVERRIDE;
|
| virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) OVERRIDE;
|
| virtual skia::PlatformCanvas* GetPlatformCanvas() OVERRIDE;
|
| + virtual SkCanvas* GetCanvas() OVERRIDE;
|
|
|
| const SkBitmap* GetMappedBitmap() const;
|
|
|
| // Swaps the guts of this image data with another.
|
| void Swap(PPB_ImageData_Impl* other);
|
|
|
| + // We delegate most of our implementation to a class that either uses a
|
| + // PlatformCanvas (for most trusted stuff) or bare shared memory (for use by
|
| + // NaCl). This makes it cheap & easy to implement Swap.
|
| + class Delegate {
|
| + public:
|
| + virtual ~Delegate() {};
|
| + virtual bool Init(PPB_ImageData_Impl* impl, PP_ImageDataFormat format,
|
| + int width, int height, bool init_to_zero) = 0;
|
| + virtual bool IsMapped() const = 0;
|
| + virtual PluginDelegate::PlatformImage2D* PlatformImage() const = 0;
|
| + virtual void* Map() = 0;
|
| + virtual void Unmap() = 0;
|
| + virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) = 0;
|
| + virtual skia::PlatformCanvas* GetPlatformCanvas() = 0;
|
| + virtual SkCanvas* GetCanvas() = 0;
|
| + virtual const SkBitmap* GetMappedBitmap() const = 0;
|
| + };
|
| +
|
| + private:
|
| + PP_ImageDataFormat format_;
|
| + int width_;
|
| + int height_;
|
| + scoped_ptr<Delegate> delegate_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(PPB_ImageData_Impl);
|
| +};
|
| +
|
| +class ImageDataPlatformDelegate : public PPB_ImageData_Impl::Delegate {
|
| + public:
|
| + ImageDataPlatformDelegate();
|
| + virtual ~ImageDataPlatformDelegate();
|
| +
|
| + // PPB_ImageData_Impl::Delegate implementation.
|
| + virtual bool Init(PPB_ImageData_Impl* impl, PP_ImageDataFormat format,
|
| + int width, int height, bool init_to_zero) OVERRIDE;
|
| + virtual bool IsMapped() const OVERRIDE;
|
| + virtual PluginDelegate::PlatformImage2D* PlatformImage() const OVERRIDE;
|
| + virtual void* Map() OVERRIDE;
|
| + virtual void Unmap() OVERRIDE;
|
| + virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) OVERRIDE;
|
| + virtual skia::PlatformCanvas* GetPlatformCanvas() OVERRIDE;
|
| + virtual SkCanvas* GetCanvas() OVERRIDE;
|
| + virtual const SkBitmap* GetMappedBitmap() const OVERRIDE;
|
| +
|
| private:
|
| // This will be NULL before initialization, and if this PPB_ImageData_Impl is
|
| // swapped with another.
|
| @@ -78,11 +133,34 @@ class PPB_ImageData_Impl : public ::ppapi::Resource,
|
| // When the device is mapped, this is the image. Null when umapped.
|
| scoped_ptr<skia::PlatformCanvas> mapped_canvas_;
|
|
|
| - PP_ImageDataFormat format_;
|
| - int width_;
|
| - int height_;
|
| + DISALLOW_COPY_AND_ASSIGN(ImageDataPlatformDelegate);
|
| +};
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(PPB_ImageData_Impl);
|
| +class ImageDataNaClDelegate : public PPB_ImageData_Impl::Delegate {
|
| + public:
|
| + ImageDataNaClDelegate();
|
| + virtual ~ImageDataNaClDelegate();
|
| +
|
| + // PPB_ImageData_Impl::Delegate implementation.
|
| + bool Init(PPB_ImageData_Impl* impl, PP_ImageDataFormat format,
|
| + int width, int height, bool init_to_zero) OVERRIDE;
|
| + virtual bool IsMapped() const OVERRIDE;
|
| + PluginDelegate::PlatformImage2D* PlatformImage() const OVERRIDE;
|
| + virtual void* Map() OVERRIDE;
|
| + virtual void Unmap() OVERRIDE;
|
| + virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) OVERRIDE;
|
| + virtual skia::PlatformCanvas* GetPlatformCanvas() OVERRIDE;
|
| + virtual SkCanvas* GetCanvas() OVERRIDE;
|
| + virtual const SkBitmap* GetMappedBitmap() const OVERRIDE;
|
| +
|
| + private:
|
| + scoped_ptr<base::SharedMemory> shared_memory_;
|
| + // skia_bitmap_ is backed by shared_memory_.
|
| + SkBitmap skia_bitmap_;
|
| + SkCanvas skia_canvas_;
|
| + uint32 map_count_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ImageDataNaClDelegate);
|
| };
|
|
|
| // Manages mapping an image resource if necessary. Use this to ensure the
|
| @@ -99,7 +177,7 @@ class ImageDataAutoMapper {
|
| public:
|
| explicit ImageDataAutoMapper(PPB_ImageData_Impl* image_data)
|
| : image_data_(image_data) {
|
| - if (image_data_->is_mapped()) {
|
| + if (image_data_->IsMapped()) {
|
| is_valid_ = true;
|
| needs_unmap_ = false;
|
| } else {
|
|
|