Home | History | Annotate | Download | only in thunk
      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_THUNK_INSTANCE_API_H_
      6 #define PPAPI_THUNK_INSTANCE_API_H_
      7 
      8 #include "base/memory/ref_counted.h"
      9 #include "base/memory/scoped_ptr.h"
     10 #include "ppapi/c/dev/ppb_messaging_deprecated.h"
     11 #include "ppapi/c/dev/ppb_url_util_dev.h"
     12 #include "ppapi/c/pp_bool.h"
     13 #include "ppapi/c/pp_completion_callback.h"
     14 #include "ppapi/c/pp_size.h"
     15 #include "ppapi/c/pp_time.h"
     16 #include "ppapi/c/ppb_audio_config.h"
     17 #include "ppapi/c/ppb_console.h"
     18 #include "ppapi/c/ppb_gamepad.h"
     19 #include "ppapi/c/ppb_instance.h"
     20 #include "ppapi/c/ppb_mouse_cursor.h"
     21 #include "ppapi/c/ppb_text_input_controller.h"
     22 #include "ppapi/c/private/pp_content_decryptor.h"
     23 #include "ppapi/c/private/ppb_instance_private.h"
     24 #include "ppapi/shared_impl/api_id.h"
     25 #include "ppapi/shared_impl/resource.h"
     26 #include "ppapi/shared_impl/singleton_resource_id.h"
     27 
     28 // Windows headers interfere with this file.
     29 #ifdef PostMessage
     30 #undef PostMessage
     31 #endif
     32 
     33 struct PP_DecryptedBlockInfo;
     34 struct PP_DecryptedFrameInfo;
     35 struct PPP_MessageHandler_0_2;
     36 
     37 namespace ppapi {
     38 
     39 class Resource;
     40 class TrackedCallback;
     41 struct ViewData;
     42 
     43 namespace thunk {
     44 
     45 class PPB_Flash_API;
     46 
     47 class PPB_Instance_API {
     48  public:
     49   virtual ~PPB_Instance_API() {}
     50 
     51   virtual PP_Bool BindGraphics(PP_Instance instance, PP_Resource device) = 0;
     52   virtual PP_Bool IsFullFrame(PP_Instance instance) = 0;
     53 
     54   // Unexposed PPAPI functions for proxying.
     55   // Returns the internal view data struct.
     56   virtual const ViewData* GetViewData(PP_Instance instance) = 0;
     57   // Returns the flash fullscreen status.
     58   virtual PP_Bool FlashIsFullscreen(PP_Instance instance) = 0;
     59 
     60   // InstancePrivate.
     61   virtual PP_Var GetWindowObject(PP_Instance instance) = 0;
     62   virtual PP_Var GetOwnerElementObject(PP_Instance instance) = 0;
     63   virtual PP_Var ExecuteScript(PP_Instance instance,
     64                                PP_Var script,
     65                                PP_Var* exception) = 0;
     66 
     67   // Audio.
     68   virtual uint32_t GetAudioHardwareOutputSampleRate(PP_Instance instance) = 0;
     69   virtual uint32_t GetAudioHardwareOutputBufferSize(PP_Instance instance) = 0;
     70 
     71   // CharSet.
     72   virtual PP_Var GetDefaultCharSet(PP_Instance instance) = 0;
     73 
     74   // Console.
     75   virtual void Log(PP_Instance instance,
     76                    PP_LogLevel log_level,
     77                    PP_Var value) = 0;
     78   virtual void LogWithSource(PP_Instance instance,
     79                              PP_LogLevel log_level,
     80                              PP_Var source,
     81                              PP_Var value) = 0;
     82 
     83   // Find.
     84   virtual void SetPluginToHandleFindRequests(PP_Instance instance) = 0;
     85   virtual void NumberOfFindResultsChanged(PP_Instance instance,
     86                                           int32_t total,
     87                                           PP_Bool final_result) = 0;
     88   virtual void SelectedFindResultChanged(PP_Instance instance,
     89                                          int32_t index) = 0;
     90   virtual void SetTickmarks(PP_Instance instance,
     91                             const PP_Rect* tickmarks,
     92                             uint32_t count) = 0;
     93 
     94   // Fullscreen.
     95   virtual PP_Bool IsFullscreen(PP_Instance instance) = 0;
     96   virtual PP_Bool SetFullscreen(PP_Instance instance,
     97                                 PP_Bool fullscreen) = 0;
     98   virtual PP_Bool GetScreenSize(PP_Instance instance, PP_Size* size) = 0;
     99 
    100   // This is an implementation-only function which grabs an instance of a
    101   // "singleton resource". These are used to implement instance interfaces
    102   // (functions which are associated with the instance itself as opposed to a
    103   // resource).
    104   virtual Resource* GetSingletonResource(
    105       PP_Instance instance, SingletonResourceID id) = 0;
    106 
    107   // InputEvent.
    108   virtual int32_t RequestInputEvents(PP_Instance instance,
    109                                      uint32_t event_classes) = 0;
    110   virtual int32_t RequestFilteringInputEvents(PP_Instance instance,
    111                                               uint32_t event_classes) = 0;
    112   virtual void ClearInputEventRequest(PP_Instance instance,
    113                                       uint32_t event_classes) = 0;
    114 
    115   // InputEventPrivate.
    116   virtual void StartTrackingLatency(PP_Instance instance) = 0;
    117 
    118   // Messaging.
    119   virtual void PostMessage(PP_Instance instance, PP_Var message) = 0;
    120   virtual int32_t RegisterMessageHandler(PP_Instance instance,
    121                                          void* user_data,
    122                                          const PPP_MessageHandler_0_2* handler,
    123                                          PP_Resource message_loop) = 0;
    124   virtual int32_t RegisterMessageHandler_1_1_Deprecated(
    125       PP_Instance instance,
    126       void* user_data,
    127       const PPP_MessageHandler_0_1_Deprecated* handler,
    128       PP_Resource message_loop) = 0;
    129   virtual void UnregisterMessageHandler(PP_Instance instance) = 0;
    130 
    131   // Mouse cursor.
    132   virtual PP_Bool SetCursor(PP_Instance instance,
    133                             PP_MouseCursor_Type type,
    134                             PP_Resource image,
    135                             const PP_Point* hot_spot) = 0;
    136 
    137   // MouseLock.
    138   virtual int32_t LockMouse(PP_Instance instance,
    139                             scoped_refptr<TrackedCallback> callback) = 0;
    140   virtual void UnlockMouse(PP_Instance instance) = 0;
    141 
    142   // TextInput.
    143   virtual void SetTextInputType(PP_Instance instance,
    144                                 PP_TextInput_Type type) = 0;
    145   virtual void UpdateCaretPosition(PP_Instance instance,
    146                                    const PP_Rect& caret,
    147                                    const PP_Rect& bounding_box) = 0;
    148   virtual void CancelCompositionText(PP_Instance instance) = 0;
    149   virtual void SelectionChanged(PP_Instance instance) = 0;
    150   virtual void UpdateSurroundingText(PP_Instance instance,
    151                                      const char* text,
    152                                      uint32_t caret,
    153                                      uint32_t anchor) = 0;
    154 
    155   // Zoom.
    156   virtual void ZoomChanged(PP_Instance instance, double factor) = 0;
    157   virtual void ZoomLimitsChanged(PP_Instance instance,
    158                                  double minimum_factor,
    159                                  double maximum_factor) = 0;
    160   // Testing and URLUtil.
    161   virtual PP_Var GetDocumentURL(PP_Instance instance,
    162                                 PP_URLComponents_Dev* components) = 0;
    163 #if !defined(OS_NACL)
    164   // Content Decryptor.
    165   virtual void PromiseResolved(PP_Instance instance, uint32 promise_id) = 0;
    166   virtual void PromiseResolvedWithSession(PP_Instance instance,
    167                                           uint32 promise_id,
    168                                           PP_Var web_session_id_var) = 0;
    169   virtual void PromiseResolvedWithKeyIds(PP_Instance instance,
    170                                          uint32 promise_id,
    171                                          PP_Var key_ids_var) = 0;
    172   virtual void PromiseRejected(PP_Instance instance,
    173                                uint32 promise_id,
    174                                PP_CdmExceptionCode exception_code,
    175                                uint32 system_code,
    176                                PP_Var error_description_var) = 0;
    177   virtual void SessionMessage(PP_Instance instance,
    178                               PP_Var web_session_id_var,
    179                               PP_Var message_var,
    180                               PP_Var destination_url_var) = 0;
    181   virtual void SessionKeysChange(PP_Instance instance,
    182                                  PP_Var web_session_id_var,
    183                                  PP_Bool has_additional_usable_key) = 0;
    184   virtual void SessionExpirationChange(PP_Instance instance,
    185                                        PP_Var web_session_id_var,
    186                                        PP_Time new_expiry_time) = 0;
    187   virtual void SessionReady(PP_Instance instance,
    188                             PP_Var web_session_id_var) = 0;
    189   virtual void SessionClosed(PP_Instance instance,
    190                              PP_Var web_session_id_var) = 0;
    191   virtual void SessionError(PP_Instance instance,
    192                             PP_Var web_session_id_var,
    193                             PP_CdmExceptionCode exception_code,
    194                             uint32 system_code,
    195                             PP_Var error_description_var) = 0;
    196   virtual void DeliverBlock(PP_Instance instance,
    197                             PP_Resource decrypted_block,
    198                             const PP_DecryptedBlockInfo* block_info) = 0;
    199   virtual void DecoderInitializeDone(PP_Instance instance,
    200                                      PP_DecryptorStreamType decoder_type,
    201                                      uint32_t request_id,
    202                                      PP_Bool success) = 0;
    203   virtual void DecoderDeinitializeDone(PP_Instance instance,
    204                                        PP_DecryptorStreamType decoder_type,
    205                                        uint32_t request_id) = 0;
    206   virtual void DecoderResetDone(PP_Instance instance,
    207                                 PP_DecryptorStreamType decoder_type,
    208                                 uint32_t request_id) = 0;
    209   virtual void DeliverFrame(PP_Instance instance,
    210                             PP_Resource decrypted_frame,
    211                             const PP_DecryptedFrameInfo* frame_info) = 0;
    212   virtual void DeliverSamples(PP_Instance instance,
    213                               PP_Resource audio_frames,
    214                               const PP_DecryptedSampleInfo* sample_info) = 0;
    215 
    216   // URLUtil.
    217   virtual PP_Var ResolveRelativeToDocument(
    218       PP_Instance instance,
    219       PP_Var relative,
    220       PP_URLComponents_Dev* components) = 0;
    221   virtual PP_Bool DocumentCanRequest(PP_Instance instance, PP_Var url) = 0;
    222   virtual PP_Bool DocumentCanAccessDocument(PP_Instance instance,
    223                                             PP_Instance target) = 0;
    224   virtual PP_Var GetPluginInstanceURL(PP_Instance instance,
    225                                       PP_URLComponents_Dev* components) = 0;
    226   virtual PP_Var GetPluginReferrerURL(PP_Instance instance,
    227                                       PP_URLComponents_Dev* components) = 0;
    228 #endif  // !defined(OS_NACL)
    229 
    230   static const ApiID kApiID = API_ID_PPB_INSTANCE;
    231 };
    232 
    233 }  // namespace thunk
    234 }  // namespace ppapi
    235 
    236 #endif  // PPAPI_THUNK_INSTANCE_API_H_
    237