Implements extension loader and server
[platform/framework/web/crosswalk-tizen.git] / src / extension / extension.h
1 // Copyright 2015 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_EXTENSION_EXTENSION_H_
6 #define WRT_EXTENSION_EXTENSION_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "extension/extension_instance.h"
12 #include "extension/xwalk/XW_Extension.h"
13 #include "extension/xwalk/XW_Extension_SyncMessage.h"
14
15 namespace wrt {
16
17 class ExtensionAdapter;
18 class ExtensionInstance;
19
20 class Extension {
21  public:
22   typedef std::vector<std::string> StringVector;
23
24   class ExtensionDelegate {
25    public:
26     virtual void GetRuntimeVariable(const char* key, char* value,
27         size_t value_len) = 0;
28   };
29
30   Extension(const std::string& path, ExtensionDelegate* delegate);
31   virtual ~Extension();
32
33   bool Initialize();
34   ExtensionInstance* CreateInstance();
35
36   std::string name() const { return name_; }
37
38   std::string javascript_api() const { return javascript_api_; }
39
40   const StringVector& entry_points() const {
41     return entry_points_;
42   }
43
44   bool use_trampoline() const {
45     return use_trampoline_;
46   }
47
48   void set_name(const std::string& name) {
49     name_ = name;
50   }
51
52   void set_javascript_api(const std::string& javascript_api) {
53     javascript_api_ = javascript_api;
54   }
55
56   void set_use_trampoline(bool use_trampoline) {
57     use_trampoline_ = use_trampoline;
58   }
59
60  private:
61   friend class ExtensionAdapter;
62   friend class ExtensionInstance;
63
64   void GetRuntimeVariable(const char* key, char* value, size_t value_len);
65   int CheckAPIAccessControl(const char* api_name);
66   int RegisterPermissions(const char* perm_table);
67
68   bool initialized_;
69   std::string library_path_;
70   XW_Extension xw_extension_;
71
72   std::string name_;
73   std::string javascript_api_;
74   StringVector entry_points_;
75   bool use_trampoline_;
76
77   ExtensionDelegate* delegate_;
78
79   XW_CreatedInstanceCallback created_instance_callback_;
80   XW_DestroyedInstanceCallback destroyed_instance_callback_;
81   XW_ShutdownCallback shutdown_callback_;
82   XW_HandleMessageCallback handle_msg_callback_;
83   XW_HandleSyncMessageCallback handle_sync_msg_callback_;
84 };
85
86 }  // namespace wrt
87
88 #endif  // WRT_EXTENSION_EXTENSION_H_