Roll src/third_party/WebKit dccf813:8daf7c3 (svn 194467:194468)
[chromium-blink-merge.git] / ppapi / cpp / ppp_entrypoints.cc
blobe9e64573c1e1b551a11b076077485a0aec78d374
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;
19 namespace pp {
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;
30 } // namespace pp
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();
37 if (!module)
38 return PP_ERROR_FAILED;
40 if (!module->InternalInit(module_id, get_browser_interface)) {
41 delete module;
42 return PP_ERROR_FAILED;
44 g_module_singleton = module;
45 return PP_OK;
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);
58 return NULL;