e2942c71a7febd67b1980511ec802cfb16bc752f
[platform/framework/web/crosswalk.git] / src / xwalk / extensions / common / xwalk_external_extension.h
1 // Copyright (c) 2013 Intel Corporation. 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 XWALK_EXTENSIONS_COMMON_XWALK_EXTERNAL_EXTENSION_H_
6 #define XWALK_EXTENSIONS_COMMON_XWALK_EXTERNAL_EXTENSION_H_
7
8 #include <string>
9 #include "base/values.h"
10 #include "base/scoped_native_library.h"
11 #include "xwalk/extensions/common/xwalk_extension.h"
12 #include "xwalk/extensions/public/XW_Extension.h"
13 #include "xwalk/extensions/public/XW_Extension_SyncMessage.h"
14
15 namespace base {
16 class FilePath;
17 };
18
19 namespace xwalk {
20 namespace extensions {
21
22 class XWalkExternalAdapter;
23 class XWalkExternalInstance;
24
25 // XWalkExternalExtension implements an XWalkExtension backed by a shared
26 // library implemented using our C ABI (see XW_Extension.h).
27 //
28 // It works together with XWalkExternalAdapter to handle calls from shared
29 // library, and store the callbacks to call it back later. The associated
30 // XW_Extension is used to identify this extension when calling the shared
31 // library.
32 class XWalkExternalExtension : public XWalkExtension {
33  public:
34   explicit XWalkExternalExtension(const base::FilePath& path);
35
36   virtual ~XWalkExternalExtension();
37
38   bool is_valid();
39
40   void set_runtime_variables(const base::ValueMap& runtime_variables) {
41     runtime_variables_ = runtime_variables;
42   }
43
44  private:
45   friend class XWalkExternalAdapter;
46   friend class XWalkExternalInstance;
47
48   // Variables from the browser process. Usually things like currently-running
49   // application ID.
50   base::ValueMap runtime_variables_;
51
52   // XWalkExtension implementation.
53   virtual XWalkExtensionInstance* CreateInstance() OVERRIDE;
54
55   // XW_CoreInterface_1 (from XW_Extension.h) implementation.
56   void CoreSetExtensionName(const char* name);
57   void CoreSetJavaScriptAPI(const char* js_api);
58   void CoreRegisterInstanceCallbacks(
59       XW_CreatedInstanceCallback created_callback,
60       XW_DestroyedInstanceCallback destroyed_callback);
61   void CoreRegisterShutdownCallback(XW_ShutdownCallback callback);
62   void EntryPointsSetExtraJSEntryPoints(const char** entry_points);
63
64   // XW_MessagingInterface_1 (from XW_Extension.h) implementation.
65   void MessagingRegister(XW_HandleMessageCallback callback);
66
67   // XW_Internal_SyncMessagingInterface_1 (from XW_Extension.h) implementation.
68   void SyncMessagingRegister(XW_HandleSyncMessageCallback callback);
69
70   // XW_Internal_BrowserInterface_1 (from XW_Browser.h) implementation.
71   void RuntimeGetStringVariable(const char* key, char* value, size_t value_len);
72
73   base::ScopedNativeLibrary library_;
74   XW_Extension xw_extension_;
75
76   XW_CreatedInstanceCallback created_instance_callback_;
77   XW_DestroyedInstanceCallback destroyed_instance_callback_;
78   XW_ShutdownCallback shutdown_callback_;
79   XW_HandleMessageCallback handle_msg_callback_;
80   XW_HandleSyncMessageCallback handle_sync_msg_callback_;
81
82   bool initialized_;
83
84   DISALLOW_COPY_AND_ASSIGN(XWalkExternalExtension);
85 };
86
87 }  // namespace extensions
88 }  // namespace xwalk
89
90 #endif  // XWALK_EXTENSIONS_COMMON_XWALK_EXTERNAL_EXTENSION_H_