Home | History | Annotate | Download | only in proxy
      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 #include <vector>
     10 
     11 #include "ppapi/c/pp_instance.h"
     12 #include "ppapi/c/pp_resource.h"
     13 #include "ppapi/c/pp_var.h"
     14 #include "ppapi/proxy/interface_proxy.h"
     15 #include "ppapi/proxy/proxy_completion_callback_factory.h"
     16 #include "ppapi/shared_impl/host_resource.h"
     17 #include "ppapi/shared_impl/ppb_instance_shared.h"
     18 #include "ppapi/shared_impl/singleton_resource_id.h"
     19 #include "ppapi/thunk/ppb_instance_api.h"
     20 #include "ppapi/utility/completion_callback_factory.h"
     21 
     22 // Windows headers interfere with this file.
     23 #ifdef PostMessage
     24 #undef PostMessage
     25 #endif
     26 
     27 struct PP_DecryptedBlockInfo;
     28 struct PP_DecryptedFrameInfo;
     29 
     30 namespace ppapi {
     31 namespace proxy {
     32 
     33 class SerializedVarReceiveInput;
     34 class SerializedVarOutParam;
     35 class SerializedVarReturnValue;
     36 
     37 class PPB_Instance_Proxy : public InterfaceProxy,
     38                            public PPB_Instance_Shared {
     39  public:
     40   PPB_Instance_Proxy(Dispatcher* dispatcher);
     41   virtual ~PPB_Instance_Proxy();
     42 
     43   // InterfaceProxy implementation.
     44   virtual bool OnMessageReceived(const IPC::Message& msg);
     45 
     46   // PPB_Instance_API implementation.
     47   virtual PP_Bool BindGraphics(PP_Instance instance,
     48                                PP_Resource device) OVERRIDE;
     49   virtual PP_Bool IsFullFrame(PP_Instance instance) OVERRIDE;
     50   virtual const ViewData* GetViewData(PP_Instance instance) OVERRIDE;
     51   virtual PP_Bool FlashIsFullscreen(PP_Instance instance) OVERRIDE;
     52   virtual PP_Var GetWindowObject(PP_Instance instance) OVERRIDE;
     53   virtual PP_Var GetOwnerElementObject(PP_Instance instance) OVERRIDE;
     54   virtual PP_Var ExecuteScript(PP_Instance instance,
     55                                PP_Var script,
     56                                PP_Var* exception) OVERRIDE;
     57   virtual uint32_t GetAudioHardwareOutputSampleRate(PP_Instance instance)
     58       OVERRIDE;
     59   virtual uint32_t GetAudioHardwareOutputBufferSize(PP_Instance instance)
     60       OVERRIDE;
     61   virtual PP_Var GetDefaultCharSet(PP_Instance instance) OVERRIDE;
     62   virtual void SetPluginToHandleFindRequests(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 void SetTickmarks(PP_Instance instance,
     69                             const PP_Rect* tickmarks,
     70                             uint32_t count) OVERRIDE;
     71   virtual PP_Bool IsFullscreen(PP_Instance instance) OVERRIDE;
     72   virtual PP_Bool SetFullscreen(PP_Instance instance,
     73                                 PP_Bool fullscreen) OVERRIDE;
     74   virtual PP_Bool GetScreenSize(PP_Instance instance,
     75                                 PP_Size* size) OVERRIDE;
     76   virtual Resource* GetSingletonResource(PP_Instance instance,
     77                                          SingletonResourceID id) OVERRIDE;
     78   virtual int32_t RequestInputEvents(PP_Instance instance,
     79                                      uint32_t event_classes) OVERRIDE;
     80   virtual int32_t RequestFilteringInputEvents(PP_Instance instance,
     81                                               uint32_t event_classes) OVERRIDE;
     82   virtual void StartTrackingLatency(PP_Instance instance) OVERRIDE;
     83   virtual void ClearInputEventRequest(PP_Instance instance,
     84                                       uint32_t event_classes) OVERRIDE;
     85   virtual void ZoomChanged(PP_Instance instance, double factor) OVERRIDE;
     86   virtual void ZoomLimitsChanged(PP_Instance instance,
     87                                  double minimum_factor,
     88                                  double maximium_factor) OVERRIDE;
     89   virtual void PostMessage(PP_Instance instance, PP_Var message) OVERRIDE;
     90   virtual int32_t RegisterMessageHandler(PP_Instance instance,
     91                                          void* user_data,
     92                                          const PPP_MessageHandler_0_2* handler,
     93                                          PP_Resource message_loop) OVERRIDE;
     94   virtual int32_t RegisterMessageHandler_1_1_Deprecated(
     95       PP_Instance instance,
     96       void* user_data,
     97       const PPP_MessageHandler_0_1_Deprecated* handler,
     98       PP_Resource message_loop) OVERRIDE;
     99   virtual void UnregisterMessageHandler(PP_Instance instance) OVERRIDE;
    100   virtual PP_Bool SetCursor(PP_Instance instance,
    101                             PP_MouseCursor_Type type,
    102                             PP_Resource image,
    103                             const PP_Point* hot_spot) OVERRIDE;
    104   virtual int32_t LockMouse(PP_Instance instance,
    105                             scoped_refptr<TrackedCallback> callback) OVERRIDE;
    106   virtual void UnlockMouse(PP_Instance instance) OVERRIDE;
    107   virtual void SetTextInputType(PP_Instance instance,
    108                                 PP_TextInput_Type type) OVERRIDE;
    109   virtual void UpdateCaretPosition(PP_Instance instance,
    110                                    const PP_Rect& caret,
    111                                    const PP_Rect& bounding_box) OVERRIDE;
    112   virtual void CancelCompositionText(PP_Instance instance) OVERRIDE;
    113   virtual void SelectionChanged(PP_Instance instance) OVERRIDE;
    114   virtual void UpdateSurroundingText(PP_Instance instance,
    115                                      const char* text,
    116                                      uint32_t caret,
    117                                      uint32_t anchor) OVERRIDE;
    118   virtual PP_Var GetDocumentURL(PP_Instance instance,
    119                                 PP_URLComponents_Dev* components) OVERRIDE;
    120 #if !defined(OS_NACL)
    121   virtual PP_Var ResolveRelativeToDocument(
    122       PP_Instance instance,
    123       PP_Var relative,
    124       PP_URLComponents_Dev* components) OVERRIDE;
    125   virtual PP_Bool DocumentCanRequest(PP_Instance instance, PP_Var url) OVERRIDE;
    126   virtual PP_Bool DocumentCanAccessDocument(PP_Instance instance,
    127                                             PP_Instance target) OVERRIDE;
    128   virtual PP_Var GetPluginInstanceURL(
    129       PP_Instance instance,
    130       PP_URLComponents_Dev* components) OVERRIDE;
    131   virtual PP_Var GetPluginReferrerURL(
    132       PP_Instance instance,
    133       PP_URLComponents_Dev* components) OVERRIDE;
    134   virtual void PromiseResolved(PP_Instance instance,
    135                                uint32 promise_id) OVERRIDE;
    136   virtual void PromiseResolvedWithSession(PP_Instance instance,
    137                                           uint32 promise_id,
    138                                           PP_Var web_session_id_var) OVERRIDE;
    139   virtual void PromiseResolvedWithKeyIds(PP_Instance instance,
    140                                          uint32 promise_id,
    141                                          PP_Var key_ids_var) OVERRIDE;
    142   virtual void PromiseRejected(PP_Instance instance,
    143                                uint32 promise_id,
    144                                PP_CdmExceptionCode exception_code,
    145                                uint32 system_code,
    146                                PP_Var error_description_var) OVERRIDE;
    147   virtual void SessionMessage(PP_Instance instance,
    148                               PP_Var web_session_id_var,
    149                               PP_Var message_var,
    150                               PP_Var destination_url_var) OVERRIDE;
    151   virtual void SessionKeysChange(PP_Instance instance,
    152                                  PP_Var web_session_id_var,
    153                                  PP_Bool has_additional_usable_key) OVERRIDE;
    154   virtual void SessionExpirationChange(PP_Instance instance,
    155                                        PP_Var web_session_id_var,
    156                                        PP_Time new_expiry_time) OVERRIDE;
    157   virtual void SessionReady(PP_Instance instance,
    158                             PP_Var web_session_id_var) OVERRIDE;
    159   virtual void SessionClosed(PP_Instance instance,
    160                              PP_Var web_session_id_var) OVERRIDE;
    161   virtual void SessionError(PP_Instance instance,
    162                             PP_Var web_session_id_var,
    163                             PP_CdmExceptionCode exception_code,
    164                             uint32 system_code,
    165                             PP_Var error_description_var) OVERRIDE;
    166   virtual void DeliverBlock(PP_Instance instance,
    167                             PP_Resource decrypted_block,
    168                             const PP_DecryptedBlockInfo* block_info) OVERRIDE;
    169   virtual void DecoderInitializeDone(PP_Instance instance,
    170                                      PP_DecryptorStreamType decoder_type,
    171                                      uint32_t request_id,
    172                                      PP_Bool success) OVERRIDE;
    173   virtual void DecoderDeinitializeDone(PP_Instance instance,
    174                                        PP_DecryptorStreamType decoder_type,
    175                                        uint32_t request_id) OVERRIDE;
    176   virtual void DecoderResetDone(PP_Instance instance,
    177                                 PP_DecryptorStreamType decoder_type,
    178                                 uint32_t request_id) OVERRIDE;
    179   virtual void DeliverFrame(PP_Instance instance,
    180                             PP_Resource decrypted_frame,
    181                             const PP_DecryptedFrameInfo* frame_info) OVERRIDE;
    182   virtual void DeliverSamples(
    183       PP_Instance instance,
    184       PP_Resource audio_frames,
    185       const PP_DecryptedSampleInfo* sample_info) OVERRIDE;
    186 #endif  // !defined(OS_NACL)
    187 
    188   static const ApiID kApiID = API_ID_PPB_INSTANCE;
    189 
    190  private:
    191   // Plugin -> Host message handlers.
    192   void OnHostMsgGetWindowObject(PP_Instance instance,
    193                                 SerializedVarReturnValue result);
    194   void OnHostMsgGetOwnerElementObject(PP_Instance instance,
    195                                       SerializedVarReturnValue result);
    196   void OnHostMsgBindGraphics(PP_Instance instance,
    197                              PP_Resource device);
    198   void OnHostMsgIsFullFrame(PP_Instance instance, PP_Bool* result);
    199   void OnHostMsgExecuteScript(PP_Instance instance,
    200                               SerializedVarReceiveInput script,
    201                               SerializedVarOutParam out_exception,
    202                               SerializedVarReturnValue result);
    203   void OnHostMsgGetAudioHardwareOutputSampleRate(PP_Instance instance,
    204                                                  uint32_t *result);
    205   void OnHostMsgGetAudioHardwareOutputBufferSize(PP_Instance instance,
    206                                                  uint32_t *result);
    207   void OnHostMsgGetDefaultCharSet(PP_Instance instance,
    208                                   SerializedVarReturnValue result);
    209   void OnHostMsgSetPluginToHandleFindRequests(PP_Instance instance);
    210   void OnHostMsgNumberOfFindResultsChanged(PP_Instance instance,
    211                                            int32_t total,
    212                                            PP_Bool final_result);
    213   void OnHostMsgSelectFindResultChanged(PP_Instance instance,
    214                                         int32_t index);
    215   void OnHostMsgSetTickmarks(PP_Instance instance,
    216                              const std::vector<PP_Rect>& tickmarks);
    217   void OnHostMsgSetFullscreen(PP_Instance instance,
    218                               PP_Bool fullscreen,
    219                               PP_Bool* result);
    220   void OnHostMsgGetScreenSize(PP_Instance instance,
    221                               PP_Bool* result,
    222                               PP_Size* size);
    223   void OnHostMsgRequestInputEvents(PP_Instance instance,
    224                                    bool is_filtering,
    225                                    uint32_t event_classes);
    226   void OnHostMsgStartTrackingLatency(PP_Instance instance);
    227   void OnHostMsgClearInputEvents(PP_Instance instance,
    228                                  uint32_t event_classes);
    229   void OnHostMsgPostMessage(PP_Instance instance,
    230                             SerializedVarReceiveInput message);
    231   void OnHostMsgLockMouse(PP_Instance instance);
    232   void OnHostMsgUnlockMouse(PP_Instance instance);
    233   void OnHostMsgSetCursor(PP_Instance instance,
    234                           int32_t type,
    235                           const ppapi::HostResource& custom_image,
    236                           const PP_Point& hot_spot);
    237   void OnHostMsgSetTextInputType(PP_Instance instance, PP_TextInput_Type type);
    238   void OnHostMsgUpdateCaretPosition(PP_Instance instance,
    239                                     const PP_Rect& caret,
    240                                     const PP_Rect& bounding_box);
    241   void OnHostMsgCancelCompositionText(PP_Instance instance);
    242   void OnHostMsgUpdateSurroundingText(
    243       PP_Instance instance,
    244       const std::string& text,
    245       uint32_t caret,
    246       uint32_t anchor);
    247   void OnHostMsgGetDocumentURL(PP_Instance instance,
    248                                PP_URLComponents_Dev* components,
    249                                SerializedVarReturnValue result);
    250 
    251 #if !defined(OS_NACL)
    252   void OnHostMsgResolveRelativeToDocument(PP_Instance instance,
    253                                           SerializedVarReceiveInput relative,
    254                                           SerializedVarReturnValue result);
    255   void OnHostMsgDocumentCanRequest(PP_Instance instance,
    256                                    SerializedVarReceiveInput url,
    257                                    PP_Bool* result);
    258   void OnHostMsgDocumentCanAccessDocument(PP_Instance active,
    259                                           PP_Instance target,
    260                                           PP_Bool* result);
    261   void OnHostMsgGetPluginInstanceURL(PP_Instance instance,
    262                                      SerializedVarReturnValue result);
    263   void OnHostMsgGetPluginReferrerURL(PP_Instance instance,
    264                                      SerializedVarReturnValue result);
    265 
    266   virtual void OnHostMsgPromiseResolved(PP_Instance instance,
    267                                         uint32_t promise_id);
    268   virtual void OnHostMsgPromiseResolvedWithSession(
    269       PP_Instance instance,
    270       uint32_t promise_id,
    271       SerializedVarReceiveInput web_session_id);
    272   virtual void OnHostMsgPromiseResolvedWithKeyIds(
    273       PP_Instance instance,
    274       uint32 promise_id,
    275       const std::vector<std::vector<uint8_t> >& key_ids);
    276   virtual void OnHostMsgPromiseRejected(
    277       PP_Instance instance,
    278       uint32_t promise_id,
    279       PP_CdmExceptionCode exception_code,
    280       uint32_t system_code,
    281       SerializedVarReceiveInput error_description);
    282   virtual void OnHostMsgSessionMessage(
    283       PP_Instance instance,
    284       SerializedVarReceiveInput web_session_id,
    285       SerializedVarReceiveInput message,
    286       SerializedVarReceiveInput destination_url);
    287   virtual void OnHostMsgSessionKeysChange(PP_Instance instance,
    288                                           const std::string& web_session_id,
    289                                           PP_Bool has_additional_usable_key);
    290   virtual void OnHostMsgSessionExpirationChange(
    291       PP_Instance instance,
    292       const std::string& web_session_id,
    293       PP_Time new_expiry_time);
    294   virtual void OnHostMsgSessionReady(PP_Instance instance,
    295                                      SerializedVarReceiveInput web_session_id);
    296   virtual void OnHostMsgSessionClosed(PP_Instance instance,
    297                                       SerializedVarReceiveInput web_session_id);
    298   virtual void OnHostMsgSessionError(
    299       PP_Instance instance,
    300       SerializedVarReceiveInput web_session_id,
    301       PP_CdmExceptionCode exception_code,
    302       uint32_t system_code,
    303       SerializedVarReceiveInput error_description);
    304   virtual void OnHostMsgDecoderInitializeDone(
    305       PP_Instance instance,
    306       PP_DecryptorStreamType decoder_type,
    307       uint32_t request_id,
    308       PP_Bool success);
    309   virtual void OnHostMsgDecoderDeinitializeDone(
    310       PP_Instance instance,
    311       PP_DecryptorStreamType decoder_type,
    312       uint32_t request_id);
    313   virtual void OnHostMsgDecoderResetDone(PP_Instance instance,
    314                                          PP_DecryptorStreamType decoder_type,
    315                                          uint32_t request_id);
    316   virtual void OnHostMsgDeliverBlock(PP_Instance instance,
    317                                      PP_Resource decrypted_block,
    318                                      const std::string& serialized_block_info);
    319   virtual void OnHostMsgDeliverFrame(PP_Instance instance,
    320                                      PP_Resource decrypted_frame,
    321                                      const std::string& serialized_block_info);
    322   virtual void OnHostMsgDeliverSamples(
    323       PP_Instance instance,
    324       PP_Resource audio_frames,
    325       const std::string& serialized_sample_info);
    326 #endif  // !defined(OS_NACL)
    327 
    328   // Host -> Plugin message handlers.
    329   void OnPluginMsgMouseLockComplete(PP_Instance instance, int32_t result);
    330 
    331   void MouseLockCompleteInHost(int32_t result, PP_Instance instance);
    332 
    333   // Other helpers.
    334   void CancelAnyPendingRequestSurroundingText(PP_Instance instance);
    335 
    336   ProxyCompletionCallbackFactory<PPB_Instance_Proxy> callback_factory_;
    337 };
    338 
    339 }  // namespace proxy
    340 }  // namespace ppapi
    341 
    342 #endif  // PPAPI_PROXY_PPB_INSTANCE_PROXY_H_
    343