blob: 817f00647d2c6fc596fbfe4c05e6a9939c53444b [file]
/*
* Copyright (C) 2014 Ryuan Choi <ryuan.choi@gmail.com>. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file ewk_extension.h
* @brief Describes the Ewk_Extension API.
*/
#ifndef ewk_extension_h
#define ewk_extension_h
#include <Eina.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* Declare Ewk_Page.
*/
#ifdef __cplusplus
typedef class EwkPage Ewk_Page;
#else
typedef struct EwkPage Ewk_Page;
#endif
/**
* Declare Ewk_Extension.
*/
#ifdef __cplusplus
typedef class EwkExtension Ewk_Extension;
#else
typedef struct EwkExtension Ewk_Extension;
#endif
/**
* Declare Ewk_Extension_Initialize_Function.
*
* @brief Type definition for the entry of the extension.
*
* @param extension the extension instance helps the communication between WebProcess and your extension library
* @param reserved extra parameter for the future. NULL is fine, now
*
*/
typedef void *(*Ewk_Extension_Initialize_Function)(Ewk_Extension *extension, void *reserved);
struct EwkExtensionClient {
int version;
void *data;
/**
* Callbacks to report page added.
*
* @param page page to be finished
* @param data data of a extension client
*/
void (*page_add)(Ewk_Page* page, void *data);
/**
* Callbacks to report page will be removed.
*
* @param page page to be finished
* @param data data of a extension client
*/
void (*page_del)(Ewk_Page* page, void *data);
/**
* Callbacks to receive message from ewk_context.
*
* @param name name of message from ewk_context
* @param body body of message from ewk_context
* @param data data of a extension client
*/
void (*message_received)(const char *name, const Eina_Value *body, void *data);
};
typedef struct EwkExtensionClient Ewk_Extension_Client;
/**
* Add a client which contains several callbacks to the extension.
*
* @param extension extension to attach client to
* @param client client to add to the extension
*
* This function adds a client, which contains several callbacks receiving events
* from WebProcess side, to a @p extension.
*
* @see ewk_extension_client_del
*/
EAPI Eina_Bool ewk_extension_client_add(Ewk_Extension *extension, Ewk_Extension_Client *client);
/**
* Delete a client from the extension.
*
* @param extension extension to delete client
* @param client client which contains version, data and callbacks
*/
EAPI Eina_Bool ewk_extension_client_del(Ewk_Extension *extension, Ewk_Extension_Client *client);
/**
* Posts message to ewk_context asynchronously.
*
* @note body only supports @c EINA_VALUE_TYPE_STRINGSHARE or @c EINA_VALUE_TYPE_STRING,
* now.
*
* @param extension extension to post message
* @param name message name
* @param body message body
*
* @return @c EINA_TRUE on success of @c EINA_FALSE on failure or when the type
* of @p body is not supported.
*
* @see ewk_context_message_post_to_extensions
* @see ewk_context_message_from_extensions_callback_set
*/
EAPI Eina_Bool ewk_extension_message_post(Ewk_Extension *extension, const char *name, const Eina_Value *body);
#ifdef __cplusplus
}
#endif
#endif // ewk_extension_h