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 16static pp::Module* g_module_singleton = NULL; 17static PP_GetInterface_Func g_broker_get_interface = NULL; 18 19namespace pp { 20 21// Give a default implementation of Module::Get(). See module.cc for details. 22pp::Module* Module::Get() { 23 return g_module_singleton; 24} 25 26void 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 34PP_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 48PP_EXPORT void PPP_ShutdownModule() { 49 delete g_module_singleton; 50 g_module_singleton = NULL; 51} 52 53PP_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