Home | History | Annotate | Download | only in dev
      1 /* Copyright (c) 2013 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 label Chrome {
      7   M27 = 0.1
      8 };
      9 
     10 /**
     11  * Used to represent arbitrary C function pointers. Please note that usually
     12  * the function that a <code>PP_Ext_GenericFuncType</code> pointer points to
     13  * has a different signature than <code>void (*)()</code>.
     14  */
     15 typedef void PP_Ext_GenericFuncType();
     16 
     17 /**
     18  * An event listener that can be registered with the browser and receive
     19  * notifications via the callback function.
     20  *
     21  * A function is defined for each event type to return a properly-filled
     22  * <code>PP_Ext_EventListener</code> struct, for example,
     23  * <code>PP_Ext_Alarms_OnAlarm_Dev()</code>.
     24  */
     25 [passByValue]
     26 struct PP_Ext_EventListener {
     27   /**
     28    * The name of the event to register to.
     29    */
     30   cstr_t event_name;
     31   /**
     32    * A callback function whose signature is determined by
     33    * <code>event_name</code>. All calls will happen on the same thread as the
     34    * one on which <code>AddListener()</code> is called.
     35    */
     36   PP_Ext_GenericFuncType func;
     37   /**
     38    * An opaque pointer that will be passed to <code>func</code>.
     39    */
     40   mem_t user_data;
     41 };
     42 
     43 interface PPB_Ext_Events_Dev {
     44   /**
     45    * Registers a listener to an event.
     46    *
     47    * @param[in] instance A <code>PP_Instance</code> identifying one instance of
     48    * a module.
     49    * @param[in] listener A <code>PP_Ext_EventListener</code> struct.
     50    *
     51    * @return An listener ID, or 0 if failed.
     52    */
     53   uint32_t AddListener(
     54       [in] PP_Instance instance,
     55       [in] PP_Ext_EventListener listener);
     56 
     57   /**
     58    * Deregisters a listener.
     59    *
     60    * @param[in] instance A <code>PP_Instance</code> identifying one instance of
     61    * a module.
     62    * @param[in] listener_id The ID returned by <code>AddListener()</code>.
     63    */
     64   void RemoveListener(
     65       [in] PP_Instance instance,
     66       [in] uint32_t listener_id);
     67 };
     68 
     69 #inline c
     70 /**
     71  * Creates a <code>PP_Ext_EventListener</code> struct.
     72  *
     73  * Usually you should not call it directly. Instead you should call those
     74  * functions that return a <code>PP_Ext_EventListener</code> struct for a
     75  * specific event type, for example, <code>PP_Ext_Alarms_OnAlarm_Dev()</code>.
     76  */
     77 PP_INLINE struct PP_Ext_EventListener PP_Ext_MakeEventListener(
     78     const char* event_name,
     79     PP_Ext_GenericFuncType func,
     80     void* user_data) {
     81   struct PP_Ext_EventListener listener;
     82   listener.event_name = event_name;
     83   listener.func = func;
     84   listener.user_data = user_data;
     85   return listener;
     86 }
     87 #endinl
     88