diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-13 22:46:42 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-13 22:46:42 +0000 |
commit | 5ed5a3eebe9cab0c54cc23ab3d059af37a4f3a92 (patch) | |
tree | 4e802bfe6319118b99483ada9888bbaebd17516e /ppapi/cpp | |
parent | d99bcf2707cd81d8653485cab5d32f4811a58112 (diff) | |
download | chromium_src-5ed5a3eebe9cab0c54cc23ab3d059af37a4f3a92.zip chromium_src-5ed5a3eebe9cab0c54cc23ab3d059af37a4f3a92.tar.gz chromium_src-5ed5a3eebe9cab0c54cc23ab3d059af37a4f3a92.tar.bz2 |
Add a way to implement GetInterface in the broker.
This also adds some cleanup in the Pepper API to provide typedefs for the three PPP_* functions. I removed some ad-hoc typedefes we had floating around and replaced them with these more "official" ones.
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com/10069035
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@132285 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/cpp')
-rw-r--r-- | ppapi/cpp/module_embedder.h | 15 | ||||
-rw-r--r-- | ppapi/cpp/ppp_entrypoints.cc | 13 |
2 files changed, 25 insertions, 3 deletions
diff --git a/ppapi/cpp/module_embedder.h b/ppapi/cpp/module_embedder.h index b7b7d43..a1d00a8 100644 --- a/ppapi/cpp/module_embedder.h +++ b/ppapi/cpp/module_embedder.h @@ -5,6 +5,8 @@ #ifndef PPAPI_CPP_MODULE_EMBEDDER_H_ #define PPAPI_CPP_MODULE_EMBEDDER_H_ +#include "ppapi/c/ppp.h" + /// @file /// This file defines the APIs for creating a Module object. namespace pp { @@ -20,6 +22,19 @@ class Module; /// failure. Upon failure, the module will be unloaded. pp::Module* CreateModule(); +/// Sets the get interface function in the broker process. +/// +/// This function is only relevant when you're using the PPB_Broker interface +/// in a trusted native plugin. In this case, you may need to implement +/// PPP_GetInterface when the plugin is loaded in the unsandboxed process. +/// Normally the C++ wrappers implement PPP_GetInterface for you but this +/// doesn't work in the context of the broker process. +// +/// So if you need to implement PPP_* interfaces in the broker process, call +/// this function in your PPP_InitializeBroker implementation which will set +/// up the given function as implementing PPP_GetInterface. +void SetBrokerGetInterfaceFunc(PP_GetInterface_Func broker_get_interface); + } // namespace pp #endif // PPAPI_CPP_MODULE_EMBEDDER_H_ diff --git a/ppapi/cpp/ppp_entrypoints.cc b/ppapi/cpp/ppp_entrypoints.cc index c3e7568..19a2ac9 100644 --- a/ppapi/cpp/ppp_entrypoints.cc +++ b/ppapi/cpp/ppp_entrypoints.cc @@ -14,6 +14,7 @@ #include "ppapi/cpp/module_embedder.h" static pp::Module* g_module_singleton = NULL; +static PP_GetInterface_Func g_broker_get_interface = NULL; namespace pp { @@ -22,6 +23,10 @@ pp::Module* Module::Get() { return g_module_singleton; } +void SetBrokerGetIntefaceFunc(PP_GetInterface_Func broker_get_interface) { + g_broker_get_interface = broker_get_interface; +} + } // namespace pp // Global PPP functions -------------------------------------------------------- @@ -46,7 +51,9 @@ PP_EXPORT void PPP_ShutdownModule() { } PP_EXPORT const void* PPP_GetInterface(const char* interface_name) { - if (!g_module_singleton) - return NULL; - return g_module_singleton->GetPluginInterface(interface_name); + if (g_module_singleton) + return g_module_singleton->GetPluginInterface(interface_name); + if (g_broker_get_interface) + return g_broker_get_interface(interface_name); + return NULL; } |