1d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// Use of this source code is governed by a BSD-style license that can be
3d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// found in the LICENSE file.
4d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner
5d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#ifndef PPAPI_PROXY_PPB_INSTANCE_PROXY_H_
6d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#define PPAPI_PROXY_PPB_INSTANCE_PROXY_H_
7d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner
8d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#include <string>
9d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner
10d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#include "ppapi/c/pp_instance.h"
11d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#include "ppapi/c/pp_resource.h"
12d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#include "ppapi/c/pp_var.h"
13d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#include "ppapi/proxy/interface_proxy.h"
14d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#include "ppapi/proxy/proxy_completion_callback_factory.h"
15d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#include "ppapi/shared_impl/host_resource.h"
16d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#include "ppapi/shared_impl/ppb_instance_shared.h"
17d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#include "ppapi/shared_impl/singleton_resource_id.h"
18d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#include "ppapi/thunk/ppb_instance_api.h"
19d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#include "ppapi/utility/completion_callback_factory.h"
20d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner
21d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// Windows headers interfere with this file.
22d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#ifdef PostMessage
23d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#undef PostMessage
240ba2bcfcc3149a25d08aa8aa00fb6c34a4e25bddDan Gohman#endif
25d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner
26d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattnerstruct PP_DecryptedBlockInfo;
27d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattnerstruct PP_DecryptedFrameInfo;
28d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner
29d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattnernamespace ppapi {
30d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattnernamespace proxy {
310eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov
32d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattnerclass SerializedVarReceiveInput;
330eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikovclass SerializedVarOutParam;
34d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattnerclass SerializedVarReturnValue;
35d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner
360eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikovclass PPB_Instance_Proxy : public InterfaceProxy,
37d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner                           public PPB_Instance_Shared {
38db486a6d5311944f61b92db9f6074944dbbdb242Chris Lattner public:
39db486a6d5311944f61b92db9f6074944dbbdb242Chris Lattner  PPB_Instance_Proxy(Dispatcher* dispatcher);
40d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner  virtual ~PPB_Instance_Proxy();
41d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner
420eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov  static const Info* GetInfoPrivate();
43d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner
44d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner  // InterfaceProxy implementation.
45d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner  virtual bool OnMessageReceived(const IPC::Message& msg);
46d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner
47475871a144eb604ddaf37503397ba0941442e5fbDan Gohman  // PPB_Instance_API implementation.
480eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov  virtual PP_Bool BindGraphics(PP_Instance instance,
49d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner                               PP_Resource device) OVERRIDE;
500eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov  virtual PP_Bool IsFullFrame(PP_Instance instance) OVERRIDE;
510eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov  virtual const ViewData* GetViewData(PP_Instance instance) OVERRIDE;
520eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov  virtual PP_Bool FlashIsFullscreen(PP_Instance instance) OVERRIDE;
53d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner  virtual PP_Var GetWindowObject(PP_Instance instance) OVERRIDE;
54475871a144eb604ddaf37503397ba0941442e5fbDan Gohman  virtual PP_Var GetOwnerElementObject(PP_Instance instance) OVERRIDE;
55d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner  virtual PP_Var ExecuteScript(PP_Instance instance,
560eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov                               PP_Var script,
57d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner                               PP_Var* exception) OVERRIDE;
58d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner  virtual uint32_t GetAudioHardwareOutputSampleRate(PP_Instance instance)
59d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner      OVERRIDE;
600eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov  virtual uint32_t GetAudioHardwareOutputBufferSize(PP_Instance instance)
61d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner      OVERRIDE;
621fdbc1dd4e9cb42c79a30e8dc308c322e923cc52Dan Gohman  virtual PP_Var GetDefaultCharSet(PP_Instance instance) OVERRIDE;
630eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov  virtual void NumberOfFindResultsChanged(PP_Instance instance,
64d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner                                          int32_t total,
650eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov                                          PP_Bool final_result) OVERRIDE;
660eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov  virtual void SelectedFindResultChanged(PP_Instance instance,
670eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov                                         int32_t index) OVERRIDE;
68e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson  virtual PP_Bool IsFullscreen(PP_Instance instance) OVERRIDE;
690eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov  virtual PP_Bool SetFullscreen(PP_Instance instance,
700eefda1335f5e86f95dbb58352321a43237e1089Anton Korobeynikov                                PP_Bool fullscreen) OVERRIDE;
71e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson  virtual PP_Bool GetScreenSize(PP_Instance instance,
726520e20e4fb31f2e65e25c38b372b19d33a83df4Dan Gohman                                PP_Size* size) OVERRIDE;
736520e20e4fb31f2e65e25c38b372b19d33a83df4Dan Gohman  virtual Resource* GetSingletonResource(PP_Instance instance,
7420c568f366be211323eeaf0e45ef053278ec9ddcBill Wendling                                         SingletonResourceID id) OVERRIDE;
75b4202b84d7e54efe5e144885c7da63e6cc465f80Bill Wendling  virtual int32_t RequestInputEvents(PP_Instance instance,
7620c568f366be211323eeaf0e45ef053278ec9ddcBill Wendling                                     uint32_t event_classes) OVERRIDE;
7798ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman  virtual int32_t RequestFilteringInputEvents(PP_Instance instance,
7898ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman                                              uint32_t event_classes) OVERRIDE;
7998ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman  virtual void ClearInputEventRequest(PP_Instance instance,
8065c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel                                      uint32_t event_classes) OVERRIDE;
8198ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman  virtual void ZoomChanged(PP_Instance instance, double factor) OVERRIDE;
8298ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman  virtual void ZoomLimitsChanged(PP_Instance instance,
8398ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman                                 double minimum_factor,
8498ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman                                 double maximium_factor) OVERRIDE;
8598ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman  virtual void PostMessage(PP_Instance instance, PP_Var message) OVERRIDE;
8698ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman  virtual PP_Bool SetCursor(PP_Instance instance,
8798ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman                            PP_MouseCursor_Type type,
8865c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel                            PP_Resource image,
8998ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman                            const PP_Point* hot_spot) OVERRIDE;
9098ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman  virtual int32_t LockMouse(PP_Instance instance,
9198ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman                            scoped_refptr<TrackedCallback> callback) OVERRIDE;
9298ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman  virtual void UnlockMouse(PP_Instance instance) OVERRIDE;
9398ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman  virtual void SetTextInputType(PP_Instance instance,
9498ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman                                PP_TextInput_Type type) OVERRIDE;
9598ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman  virtual void UpdateCaretPosition(PP_Instance instance,
9698ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman                                   const PP_Rect& caret,
9765c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel                                   const PP_Rect& bounding_box) OVERRIDE;
9898ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman  virtual void CancelCompositionText(PP_Instance instance) OVERRIDE;
9998ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman  virtual void SelectionChanged(PP_Instance instance) OVERRIDE;
100db486a6d5311944f61b92db9f6074944dbbdb242Chris Lattner  virtual void UpdateSurroundingText(PP_Instance instance,
101db486a6d5311944f61b92db9f6074944dbbdb242Chris Lattner                                     const char* text,
102db486a6d5311944f61b92db9f6074944dbbdb242Chris Lattner                                     uint32_t caret,
103d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner                                     uint32_t anchor) OVERRIDE;
104d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner  virtual PP_Var GetDocumentURL(PP_Instance instance,
105d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner                                PP_URLComponents_Dev* components) OVERRIDE;
106d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#if !defined(OS_NACL)
107  virtual PP_Var ResolveRelativeToDocument(
108      PP_Instance instance,
109      PP_Var relative,
110      PP_URLComponents_Dev* components) OVERRIDE;
111  virtual PP_Bool DocumentCanRequest(PP_Instance instance, PP_Var url) OVERRIDE;
112  virtual PP_Bool DocumentCanAccessDocument(PP_Instance instance,
113                                            PP_Instance target) OVERRIDE;
114  virtual PP_Var GetPluginInstanceURL(
115      PP_Instance instance,
116      PP_URLComponents_Dev* components) OVERRIDE;
117  virtual PP_Var GetPluginReferrerURL(
118      PP_Instance instance,
119      PP_URLComponents_Dev* components) OVERRIDE;
120  virtual void SessionCreated(PP_Instance instance,
121                              uint32_t session_id,
122                              PP_Var web_session_id) OVERRIDE;
123  virtual void SessionMessage(PP_Instance instance,
124                              uint32_t session_id,
125                              PP_Var message,
126                              PP_Var destination_url) OVERRIDE;
127  virtual void SessionReady(PP_Instance instance, uint32_t session_id) OVERRIDE;
128  virtual void SessionClosed(PP_Instance instance,
129                             uint32_t session_id) OVERRIDE;
130  virtual void SessionError(PP_Instance instance,
131                            uint32_t session_id,
132                            int32_t media_error,
133                            int32_t system_code) OVERRIDE;
134  virtual void DeliverBlock(PP_Instance instance,
135                            PP_Resource decrypted_block,
136                            const PP_DecryptedBlockInfo* block_info) OVERRIDE;
137  virtual void DecoderInitializeDone(PP_Instance instance,
138                                     PP_DecryptorStreamType decoder_type,
139                                     uint32_t request_id,
140                                     PP_Bool success) OVERRIDE;
141  virtual void DecoderDeinitializeDone(PP_Instance instance,
142                                       PP_DecryptorStreamType decoder_type,
143                                       uint32_t request_id) OVERRIDE;
144  virtual void DecoderResetDone(PP_Instance instance,
145                                PP_DecryptorStreamType decoder_type,
146                                uint32_t request_id) OVERRIDE;
147  virtual void DeliverFrame(PP_Instance instance,
148                            PP_Resource decrypted_frame,
149                            const PP_DecryptedFrameInfo* frame_info) OVERRIDE;
150  virtual void DeliverSamples(
151      PP_Instance instance,
152      PP_Resource audio_frames,
153      const PP_DecryptedSampleInfo* sample_info) OVERRIDE;
154#endif  // !defined(OS_NACL)
155
156  static const ApiID kApiID = API_ID_PPB_INSTANCE;
157
158 private:
159  // Plugin -> Host message handlers.
160  void OnHostMsgGetWindowObject(PP_Instance instance,
161                                SerializedVarReturnValue result);
162  void OnHostMsgGetOwnerElementObject(PP_Instance instance,
163                                      SerializedVarReturnValue result);
164  void OnHostMsgBindGraphics(PP_Instance instance,
165                             PP_Resource device);
166  void OnHostMsgIsFullFrame(PP_Instance instance, PP_Bool* result);
167  void OnHostMsgExecuteScript(PP_Instance instance,
168                              SerializedVarReceiveInput script,
169                              SerializedVarOutParam out_exception,
170                              SerializedVarReturnValue result);
171  void OnHostMsgGetAudioHardwareOutputSampleRate(PP_Instance instance,
172                                                 uint32_t *result);
173  void OnHostMsgGetAudioHardwareOutputBufferSize(PP_Instance instance,
174                                                 uint32_t *result);
175  void OnHostMsgGetDefaultCharSet(PP_Instance instance,
176                                  SerializedVarReturnValue result);
177  void OnHostMsgSetFullscreen(PP_Instance instance,
178                              PP_Bool fullscreen,
179                              PP_Bool* result);
180  void OnHostMsgGetScreenSize(PP_Instance instance,
181                              PP_Bool* result,
182                              PP_Size* size);
183  void OnHostMsgRequestInputEvents(PP_Instance instance,
184                                   bool is_filtering,
185                                   uint32_t event_classes);
186  void OnHostMsgClearInputEvents(PP_Instance instance,
187                                 uint32_t event_classes);
188  void OnHostMsgPostMessage(PP_Instance instance,
189                            SerializedVarReceiveInput message);
190  void OnHostMsgLockMouse(PP_Instance instance);
191  void OnHostMsgUnlockMouse(PP_Instance instance);
192  void OnHostMsgSetCursor(PP_Instance instance,
193                          int32_t type,
194                          const ppapi::HostResource& custom_image,
195                          const PP_Point& hot_spot);
196  void OnHostMsgSetTextInputType(PP_Instance instance, PP_TextInput_Type type);
197  void OnHostMsgUpdateCaretPosition(PP_Instance instance,
198                                    const PP_Rect& caret,
199                                    const PP_Rect& bounding_box);
200  void OnHostMsgCancelCompositionText(PP_Instance instance);
201  void OnHostMsgUpdateSurroundingText(
202      PP_Instance instance,
203      const std::string& text,
204      uint32_t caret,
205      uint32_t anchor);
206  void OnHostMsgGetDocumentURL(PP_Instance instance,
207                               PP_URLComponents_Dev* components,
208                               SerializedVarReturnValue result);
209
210#if !defined(OS_NACL)
211  void OnHostMsgResolveRelativeToDocument(PP_Instance instance,
212                                          SerializedVarReceiveInput relative,
213                                          SerializedVarReturnValue result);
214  void OnHostMsgDocumentCanRequest(PP_Instance instance,
215                                   SerializedVarReceiveInput url,
216                                   PP_Bool* result);
217  void OnHostMsgDocumentCanAccessDocument(PP_Instance active,
218                                          PP_Instance target,
219                                          PP_Bool* result);
220  void OnHostMsgGetPluginInstanceURL(PP_Instance instance,
221                                     SerializedVarReturnValue result);
222  void OnHostMsgGetPluginReferrerURL(PP_Instance instance,
223                                     SerializedVarReturnValue result);
224  virtual void OnHostMsgSessionCreated(
225      PP_Instance instance,
226      uint32_t session_id,
227      SerializedVarReceiveInput web_session_id);
228  virtual void OnHostMsgSessionMessage(
229      PP_Instance instance,
230      uint32_t session_id,
231      SerializedVarReceiveInput message,
232      SerializedVarReceiveInput destination_url);
233  virtual void OnHostMsgSessionReady(PP_Instance instance, uint32_t session_id);
234  virtual void OnHostMsgSessionClosed(PP_Instance instance,
235                                      uint32_t session_id);
236  virtual void OnHostMsgSessionError(PP_Instance instance,
237                                     uint32_t session_id,
238                                     int32_t media_error,
239                                     int32_t system_code);
240  virtual void OnHostMsgDecoderInitializeDone(
241      PP_Instance instance,
242      PP_DecryptorStreamType decoder_type,
243      uint32_t request_id,
244      PP_Bool success);
245  virtual void OnHostMsgDecoderDeinitializeDone(
246      PP_Instance instance,
247      PP_DecryptorStreamType decoder_type,
248      uint32_t request_id);
249  virtual void OnHostMsgDecoderResetDone(PP_Instance instance,
250                                         PP_DecryptorStreamType decoder_type,
251                                         uint32_t request_id);
252  virtual void OnHostMsgDeliverBlock(PP_Instance instance,
253                                     PP_Resource decrypted_block,
254                                     const std::string& serialized_block_info);
255  virtual void OnHostMsgDeliverFrame(PP_Instance instance,
256                                     PP_Resource decrypted_frame,
257                                     const std::string& serialized_block_info);
258  virtual void OnHostMsgDeliverSamples(
259      PP_Instance instance,
260      PP_Resource audio_frames,
261      const std::string& serialized_sample_info);
262#endif  // !defined(OS_NACL)
263
264  // Host -> Plugin message handlers.
265  void OnPluginMsgMouseLockComplete(PP_Instance instance, int32_t result);
266
267  void MouseLockCompleteInHost(int32_t result, PP_Instance instance);
268
269  // Other helpers.
270  void CancelAnyPendingRequestSurroundingText(PP_Instance instance);
271
272  ProxyCompletionCallbackFactory<PPB_Instance_Proxy> callback_factory_;
273};
274
275}  // namespace proxy
276}  // namespace ppapi
277
278#endif  // PPAPI_PROXY_PPB_INSTANCE_PROXY_H_
279