OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright 2008 The Native Client Authors. All rights reserved. | |
3 * Use of this source code is governed by a BSD-style license that can | |
4 * be found in the LICENSE file. | |
5 */ | |
6 | |
7 // The portable representation of an instance and root scriptable object. | |
8 // The ActiveX, NPAPI, and Pepper versions of the plugin instantiate | |
9 // subclasses of this class. | |
10 | |
11 #ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_PLUGIN_H_ | |
12 #define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_PLUGIN_H_ | |
13 | |
14 #include <stdio.h> | |
15 | |
16 #include "native_client/src/include/nacl_macros.h" | |
17 #include "native_client/src/include/nacl_string.h" | |
18 #include "native_client/src/trusted/plugin/api_defines.h" | |
19 #include "native_client/src/trusted/plugin/srpc/service_runtime.h" | |
20 #include "native_client/src/trusted/plugin/srpc/portable_handle.h" | |
21 #include "native_client/src/trusted/plugin/srpc/utility.h" | |
22 | |
23 namespace nacl { | |
24 class DescWrapperFactory; | |
25 } // namespace nacl | |
26 | |
27 namespace plugin { | |
28 | |
29 class StreamShmBuffer; | |
30 class ScriptableHandle; | |
31 | |
32 class Plugin : public PortableHandle { | |
33 public: | |
34 void Invalidate(); | |
35 | |
36 // Load from the local URL saved in local_url. | |
37 // Updates local_url(), nacl_module_origin() and logical_url(). | |
38 bool Load(nacl::string logical_url, const char* local_url); | |
39 // Load nexe binary from the provided buffer. | |
40 // Updates local_url(), nacl_module_origin() and logical_url(). | |
41 bool Load(nacl::string logical_url, | |
42 const char* local_url, | |
43 plugin::StreamShmBuffer* buffer); | |
44 | |
45 // Log a message by sending it to the service runtime. | |
46 bool LogAtServiceRuntime(int severity, nacl::string msg); | |
47 | |
48 // Returns the argument value for the specified key, or NULL if not found. | |
49 // The callee retains ownership of the result. | |
50 char* LookupArgument(const char* key); | |
51 | |
52 // To indicate successful loading of a module, invoke the onload handler. | |
53 bool RunOnloadHandler(); | |
54 // To indicate unsuccessful loading of a module, invoke the onfail handler. | |
55 bool RunOnfailHandler(); | |
56 | |
57 // overriding virtual methods | |
58 virtual bool InvokeEx(uintptr_t method_id, | |
59 CallType call_type, | |
60 SrpcParams* params); | |
61 virtual bool HasMethodEx(uintptr_t method_id, CallType call_type); | |
62 virtual bool InitParamsEx(uintptr_t method_id, | |
63 CallType call_type, | |
64 SrpcParams* params); | |
65 | |
66 // The unique identifier for this plugin instance. | |
67 InstanceIdentifier instance_id() { return instance_id_; } | |
68 | |
69 // The embed/object tag argument list. | |
70 int argc() const { return argc_; } | |
71 char** argn() const { return argn_; } | |
72 char** argv() const { return argv_; } | |
73 | |
74 virtual BrowserInterface* browser_interface() const { | |
75 return browser_interface_; | |
76 } | |
77 virtual Plugin* plugin() const { return const_cast<Plugin*>(this); } | |
78 ScriptableHandle* scriptable_handle() const { return scriptable_handle_; } | |
79 void set_scriptable_handle(ScriptableHandle* scriptable_handle) { | |
80 scriptable_handle_ = scriptable_handle; | |
81 } | |
82 | |
83 // Returns the URL of the locally-cached copy of the downloaded NaCl | |
84 // module, if any. May be NULL, e.g. in Chrome. | |
85 const char* local_url() const { return local_url_; } | |
86 void set_local_url(const char* url); | |
87 | |
88 // Returns the logical URL of NaCl module as defined by the "src" or | |
89 // "nexes" attribute (and thus seen by the user). | |
90 // TODO(sehr): this is derived from what the NPStream object reports, and | |
91 // we need to investigate how streams report redirection (or if they do) | |
92 // for our origin checks, etc. | |
93 const char* logical_url() const { return logical_url_; } | |
94 void set_logical_url(const char* url); | |
95 | |
96 // Origin of page with the embed tag that created this plugin instance. | |
97 nacl::string origin() const { return origin_; } | |
98 | |
99 // Origin of NaCl module. | |
100 nacl::string nacl_module_origin() const { return nacl_module_origin_; } | |
101 void set_nacl_module_origin(nacl::string origin) { | |
102 nacl_module_origin_ = origin; | |
103 } | |
104 | |
105 // Each nexe has a canonical socket address that it will respond to | |
106 // Connect requests on. | |
107 ScriptableHandle* socket_address() const { return socket_address_; } | |
108 // TODO(sehr): document this. | |
109 ScriptableHandle* socket() const { return socket_; } | |
110 | |
111 // The Firefox plugin multimedia interface. | |
112 // Enable video there. | |
113 virtual void EnableVideo() { } | |
114 // Create a listener thread and initialize the nacl module. | |
115 virtual bool InitializeModuleMultimedia(ScriptableHandle* raw_channel, | |
116 ServiceRuntime* service_runtime) { | |
117 UNREFERENCED_PARAMETER(raw_channel); | |
118 UNREFERENCED_PARAMETER(service_runtime); | |
119 return true; | |
120 } | |
121 // Shut down the multimedia system, destroying the listener thread. | |
122 virtual void ShutdownMultimedia() { } | |
123 | |
124 // Width is the width in pixels of the region this instance occupies. | |
125 int32_t width() const { return width_; } | |
126 void set_width(int32_t width) { width_ = width; } | |
127 | |
128 // Height is the height in pixels of the region this instance occupies. | |
129 int32_t height() const { return height_; } | |
130 void set_height(int32_t height) { height_ = height; } | |
131 | |
132 // Video_update_mode tells how the multimedia API should update its window. | |
133 int32_t video_update_mode() const { return video_update_mode_; } | |
134 void set_video_update_mode(int32_t video_update_mode) { | |
135 video_update_mode_ = video_update_mode; | |
136 } | |
137 | |
138 nacl::DescWrapperFactory* wrapper_factory() const { return wrapper_factory_; } | |
139 | |
140 // Complex methods to set member data. | |
141 bool SetNexesPropertyImpl(const char* nexes_attrs); | |
142 bool SetSrcPropertyImpl(const nacl::string &url); | |
143 | |
144 // Requesting a nacl module from a specified url. | |
145 virtual bool RequestNaClModule(const nacl::string& url) = 0; | |
146 | |
147 // Start up proxied execution of the browser API. | |
148 virtual void StartProxiedExecution(NaClSrpcChannel* srpc_channel) = 0; | |
149 | |
150 protected: | |
151 Plugin(); | |
152 virtual ~Plugin(); | |
153 bool Init(BrowserInterface* browser_interface, | |
154 InstanceIdentifier instance_id, | |
155 int argc, | |
156 char* argn[], | |
157 char* argv[]); | |
158 void LoadMethods(); | |
159 ServiceRuntime* service_runtime_; | |
160 | |
161 bool receive_thread_running_; | |
162 struct NaClThread receive_thread_; | |
163 | |
164 private: | |
165 NACL_DISALLOW_COPY_AND_ASSIGN(Plugin); | |
166 InstanceIdentifier instance_id_; | |
167 BrowserInterface* browser_interface_; | |
168 ScriptableHandle* scriptable_handle_; | |
169 | |
170 int argc_; | |
171 char** argn_; | |
172 char** argv_; | |
173 | |
174 ScriptableHandle* socket_address_; | |
175 ScriptableHandle* socket_; | |
176 char* local_url_; // (from malloc) | |
177 char* logical_url_; // (from malloc) | |
178 | |
179 nacl::string origin_; | |
180 nacl::string nacl_module_origin_; | |
181 | |
182 bool origin_valid_; | |
183 int32_t height_; | |
184 int32_t width_; | |
185 int32_t video_update_mode_; | |
186 | |
187 nacl::DescWrapperFactory* wrapper_factory_; | |
188 | |
189 void ShutDownReceiveThread(); | |
190 | |
191 static bool SendAsyncMessage(void* obj, SrpcParams* params, | |
192 nacl::DescWrapper** fds, int fds_count); | |
193 static bool SendAsyncMessage0(void* obj, SrpcParams* params); | |
194 static bool SendAsyncMessage1(void* obj, SrpcParams* params); | |
195 }; | |
196 | |
197 // MutexLock support for video locking. It is in this file to avoid copying | |
198 // between the NPAPI and PPAPI hookups. | |
199 extern void VideoGlobalLock(); | |
200 extern void VideoGlobalUnlock(); | |
201 | |
202 class VideoScopedGlobalLock { | |
203 public: | |
204 VideoScopedGlobalLock() { VideoGlobalLock(); } | |
205 ~VideoScopedGlobalLock() { VideoGlobalUnlock(); } | |
206 | |
207 private: | |
208 NACL_DISALLOW_COPY_AND_ASSIGN(VideoScopedGlobalLock); | |
209 }; | |
210 | |
211 } // namespace plugin | |
212 | |
213 #endif // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_PLUGIN_H_ | |
OLD | NEW |