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.
5 #ifndef WRT_SERVICE_NODE_EXTENSION_ADAPTER_H_
6 #define WRT_SERVICE_NODE_EXTENSION_ADAPTER_H_
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"
17 #include "extension.h"
22 class ExtensionAdapter {
24 static ExtensionAdapter* GetInstance();
26 XW_Extension GetNextXWExtension();
27 XW_Instance GetNextXWInstance();
29 void RegisterExtension(Extension* extension);
30 void UnregisterExtension(Extension* extension);
32 void RegisterInstance(ExtensionInstance* instance);
33 void UnregisterInstance(ExtensionInstance* instance);
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);
39 static Extension* GetExtension(XW_Extension xw_extension);
40 static ExtensionInstance* GetExtensionInstance(XW_Instance xw_instance);
44 virtual ~ExtensionAdapter();
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,
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);
78 typedef std::map<XW_Extension, Extension*> ExtensionMap;
79 ExtensionMap extension_map_;
81 typedef std::map<XW_Instance, ExtensionInstance*> InstanceMap;
82 InstanceMap instance_map_;
84 XW_Extension next_xw_extension_;
85 XW_Instance next_xw_instance_;
91 #endif // WRT_SERVICE_NODE_EXTENSION_ADAPTER_H_