Home | History | Annotate | Download | only in c
      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