1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // When used in conjunction with module_embedder.h, this gives a default
6 // implementation of ppp.h for clients of the ppapi C++ interface. Most
7 // plugin implementors can export their derivation of Module by just
8 // linking to this implementation.
10 #include "ppapi/c/ppb.h"
11 #include "ppapi/c/ppp.h"
12 #include "ppapi/c/pp_errors.h"
13 #include "ppapi/cpp/module.h"
14 #include "ppapi/cpp/module_embedder.h"
16 static pp::Module
* g_module_singleton
= NULL
;
17 static PP_GetInterface_Func g_broker_get_interface
= NULL
;
21 // Give a default implementation of Module::Get(). See module.cc for details.
22 pp::Module
* Module::Get() {
23 return g_module_singleton
;
26 void SetBrokerGetInterfaceFunc(PP_GetInterface_Func broker_get_interface
) {
27 g_broker_get_interface
= broker_get_interface
;
32 // Global PPP functions --------------------------------------------------------
34 PP_EXPORT
int32_t PPP_InitializeModule(PP_Module module_id
,
35 PPB_GetInterface get_browser_interface
) {
36 pp::Module
* module
= pp::CreateModule();
38 return PP_ERROR_FAILED
;
40 if (!module
->InternalInit(module_id
, get_browser_interface
)) {
42 return PP_ERROR_FAILED
;
44 g_module_singleton
= module
;
48 PP_EXPORT
void PPP_ShutdownModule() {
49 delete g_module_singleton
;
50 g_module_singleton
= NULL
;
53 PP_EXPORT
const void* PPP_GetInterface(const char* interface_name
) {
54 if (g_module_singleton
)
55 return g_module_singleton
->GetPluginInterface(interface_name
);
56 if (g_broker_get_interface
)
57 return g_broker_get_interface(interface_name
);