diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-22 21:48:36 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-22 21:48:36 +0000 |
commit | 6328a5b2c36c0067b365a702946a4fbd60577f5d (patch) | |
tree | 4670d40fe14ca6ad1935ab8e948e4f7f7f882b97 /webkit | |
parent | b90c049fca689d466610cecbdbfe9a9935d4e8cf (diff) | |
download | chromium_src-6328a5b2c36c0067b365a702946a4fbd60577f5d.zip chromium_src-6328a5b2c36c0067b365a702946a4fbd60577f5d.tar.gz chromium_src-6328a5b2c36c0067b365a702946a4fbd60577f5d.tar.bz2 |
Minor cleanup of resource creation. This eliminates a bunch of copy-and-paste
code for determining the instance for every request, and also removes a bunch
of unnecessary Create() functions for simple resources.
TEST=none
BUG=none
Review URL: http://codereview.chromium.org/7233005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@90111 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
31 files changed, 160 insertions, 178 deletions
diff --git a/webkit/plugins/ppapi/ppb_audio_impl.cc b/webkit/plugins/ppapi/ppb_audio_impl.cc index 69c4376..1dc64e6 100644 --- a/webkit/plugins/ppapi/ppb_audio_impl.cc +++ b/webkit/plugins/ppapi/ppb_audio_impl.cc @@ -26,6 +26,17 @@ PPB_AudioConfig_Impl::PPB_AudioConfig_Impl(PluginInstance* instance) PPB_AudioConfig_Impl::~PPB_AudioConfig_Impl() { } +// static +PP_Resource PPB_AudioConfig_Impl::Create(PluginInstance* instance, + PP_AudioSampleRate sample_rate, + uint32_t sample_frame_count) { + scoped_refptr<PPB_AudioConfig_Impl> config( + new PPB_AudioConfig_Impl(instance)); + if (!config->Init(sample_rate, sample_frame_count)) + return 0; + return config->GetReference(); +} + ::ppapi::thunk::PPB_AudioConfig_API* PPB_AudioConfig_Impl::AsPPB_AudioConfig_API() { return this; @@ -64,6 +75,17 @@ PPB_Audio_Impl::~PPB_Audio_Impl() { } } +// static +PP_Resource PPB_Audio_Impl::Create(PluginInstance* instance, + PP_Resource config_id, + PPB_Audio_Callback audio_callback, + void* user_data) { + scoped_refptr<PPB_Audio_Impl> audio(new PPB_Audio_Impl(instance)); + if (!audio->Init(config_id, audio_callback, user_data)) + return 0; + return audio->GetReference(); +} + ::ppapi::thunk::PPB_Audio_API* PPB_Audio_Impl::AsPPB_Audio_API() { return this; } diff --git a/webkit/plugins/ppapi/ppb_audio_impl.h b/webkit/plugins/ppapi/ppb_audio_impl.h index 4909903..3fbd8fa 100644 --- a/webkit/plugins/ppapi/ppb_audio_impl.h +++ b/webkit/plugins/ppapi/ppb_audio_impl.h @@ -29,14 +29,19 @@ class PluginInstance; class PPB_AudioConfig_Impl : public Resource, public ::ppapi::AudioConfigImpl { public: - // Note that you must call Init (on AudioConfigImpl) before using this class. - PPB_AudioConfig_Impl(PluginInstance* instance); virtual ~PPB_AudioConfig_Impl(); + // Non-trusted creation. + static PP_Resource Create(PluginInstance* instance, + PP_AudioSampleRate sample_rate, + uint32_t sample_frame_count); + // ResourceObjectBase overrides. virtual ::ppapi::thunk::PPB_AudioConfig_API* AsPPB_AudioConfig_API() OVERRIDE; private: + explicit PPB_AudioConfig_Impl(PluginInstance* instance); + DISALLOW_COPY_AND_ASSIGN(PPB_AudioConfig_Impl); }; @@ -47,11 +52,21 @@ class PPB_Audio_Impl : public Resource, public ::ppapi::thunk::PPB_AudioTrusted_API, public PluginDelegate::PlatformAudio::Client { public: - // After creation, either call Init (for non-trusted init) or OpenTrusted - // (for trusted init). + // Trusted initialization. You must call Init after this. + // + // Untrusted initialization should just call the static Create() function + // to properly create & initialize this class. explicit PPB_Audio_Impl(PluginInstance* instance); + virtual ~PPB_Audio_Impl(); + // Creation function for untrusted plugins. This handles all initialization + // and will return 0 on failure. + static PP_Resource Create(PluginInstance* instance, + PP_Resource config_id, + PPB_Audio_Callback audio_callback, + void* user_data); + // Initialization function for non-trusted init. bool Init(PP_Resource config_id, PPB_Audio_Callback user_callback, void* user_data); diff --git a/webkit/plugins/ppapi/ppb_broker_impl.cc b/webkit/plugins/ppapi/ppb_broker_impl.cc index 4646faf..8b41c28 100644 --- a/webkit/plugins/ppapi/ppb_broker_impl.cc +++ b/webkit/plugins/ppapi/ppb_broker_impl.cc @@ -48,15 +48,6 @@ PPB_Broker_Impl::~PPB_Broker_Impl() { pipe_handle_ = PlatformFileToInt(base::kInvalidPlatformFileValue); } -// static -PP_Resource PPB_Broker_Impl::Create(PP_Instance instance_id) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); - if (!instance) - return 0; - scoped_refptr<PPB_Broker_Impl> broker(new PPB_Broker_Impl(instance)); - return broker->GetReference(); -} - PPB_Broker_API* PPB_Broker_Impl::AsPPB_Broker_API() { return this; } diff --git a/webkit/plugins/ppapi/ppb_broker_impl.h b/webkit/plugins/ppapi/ppb_broker_impl.h index d3c6295..8e51321 100644 --- a/webkit/plugins/ppapi/ppb_broker_impl.h +++ b/webkit/plugins/ppapi/ppb_broker_impl.h @@ -24,10 +24,9 @@ class PPB_Broker_Impl : public Resource, public ::ppapi::thunk::PPB_Broker_API, public base::SupportsWeakPtr<PPB_Broker_Impl> { public: + explicit PPB_Broker_Impl(PluginInstance* instance); virtual ~PPB_Broker_Impl(); - static PP_Resource Create(PP_Instance instance_id); - // ResourceObjectBase override. virtual ::ppapi::thunk::PPB_Broker_API* AsPPB_Broker_API() OVERRIDE; @@ -38,8 +37,6 @@ class PPB_Broker_Impl : public Resource, void BrokerConnected(int32_t handle, int32_t result); private: - explicit PPB_Broker_Impl(PluginInstance* instance); - // PluginDelegate ppapi broker object. // We don't own this pointer but are responsible for calling Disconnect on it. PluginDelegate::PpapiBroker* broker_; diff --git a/webkit/plugins/ppapi/ppb_buffer_impl.cc b/webkit/plugins/ppapi/ppb_buffer_impl.cc index b32c616..2782b84 100644 --- a/webkit/plugins/ppapi/ppb_buffer_impl.cc +++ b/webkit/plugins/ppapi/ppb_buffer_impl.cc @@ -28,10 +28,7 @@ PPB_Buffer_Impl::~PPB_Buffer_Impl() { } // static -PP_Resource PPB_Buffer_Impl::Create(PP_Instance pp_instance, uint32_t size) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance); - if (!instance) - return 0; +PP_Resource PPB_Buffer_Impl::Create(PluginInstance* instance, uint32_t size) { scoped_refptr<PPB_Buffer_Impl> buffer(new PPB_Buffer_Impl(instance)); if (!buffer->Init(size)) return 0; diff --git a/webkit/plugins/ppapi/ppb_buffer_impl.h b/webkit/plugins/ppapi/ppb_buffer_impl.h index 86dbec9..41bc67a 100644 --- a/webkit/plugins/ppapi/ppb_buffer_impl.h +++ b/webkit/plugins/ppapi/ppb_buffer_impl.h @@ -25,7 +25,7 @@ class PPB_Buffer_Impl : public Resource, public: virtual ~PPB_Buffer_Impl(); - static PP_Resource Create(PP_Instance instance, uint32_t size); + static PP_Resource Create(PluginInstance* instance, uint32_t size); virtual PPB_Buffer_Impl* AsPPB_Buffer_Impl(); diff --git a/webkit/plugins/ppapi/ppb_file_chooser_impl.cc b/webkit/plugins/ppapi/ppb_file_chooser_impl.cc index 3ce1489..5fd777e 100644 --- a/webkit/plugins/ppapi/ppb_file_chooser_impl.cc +++ b/webkit/plugins/ppapi/ppb_file_chooser_impl.cc @@ -75,12 +75,8 @@ PPB_FileChooser_Impl::~PPB_FileChooser_Impl() { // static PP_Resource PPB_FileChooser_Impl::Create( - PP_Instance pp_instance, + PluginInstance* instance, const PP_FileChooserOptions_Dev* options) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance); - if (!instance) - return 0; - if ((options->mode != PP_FILECHOOSERMODE_OPEN) && (options->mode != PP_FILECHOOSERMODE_OPENMULTIPLE)) return 0; diff --git a/webkit/plugins/ppapi/ppb_file_chooser_impl.h b/webkit/plugins/ppapi/ppb_file_chooser_impl.h index 024970f..0f0f7bf 100644 --- a/webkit/plugins/ppapi/ppb_file_chooser_impl.h +++ b/webkit/plugins/ppapi/ppb_file_chooser_impl.h @@ -29,7 +29,7 @@ class PPB_FileChooser_Impl : public Resource, const PP_FileChooserOptions_Dev* options); virtual ~PPB_FileChooser_Impl(); - static PP_Resource Create(PP_Instance instance, + static PP_Resource Create(PluginInstance* instance, const PP_FileChooserOptions_Dev* options); // Resource overrides. diff --git a/webkit/plugins/ppapi/ppb_file_io_impl.cc b/webkit/plugins/ppapi/ppb_file_io_impl.cc index b68da1b..2ea97e1 100644 --- a/webkit/plugins/ppapi/ppb_file_io_impl.cc +++ b/webkit/plugins/ppapi/ppb_file_io_impl.cc @@ -44,15 +44,6 @@ PPB_FileIO_Impl::~PPB_FileIO_Impl() { Close(); } -// static -PP_Resource PPB_FileIO_Impl::Create(PP_Instance pp_instance) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance); - if (!instance) - return 0; - PPB_FileIO_Impl* file_io = new PPB_FileIO_Impl(instance); - return file_io->GetReference(); -} - PPB_FileIO_API* PPB_FileIO_Impl::AsPPB_FileIO_API() { return this; } diff --git a/webkit/plugins/ppapi/ppb_file_io_impl.h b/webkit/plugins/ppapi/ppb_file_io_impl.h index 32cd6a0..51cf5a3 100644 --- a/webkit/plugins/ppapi/ppb_file_io_impl.h +++ b/webkit/plugins/ppapi/ppb_file_io_impl.h @@ -34,8 +34,6 @@ class PPB_FileIO_Impl : public Resource, explicit PPB_FileIO_Impl(PluginInstance* instance); virtual ~PPB_FileIO_Impl(); - static PP_Resource Create(PP_Instance instance); - // ResourceObjectBase overrides. virtual ::ppapi::thunk::PPB_FileIO_API* AsPPB_FileIO_API() OVERRIDE; diff --git a/webkit/plugins/ppapi/ppb_file_system_impl.cc b/webkit/plugins/ppapi/ppb_file_system_impl.cc index 6a8a80b..369ae34 100644 --- a/webkit/plugins/ppapi/ppb_file_system_impl.cc +++ b/webkit/plugins/ppapi/ppb_file_system_impl.cc @@ -40,20 +40,14 @@ PPB_FileSystem_Impl::~PPB_FileSystem_Impl() { } // static -PP_Resource PPB_FileSystem_Impl::Create(PP_Instance instance, +PP_Resource PPB_FileSystem_Impl::Create(PluginInstance* instance, PP_FileSystemType_Dev type) { - PluginInstance* plugin_instance = - ResourceTracker::Get()->GetInstance(instance); - if (!plugin_instance) - return 0; - if (type != PP_FILESYSTEMTYPE_EXTERNAL && type != PP_FILESYSTEMTYPE_LOCALPERSISTENT && type != PP_FILESYSTEMTYPE_LOCALTEMPORARY) return 0; - PPB_FileSystem_Impl* file_system = - new PPB_FileSystem_Impl(plugin_instance, type); + PPB_FileSystem_Impl* file_system = new PPB_FileSystem_Impl(instance, type); return file_system->GetReference(); } diff --git a/webkit/plugins/ppapi/ppb_file_system_impl.h b/webkit/plugins/ppapi/ppb_file_system_impl.h index 73f9019..3b535b5 100644 --- a/webkit/plugins/ppapi/ppb_file_system_impl.h +++ b/webkit/plugins/ppapi/ppb_file_system_impl.h @@ -25,7 +25,8 @@ class PPB_FileSystem_Impl : public Resource, PPB_FileSystem_Impl(PluginInstance* instance, PP_FileSystemType_Dev type); virtual ~PPB_FileSystem_Impl(); - static PP_Resource Create(PP_Instance instance, PP_FileSystemType_Dev type); + static PP_Resource Create(PluginInstance* instance, + PP_FileSystemType_Dev type); // ResourceObjectBase overrides. virtual ::ppapi::thunk::PPB_FileSystem_API* AsPPB_FileSystem_API() OVERRIDE; diff --git a/webkit/plugins/ppapi/ppb_flash_menu_impl.cc b/webkit/plugins/ppapi/ppb_flash_menu_impl.cc index 92f03fe..959d9e2 100644 --- a/webkit/plugins/ppapi/ppb_flash_menu_impl.cc +++ b/webkit/plugins/ppapi/ppb_flash_menu_impl.cc @@ -102,16 +102,11 @@ PPB_Flash_Menu_Impl::~PPB_Flash_Menu_Impl() { } // static -PP_Resource PPB_Flash_Menu_Impl::Create(PP_Instance pp_instance, +PP_Resource PPB_Flash_Menu_Impl::Create(PluginInstance* instance, const PP_Flash_Menu* menu_data) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance); - if (!instance) - return 0; - scoped_refptr<PPB_Flash_Menu_Impl> menu(new PPB_Flash_Menu_Impl(instance)); if (!menu->Init(menu_data)) return 0; - return menu->GetReference(); } diff --git a/webkit/plugins/ppapi/ppb_flash_menu_impl.h b/webkit/plugins/ppapi/ppb_flash_menu_impl.h index 455b973..dcb56e4 100644 --- a/webkit/plugins/ppapi/ppb_flash_menu_impl.h +++ b/webkit/plugins/ppapi/ppb_flash_menu_impl.h @@ -24,14 +24,11 @@ namespace ppapi { class PPB_Flash_Menu_Impl : public Resource, public ::ppapi::thunk::PPB_Flash_Menu_API { public: - explicit PPB_Flash_Menu_Impl(PluginInstance* instance); virtual ~PPB_Flash_Menu_Impl(); - static PP_Resource Create(PP_Instance instance, + static PP_Resource Create(PluginInstance* instance, const PP_Flash_Menu* menu_data); - bool Init(const PP_Flash_Menu* menu_data); - // ResourceObjectBase. virtual ::ppapi::thunk::PPB_Flash_Menu_API* AsPPB_Flash_Menu_API() OVERRIDE; @@ -47,6 +44,10 @@ class PPB_Flash_Menu_Impl : public Resource, const MenuData& menu_data() const { return menu_data_; } private: + explicit PPB_Flash_Menu_Impl(PluginInstance* instance); + + bool Init(const PP_Flash_Menu* menu_data); + MenuData menu_data_; // We send |WebMenuItem|s, which have an |unsigned| "action" field instead of diff --git a/webkit/plugins/ppapi/ppb_flash_net_connector_impl.cc b/webkit/plugins/ppapi/ppb_flash_net_connector_impl.cc index c54072b..ef8bc9c 100644 --- a/webkit/plugins/ppapi/ppb_flash_net_connector_impl.cc +++ b/webkit/plugins/ppapi/ppb_flash_net_connector_impl.cc @@ -24,17 +24,6 @@ PPB_Flash_NetConnector_Impl::PPB_Flash_NetConnector_Impl( PPB_Flash_NetConnector_Impl::~PPB_Flash_NetConnector_Impl() { } -// static -PP_Resource PPB_Flash_NetConnector_Impl::Create(PP_Instance pp_instance) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance); - if (!instance) - return 0; - - scoped_refptr<PPB_Flash_NetConnector_Impl> connector( - new PPB_Flash_NetConnector_Impl(instance)); - return connector->GetReference(); -} - PPB_Flash_NetConnector_API* PPB_Flash_NetConnector_Impl::AsPPB_Flash_NetConnector_API() { return this; diff --git a/webkit/plugins/ppapi/ppb_flash_net_connector_impl.h b/webkit/plugins/ppapi/ppb_flash_net_connector_impl.h index b807776..8bd6013 100644 --- a/webkit/plugins/ppapi/ppb_flash_net_connector_impl.h +++ b/webkit/plugins/ppapi/ppb_flash_net_connector_impl.h @@ -22,8 +22,6 @@ class PPB_Flash_NetConnector_Impl explicit PPB_Flash_NetConnector_Impl(PluginInstance* instance); virtual ~PPB_Flash_NetConnector_Impl(); - static PP_Resource Create(PP_Instance pp_instance); - // ResourceObjectBase override. virtual ::ppapi::thunk::PPB_Flash_NetConnector_API* AsPPB_Flash_NetConnector_API() OVERRIDE; diff --git a/webkit/plugins/ppapi/ppb_font_impl.cc b/webkit/plugins/ppapi/ppb_font_impl.cc index b4c06e5..2616325 100644 --- a/webkit/plugins/ppapi/ppb_font_impl.cc +++ b/webkit/plugins/ppapi/ppb_font_impl.cc @@ -5,6 +5,7 @@ #include "webkit/plugins/ppapi/ppb_font_impl.h" #include "ppapi/c/dev/ppb_font_dev.h" +#include "ppapi/shared_impl/font_impl.h" #include "ppapi/shared_impl/ppapi_preferences.h" #include "ppapi/thunk/enter.h" #include "ppapi/thunk/thunk.h" @@ -55,6 +56,15 @@ PPB_Font_Impl::PPB_Font_Impl(PluginInstance* instance, PPB_Font_Impl::~PPB_Font_Impl() { } +// static +PP_Resource PPB_Font_Impl::Create(PluginInstance* instance, + const PP_FontDescription_Dev& description) { + if (!::ppapi::FontImpl::IsPPFontDescriptionValid(description)) + return 0; + scoped_refptr<PPB_Font_Impl> font(new PPB_Font_Impl(instance, description)); + return font->GetReference(); +} + ::ppapi::thunk::PPB_Font_API* PPB_Font_Impl::AsPPB_Font_API() { return this; } diff --git a/webkit/plugins/ppapi/ppb_font_impl.h b/webkit/plugins/ppapi/ppb_font_impl.h index 4f1ffff..0096675 100644 --- a/webkit/plugins/ppapi/ppb_font_impl.h +++ b/webkit/plugins/ppapi/ppb_font_impl.h @@ -24,9 +24,11 @@ class PluginInstance; class PPB_Font_Impl : public Resource, public ::ppapi::thunk::PPB_Font_API { public: - PPB_Font_Impl(PluginInstance* instance, const PP_FontDescription_Dev& desc); virtual ~PPB_Font_Impl(); + static PP_Resource Create(PluginInstance* instance, + const PP_FontDescription_Dev& description); + // ResourceObjectBase. virtual ::ppapi::thunk::PPB_Font_API* AsPPB_Font_API() OVERRIDE; @@ -46,6 +48,8 @@ class PPB_Font_Impl : public Resource, uint32_t char_offset) OVERRIDE; private: + PPB_Font_Impl(PluginInstance* instance, const PP_FontDescription_Dev& desc); + scoped_ptr< ::ppapi::WebKitForwarding::Font> font_forwarding_; DISALLOW_COPY_AND_ASSIGN(PPB_Font_Impl); diff --git a/webkit/plugins/ppapi/ppb_graphics_2d_impl.cc b/webkit/plugins/ppapi/ppb_graphics_2d_impl.cc index b8f148a..caf3821 100644 --- a/webkit/plugins/ppapi/ppb_graphics_2d_impl.cc +++ b/webkit/plugins/ppapi/ppb_graphics_2d_impl.cc @@ -163,6 +163,19 @@ PPB_Graphics2D_Impl::~PPB_Graphics2D_Impl() { } // static +PP_Resource PPB_Graphics2D_Impl::Create(PluginInstance* instance, + const PP_Size& size, + PP_Bool is_always_opaque) { + scoped_refptr<PPB_Graphics2D_Impl> graphics_2d( + new PPB_Graphics2D_Impl(instance)); + if (!graphics_2d->Init(size.width, size.height, + PPBoolToBool(is_always_opaque))) { + return 0; + } + return graphics_2d->GetReference(); +} + +// static const PPB_Graphics2D* PPB_Graphics2D_Impl::GetInterface() { return ::ppapi::thunk::GetPPB_Graphics2D_Thunk(); } diff --git a/webkit/plugins/ppapi/ppb_graphics_2d_impl.h b/webkit/plugins/ppapi/ppb_graphics_2d_impl.h index 6739b60..4a61a65 100644 --- a/webkit/plugins/ppapi/ppb_graphics_2d_impl.h +++ b/webkit/plugins/ppapi/ppb_graphics_2d_impl.h @@ -31,15 +31,16 @@ class PPB_Graphics2D_Impl : public Resource, public ::ppapi::thunk::PPB_Graphics2D_API { public: - PPB_Graphics2D_Impl(PluginInstance* instance); virtual ~PPB_Graphics2D_Impl(); + static PP_Resource Create(PluginInstance* instance, + const PP_Size& size, + PP_Bool is_always_opaque); + // Returns a pointer to the interface implementing PPB_ImageData that is // exposed to the plugin. static const PPB_Graphics2D* GetInterface(); - bool Init(int width, int height, bool is_always_opaque); - bool is_always_opaque() const { return is_always_opaque_; } virtual ::ppapi::thunk::PPB_Graphics2D_API* AsPPB_Graphics2D_API(); @@ -78,6 +79,10 @@ class PPB_Graphics2D_Impl PPB_ImageData_Impl* image_data() { return image_data_.get(); } private: + explicit PPB_Graphics2D_Impl(PluginInstance* instance); + + bool Init(int width, int height, bool is_always_opaque); + // Tracks a call to flush that requires a callback. class FlushCallbackData { public: diff --git a/webkit/plugins/ppapi/ppb_image_data_impl.cc b/webkit/plugins/ppapi/ppb_image_data_impl.cc index 4f40d01..1cc2b42 100644 --- a/webkit/plugins/ppapi/ppb_image_data_impl.cc +++ b/webkit/plugins/ppapi/ppb_image_data_impl.cc @@ -34,6 +34,17 @@ PPB_ImageData_Impl::PPB_ImageData_Impl(PluginInstance* instance) PPB_ImageData_Impl::~PPB_ImageData_Impl() { } +// static +PP_Resource PPB_ImageData_Impl::Create(PluginInstance* instance, + PP_ImageDataFormat format, + const PP_Size& size, + PP_Bool init_to_zero) { + scoped_refptr<PPB_ImageData_Impl> data(new PPB_ImageData_Impl(instance)); + if (!data->Init(format, size.width, size.height, !!init_to_zero)) + return 0; + return data->GetReference(); +} + PPB_ImageData_API* PPB_ImageData_Impl::AsPPB_ImageData_API() { return this; } diff --git a/webkit/plugins/ppapi/ppb_image_data_impl.h b/webkit/plugins/ppapi/ppb_image_data_impl.h index 436efb0..d96de31 100644 --- a/webkit/plugins/ppapi/ppb_image_data_impl.h +++ b/webkit/plugins/ppapi/ppb_image_data_impl.h @@ -27,9 +27,17 @@ class PPB_ImageData_Impl : public Resource, public ::ppapi::ImageDataImpl, public ::ppapi::thunk::PPB_ImageData_API { public: + // 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). explicit PPB_ImageData_Impl(PluginInstance* instance); virtual ~PPB_ImageData_Impl(); + static PP_Resource Create(PluginInstance* pp_instance, + PP_ImageDataFormat format, + const PP_Size& size, + PP_Bool init_to_zero); + bool Init(PP_ImageDataFormat format, int width, int height, bool init_to_zero); diff --git a/webkit/plugins/ppapi/ppb_url_loader_impl.cc b/webkit/plugins/ppapi/ppb_url_loader_impl.cc index 103ea5c..666d4ee 100644 --- a/webkit/plugins/ppapi/ppb_url_loader_impl.cc +++ b/webkit/plugins/ppapi/ppb_url_loader_impl.cc @@ -72,16 +72,6 @@ PPB_URLLoader_Impl::PPB_URLLoader_Impl(PluginInstance* instance, PPB_URLLoader_Impl::~PPB_URLLoader_Impl() { } -// static -PP_Resource PPB_URLLoader_Impl::Create(PP_Instance pp_instance) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance); - if (!instance) - return 0; - - PPB_URLLoader_Impl* loader = new PPB_URLLoader_Impl(instance, false); - return loader->GetReference(); -} - PPB_URLLoader_API* PPB_URLLoader_Impl::AsPPB_URLLoader_API() { return this; } diff --git a/webkit/plugins/ppapi/ppb_url_loader_impl.h b/webkit/plugins/ppapi/ppb_url_loader_impl.h index e2794e0..cbf60b5 100644 --- a/webkit/plugins/ppapi/ppb_url_loader_impl.h +++ b/webkit/plugins/ppapi/ppb_url_loader_impl.h @@ -36,8 +36,6 @@ class PPB_URLLoader_Impl : public Resource, PPB_URLLoader_Impl(PluginInstance* instance, bool main_document_loader); virtual ~PPB_URLLoader_Impl(); - static PP_Resource Create(PP_Instance instance); - // ResourceObjectBase overrides. virtual ::ppapi::thunk::PPB_URLLoader_API* AsPPB_URLLoader_API() OVERRIDE; diff --git a/webkit/plugins/ppapi/ppb_url_request_info_impl.cc b/webkit/plugins/ppapi/ppb_url_request_info_impl.cc index 64c3f59..9494aab 100644 --- a/webkit/plugins/ppapi/ppb_url_request_info_impl.cc +++ b/webkit/plugins/ppapi/ppb_url_request_info_impl.cc @@ -134,16 +134,6 @@ PPB_URLRequestInfo_Impl::PPB_URLRequestInfo_Impl(PluginInstance* instance) PPB_URLRequestInfo_Impl::~PPB_URLRequestInfo_Impl() { } -// static -PP_Resource PPB_URLRequestInfo_Impl::Create(PP_Instance pp_instance) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance); - if (!instance) - return 0; - - PPB_URLRequestInfo_Impl* request = new PPB_URLRequestInfo_Impl(instance); - return request->GetReference(); -} - PPB_URLRequestInfo_API* PPB_URLRequestInfo_Impl::AsPPB_URLRequestInfo_API() { return this; } diff --git a/webkit/plugins/ppapi/ppb_url_request_info_impl.h b/webkit/plugins/ppapi/ppb_url_request_info_impl.h index 872e498..e937b88 100644 --- a/webkit/plugins/ppapi/ppb_url_request_info_impl.h +++ b/webkit/plugins/ppapi/ppb_url_request_info_impl.h @@ -29,8 +29,6 @@ class PPB_URLRequestInfo_Impl : public Resource, explicit PPB_URLRequestInfo_Impl(PluginInstance* instance); virtual ~PPB_URLRequestInfo_Impl(); - static PP_Resource Create(PP_Instance instance); - // ResourceObjectBase overrides. virtual PPB_URLRequestInfo_API* AsPPB_URLRequestInfo_API() OVERRIDE; diff --git a/webkit/plugins/ppapi/ppb_video_decoder_impl.cc b/webkit/plugins/ppapi/ppb_video_decoder_impl.cc index d8afcbf..12d6ee1 100644 --- a/webkit/plugins/ppapi/ppb_video_decoder_impl.cc +++ b/webkit/plugins/ppapi/ppb_video_decoder_impl.cc @@ -75,16 +75,6 @@ PPB_VideoDecoder_Impl::PPB_VideoDecoder_Impl(PluginInstance* instance) PPB_VideoDecoder_Impl::~PPB_VideoDecoder_Impl() { } -// static -PP_Resource PPB_VideoDecoder_Impl::Create(PP_Instance pp_instance) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance); - if (!instance) - return 0; - - PPB_VideoDecoder_Impl* decoder = new PPB_VideoDecoder_Impl(instance); - return decoder->GetReference(); -} - PPB_VideoDecoder_API* PPB_VideoDecoder_Impl::AsPPB_VideoDecoder_API() { return this; } diff --git a/webkit/plugins/ppapi/ppb_video_decoder_impl.h b/webkit/plugins/ppapi/ppb_video_decoder_impl.h index bc6b7ff..5b4a326 100644 --- a/webkit/plugins/ppapi/ppb_video_decoder_impl.h +++ b/webkit/plugins/ppapi/ppb_video_decoder_impl.h @@ -36,8 +36,6 @@ class PPB_VideoDecoder_Impl : public Resource, explicit PPB_VideoDecoder_Impl(PluginInstance* instance); virtual ~PPB_VideoDecoder_Impl(); - static PP_Resource Create(PP_Instance instance); - // ResourceObjectBase overrides. virtual PPB_VideoDecoder_API* AsPPB_VideoDecoder_API() OVERRIDE; diff --git a/webkit/plugins/ppapi/ppb_video_layer_impl.cc b/webkit/plugins/ppapi/ppb_video_layer_impl.cc index 4bc201b..1782109 100644 --- a/webkit/plugins/ppapi/ppb_video_layer_impl.cc +++ b/webkit/plugins/ppapi/ppb_video_layer_impl.cc @@ -21,12 +21,8 @@ PPB_VideoLayer_Impl::~PPB_VideoLayer_Impl() { } // static -PP_Resource PPB_VideoLayer_Impl::Create(PP_Instance pp_instance, +PP_Resource PPB_VideoLayer_Impl::Create(PluginInstance* instance, PP_VideoLayerMode_Dev mode) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance); - if (!instance) - return 0; - if (mode != PP_VIDEOLAYERMODE_SOFTWARE) return 0; diff --git a/webkit/plugins/ppapi/ppb_video_layer_impl.h b/webkit/plugins/ppapi/ppb_video_layer_impl.h index 6d7195e..091608f 100644 --- a/webkit/plugins/ppapi/ppb_video_layer_impl.h +++ b/webkit/plugins/ppapi/ppb_video_layer_impl.h @@ -19,16 +19,19 @@ class PluginInstance; class PPB_VideoLayer_Impl : public Resource, public ::ppapi::thunk::PPB_VideoLayer_API { public: - explicit PPB_VideoLayer_Impl(PluginInstance* instance); virtual ~PPB_VideoLayer_Impl(); - static PP_Resource Create(PP_Instance instance, PP_VideoLayerMode_Dev mode); + static PP_Resource Create(PluginInstance* instance, + PP_VideoLayerMode_Dev mode); // ResourceObjectBase override. virtual PPB_VideoLayer_API* AsPPB_VideoLayer_API() OVERRIDE; // Derived classes must implement PPB_VideoLayer_API. + protected: + explicit PPB_VideoLayer_Impl(PluginInstance* instance); + private: DISALLOW_COPY_AND_ASSIGN(PPB_VideoLayer_Impl); }; diff --git a/webkit/plugins/ppapi/resource_creation_impl.cc b/webkit/plugins/ppapi/resource_creation_impl.cc index fd67df5..35ff381 100644 --- a/webkit/plugins/ppapi/resource_creation_impl.cc +++ b/webkit/plugins/ppapi/resource_creation_impl.cc @@ -5,7 +5,6 @@ #include "webkit/plugins/ppapi/resource_creation_impl.h" #include "ppapi/c/pp_size.h" -#include "ppapi/shared_impl/font_impl.h" #include "webkit/plugins/ppapi/common.h" #include "webkit/plugins/ppapi/ppb_audio_impl.h" #include "webkit/plugins/ppapi/ppb_broker_impl.h" @@ -32,6 +31,30 @@ namespace webkit { namespace ppapi { +namespace { + +// We use two methods for creating resources. When the resource initialization +// is simple and can't fail, just do +// return ReturnResource(new PPB_Foo_Impl(instance_, ...)); +// This will set up everything necessary. +// +// If the resource is more complex, generally the best thing is to write a +// static "Create" function on the resource class that returns a PP_Resource +// or 0 on failure. That helps keep the resource-specific stuff localized and +// this class very simple. +PP_Resource ReturnResource(Resource* resource) { + // We actually have to keep a ref here since the argument will not be ref'ed + // at all if it was just passed in with new (the expected usage). The + // returned PP_Resource created by GetReference will hold onto a ref on + // behalf of the plugin which will outlive this function. So the end result + // will be a Resource with one ref. + scoped_refptr<Resource> ref(resource); + return resource->GetReference(); +} + +} // namespace + + ResourceCreationImpl::ResourceCreationImpl(PluginInstance* instance) : instance_(instance) { } @@ -49,45 +72,30 @@ PP_Resource ResourceCreationImpl::CreateAudio( PP_Resource config_id, PPB_Audio_Callback audio_callback, void* user_data) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); - if (!instance) - return 0; - scoped_refptr<PPB_Audio_Impl> audio(new PPB_Audio_Impl(instance)); - if (!audio->Init(config_id, audio_callback, user_data)) - return 0; - return audio->GetReference(); + return PPB_Audio_Impl::Create(instance_, config_id, audio_callback, + user_data); } PP_Resource ResourceCreationImpl::CreateAudioConfig( PP_Instance instance_id, PP_AudioSampleRate sample_rate, uint32_t sample_frame_count) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); - if (!instance) - return 0; - scoped_refptr<PPB_AudioConfig_Impl> config( - new PPB_AudioConfig_Impl(instance)); - if (!config->Init(sample_rate, sample_frame_count)) - return 0; - return config->GetReference(); + return PPB_AudioConfig_Impl::Create(instance_, sample_rate, + sample_frame_count); } PP_Resource ResourceCreationImpl::CreateAudioTrusted( PP_Instance instance_id) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); - if (!instance) - return 0; - scoped_refptr<PPB_Audio_Impl> audio(new PPB_Audio_Impl(instance)); - return audio->GetReference(); + return ReturnResource(new PPB_Audio_Impl(instance_)); } PP_Resource ResourceCreationImpl::CreateBroker(PP_Instance instance) { - return PPB_Broker_Impl::Create(instance); + return ReturnResource(new PPB_Broker_Impl(instance_)); } PP_Resource ResourceCreationImpl::CreateBuffer(PP_Instance instance, uint32_t size) { - return PPB_Buffer_Impl::Create(instance, size); + return PPB_Buffer_Impl::Create(instance_, size); } PP_Resource ResourceCreationImpl::CreateContext3D( @@ -116,11 +124,11 @@ PP_Resource ResourceCreationImpl::CreateDirectoryReader( PP_Resource ResourceCreationImpl::CreateFileChooser( PP_Instance instance, const PP_FileChooserOptions_Dev* options) { - return PPB_FileChooser_Impl::Create(instance, options); + return PPB_FileChooser_Impl::Create(instance_, options); } PP_Resource ResourceCreationImpl::CreateFileIO(PP_Instance instance) { - return PPB_FileIO_Impl::Create(instance); + return ReturnResource(new PPB_FileIO_Impl(instance_)); } PP_Resource ResourceCreationImpl::CreateFileRef(PP_Resource file_system, @@ -131,49 +139,31 @@ PP_Resource ResourceCreationImpl::CreateFileRef(PP_Resource file_system, PP_Resource ResourceCreationImpl::CreateFileSystem( PP_Instance instance, PP_FileSystemType_Dev type) { - return PPB_FileSystem_Impl::Create(instance, type); + return PPB_FileSystem_Impl::Create(instance_, type); } PP_Resource ResourceCreationImpl::CreateFlashMenu( PP_Instance instance, const PP_Flash_Menu* menu_data) { - return PPB_Flash_Menu_Impl::Create(instance, menu_data); + return PPB_Flash_Menu_Impl::Create(instance_, menu_data); } PP_Resource ResourceCreationImpl::CreateFlashNetConnector( PP_Instance instance) { - return PPB_Flash_NetConnector_Impl::Create(instance); + return ReturnResource(new PPB_Flash_NetConnector_Impl(instance_)); } PP_Resource ResourceCreationImpl::CreateFontObject( PP_Instance pp_instance, const PP_FontDescription_Dev* description) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance); - if (!instance) - return 0; - - if (!::ppapi::FontImpl::IsPPFontDescriptionValid(*description)) - return 0; - - scoped_refptr<PPB_Font_Impl> font(new PPB_Font_Impl(instance, *description)); - return font->GetReference(); + return PPB_Font_Impl::Create(instance_, *description); } PP_Resource ResourceCreationImpl::CreateGraphics2D( PP_Instance pp_instance, const PP_Size& size, PP_Bool is_always_opaque) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance); - if (!instance) - return 0; - - scoped_refptr<PPB_Graphics2D_Impl> graphics_2d( - new PPB_Graphics2D_Impl(instance)); - if (!graphics_2d->Init(size.width, size.height, - PPBoolToBool(is_always_opaque))) { - return 0; - } - return graphics_2d->GetReference(); + return PPB_Graphics2D_Impl::Create(instance_, size, is_always_opaque); } PP_Resource ResourceCreationImpl::CreateGraphics3D( @@ -189,14 +179,7 @@ PP_Resource ResourceCreationImpl::CreateImageData(PP_Instance pp_instance, PP_ImageDataFormat format, const PP_Size& size, PP_Bool init_to_zero) { - PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance); - if (!instance) - return 0; - - scoped_refptr<PPB_ImageData_Impl> data(new PPB_ImageData_Impl(instance)); - if (!data->Init(format, size.width, size.height, !!init_to_zero)) - return 0; - return data->GetReference(); + return PPB_ImageData_Impl::Create(instance_, format, size, init_to_zero); } PP_Resource ResourceCreationImpl::CreateSurface3D( @@ -214,20 +197,20 @@ PP_Resource ResourceCreationImpl::CreateTransport(PP_Instance instance, } PP_Resource ResourceCreationImpl::CreateURLLoader(PP_Instance instance) { - return PPB_URLLoader_Impl::Create(instance); + return ReturnResource(new PPB_URLLoader_Impl(instance_, false)); } PP_Resource ResourceCreationImpl::CreateURLRequestInfo(PP_Instance instance) { - return PPB_URLRequestInfo_Impl::Create(instance); + return ReturnResource(new PPB_URLRequestInfo_Impl(instance_)); } PP_Resource ResourceCreationImpl::CreateVideoDecoder(PP_Instance instance) { - return PPB_VideoDecoder_Impl::Create(instance); + return ReturnResource(new PPB_VideoDecoder_Impl(instance_)); } PP_Resource ResourceCreationImpl::CreateVideoLayer(PP_Instance instance, PP_VideoLayerMode_Dev mode) { - return PPB_VideoLayer_Impl::Create(instance, mode); + return PPB_VideoLayer_Impl::Create(instance_, mode); } } // namespace ppapi |