summaryrefslogtreecommitdiffstats
path: root/ppapi/cpp
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-13 22:46:42 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-13 22:46:42 +0000
commit5ed5a3eebe9cab0c54cc23ab3d059af37a4f3a92 (patch)
tree4e802bfe6319118b99483ada9888bbaebd17516e /ppapi/cpp
parentd99bcf2707cd81d8653485cab5d32f4811a58112 (diff)
downloadchromium_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.h15
-rw-r--r--ppapi/cpp/ppp_entrypoints.cc13
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;
}