• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
PluginInstance(scoped_refptr<PluginModule> plugin_module)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 
~PluginInstance()29 PluginInstance::~PluginInstance() {
30   MojoPpapiGlobals::Get()->InstanceDeleted(pp_instance_);
31 }
32 
DidCreate()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 
DidDestroy()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 
DidChangeView(const PP_Rect & bounds)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 
Graphics3DContextLost()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 
IsBoundGraphics(PP_Resource device) const79 bool PluginInstance::IsBoundGraphics(PP_Resource device) const {
80   return device != 0 && device == bound_graphics_.get();
81 }
82 
BindGraphics(PP_Instance instance,PP_Resource device)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 
IsFullFrame(PP_Instance instance)98 PP_Bool PluginInstance::IsFullFrame(PP_Instance instance) {
99   NOTIMPLEMENTED();
100   return PP_FALSE;
101 }
102 
GetViewData(PP_Instance instance)103 const ppapi::ViewData* PluginInstance::GetViewData(PP_Instance instance) {
104   NOTIMPLEMENTED();
105   return NULL;
106 }
107 
FlashIsFullscreen(PP_Instance instance)108 PP_Bool PluginInstance::FlashIsFullscreen(PP_Instance instance) {
109   NOTIMPLEMENTED();
110   return PP_FALSE;
111 }
112 
GetWindowObject(PP_Instance instance)113 PP_Var PluginInstance::GetWindowObject(PP_Instance instance) {
114   NOTIMPLEMENTED();
115   return PP_MakeUndefined();
116 }
117 
GetOwnerElementObject(PP_Instance instance)118 PP_Var PluginInstance::GetOwnerElementObject(PP_Instance instance) {
119   NOTIMPLEMENTED();
120   return PP_MakeUndefined();
121 }
122 
ExecuteScript(PP_Instance instance,PP_Var script,PP_Var * exception)123 PP_Var PluginInstance::ExecuteScript(PP_Instance instance,
124                                      PP_Var script,
125                                      PP_Var* exception) {
126   NOTIMPLEMENTED();
127   return PP_MakeUndefined();
128 }
129 
GetAudioHardwareOutputSampleRate(PP_Instance instance)130 uint32_t PluginInstance::GetAudioHardwareOutputSampleRate(
131     PP_Instance instance) {
132   NOTIMPLEMENTED();
133   return 0;
134 }
135 
GetAudioHardwareOutputBufferSize(PP_Instance instance)136 uint32_t PluginInstance::GetAudioHardwareOutputBufferSize(
137     PP_Instance instance) {
138   NOTIMPLEMENTED();
139   return 0;
140 }
141 
GetDefaultCharSet(PP_Instance instance)142 PP_Var PluginInstance::GetDefaultCharSet(PP_Instance instance) {
143   NOTIMPLEMENTED();
144   return PP_MakeUndefined();
145 }
146 
Log(PP_Instance instance,PP_LogLevel log_level,PP_Var value)147 void PluginInstance::Log(PP_Instance instance,
148                          PP_LogLevel log_level,
149                          PP_Var value) {
150   NOTIMPLEMENTED();
151 }
152 
LogWithSource(PP_Instance instance,PP_LogLevel log_level,PP_Var source,PP_Var value)153 void PluginInstance::LogWithSource(PP_Instance instance,
154                                    PP_LogLevel log_level,
155                                    PP_Var source,
156                                    PP_Var value) {
157   NOTIMPLEMENTED();
158 }
159 
SetPluginToHandleFindRequests(PP_Instance instance)160 void PluginInstance::SetPluginToHandleFindRequests(PP_Instance instance) {
161   NOTIMPLEMENTED();
162 }
163 
NumberOfFindResultsChanged(PP_Instance instance,int32_t total,PP_Bool final_result)164 void PluginInstance::NumberOfFindResultsChanged(PP_Instance instance,
165                                                 int32_t total,
166                                                 PP_Bool final_result) {
167   NOTIMPLEMENTED();
168 }
169 
SelectedFindResultChanged(PP_Instance instance,int32_t index)170 void PluginInstance::SelectedFindResultChanged(PP_Instance instance,
171                                                int32_t index) {
172   NOTIMPLEMENTED();
173 }
174 
SetTickmarks(PP_Instance instance,const PP_Rect * tickmarks,uint32_t count)175 void PluginInstance::SetTickmarks(PP_Instance instance,
176                                   const PP_Rect* tickmarks,
177                                   uint32_t count) {
178   NOTIMPLEMENTED();
179 }
180 
IsFullscreen(PP_Instance instance)181 PP_Bool PluginInstance::IsFullscreen(PP_Instance instance) {
182   NOTIMPLEMENTED();
183   return PP_FALSE;
184 }
185 
SetFullscreen(PP_Instance instance,PP_Bool fullscreen)186 PP_Bool PluginInstance::SetFullscreen(PP_Instance instance,
187                                       PP_Bool fullscreen) {
188   NOTIMPLEMENTED();
189   return PP_FALSE;
190 }
191 
GetScreenSize(PP_Instance instance,PP_Size * size)192 PP_Bool PluginInstance::GetScreenSize(PP_Instance instance, PP_Size* size) {
193   NOTIMPLEMENTED();
194   return PP_FALSE;
195 }
196 
GetSingletonResource(PP_Instance instance,ppapi::SingletonResourceID id)197 ppapi::Resource* PluginInstance::GetSingletonResource(
198     PP_Instance instance,
199     ppapi::SingletonResourceID id) {
200   NOTIMPLEMENTED();
201   return NULL;
202 }
203 
RequestInputEvents(PP_Instance instance,uint32_t event_classes)204 int32_t PluginInstance::RequestInputEvents(PP_Instance instance,
205                                            uint32_t event_classes) {
206   NOTIMPLEMENTED();
207   return PP_ERROR_FAILED;
208 }
209 
RequestFilteringInputEvents(PP_Instance instance,uint32_t event_classes)210 int32_t PluginInstance::RequestFilteringInputEvents(PP_Instance instance,
211                                                     uint32_t event_classes) {
212   NOTIMPLEMENTED();
213   return PP_ERROR_FAILED;
214 }
215 
ClearInputEventRequest(PP_Instance instance,uint32_t event_classes)216 void PluginInstance::ClearInputEventRequest(PP_Instance instance,
217                                             uint32_t event_classes) {
218   NOTIMPLEMENTED();
219 }
220 
StartTrackingLatency(PP_Instance instance)221 void PluginInstance::StartTrackingLatency(PP_Instance instance) {
222   NOTIMPLEMENTED();
223 }
224 
PostMessage(PP_Instance instance,PP_Var message)225 void PluginInstance::PostMessage(PP_Instance instance, PP_Var message) {
226   NOTIMPLEMENTED();
227 }
228 
RegisterMessageHandler(PP_Instance instance,void * user_data,const PPP_MessageHandler_0_1 * handler,PP_Resource message_loop)229 int32_t PluginInstance::RegisterMessageHandler(
230     PP_Instance instance,
231     void* user_data,
232     const PPP_MessageHandler_0_1* handler,
233     PP_Resource message_loop) {
234   NOTIMPLEMENTED();
235   return PP_ERROR_FAILED;
236 }
237 
UnregisterMessageHandler(PP_Instance instance)238 void PluginInstance::UnregisterMessageHandler(PP_Instance instance) {
239   NOTIMPLEMENTED();
240 }
241 
SetCursor(PP_Instance instance,PP_MouseCursor_Type type,PP_Resource image,const PP_Point * hot_spot)242 PP_Bool PluginInstance::SetCursor(PP_Instance instance,
243                                   PP_MouseCursor_Type type,
244                                   PP_Resource image,
245                                   const PP_Point* hot_spot) {
246   NOTIMPLEMENTED();
247   return PP_FALSE;
248 }
249 
LockMouse(PP_Instance instance,scoped_refptr<ppapi::TrackedCallback> callback)250 int32_t PluginInstance::LockMouse(
251     PP_Instance instance,
252     scoped_refptr<ppapi::TrackedCallback> callback) {
253   NOTIMPLEMENTED();
254   return PP_ERROR_FAILED;
255 }
256 
UnlockMouse(PP_Instance instance)257 void PluginInstance::UnlockMouse(PP_Instance instance) {
258   NOTIMPLEMENTED();
259 }
260 
SetTextInputType(PP_Instance instance,PP_TextInput_Type type)261 void PluginInstance::SetTextInputType(PP_Instance instance,
262                                       PP_TextInput_Type type) {
263   NOTIMPLEMENTED();
264 }
265 
UpdateCaretPosition(PP_Instance instance,const PP_Rect & caret,const PP_Rect & bounding_box)266 void PluginInstance::UpdateCaretPosition(PP_Instance instance,
267                                          const PP_Rect& caret,
268                                          const PP_Rect& bounding_box) {
269   NOTIMPLEMENTED();
270 }
271 
CancelCompositionText(PP_Instance instance)272 void PluginInstance::CancelCompositionText(PP_Instance instance) {
273   NOTIMPLEMENTED();
274 }
275 
SelectionChanged(PP_Instance instance)276 void PluginInstance::SelectionChanged(PP_Instance instance) {
277   NOTIMPLEMENTED();
278 }
279 
UpdateSurroundingText(PP_Instance instance,const char * text,uint32_t caret,uint32_t anchor)280 void PluginInstance::UpdateSurroundingText(PP_Instance instance,
281                                            const char* text,
282                                            uint32_t caret,
283                                            uint32_t anchor) {
284   NOTIMPLEMENTED();
285 }
286 
ZoomChanged(PP_Instance instance,double factor)287 void PluginInstance::ZoomChanged(PP_Instance instance, double factor) {
288   NOTIMPLEMENTED();
289 }
290 
ZoomLimitsChanged(PP_Instance instance,double minimum_factor,double maximum_factor)291 void PluginInstance::ZoomLimitsChanged(PP_Instance instance,
292                                        double minimum_factor,
293                                        double maximum_factor) {
294   NOTIMPLEMENTED();
295 }
296 
GetDocumentURL(PP_Instance instance,PP_URLComponents_Dev * components)297 PP_Var PluginInstance::GetDocumentURL(PP_Instance instance,
298                                       PP_URLComponents_Dev* components) {
299   NOTIMPLEMENTED();
300   return PP_MakeUndefined();
301 }
302 
PromiseResolved(PP_Instance instance,uint32 promise_id)303 void PluginInstance::PromiseResolved(PP_Instance instance, uint32 promise_id) {
304   NOTIMPLEMENTED();
305 }
306 
PromiseResolvedWithSession(PP_Instance instance,uint32 promise_id,PP_Var web_session_id_var)307 void PluginInstance::PromiseResolvedWithSession(PP_Instance instance,
308                                                 uint32 promise_id,
309                                                 PP_Var web_session_id_var) {
310   NOTIMPLEMENTED();
311 }
312 
PromiseRejected(PP_Instance instance,uint32 promise_id,PP_CdmExceptionCode exception_code,uint32 system_code,PP_Var error_description_var)313 void PluginInstance::PromiseRejected(PP_Instance instance,
314                                      uint32 promise_id,
315                                      PP_CdmExceptionCode exception_code,
316                                      uint32 system_code,
317                                      PP_Var error_description_var) {
318   NOTIMPLEMENTED();
319 }
320 
SessionMessage(PP_Instance instance,PP_Var web_session_id_var,PP_Var message_var,PP_Var destination_url_var)321 void PluginInstance::SessionMessage(PP_Instance instance,
322                                     PP_Var web_session_id_var,
323                                     PP_Var message_var,
324                                     PP_Var destination_url_var) {
325   NOTIMPLEMENTED();
326 }
327 
SessionReady(PP_Instance instance,PP_Var web_session_id_var)328 void PluginInstance::SessionReady(PP_Instance instance,
329                                   PP_Var web_session_id_var) {
330   NOTIMPLEMENTED();
331 }
332 
SessionClosed(PP_Instance instance,PP_Var web_session_id_var)333 void PluginInstance::SessionClosed(PP_Instance instance,
334                                    PP_Var web_session_id_var) {
335   NOTIMPLEMENTED();
336 }
337 
SessionError(PP_Instance instance,PP_Var web_session_id_var,PP_CdmExceptionCode exception_code,uint32 system_code,PP_Var error_description_var)338 void PluginInstance::SessionError(PP_Instance instance,
339                                   PP_Var web_session_id_var,
340                                   PP_CdmExceptionCode exception_code,
341                                   uint32 system_code,
342                                   PP_Var error_description_var) {
343   NOTIMPLEMENTED();
344 }
345 
DeliverBlock(PP_Instance instance,PP_Resource decrypted_block,const PP_DecryptedBlockInfo * block_info)346 void PluginInstance::DeliverBlock(PP_Instance instance,
347                                   PP_Resource decrypted_block,
348                                   const PP_DecryptedBlockInfo* block_info) {
349   NOTIMPLEMENTED();
350 }
351 
DecoderInitializeDone(PP_Instance instance,PP_DecryptorStreamType decoder_type,uint32_t request_id,PP_Bool success)352 void PluginInstance::DecoderInitializeDone(PP_Instance instance,
353                                            PP_DecryptorStreamType decoder_type,
354                                            uint32_t request_id,
355                                            PP_Bool success) {
356   NOTIMPLEMENTED();
357 }
358 
DecoderDeinitializeDone(PP_Instance instance,PP_DecryptorStreamType decoder_type,uint32_t request_id)359 void PluginInstance::DecoderDeinitializeDone(
360     PP_Instance instance,
361     PP_DecryptorStreamType decoder_type,
362     uint32_t request_id) {
363   NOTIMPLEMENTED();
364 }
365 
DecoderResetDone(PP_Instance instance,PP_DecryptorStreamType decoder_type,uint32_t request_id)366 void PluginInstance::DecoderResetDone(PP_Instance instance,
367                                       PP_DecryptorStreamType decoder_type,
368                                       uint32_t request_id) {
369   NOTIMPLEMENTED();
370 }
371 
DeliverFrame(PP_Instance instance,PP_Resource decrypted_frame,const PP_DecryptedFrameInfo * frame_info)372 void PluginInstance::DeliverFrame(PP_Instance instance,
373                                   PP_Resource decrypted_frame,
374                                   const PP_DecryptedFrameInfo* frame_info) {
375   NOTIMPLEMENTED();
376 }
377 
DeliverSamples(PP_Instance instance,PP_Resource audio_frames,const PP_DecryptedSampleInfo * sample_info)378 void PluginInstance::DeliverSamples(PP_Instance instance,
379                                     PP_Resource audio_frames,
380                                     const PP_DecryptedSampleInfo* sample_info) {
381   NOTIMPLEMENTED();
382 }
383 
ResolveRelativeToDocument(PP_Instance instance,PP_Var relative,PP_URLComponents_Dev * components)384 PP_Var PluginInstance::ResolveRelativeToDocument(
385     PP_Instance instance,
386     PP_Var relative,
387     PP_URLComponents_Dev* components) {
388   NOTIMPLEMENTED();
389   return PP_MakeUndefined();
390 }
391 
DocumentCanRequest(PP_Instance instance,PP_Var url)392 PP_Bool PluginInstance::DocumentCanRequest(PP_Instance instance, PP_Var url) {
393   NOTIMPLEMENTED();
394   return PP_FALSE;
395 }
396 
DocumentCanAccessDocument(PP_Instance instance,PP_Instance target)397 PP_Bool PluginInstance::DocumentCanAccessDocument(PP_Instance instance,
398                                                   PP_Instance target) {
399   NOTIMPLEMENTED();
400   return PP_FALSE;
401 }
402 
GetPluginInstanceURL(PP_Instance instance,PP_URLComponents_Dev * components)403 PP_Var PluginInstance::GetPluginInstanceURL(PP_Instance instance,
404                                             PP_URLComponents_Dev* components) {
405   NOTIMPLEMENTED();
406   return PP_MakeUndefined();
407 }
408 
GetPluginReferrerURL(PP_Instance instance,PP_URLComponents_Dev * components)409 PP_Var PluginInstance::GetPluginReferrerURL(PP_Instance instance,
410                                             PP_URLComponents_Dev* components) {
411   NOTIMPLEMENTED();
412   return PP_MakeUndefined();
413 }
414 
415 }  // namespace examples
416 }  // namespace mojo
417