blob: e9e64573c1e1b551a11b076077485a0aec78d374 [file] [log] [blame]
Torne (Richard Coles)58218062012-11-14 11:43:16 +00001// 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}