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 26 struct PP_DecryptedBlockInfo; 27 struct PP_DecryptedFrameInfo; 28 29 namespace ppapi { 30 namespace proxy { 31 32 class SerializedVarReceiveInput; 33 class SerializedVarOutParam; 34 class SerializedVarReturnValue; 35 36 class 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 void NeedKey(PP_Instance instance, 118 PP_Var key_system, 119 PP_Var session_id, 120 PP_Var init_data) OVERRIDE; 121 virtual void KeyAdded(PP_Instance instance, 122 PP_Var key_system, 123 PP_Var session_id) OVERRIDE; 124 virtual void KeyMessage(PP_Instance instance, 125 PP_Var key_system, 126 PP_Var session_id, 127 PP_Var message, 128 PP_Var default_url) OVERRIDE; 129 virtual void KeyError(PP_Instance instance, 130 PP_Var key_system, 131 PP_Var 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(PP_Instance instance, 151 PP_Resource audio_frames, 152 const PP_DecryptedBlockInfo* block_info) OVERRIDE; 153 #endif // !defined(OS_NACL) 154 155 static const ApiID kApiID = API_ID_PPB_INSTANCE; 156 157 private: 158 // Plugin -> Host message handlers. 159 void OnHostMsgGetWindowObject(PP_Instance instance, 160 SerializedVarReturnValue result); 161 void OnHostMsgGetOwnerElementObject(PP_Instance instance, 162 SerializedVarReturnValue result); 163 void OnHostMsgBindGraphics(PP_Instance instance, 164 PP_Resource device); 165 void OnHostMsgIsFullFrame(PP_Instance instance, PP_Bool* result); 166 void OnHostMsgExecuteScript(PP_Instance instance, 167 SerializedVarReceiveInput script, 168 SerializedVarOutParam out_exception, 169 SerializedVarReturnValue result); 170 void OnHostMsgGetAudioHardwareOutputSampleRate(PP_Instance instance, 171 uint32_t *result); 172 void OnHostMsgGetAudioHardwareOutputBufferSize(PP_Instance instance, 173 uint32_t *result); 174 void OnHostMsgGetDefaultCharSet(PP_Instance instance, 175 SerializedVarReturnValue result); 176 void OnHostMsgSetFullscreen(PP_Instance instance, 177 PP_Bool fullscreen, 178 PP_Bool* result); 179 void OnHostMsgGetScreenSize(PP_Instance instance, 180 PP_Bool* result, 181 PP_Size* size); 182 void OnHostMsgRequestInputEvents(PP_Instance instance, 183 bool is_filtering, 184 uint32_t event_classes); 185 void OnHostMsgClearInputEvents(PP_Instance instance, 186 uint32_t event_classes); 187 void OnHostMsgPostMessage(PP_Instance instance, 188 SerializedVarReceiveInput message); 189 void OnHostMsgLockMouse(PP_Instance instance); 190 void OnHostMsgUnlockMouse(PP_Instance instance); 191 void OnHostMsgSetCursor(PP_Instance instance, 192 int32_t type, 193 const ppapi::HostResource& custom_image, 194 const PP_Point& hot_spot); 195 void OnHostMsgSetTextInputType(PP_Instance instance, PP_TextInput_Type type); 196 void OnHostMsgUpdateCaretPosition(PP_Instance instance, 197 const PP_Rect& caret, 198 const PP_Rect& bounding_box); 199 void OnHostMsgCancelCompositionText(PP_Instance instance); 200 void OnHostMsgUpdateSurroundingText( 201 PP_Instance instance, 202 const std::string& text, 203 uint32_t caret, 204 uint32_t anchor); 205 void OnHostMsgGetDocumentURL(PP_Instance instance, 206 PP_URLComponents_Dev* components, 207 SerializedVarReturnValue result); 208 209 #if !defined(OS_NACL) 210 void OnHostMsgResolveRelativeToDocument(PP_Instance instance, 211 SerializedVarReceiveInput relative, 212 SerializedVarReturnValue result); 213 void OnHostMsgDocumentCanRequest(PP_Instance instance, 214 SerializedVarReceiveInput url, 215 PP_Bool* result); 216 void OnHostMsgDocumentCanAccessDocument(PP_Instance active, 217 PP_Instance target, 218 PP_Bool* result); 219 void OnHostMsgGetPluginInstanceURL(PP_Instance instance, 220 SerializedVarReturnValue result); 221 virtual void OnHostMsgNeedKey(PP_Instance instance, 222 SerializedVarReceiveInput key_system, 223 SerializedVarReceiveInput session_id, 224 SerializedVarReceiveInput init_data); 225 virtual void OnHostMsgKeyAdded(PP_Instance instance, 226 SerializedVarReceiveInput key_system, 227 SerializedVarReceiveInput session_id); 228 virtual void OnHostMsgKeyMessage(PP_Instance instance, 229 SerializedVarReceiveInput key_system, 230 SerializedVarReceiveInput session_id, 231 SerializedVarReceiveInput message, 232 SerializedVarReceiveInput default_url); 233 virtual void OnHostMsgKeyError(PP_Instance instance, 234 SerializedVarReceiveInput key_system, 235 SerializedVarReceiveInput 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_block_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