tizen 2.4 release
[framework/web/wrt-plugins-common.git] / src / xwalk-module / extension_adapter.h
1 // Copyright 2014 Samsung Electronics Co, Ltd. 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 #ifndef WRT_SERVICE_NODE_EXTENSION_ADAPTER_H_
6 #define WRT_SERVICE_NODE_EXTENSION_ADAPTER_H_
7
8 #include <map>
9
10 #include "XW_Extension.h"
11 #include "XW_Extension_SyncMessage.h"
12 #include "XW_Extension_EntryPoints.h"
13 #include "XW_Extension_Runtime.h"
14 #include "XW_Extension_Permissions.h"
15 #include "XW_Extension_Data.h"
16
17 #include "extension.h"
18
19 namespace wrt {
20 namespace xwalk {
21
22 class ExtensionAdapter {
23  public:
24   static ExtensionAdapter* GetInstance();
25
26   XW_Extension GetNextXWExtension();
27   XW_Instance GetNextXWInstance();
28
29   void RegisterExtension(Extension* extension);
30   void UnregisterExtension(Extension* extension);
31
32   void RegisterInstance(ExtensionInstance* instance);
33   void UnregisterInstance(ExtensionInstance* instance);
34
35   // Returns the correct struct according to interface asked. This is
36   // passed to external extensions in XW_Initialize() call.
37   static const void* GetInterface(const char* name);
38
39   static Extension* GetExtension(XW_Extension xw_extension);
40   static ExtensionInstance* GetExtensionInstance(XW_Instance xw_instance);
41
42  private:
43   ExtensionAdapter();
44   virtual ~ExtensionAdapter();
45
46
47   static void CoreSetExtensionName(XW_Extension xw_extension, const char* name);
48   static void CoreSetJavaScriptAPI(XW_Extension xw_extension,const char* javascript_api);
49   static void CoreRegisterInstanceCallbacks(XW_Extension xw_extension,
50                                      XW_CreatedInstanceCallback created,
51                                      XW_DestroyedInstanceCallback destroyed);
52   static void CoreRegisterShutdownCallback(XW_Extension xw_extension,
53                                     XW_ShutdownCallback shutdown);
54   static void CoreSetInstanceData(XW_Instance xw_instance, void* data);
55   static void* CoreGetInstanceData(XW_Instance xw_instance);
56   static void MessagingRegister(XW_Extension xw_extension, XW_HandleMessageCallback handle_message);
57   static void MessagingPostMessage(XW_Instance xw_instance, const char* message);
58   static void SyncMessagingRegister(XW_Extension xw_extension,
59                              XW_HandleSyncMessageCallback handle_sync_message);
60   static void SyncMessagingSetSyncReply(XW_Instance xw_instance, const char* reply);
61   static void EntryPointsSetExtraJSEntryPoints(XW_Extension xw_extension,
62                                         const char** entry_points);
63   static void RuntimeGetStringVariable(XW_Extension xw_extension,
64                                 const char* key,
65                                 char* value,
66                                 unsigned int value_len);
67   static int PermissionsCheckAPIAccessControl(XW_Extension xw_extension,
68                                        const char* api_name);
69   static int PermissionsRegisterPermissions(XW_Extension xw_extension,
70                                      const char* perm_table);
71   static void DataRegisterSync(XW_Extension xw_extension, XW_HandleDataCallback handle_sync_data);
72   static void DataRegisterAsync(XW_Extension xw_extension, XW_HandleDataCallback handle_data);
73   static void DataSetSyncReply(XW_Instance instance, const char* reply,
74                                uint8_t* buffer, size_t len);
75   static void DataPostData(XW_Instance instance, const char* message,
76                            uint8_t* buffer, size_t len);
77
78   typedef std::map<XW_Extension, Extension*> ExtensionMap;
79   ExtensionMap extension_map_;
80
81   typedef std::map<XW_Instance, ExtensionInstance*> InstanceMap;
82   InstanceMap instance_map_;
83
84   XW_Extension next_xw_extension_;
85   XW_Instance next_xw_instance_;
86 };
87
88 } // namespace xwalk
89 } // namespace wrt
90
91 #endif // WRT_SERVICE_NODE_EXTENSION_ADAPTER_H_