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. 4 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. 9 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" 15 16 static pp::Module* g_module_singleton = NULL; 17 static PP_GetInterface_Func g_broker_get_interface = NULL; 18 19 namespace pp { 20 21 // Give a default implementation of Module::Get(). See module.cc for details. 22 pp::Module* Module::Get() { 23 return g_module_singleton; 24 } 25 26 void SetBrokerGetInterfaceFunc(PP_GetInterface_Func broker_get_interface) { 27 g_broker_get_interface = broker_get_interface; 28 } 29 30 } // namespace pp 31 32 // Global PPP functions -------------------------------------------------------- 33 34 PP_EXPORT int32_t PPP_InitializeModule(PP_Module module_id, 35 PPB_GetInterface get_browser_interface) { 36 pp::Module* module = pp::CreateModule(); 37 if (!module) 38 return PP_ERROR_FAILED; 39 40 if (!module->InternalInit(module_id, get_browser_interface)) { 41 delete module; 42 return PP_ERROR_FAILED; 43 } 44 g_module_singleton = module; 45 return PP_OK; 46 } 47 48 PP_EXPORT void PPP_ShutdownModule() { 49 delete g_module_singleton; 50 g_module_singleton = NULL; 51 } 52 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); 58 return NULL; 59 } 60