Home | History | Annotate | Download | only in pepper_container_app
      1 // Copyright 2014 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 #include "mojo/examples/pepper_container_app/plugin_instance.h"
      6 
      7 #include "base/logging.h"
      8 #include "mojo/examples/pepper_container_app/graphics_3d_resource.h"
      9 #include "mojo/examples/pepper_container_app/mojo_ppapi_globals.h"
     10 #include "ppapi/c/pp_errors.h"
     11 #include "ppapi/c/pp_var.h"
     12 #include "ppapi/c/ppp_graphics_3d.h"
     13 #include "ppapi/c/ppp_instance.h"
     14 #include "ppapi/shared_impl/ppb_view_shared.h"
     15 #include "ppapi/shared_impl/proxy_lock.h"
     16 #include "ppapi/shared_impl/tracked_callback.h"
     17 #include "ppapi/thunk/enter.h"
     18 #include "ppapi/thunk/ppb_graphics_3d_api.h"
     19 
     20 namespace mojo {
     21 namespace examples {
     22 
     23 PluginInstance::PluginInstance(scoped_refptr<PluginModule> plugin_module)
     24     : pp_instance_(0),
     25       plugin_module_(plugin_module) {
     26   pp_instance_ = MojoPpapiGlobals::Get()->AddInstance(this);
     27 }
     28 
     29 PluginInstance::~PluginInstance() {
     30   MojoPpapiGlobals::Get()->InstanceDeleted(pp_instance_);
     31 }
     32 
     33 bool PluginInstance::DidCreate() {
     34   ppapi::ProxyAutoUnlock unlock;
     35   const PPP_Instance_1_1* instance_interface =
     36       static_cast<const PPP_Instance_1_1*>(plugin_module_->GetPluginInterface(
     37           PPP_INSTANCE_INTERFACE_1_1));
     38   return !!instance_interface->DidCreate(pp_instance(), 0, NULL, NULL);
     39 }
     40 
     41 void PluginInstance::DidDestroy() {
     42   ppapi::ProxyAutoUnlock unlock;
     43   const PPP_Instance_1_1* instance_interface =
     44       static_cast<const PPP_Instance_1_1*>(plugin_module_->GetPluginInterface(
     45           PPP_INSTANCE_INTERFACE_1_1));
     46   instance_interface->DidDestroy(pp_instance());
     47 }
     48 
     49 void PluginInstance::DidChangeView(const PP_Rect& bounds) {
     50   ppapi::ViewData view_data;
     51   view_data.rect = bounds;
     52   view_data.is_fullscreen = false;
     53   view_data.is_page_visible = true;
     54   view_data.clip_rect = bounds;
     55   view_data.device_scale = 1.0f;
     56   view_data.css_scale = 1.0f;
     57 
     58   ppapi::ScopedPPResource resource(ppapi::ScopedPPResource::PassRef(),
     59       (new ppapi::PPB_View_Shared(
     60           ppapi::OBJECT_IS_IMPL, pp_instance(), view_data))->GetReference());
     61   {
     62     ppapi::ProxyAutoUnlock unlock;
     63     const PPP_Instance_1_1* instance_interface =
     64         static_cast<const PPP_Instance_1_1*>(plugin_module_->GetPluginInterface(
     65             PPP_INSTANCE_INTERFACE_1_1));
     66     instance_interface->DidChangeView(pp_instance(), resource);
     67   }
     68 }
     69 
     70 void PluginInstance::Graphics3DContextLost() {
     71   ppapi::ProxyAutoUnlock unlock;
     72   const PPP_Graphics3D_1_0* graphic_3d_interface =
     73       static_cast<const PPP_Graphics3D_1_0*>(plugin_module_->GetPluginInterface(
     74           PPP_GRAPHICS_3D_INTERFACE_1_0));
     75   // TODO(yzshen): Maybe we only need to notify for the bound graphics context?
     76   graphic_3d_interface->Graphics3DContextLost(pp_instance());
     77 }
     78 
     79 bool PluginInstance::IsBoundGraphics(PP_Resource device) const {
     80   return device != 0 && device == bound_graphics_.get();
     81 }
     82 
     83 PP_Bool PluginInstance::BindGraphics(PP_Instance instance, PP_Resource device) {
     84   if (bound_graphics_.get() == device)
     85     return PP_TRUE;
     86 
     87   ppapi::thunk::EnterResourceNoLock<ppapi::thunk::PPB_Graphics3D_API>
     88       enter(device, false);
     89   if (enter.failed())
     90     return PP_FALSE;
     91 
     92   bound_graphics_ = device;
     93   static_cast<Graphics3DResource*>(enter.object())->BindGraphics();
     94 
     95   return PP_TRUE;
     96 }
     97 
     98 PP_Bool PluginInstance::IsFullFrame(PP_Instance instance) {
     99   NOTIMPLEMENTED();
    100   return PP_FALSE;
    101 }
    102 
    103 const ppapi::ViewData* PluginInstance::GetViewData(PP_Instance instance) {
    104   NOTIMPLEMENTED();
    105   return NULL;
    106 }
    107 
    108 PP_Bool PluginInstance::FlashIsFullscreen(PP_Instance instance) {
    109   NOTIMPLEMENTED();
    110   return PP_FALSE;
    111 }
    112 
    113 PP_Var PluginInstance::GetWindowObject(PP_Instance instance) {
    114   NOTIMPLEMENTED();
    115   return PP_MakeUndefined();
    116 }
    117 
    118 PP_Var PluginInstance::GetOwnerElementObject(PP_Instance instance) {
    119   NOTIMPLEMENTED();
    120   return PP_MakeUndefined();
    121 }
    122 
    123 PP_Var PluginInstance::ExecuteScript(PP_Instance instance,
    124                                      PP_Var script,
    125                                      PP_Var* exception) {
    126   NOTIMPLEMENTED();
    127   return PP_MakeUndefined();
    128 }
    129 
    130 uint32_t PluginInstance::GetAudioHardwareOutputSampleRate(
    131     PP_Instance instance) {
    132   NOTIMPLEMENTED();
    133   return 0;
    134 }
    135 
    136 uint32_t PluginInstance::GetAudioHardwareOutputBufferSize(
    137     PP_Instance instance) {
    138   NOTIMPLEMENTED();
    139   return 0;
    140 }
    141 
    142 PP_Var PluginInstance::GetDefaultCharSet(PP_Instance instance) {
    143   NOTIMPLEMENTED();
    144   return PP_MakeUndefined();
    145 }
    146 
    147 void PluginInstance::Log(PP_Instance instance,
    148                          PP_LogLevel log_level,
    149                          PP_Var value) {
    150   NOTIMPLEMENTED();
    151 }
    152 
    153 void PluginInstance::LogWithSource(PP_Instance instance,
    154                                    PP_LogLevel log_level,
    155                                    PP_Var source,
    156                                    PP_Var value) {
    157   NOTIMPLEMENTED();
    158 }
    159 
    160 void PluginInstance::SetPluginToHandleFindRequests(PP_Instance instance) {
    161   NOTIMPLEMENTED();
    162 }
    163 
    164 void PluginInstance::NumberOfFindResultsChanged(PP_Instance instance,
    165                                                 int32_t total,
    166                                                 PP_Bool final_result) {
    167   NOTIMPLEMENTED();
    168 }
    169 
    170 void PluginInstance::SelectedFindResultChanged(PP_Instance instance,
    171                                                int32_t index) {
    172   NOTIMPLEMENTED();
    173 }
    174 
    175 void PluginInstance::SetTickmarks(PP_Instance instance,
    176                                   const PP_Rect* tickmarks,
    177                                   uint32_t count) {
    178   NOTIMPLEMENTED();
    179 }
    180 
    181 PP_Bool PluginInstance::IsFullscreen(PP_Instance instance) {
    182   NOTIMPLEMENTED();
    183   return PP_FALSE;
    184 }
    185 
    186 PP_Bool PluginInstance::SetFullscreen(PP_Instance instance,
    187                                       PP_Bool fullscreen) {
    188   NOTIMPLEMENTED();
    189   return PP_FALSE;
    190 }
    191 
    192 PP_Bool PluginInstance::GetScreenSize(PP_Instance instance, PP_Size* size) {
    193   NOTIMPLEMENTED();
    194   return PP_FALSE;
    195 }
    196 
    197 ppapi::Resource* PluginInstance::GetSingletonResource(
    198     PP_Instance instance,
    199     ppapi::SingletonResourceID id) {
    200   NOTIMPLEMENTED();
    201   return NULL;
    202 }
    203 
    204 int32_t PluginInstance::RequestInputEvents(PP_Instance instance,
    205                                            uint32_t event_classes) {
    206   NOTIMPLEMENTED();
    207   return PP_ERROR_FAILED;
    208 }
    209 
    210 int32_t PluginInstance::RequestFilteringInputEvents(PP_Instance instance,
    211                                                     uint32_t event_classes) {
    212   NOTIMPLEMENTED();
    213   return PP_ERROR_FAILED;
    214 }
    215 
    216 void PluginInstance::ClearInputEventRequest(PP_Instance instance,
    217                                             uint32_t event_classes) {
    218   NOTIMPLEMENTED();
    219 }
    220 
    221 void PluginInstance::StartTrackingLatency(PP_Instance instance) {
    222   NOTIMPLEMENTED();
    223 }
    224 
    225 void PluginInstance::PostMessage(PP_Instance instance, PP_Var message) {
    226   NOTIMPLEMENTED();
    227 }
    228 
    229 int32_t PluginInstance::RegisterMessageHandler(
    230     PP_Instance instance,
    231     void* user_data,
    232     const PPP_MessageHandler_0_2* handler,
    233     PP_Resource message_loop) {
    234   NOTIMPLEMENTED();
    235   return PP_ERROR_FAILED;
    236 }
    237 
    238 // TODO(dmichael): Remove this. crbug.com/414398
    239 int32_t PluginInstance::RegisterMessageHandler_1_1_Deprecated(
    240     PP_Instance instance,
    241     void* user_data,
    242     const PPP_MessageHandler_0_1_Deprecated* handler,
    243     PP_Resource message_loop) {
    244   NOTIMPLEMENTED();
    245   return PP_ERROR_FAILED;
    246 }
    247 
    248 void PluginInstance::UnregisterMessageHandler(PP_Instance instance) {
    249   NOTIMPLEMENTED();
    250 }
    251 
    252 PP_Bool PluginInstance::SetCursor(PP_Instance instance,
    253                                   PP_MouseCursor_Type type,
    254                                   PP_Resource image,
    255                                   const PP_Point* hot_spot) {
    256   NOTIMPLEMENTED();
    257   return PP_FALSE;
    258 }
    259 
    260 int32_t PluginInstance::LockMouse(
    261     PP_Instance instance,
    262     scoped_refptr<ppapi::TrackedCallback> callback) {
    263   NOTIMPLEMENTED();
    264   return PP_ERROR_FAILED;
    265 }
    266 
    267 void PluginInstance::UnlockMouse(PP_Instance instance) {
    268   NOTIMPLEMENTED();
    269 }
    270 
    271 void PluginInstance::SetTextInputType(PP_Instance instance,
    272                                       PP_TextInput_Type type) {
    273   NOTIMPLEMENTED();
    274 }
    275 
    276 void PluginInstance::UpdateCaretPosition(PP_Instance instance,
    277                                          const PP_Rect& caret,
    278                                          const PP_Rect& bounding_box) {
    279   NOTIMPLEMENTED();
    280 }
    281 
    282 void PluginInstance::CancelCompositionText(PP_Instance instance) {
    283   NOTIMPLEMENTED();
    284 }
    285 
    286 void PluginInstance::SelectionChanged(PP_Instance instance) {
    287   NOTIMPLEMENTED();
    288 }
    289 
    290 void PluginInstance::UpdateSurroundingText(PP_Instance instance,
    291                                            const char* text,
    292                                            uint32_t caret,
    293                                            uint32_t anchor) {
    294   NOTIMPLEMENTED();
    295 }
    296 
    297 void PluginInstance::ZoomChanged(PP_Instance instance, double factor) {
    298   NOTIMPLEMENTED();
    299 }
    300 
    301 void PluginInstance::ZoomLimitsChanged(PP_Instance instance,
    302                                        double minimum_factor,
    303                                        double maximum_factor) {
    304   NOTIMPLEMENTED();
    305 }
    306 
    307 PP_Var PluginInstance::GetDocumentURL(PP_Instance instance,
    308                                       PP_URLComponents_Dev* components) {
    309   NOTIMPLEMENTED();
    310   return PP_MakeUndefined();
    311 }
    312 
    313 void PluginInstance::PromiseResolved(PP_Instance instance, uint32 promise_id) {
    314   NOTIMPLEMENTED();
    315 }
    316 
    317 void PluginInstance::PromiseResolvedWithSession(PP_Instance instance,
    318                                                 uint32 promise_id,
    319                                                 PP_Var web_session_id_var) {
    320   NOTIMPLEMENTED();
    321 }
    322 
    323 void PluginInstance::PromiseResolvedWithKeyIds(PP_Instance instance,
    324                                                uint32 promise_id,
    325                                                PP_Var key_ids_var) {
    326   NOTIMPLEMENTED();
    327 }
    328 
    329 void PluginInstance::PromiseRejected(PP_Instance instance,
    330                                      uint32 promise_id,
    331                                      PP_CdmExceptionCode exception_code,
    332                                      uint32 system_code,
    333                                      PP_Var error_description_var) {
    334   NOTIMPLEMENTED();
    335 }
    336 
    337 void PluginInstance::SessionMessage(PP_Instance instance,
    338                                     PP_Var web_session_id_var,
    339                                     PP_Var message_var,
    340                                     PP_Var destination_url_var) {
    341   NOTIMPLEMENTED();
    342 }
    343 
    344 void PluginInstance::SessionKeysChange(PP_Instance instance,
    345                                        PP_Var web_session_id_var,
    346                                        PP_Bool has_additional_usable_key) {
    347   NOTIMPLEMENTED();
    348 }
    349 
    350 void PluginInstance::SessionExpirationChange(PP_Instance instance,
    351                                              PP_Var web_session_id_var,
    352                                              PP_Time new_expiry_time) {
    353   NOTIMPLEMENTED();
    354 }
    355 
    356 void PluginInstance::SessionReady(PP_Instance instance,
    357                                   PP_Var web_session_id_var) {
    358   NOTIMPLEMENTED();
    359 }
    360 
    361 void PluginInstance::SessionClosed(PP_Instance instance,
    362                                    PP_Var web_session_id_var) {
    363   NOTIMPLEMENTED();
    364 }
    365 
    366 void PluginInstance::SessionError(PP_Instance instance,
    367                                   PP_Var web_session_id_var,
    368                                   PP_CdmExceptionCode exception_code,
    369                                   uint32 system_code,
    370                                   PP_Var error_description_var) {
    371   NOTIMPLEMENTED();
    372 }
    373 
    374 void PluginInstance::DeliverBlock(PP_Instance instance,
    375                                   PP_Resource decrypted_block,
    376                                   const PP_DecryptedBlockInfo* block_info) {
    377   NOTIMPLEMENTED();
    378 }
    379 
    380 void PluginInstance::DecoderInitializeDone(PP_Instance instance,
    381                                            PP_DecryptorStreamType decoder_type,
    382                                            uint32_t request_id,
    383                                            PP_Bool success) {
    384   NOTIMPLEMENTED();
    385 }
    386 
    387 void PluginInstance::DecoderDeinitializeDone(
    388     PP_Instance instance,
    389     PP_DecryptorStreamType decoder_type,
    390     uint32_t request_id) {
    391   NOTIMPLEMENTED();
    392 }
    393 
    394 void PluginInstance::DecoderResetDone(PP_Instance instance,
    395                                       PP_DecryptorStreamType decoder_type,
    396                                       uint32_t request_id) {
    397   NOTIMPLEMENTED();
    398 }
    399 
    400 void PluginInstance::DeliverFrame(PP_Instance instance,
    401                                   PP_Resource decrypted_frame,
    402                                   const PP_DecryptedFrameInfo* frame_info) {
    403   NOTIMPLEMENTED();
    404 }
    405 
    406 void PluginInstance::DeliverSamples(PP_Instance instance,
    407                                     PP_Resource audio_frames,
    408                                     const PP_DecryptedSampleInfo* sample_info) {
    409   NOTIMPLEMENTED();
    410 }
    411 
    412 PP_Var PluginInstance::ResolveRelativeToDocument(
    413     PP_Instance instance,
    414     PP_Var relative,
    415     PP_URLComponents_Dev* components) {
    416   NOTIMPLEMENTED();
    417   return PP_MakeUndefined();
    418 }
    419 
    420 PP_Bool PluginInstance::DocumentCanRequest(PP_Instance instance, PP_Var url) {
    421   NOTIMPLEMENTED();
    422   return PP_FALSE;
    423 }
    424 
    425 PP_Bool PluginInstance::DocumentCanAccessDocument(PP_Instance instance,
    426                                                   PP_Instance target) {
    427   NOTIMPLEMENTED();
    428   return PP_FALSE;
    429 }
    430 
    431 PP_Var PluginInstance::GetPluginInstanceURL(PP_Instance instance,
    432                                             PP_URLComponents_Dev* components) {
    433   NOTIMPLEMENTED();
    434   return PP_MakeUndefined();
    435 }
    436 
    437 PP_Var PluginInstance::GetPluginReferrerURL(PP_Instance instance,
    438                                             PP_URLComponents_Dev* components) {
    439   NOTIMPLEMENTED();
    440   return PP_MakeUndefined();
    441 }
    442 
    443 }  // namespace examples
    444 }  // namespace mojo
    445