[EFL] Expose JavaScript binding interface through ewk_extension
[WebKit-https.git] / Source / WebKit2 / WebProcess / InjectedBundle / API / efl / ewk_extension.h
1 /*
2  * Copyright (C) 2014 Ryuan Choi <ryuan.choi@gmail.com>.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 /**
27  * @file    ewk_extension.h
28  * @brief   Describes the Ewk_Extension API.
29  */
30
31 #ifndef ewk_extension_h
32 #define ewk_extension_h
33
34 #include <Eina.h>
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 /**
41  * Declare Ewk_Page.
42  */
43 typedef struct EwkPage Ewk_Page;
44
45 /**
46  * Declare Ewk_Extension.
47  */
48 typedef struct EwkExtension Ewk_Extension;
49
50 /**
51  * Declare Ewk_Extension_Initialize_Function.
52  *
53  * @brief  Type definition for the entry of the extension.
54  *
55  * @param extension the extension instance helps the communication between WebProcess and your extension library
56  * @param reserved extra parameter for the future. NULL is fine, now
57  *
58  */
59 typedef void *(*Ewk_Extension_Initialize_Function)(Ewk_Extension *extension, void *reserved);
60
61 struct EwkExtensionClient {
62     int version;
63     void *data;
64
65     /**
66      * Callbacks to report page added.
67      *
68      * @param page page to be finished
69      * @param data data of a extension client
70      */
71     void (*page_add)(Ewk_Page* page, void *data);
72
73     /**
74      * Callbacks to report page will be removed.
75      *
76      * @param page page to be finished
77      * @param data data of a extension client
78      */
79     void (*page_del)(Ewk_Page* page, void *data);
80
81     /**
82      * Callbacks to receive message from ewk_context.
83      *
84      * @param name name of message from ewk_context
85      * @param body body of message from ewk_context
86      * @param data data of a extension client
87      */
88     void (*message_received)(const char *name, const Eina_Value *body, void *data);
89 };
90 typedef struct EwkExtensionClient Ewk_Extension_Client;
91
92 /**
93  * Add a client which contains several callbacks to the extension.
94  *
95  * @param extension extension to attach client to
96  * @param client client to add to the extension
97  *
98  * This function adds a client, which contains several callbacks receiving events
99  * from WebProcess side, to a @p extension.
100  *
101  * @see ewk_extension_client_del
102  */
103 EAPI Eina_Bool ewk_extension_client_add(Ewk_Extension *extension, Ewk_Extension_Client *client);
104
105 /**
106  * Delete a client from the extension.
107  *
108  * @param extension extension to delete client
109  * @param client client which contains version, data and callbacks
110  */
111 EAPI Eina_Bool ewk_extension_client_del(Ewk_Extension *extension, Ewk_Extension_Client *client);
112
113 /**
114  * Posts message to ewk_context asynchronously.
115  *
116  * @note body only supports @c EINA_VALUE_TYPE_STRINGSHARE or @c EINA_VALUE_TYPE_STRING,
117  * now.
118  *
119  * @param extension extension to post message
120  * @param name message name
121  * @param body message body
122  *
123  * @return @c EINA_TRUE on success of @c EINA_FALSE on failure or when the type
124  * of @p body is not supported.
125  *
126  * @see ewk_context_message_post_to_extensions
127  * @see ewk_context_message_from_extensions_callback_set
128  */
129 EAPI Eina_Bool ewk_extension_message_post(Ewk_Extension *extension, const char *name, const Eina_Value *body);
130
131 #ifdef __cplusplus
132 }
133 #endif
134
135 #endif // ewk_extension_h