• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
Get()22 pp::Module* Module::Get() {
23   return g_module_singleton;
24 }
25 
SetBrokerGetInterfaceFunc(PP_GetInterface_Func broker_get_interface)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 
PPP_InitializeModule(PP_Module module_id,PPB_GetInterface get_browser_interface)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 
PPP_ShutdownModule()48 PP_EXPORT void PPP_ShutdownModule() {
49   delete g_module_singleton;
50   g_module_singleton = NULL;
51 }
52 
PPP_GetInterface(const char * interface_name)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