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