• 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 
6 /* From ppp.idl modified Mon Feb 11 15:48:41 2013. */
7 
8 #ifndef PPAPI_C_PPP_H_
9 #define PPAPI_C_PPP_H_
10 
11 #include "ppapi/c/pp_macros.h"
12 #include "ppapi/c/pp_module.h"
13 #include "ppapi/c/pp_stdint.h"
14 #include "ppapi/c/ppb.h"
15 
16 /**
17  * @file
18  * This file defines three functions that your module must
19  * implement to interact with the browser.
20  */
21 
22 
23 
24 #include "ppapi/c/pp_module.h"
25 #include "ppapi/c/pp_stdint.h"
26 #include "ppapi/c/ppb.h"
27 
28 #if __GNUC__ >= 4
29 #define PP_EXPORT __attribute__ ((visibility("default")))
30 #elif defined(_MSC_VER)
31 #define PP_EXPORT __declspec(dllexport)
32 #endif
33 
34 /* {PENDING: undefine PP_EXPORT?} */
35 
36 /* We don't want name mangling for these external functions.  We only need
37  * 'extern "C"' if we're compiling with a C++ compiler.
38  */
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 /**
44  * @addtogroup Functions
45  * @{
46  */
47 
48 /**
49  * PPP_InitializeModule() is the entry point for a module and is called by the
50  * browser when your module loads. Your code must implement this function.
51  *
52  * Failure indicates to the browser that this module can not be used. In this
53  * case, the module will be unloaded and ShutdownModule will NOT be called.
54  *
55  * @param[in] module A handle to your module. Generally you should store this
56  * value since it will be required for other API calls.
57  * @param[in] get_browser_interface A pointer to the function that you can
58  * use to query for browser interfaces. Generally you should store this value
59  * for future use.
60  *
61  * @return <code>PP_OK</code> on success. Any other value on failure.
62  */
63 PP_EXPORT int32_t PPP_InitializeModule(PP_Module module,
64                                        PPB_GetInterface get_browser_interface);
65 /**
66  * @}
67  */
68 
69 /**
70  * @addtogroup Functions
71  * @{
72  */
73 
74 /**
75  * PPP_ShutdownModule() is <strong>sometimes</strong> called before the module
76  * is unloaded. It is not recommended that you implement this function.
77  *
78  * There is no practical use of this function for third party modules. Its
79  * existence is because of some internal use cases inside Chrome.
80  *
81  * Since your module runs in a separate process, there's no need to free
82  * allocated memory. There is also no need to free any resources since all of
83  * resources associated with an instance will be force-freed when that instance
84  * is deleted.
85  *
86  * <strong>Note:</strong> This function will always be skipped on untrusted
87  * (Native Client) implementations. This function may be skipped on trusted
88  * implementations in certain circumstances when Chrome does "fast shutdown"
89  * of a web page.
90  */
91 PP_EXPORT void PPP_ShutdownModule(void);
92 /**
93  * @}
94  */
95 
96 /**
97  * @addtogroup Functions
98  * @{
99  */
100 
101 /**
102  * PPP_GetInterface() is called by the browser to query the module for
103  * interfaces it supports.
104  *
105  * Your module must implement the <code>PPP_Instance</code> interface or it
106  * will be unloaded. Other interfaces are optional.
107  *
108  * This function is called from within browser code whenever an interface is
109  * needed. This means your plugin could be reentered via this function if you
110  * make a browser call and it needs an interface. Furthermore, you should not
111  * make any other browser calls from within your implementation to avoid
112  * reentering the browser.
113  *
114  * As a result, your implementation of this should merely provide a lookup
115  * from the requested name to an interface pointer, via something like a big
116  * if/else block or a map, and not do any other work.
117  *
118  * @param[in] interface_name A pointer to a "PPP" (plugin) interface name.
119  * Interface names are null-terminated ASCII strings.
120  *
121  * @return A pointer for the interface or <code>NULL</code> if the interface is
122  * not supported.
123  */
124 PP_EXPORT const void* PPP_GetInterface(const char* interface_name);
125 /**
126  * @}
127  */
128 
129 #ifdef __cplusplus
130 }  /* extern "C" */
131 #endif
132 
133 
134 /**
135  * @addtogroup Typedefs
136  * @{
137  */
138 /**
139  * Defines the type of the <code>PPP_InitializeModule</code> function.
140  */
141 typedef int32_t (*PP_InitializeModule_Func)(
142     PP_Module module,
143     PPB_GetInterface get_browser_interface);
144 
145 /**
146  * Defines the type of the <code>PPP_ShutdownModule</code> function.
147  */
148 typedef void (*PP_ShutdownModule_Func)(void);
149 
150 /**
151  * Defines the type of the <code>PPP_ShutdownModule</code> function.
152  */
153 typedef const void* (*PP_GetInterface_Func)(const char* interface_name);
154 /**
155  * @}
156  */
157 
158 #endif  /* PPAPI_C_PPP_H_ */
159 
160