summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-22 21:48:36 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-22 21:48:36 +0000
commit6328a5b2c36c0067b365a702946a4fbd60577f5d (patch)
tree4670d40fe14ca6ad1935ab8e948e4f7f7f882b97 /webkit
parentb90c049fca689d466610cecbdbfe9a9935d4e8cf (diff)
downloadchromium_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')
-rw-r--r--webkit/plugins/ppapi/ppb_audio_impl.cc22
-rw-r--r--webkit/plugins/ppapi/ppb_audio_impl.h23
-rw-r--r--webkit/plugins/ppapi/ppb_broker_impl.cc9
-rw-r--r--webkit/plugins/ppapi/ppb_broker_impl.h5
-rw-r--r--webkit/plugins/ppapi/ppb_buffer_impl.cc5
-rw-r--r--webkit/plugins/ppapi/ppb_buffer_impl.h2
-rw-r--r--webkit/plugins/ppapi/ppb_file_chooser_impl.cc6
-rw-r--r--webkit/plugins/ppapi/ppb_file_chooser_impl.h2
-rw-r--r--webkit/plugins/ppapi/ppb_file_io_impl.cc9
-rw-r--r--webkit/plugins/ppapi/ppb_file_io_impl.h2
-rw-r--r--webkit/plugins/ppapi/ppb_file_system_impl.cc10
-rw-r--r--webkit/plugins/ppapi/ppb_file_system_impl.h3
-rw-r--r--webkit/plugins/ppapi/ppb_flash_menu_impl.cc7
-rw-r--r--webkit/plugins/ppapi/ppb_flash_menu_impl.h9
-rw-r--r--webkit/plugins/ppapi/ppb_flash_net_connector_impl.cc11
-rw-r--r--webkit/plugins/ppapi/ppb_flash_net_connector_impl.h2
-rw-r--r--webkit/plugins/ppapi/ppb_font_impl.cc10
-rw-r--r--webkit/plugins/ppapi/ppb_font_impl.h6
-rw-r--r--webkit/plugins/ppapi/ppb_graphics_2d_impl.cc13
-rw-r--r--webkit/plugins/ppapi/ppb_graphics_2d_impl.h11
-rw-r--r--webkit/plugins/ppapi/ppb_image_data_impl.cc11
-rw-r--r--webkit/plugins/ppapi/ppb_image_data_impl.h8
-rw-r--r--webkit/plugins/ppapi/ppb_url_loader_impl.cc10
-rw-r--r--webkit/plugins/ppapi/ppb_url_loader_impl.h2
-rw-r--r--webkit/plugins/ppapi/ppb_url_request_info_impl.cc10
-rw-r--r--webkit/plugins/ppapi/ppb_url_request_info_impl.h2
-rw-r--r--webkit/plugins/ppapi/ppb_video_decoder_impl.cc10
-rw-r--r--webkit/plugins/ppapi/ppb_video_decoder_impl.h2
-rw-r--r--webkit/plugins/ppapi/ppb_video_layer_impl.cc6
-rw-r--r--webkit/plugins/ppapi/ppb_video_layer_impl.h7
-rw-r--r--webkit/plugins/ppapi/resource_creation_impl.cc103
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