ppb_instance_proxy.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright (c) 2012 The Chromium Authors. 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 PPAPI_PROXY_PPB_INSTANCE_PROXY_H_
6#define PPAPI_PROXY_PPB_INSTANCE_PROXY_H_
7
8#include <string>
9
10#include "ppapi/c/pp_instance.h"
11#include "ppapi/c/pp_resource.h"
12#include "ppapi/c/pp_var.h"
13#include "ppapi/proxy/interface_proxy.h"
14#include "ppapi/proxy/proxy_completion_callback_factory.h"
15#include "ppapi/shared_impl/host_resource.h"
16#include "ppapi/shared_impl/ppb_instance_shared.h"
17#include "ppapi/shared_impl/singleton_resource_id.h"
18#include "ppapi/thunk/ppb_instance_api.h"
19#include "ppapi/utility/completion_callback_factory.h"
20
21// Windows headers interfere with this file.
22#ifdef PostMessage
23#undef PostMessage
24#endif
25
26struct PP_DecryptedBlockInfo;
27struct PP_DecryptedFrameInfo;
28
29namespace ppapi {
30namespace proxy {
31
32class SerializedVarReceiveInput;
33class SerializedVarOutParam;
34class SerializedVarReturnValue;
35
36class PPB_Instance_Proxy : public InterfaceProxy,
37                           public PPB_Instance_Shared {
38 public:
39  PPB_Instance_Proxy(Dispatcher* dispatcher);
40  virtual ~PPB_Instance_Proxy();
41
42  // InterfaceProxy implementation.
43  virtual bool OnMessageReceived(const IPC::Message& msg);
44
45  // PPB_Instance_API implementation.
46  virtual PP_Bool BindGraphics(PP_Instance instance,
47                               PP_Resource device) OVERRIDE;
48  virtual PP_Bool IsFullFrame(PP_Instance instance) OVERRIDE;
49  virtual const ViewData* GetViewData(PP_Instance instance) OVERRIDE;
50  virtual PP_Bool FlashIsFullscreen(PP_Instance instance) OVERRIDE;
51  virtual PP_Var GetWindowObject(PP_Instance instance) OVERRIDE;
52  virtual PP_Var GetOwnerElementObject(PP_Instance instance) OVERRIDE;
53  virtual PP_Var ExecuteScript(PP_Instance instance,
54                               PP_Var script,
55                               PP_Var* exception) OVERRIDE;
56  virtual uint32_t GetAudioHardwareOutputSampleRate(PP_Instance instance)
57      OVERRIDE;
58  virtual uint32_t GetAudioHardwareOutputBufferSize(PP_Instance instance)
59      OVERRIDE;
60  virtual PP_Var GetDefaultCharSet(PP_Instance instance) OVERRIDE;
61  virtual void NumberOfFindResultsChanged(PP_Instance instance,
62                                          int32_t total,
63                                          PP_Bool final_result) OVERRIDE;
64  virtual void SelectedFindResultChanged(PP_Instance instance,
65                                         int32_t index) OVERRIDE;
66  virtual PP_Bool IsFullscreen(PP_Instance instance) OVERRIDE;
67  virtual PP_Bool SetFullscreen(PP_Instance instance,
68                                PP_Bool fullscreen) OVERRIDE;
69  virtual PP_Bool GetScreenSize(PP_Instance instance,
70                                PP_Size* size) OVERRIDE;
71  virtual Resource* GetSingletonResource(PP_Instance instance,
72                                         SingletonResourceID id) OVERRIDE;
73  virtual int32_t RequestInputEvents(PP_Instance instance,
74                                     uint32_t event_classes) OVERRIDE;
75  virtual int32_t RequestFilteringInputEvents(PP_Instance instance,
76                                              uint32_t event_classes) OVERRIDE;
77  virtual void ClearInputEventRequest(PP_Instance instance,
78                                      uint32_t event_classes) OVERRIDE;
79  virtual void ZoomChanged(PP_Instance instance, double factor) OVERRIDE;
80  virtual void ZoomLimitsChanged(PP_Instance instance,
81                                 double minimum_factor,
82                                 double maximium_factor) OVERRIDE;
83  virtual void PostMessage(PP_Instance instance, PP_Var message) OVERRIDE;
84  virtual PP_Bool SetCursor(PP_Instance instance,
85                            PP_MouseCursor_Type type,
86                            PP_Resource image,
87                            const PP_Point* hot_spot) OVERRIDE;
88  virtual int32_t LockMouse(PP_Instance instance,
89                            scoped_refptr<TrackedCallback> callback) OVERRIDE;
90  virtual void UnlockMouse(PP_Instance instance) OVERRIDE;
91  virtual void SetTextInputType(PP_Instance instance,
92                                PP_TextInput_Type type) OVERRIDE;
93  virtual void UpdateCaretPosition(PP_Instance instance,
94                                   const PP_Rect& caret,
95                                   const PP_Rect& bounding_box) OVERRIDE;
96  virtual void CancelCompositionText(PP_Instance instance) OVERRIDE;
97  virtual void SelectionChanged(PP_Instance instance) OVERRIDE;
98  virtual void UpdateSurroundingText(PP_Instance instance,
99                                     const char* text,
100                                     uint32_t caret,
101                                     uint32_t anchor) OVERRIDE;
102  virtual PP_Var GetDocumentURL(PP_Instance instance,
103                                PP_URLComponents_Dev* components) OVERRIDE;
104#if !defined(OS_NACL)
105  virtual PP_Var ResolveRelativeToDocument(
106      PP_Instance instance,
107      PP_Var relative,
108      PP_URLComponents_Dev* components) OVERRIDE;
109  virtual PP_Bool DocumentCanRequest(PP_Instance instance, PP_Var url) OVERRIDE;
110  virtual PP_Bool DocumentCanAccessDocument(PP_Instance instance,
111                                            PP_Instance target) OVERRIDE;
112  virtual PP_Var GetPluginInstanceURL(
113      PP_Instance instance,
114      PP_URLComponents_Dev* components) OVERRIDE;
115  virtual PP_Var GetPluginReferrerURL(
116      PP_Instance instance,
117      PP_URLComponents_Dev* components) OVERRIDE;
118  virtual void SessionCreated(PP_Instance instance,
119                              uint32_t session_id,
120                              PP_Var web_session_id) OVERRIDE;
121  virtual void SessionMessage(PP_Instance instance,
122                              uint32_t session_id,
123                              PP_Var message,
124                              PP_Var destination_url) OVERRIDE;
125  virtual void SessionReady(PP_Instance instance, uint32_t session_id) OVERRIDE;
126  virtual void SessionClosed(PP_Instance instance,
127                             uint32_t session_id) OVERRIDE;
128  virtual void SessionError(PP_Instance instance,
129                            uint32_t session_id,
130                            int32_t media_error,
131                            int32_t system_code) OVERRIDE;
132  virtual void DeliverBlock(PP_Instance instance,
133                            PP_Resource decrypted_block,
134                            const PP_DecryptedBlockInfo* block_info) OVERRIDE;
135  virtual void DecoderInitializeDone(PP_Instance instance,
136                                     PP_DecryptorStreamType decoder_type,
137                                     uint32_t request_id,
138                                     PP_Bool success) OVERRIDE;
139  virtual void DecoderDeinitializeDone(PP_Instance instance,
140                                       PP_DecryptorStreamType decoder_type,
141                                       uint32_t request_id) OVERRIDE;
142  virtual void DecoderResetDone(PP_Instance instance,
143                                PP_DecryptorStreamType decoder_type,
144                                uint32_t request_id) OVERRIDE;
145  virtual void DeliverFrame(PP_Instance instance,
146                            PP_Resource decrypted_frame,
147                            const PP_DecryptedFrameInfo* frame_info) OVERRIDE;
148  virtual void DeliverSamples(
149      PP_Instance instance,
150      PP_Resource audio_frames,
151      const PP_DecryptedSampleInfo* sample_info) OVERRIDE;
152#endif  // !defined(OS_NACL)
153
154  static const ApiID kApiID = API_ID_PPB_INSTANCE;
155
156 private:
157  // Plugin -> Host message handlers.
158  void OnHostMsgGetWindowObject(PP_Instance instance,
159                                SerializedVarReturnValue result);
160  void OnHostMsgGetOwnerElementObject(PP_Instance instance,
161                                      SerializedVarReturnValue result);
162  void OnHostMsgBindGraphics(PP_Instance instance,
163                             PP_Resource device);
164  void OnHostMsgIsFullFrame(PP_Instance instance, PP_Bool* result);
165  void OnHostMsgExecuteScript(PP_Instance instance,
166                              SerializedVarReceiveInput script,
167                              SerializedVarOutParam out_exception,
168                              SerializedVarReturnValue result);
169  void OnHostMsgGetAudioHardwareOutputSampleRate(PP_Instance instance,
170                                                 uint32_t *result);
171  void OnHostMsgGetAudioHardwareOutputBufferSize(PP_Instance instance,
172                                                 uint32_t *result);
173  void OnHostMsgGetDefaultCharSet(PP_Instance instance,
174                                  SerializedVarReturnValue result);
175  void OnHostMsgSetFullscreen(PP_Instance instance,
176                              PP_Bool fullscreen,
177                              PP_Bool* result);
178  void OnHostMsgGetScreenSize(PP_Instance instance,
179                              PP_Bool* result,
180                              PP_Size* size);
181  void OnHostMsgRequestInputEvents(PP_Instance instance,
182                                   bool is_filtering,
183                                   uint32_t event_classes);
184  void OnHostMsgClearInputEvents(PP_Instance instance,
185                                 uint32_t event_classes);
186  void OnHostMsgPostMessage(PP_Instance instance,
187                            SerializedVarReceiveInput message);
188  void OnHostMsgLockMouse(PP_Instance instance);
189  void OnHostMsgUnlockMouse(PP_Instance instance);
190  void OnHostMsgSetCursor(PP_Instance instance,
191                          int32_t type,
192                          const ppapi::HostResource& custom_image,
193                          const PP_Point& hot_spot);
194  void OnHostMsgSetTextInputType(PP_Instance instance, PP_TextInput_Type type);
195  void OnHostMsgUpdateCaretPosition(PP_Instance instance,
196                                    const PP_Rect& caret,
197                                    const PP_Rect& bounding_box);
198  void OnHostMsgCancelCompositionText(PP_Instance instance);
199  void OnHostMsgUpdateSurroundingText(
200      PP_Instance instance,
201      const std::string& text,
202      uint32_t caret,
203      uint32_t anchor);
204  void OnHostMsgGetDocumentURL(PP_Instance instance,
205                               PP_URLComponents_Dev* components,
206                               SerializedVarReturnValue result);
207
208#if !defined(OS_NACL)
209  void OnHostMsgResolveRelativeToDocument(PP_Instance instance,
210                                          SerializedVarReceiveInput relative,
211                                          SerializedVarReturnValue result);
212  void OnHostMsgDocumentCanRequest(PP_Instance instance,
213                                   SerializedVarReceiveInput url,
214                                   PP_Bool* result);
215  void OnHostMsgDocumentCanAccessDocument(PP_Instance active,
216                                          PP_Instance target,
217                                          PP_Bool* result);
218  void OnHostMsgGetPluginInstanceURL(PP_Instance instance,
219                                     SerializedVarReturnValue result);
220  void OnHostMsgGetPluginReferrerURL(PP_Instance instance,
221                                     SerializedVarReturnValue result);
222  virtual void OnHostMsgSessionCreated(
223      PP_Instance instance,
224      uint32_t session_id,
225      SerializedVarReceiveInput web_session_id);
226  virtual void OnHostMsgSessionMessage(
227      PP_Instance instance,
228      uint32_t session_id,
229      SerializedVarReceiveInput message,
230      SerializedVarReceiveInput destination_url);
231  virtual void OnHostMsgSessionReady(PP_Instance instance, uint32_t session_id);
232  virtual void OnHostMsgSessionClosed(PP_Instance instance,
233                                      uint32_t session_id);
234  virtual void OnHostMsgSessionError(PP_Instance instance,
235                                     uint32_t session_id,
236                                     int32_t media_error,
237                                     int32_t system_code);
238  virtual void OnHostMsgDecoderInitializeDone(
239      PP_Instance instance,
240      PP_DecryptorStreamType decoder_type,
241      uint32_t request_id,
242      PP_Bool success);
243  virtual void OnHostMsgDecoderDeinitializeDone(
244      PP_Instance instance,
245      PP_DecryptorStreamType decoder_type,
246      uint32_t request_id);
247  virtual void OnHostMsgDecoderResetDone(PP_Instance instance,
248                                         PP_DecryptorStreamType decoder_type,
249                                         uint32_t request_id);
250  virtual void OnHostMsgDeliverBlock(PP_Instance instance,
251                                     PP_Resource decrypted_block,
252                                     const std::string& serialized_block_info);
253  virtual void OnHostMsgDeliverFrame(PP_Instance instance,
254                                     PP_Resource decrypted_frame,
255                                     const std::string& serialized_block_info);
256  virtual void OnHostMsgDeliverSamples(
257      PP_Instance instance,
258      PP_Resource audio_frames,
259      const std::string& serialized_sample_info);
260#endif  // !defined(OS_NACL)
261
262  // Host -> Plugin message handlers.
263  void OnPluginMsgMouseLockComplete(PP_Instance instance, int32_t result);
264
265  void MouseLockCompleteInHost(int32_t result, PP_Instance instance);
266
267  // Other helpers.
268  void CancelAnyPendingRequestSurroundingText(PP_Instance instance);
269
270  ProxyCompletionCallbackFactory<PPB_Instance_Proxy> callback_factory_;
271};
272
273}  // namespace proxy
274}  // namespace ppapi
275
276#endif  // PPAPI_PROXY_PPB_INSTANCE_PROXY_H_
277