ppb_instance_proxy.h revision 58537e28ecd584eab876aee8be7156509866d23a
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  static const Info* GetInfoPrivate();
43
44  // InterfaceProxy implementation.
45  virtual bool OnMessageReceived(const IPC::Message& msg);
46
47  // PPB_Instance_API implementation.
48  virtual PP_Bool BindGraphics(PP_Instance instance,
49                               PP_Resource device) OVERRIDE;
50  virtual PP_Bool IsFullFrame(PP_Instance instance) OVERRIDE;
51  virtual const ViewData* GetViewData(PP_Instance instance) OVERRIDE;
52  virtual PP_Bool FlashIsFullscreen(PP_Instance instance) OVERRIDE;
53  virtual PP_Var GetWindowObject(PP_Instance instance) OVERRIDE;
54  virtual PP_Var GetOwnerElementObject(PP_Instance instance) OVERRIDE;
55  virtual PP_Var ExecuteScript(PP_Instance instance,
56                               PP_Var script,
57                               PP_Var* exception) OVERRIDE;
58  virtual uint32_t GetAudioHardwareOutputSampleRate(PP_Instance instance)
59      OVERRIDE;
60  virtual uint32_t GetAudioHardwareOutputBufferSize(PP_Instance instance)
61      OVERRIDE;
62  virtual PP_Var GetDefaultCharSet(PP_Instance instance) OVERRIDE;
63  virtual void NumberOfFindResultsChanged(PP_Instance instance,
64                                          int32_t total,
65                                          PP_Bool final_result) OVERRIDE;
66  virtual void SelectedFindResultChanged(PP_Instance instance,
67                                         int32_t index) OVERRIDE;
68  virtual PP_Bool IsFullscreen(PP_Instance instance) OVERRIDE;
69  virtual PP_Bool SetFullscreen(PP_Instance instance,
70                                PP_Bool fullscreen) OVERRIDE;
71  virtual PP_Bool GetScreenSize(PP_Instance instance,
72                                PP_Size* size) OVERRIDE;
73  virtual Resource* GetSingletonResource(PP_Instance instance,
74                                         SingletonResourceID id) OVERRIDE;
75  virtual int32_t RequestInputEvents(PP_Instance instance,
76                                     uint32_t event_classes) OVERRIDE;
77  virtual int32_t RequestFilteringInputEvents(PP_Instance instance,
78                                              uint32_t event_classes) OVERRIDE;
79  virtual void ClearInputEventRequest(PP_Instance instance,
80                                      uint32_t event_classes) OVERRIDE;
81  virtual void ZoomChanged(PP_Instance instance, double factor) OVERRIDE;
82  virtual void ZoomLimitsChanged(PP_Instance instance,
83                                 double minimum_factor,
84                                 double maximium_factor) OVERRIDE;
85  virtual void PostMessage(PP_Instance instance, PP_Var message) OVERRIDE;
86  virtual PP_Bool SetCursor(PP_Instance instance,
87                            PP_MouseCursor_Type type,
88                            PP_Resource image,
89                            const PP_Point* hot_spot) OVERRIDE;
90  virtual int32_t LockMouse(PP_Instance instance,
91                            scoped_refptr<TrackedCallback> callback) OVERRIDE;
92  virtual void UnlockMouse(PP_Instance instance) OVERRIDE;
93  virtual void SetTextInputType(PP_Instance instance,
94                                PP_TextInput_Type type) OVERRIDE;
95  virtual void UpdateCaretPosition(PP_Instance instance,
96                                   const PP_Rect& caret,
97                                   const PP_Rect& bounding_box) OVERRIDE;
98  virtual void CancelCompositionText(PP_Instance instance) OVERRIDE;
99  virtual void SelectionChanged(PP_Instance instance) OVERRIDE;
100  virtual void UpdateSurroundingText(PP_Instance instance,
101                                     const char* text,
102                                     uint32_t caret,
103                                     uint32_t anchor) OVERRIDE;
104  virtual PP_Var GetDocumentURL(PP_Instance instance,
105                                PP_URLComponents_Dev* components) OVERRIDE;
106#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 NeedKey(PP_Instance instance,
121                       PP_Var key_system,
122                       PP_Var session_id,
123                       PP_Var init_data) OVERRIDE;
124  virtual void KeyAdded(PP_Instance instance,
125                        PP_Var key_system,
126                        PP_Var session_id) OVERRIDE;
127  virtual void KeyMessage(PP_Instance instance,
128                          PP_Var key_system,
129                          PP_Var session_id,
130                          PP_Var message,
131                          PP_Var default_url) OVERRIDE;
132  virtual void KeyError(PP_Instance instance,
133                        PP_Var key_system,
134                        PP_Var session_id,
135                        int32_t media_error,
136                        int32_t system_code) OVERRIDE;
137  virtual void DeliverBlock(PP_Instance instance,
138                            PP_Resource decrypted_block,
139                            const PP_DecryptedBlockInfo* block_info) OVERRIDE;
140  virtual void DecoderInitializeDone(PP_Instance instance,
141                                     PP_DecryptorStreamType decoder_type,
142                                     uint32_t request_id,
143                                     PP_Bool success) OVERRIDE;
144  virtual void DecoderDeinitializeDone(PP_Instance instance,
145                                       PP_DecryptorStreamType decoder_type,
146                                       uint32_t request_id) OVERRIDE;
147  virtual void DecoderResetDone(PP_Instance instance,
148                                PP_DecryptorStreamType decoder_type,
149                                uint32_t request_id) OVERRIDE;
150  virtual void DeliverFrame(PP_Instance instance,
151                            PP_Resource decrypted_frame,
152                            const PP_DecryptedFrameInfo* frame_info) OVERRIDE;
153  virtual void DeliverSamples(PP_Instance instance,
154                              PP_Resource audio_frames,
155                              const PP_DecryptedBlockInfo* block_info) OVERRIDE;
156#endif  // !defined(OS_NACL)
157
158  static const ApiID kApiID = API_ID_PPB_INSTANCE;
159
160 private:
161  // Plugin -> Host message handlers.
162  void OnHostMsgGetWindowObject(PP_Instance instance,
163                                SerializedVarReturnValue result);
164  void OnHostMsgGetOwnerElementObject(PP_Instance instance,
165                                      SerializedVarReturnValue result);
166  void OnHostMsgBindGraphics(PP_Instance instance,
167                             PP_Resource device);
168  void OnHostMsgIsFullFrame(PP_Instance instance, PP_Bool* result);
169  void OnHostMsgExecuteScript(PP_Instance instance,
170                              SerializedVarReceiveInput script,
171                              SerializedVarOutParam out_exception,
172                              SerializedVarReturnValue result);
173  void OnHostMsgGetAudioHardwareOutputSampleRate(PP_Instance instance,
174                                                 uint32_t *result);
175  void OnHostMsgGetAudioHardwareOutputBufferSize(PP_Instance instance,
176                                                 uint32_t *result);
177  void OnHostMsgGetDefaultCharSet(PP_Instance instance,
178                                  SerializedVarReturnValue result);
179  void OnHostMsgSetFullscreen(PP_Instance instance,
180                              PP_Bool fullscreen,
181                              PP_Bool* result);
182  void OnHostMsgGetScreenSize(PP_Instance instance,
183                              PP_Bool* result,
184                              PP_Size* size);
185  void OnHostMsgRequestInputEvents(PP_Instance instance,
186                                   bool is_filtering,
187                                   uint32_t event_classes);
188  void OnHostMsgClearInputEvents(PP_Instance instance,
189                                 uint32_t event_classes);
190  void OnHostMsgPostMessage(PP_Instance instance,
191                            SerializedVarReceiveInput message);
192  void OnHostMsgLockMouse(PP_Instance instance);
193  void OnHostMsgUnlockMouse(PP_Instance instance);
194  void OnHostMsgSetCursor(PP_Instance instance,
195                          int32_t type,
196                          const ppapi::HostResource& custom_image,
197                          const PP_Point& hot_spot);
198  void OnHostMsgSetTextInputType(PP_Instance instance, PP_TextInput_Type type);
199  void OnHostMsgUpdateCaretPosition(PP_Instance instance,
200                                    const PP_Rect& caret,
201                                    const PP_Rect& bounding_box);
202  void OnHostMsgCancelCompositionText(PP_Instance instance);
203  void OnHostMsgUpdateSurroundingText(
204      PP_Instance instance,
205      const std::string& text,
206      uint32_t caret,
207      uint32_t anchor);
208  void OnHostMsgGetDocumentURL(PP_Instance instance,
209                               PP_URLComponents_Dev* components,
210                               SerializedVarReturnValue result);
211
212#if !defined(OS_NACL)
213  void OnHostMsgResolveRelativeToDocument(PP_Instance instance,
214                                          SerializedVarReceiveInput relative,
215                                          SerializedVarReturnValue result);
216  void OnHostMsgDocumentCanRequest(PP_Instance instance,
217                                   SerializedVarReceiveInput url,
218                                   PP_Bool* result);
219  void OnHostMsgDocumentCanAccessDocument(PP_Instance active,
220                                          PP_Instance target,
221                                          PP_Bool* result);
222  void OnHostMsgGetPluginInstanceURL(PP_Instance instance,
223                                     SerializedVarReturnValue result);
224  void OnHostMsgGetPluginReferrerURL(PP_Instance instance,
225                                     SerializedVarReturnValue result);
226  virtual void OnHostMsgNeedKey(PP_Instance instance,
227                                SerializedVarReceiveInput key_system,
228                                SerializedVarReceiveInput session_id,
229                                SerializedVarReceiveInput init_data);
230  virtual void OnHostMsgKeyAdded(PP_Instance instance,
231                                 SerializedVarReceiveInput key_system,
232                                 SerializedVarReceiveInput session_id);
233  virtual void OnHostMsgKeyMessage(PP_Instance instance,
234                                   SerializedVarReceiveInput key_system,
235                                   SerializedVarReceiveInput session_id,
236                                   SerializedVarReceiveInput message,
237                                   SerializedVarReceiveInput default_url);
238  virtual void OnHostMsgKeyError(PP_Instance instance,
239                                 SerializedVarReceiveInput key_system,
240                                 SerializedVarReceiveInput session_id,
241                                 int32_t media_error,
242                                 int32_t system_code);
243  virtual void OnHostMsgDecoderInitializeDone(
244      PP_Instance instance,
245      PP_DecryptorStreamType decoder_type,
246      uint32_t request_id,
247      PP_Bool success);
248  virtual void OnHostMsgDecoderDeinitializeDone(
249      PP_Instance instance,
250      PP_DecryptorStreamType decoder_type,
251      uint32_t request_id);
252  virtual void OnHostMsgDecoderResetDone(PP_Instance instance,
253                                         PP_DecryptorStreamType decoder_type,
254                                         uint32_t request_id);
255  virtual void OnHostMsgDeliverBlock(PP_Instance instance,
256                                     PP_Resource decrypted_block,
257                                     const std::string& serialized_block_info);
258  virtual void OnHostMsgDeliverFrame(PP_Instance instance,
259                                     PP_Resource decrypted_frame,
260                                     const std::string& serialized_block_info);
261  virtual void OnHostMsgDeliverSamples(
262      PP_Instance instance,
263      PP_Resource audio_frames,
264      const std::string& serialized_block_info);
265#endif  // !defined(OS_NACL)
266
267  // Host -> Plugin message handlers.
268  void OnPluginMsgMouseLockComplete(PP_Instance instance, int32_t result);
269
270  void MouseLockCompleteInHost(int32_t result, PP_Instance instance);
271
272  // Other helpers.
273  void CancelAnyPendingRequestSurroundingText(PP_Instance instance);
274
275  ProxyCompletionCallbackFactory<PPB_Instance_Proxy> callback_factory_;
276};
277
278}  // namespace proxy
279}  // namespace ppapi
280
281#endif  // PPAPI_PROXY_PPB_INSTANCE_PROXY_H_
282