| Index: webkit/glue/plugins/pepper_plugin_module.cc
|
| ===================================================================
|
| --- webkit/glue/plugins/pepper_plugin_module.cc (revision 50670)
|
| +++ webkit/glue/plugins/pepper_plugin_module.cc (working copy)
|
| @@ -31,6 +31,9 @@
|
| #include "webkit/glue/plugins/pepper_resource_tracker.h"
|
| #include "webkit/glue/plugins/pepper_var.h"
|
|
|
| +typedef bool (*PPP_InitializeModuleFunc)(PP_Module, PPB_GetInterface);
|
| +typedef void (*PPP_ShutdownModuleFunc)();
|
| +
|
| namespace pepper {
|
|
|
| namespace {
|
| @@ -155,9 +158,11 @@
|
|
|
| } // namespace
|
|
|
| -PluginModule::PluginModule()
|
| - : initialized_(false),
|
| - library_(NULL) {
|
| +PluginModule::PluginModule(const FilePath& filename)
|
| + : filename_(filename),
|
| + initialized_(false),
|
| + library_(0),
|
| + ppp_get_interface_(NULL) {
|
| GetMainThreadMessageLoop(); // Initialize the main thread message loop.
|
| GetLivePluginSet()->insert(this);
|
| }
|
| @@ -169,34 +174,28 @@
|
|
|
| GetLivePluginSet()->erase(this);
|
|
|
| - if (entry_points_.shutdown_module)
|
| - entry_points_.shutdown_module();
|
| -
|
| - if (library_)
|
| + if (library_) {
|
| + PPP_ShutdownModuleFunc shutdown_module =
|
| + reinterpret_cast<PPP_ShutdownModuleFunc>(
|
| + base::GetFunctionPointerFromNativeLibrary(library_,
|
| + "PPP_ShutdownModule"));
|
| + if (shutdown_module)
|
| + shutdown_module();
|
| base::UnloadNativeLibrary(library_);
|
| + }
|
| }
|
|
|
| // static
|
| scoped_refptr<PluginModule> PluginModule::CreateModule(
|
| - const FilePath& path) {
|
| + const FilePath& filename) {
|
| // FIXME(brettw) do uniquifying of the plugin here like the NPAPI one.
|
|
|
| - scoped_refptr<PluginModule> lib(new PluginModule());
|
| - if (!lib->InitFromFile(path))
|
| - return NULL;
|
| -
|
| + scoped_refptr<PluginModule> lib(new PluginModule(filename));
|
| + if (!lib->Load())
|
| + lib = NULL;
|
| return lib;
|
| }
|
|
|
| -scoped_refptr<PluginModule> PluginModule::CreateInternalModule(
|
| - EntryPoints entry_points) {
|
| - scoped_refptr<PluginModule> lib(new PluginModule());
|
| - if (!lib->InitFromEntryPoints(entry_points))
|
| - return NULL;
|
| -
|
| - return lib;
|
| -}
|
| -
|
| // static
|
| PluginModule* PluginModule::FromPPModule(PP_Module module) {
|
| PluginModule* lib = reinterpret_cast<PluginModule*>(module);
|
| @@ -205,72 +204,40 @@
|
| return lib;
|
| }
|
|
|
| -bool PluginModule::InitFromEntryPoints(const EntryPoints& entry_points) {
|
| +bool PluginModule::Load() {
|
| if (initialized_)
|
| return true;
|
| -
|
| - // Attempt to run the initialization funciton.
|
| - int retval = entry_points.initialize_module(GetPPModule(), &GetInterface);
|
| - if (retval != 0) {
|
| - LOG(WARNING) << "PPP_InitializeModule returned failure " << retval;
|
| - return false;
|
| - }
|
| -
|
| - entry_points_ = entry_points;
|
| initialized_ = true;
|
| - return true;
|
| -}
|
|
|
| -bool PluginModule::InitFromFile(const FilePath& path) {
|
| - if (initialized_)
|
| - return true;
|
| -
|
| - base::NativeLibrary library = base::LoadNativeLibrary(path);
|
| - if (!library)
|
| + library_ = base::LoadNativeLibrary(filename_);
|
| + if (!library_)
|
| return false;
|
|
|
| - EntryPoints entry_points;
|
| - if (!LoadEntryPoints(library, &entry_points) ||
|
| - !InitFromEntryPoints(entry_points)) {
|
| - base::UnloadNativeLibrary(library);
|
| - return false;
|
| - }
|
| -
|
| - // We let InitFromEntryPoints() handle setting the all the internal state
|
| - // of the object other than the |library_| reference.
|
| - library_ = library;
|
| - return true;
|
| -}
|
| -
|
| -// static
|
| -bool PluginModule::LoadEntryPoints(const base::NativeLibrary& library,
|
| - EntryPoints* entry_points) {
|
| -
|
| - entry_points->get_interface =
|
| + // Save the GetInterface function pointer for later.
|
| + ppp_get_interface_ =
|
| reinterpret_cast<PPP_GetInterfaceFunc>(
|
| - base::GetFunctionPointerFromNativeLibrary(library,
|
| + base::GetFunctionPointerFromNativeLibrary(library_,
|
| "PPP_GetInterface"));
|
| - if (!entry_points->get_interface) {
|
| + if (!ppp_get_interface_) {
|
| LOG(WARNING) << "No PPP_GetInterface in plugin library";
|
| return false;
|
| }
|
|
|
| - entry_points->initialize_module =
|
| + // Call the plugin initialize function.
|
| + PPP_InitializeModuleFunc initialize_module =
|
| reinterpret_cast<PPP_InitializeModuleFunc>(
|
| - base::GetFunctionPointerFromNativeLibrary(library,
|
| + base::GetFunctionPointerFromNativeLibrary(library_,
|
| "PPP_InitializeModule"));
|
| - if (!entry_points->initialize_module) {
|
| + if (!initialize_module) {
|
| LOG(WARNING) << "No PPP_InitializeModule in plugin library";
|
| return false;
|
| }
|
| + int retval = initialize_module(GetPPModule(), &GetInterface);
|
| + if (retval != 0) {
|
| + LOG(WARNING) << "PPP_InitializeModule returned failure " << retval;
|
| + return false;
|
| + }
|
|
|
| - // It's okay for PPP_ShutdownModule to not be defined and shutdown_module to
|
| - // be NULL.
|
| - entry_points->shutdown_module =
|
| - reinterpret_cast<PPP_ShutdownModuleFunc>(
|
| - base::GetFunctionPointerFromNativeLibrary(library,
|
| - "PPP_ShutdownModule"));
|
| -
|
| return true;
|
| }
|
|
|
| @@ -297,9 +264,9 @@
|
| }
|
|
|
| const void* PluginModule::GetPluginInterface(const char* name) const {
|
| - if (!entry_points_.get_interface)
|
| + if (!ppp_get_interface_)
|
| return NULL;
|
| - return entry_points_.get_interface(name);
|
| + return ppp_get_interface_(name);
|
| }
|
|
|
| void PluginModule::InstanceCreated(PluginInstance* instance) {
|
|
|