• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "ppapi/shared_impl/ppp_instance_combined.h"
6 #include "ppapi/shared_impl/proxy_lock.h"
7 
8 namespace ppapi {
9 
10 // static
Create(base::Callback<const void * (const char *)> get_interface_func)11 PPP_Instance_Combined* PPP_Instance_Combined::Create(
12     base::Callback<const void*(const char*)> get_interface_func) {
13   // Try 1.1.
14   const void* ppp_instance = get_interface_func.Run(PPP_INSTANCE_INTERFACE_1_1);
15   if (ppp_instance) {
16     const PPP_Instance_1_1* ppp_instance_1_1 =
17         static_cast<const PPP_Instance_1_1*>(ppp_instance);
18     return new PPP_Instance_Combined(*ppp_instance_1_1);
19   }
20   // Failing that, try 1.0.
21   ppp_instance = get_interface_func.Run(PPP_INSTANCE_INTERFACE_1_0);
22   if (ppp_instance) {
23     const PPP_Instance_1_0* ppp_instance_1_0 =
24         static_cast<const PPP_Instance_1_0*>(ppp_instance);
25     return new PPP_Instance_Combined(*ppp_instance_1_0);
26   }
27   // No supported PPP_Instance version found.
28   return NULL;
29 }
30 
PPP_Instance_Combined(const PPP_Instance_1_0 & instance_if)31 PPP_Instance_Combined::PPP_Instance_Combined(
32     const PPP_Instance_1_0& instance_if)
33     : did_change_view_1_0_(instance_if.DidChangeView) {
34   instance_1_1_.DidCreate = instance_if.DidCreate;
35   instance_1_1_.DidDestroy = instance_if.DidDestroy;
36   instance_1_1_.DidChangeView = NULL;
37   instance_1_1_.DidChangeFocus = instance_if.DidChangeFocus;
38   instance_1_1_.HandleDocumentLoad = instance_if.HandleDocumentLoad;
39 }
40 
PPP_Instance_Combined(const PPP_Instance_1_1 & instance_if)41 PPP_Instance_Combined::PPP_Instance_Combined(
42     const PPP_Instance_1_1& instance_if)
43     : instance_1_1_(instance_if),
44       did_change_view_1_0_(NULL) {
45 }
46 
DidCreate(PP_Instance instance,uint32_t argc,const char * argn[],const char * argv[])47 PP_Bool PPP_Instance_Combined::DidCreate(PP_Instance instance,
48                                          uint32_t argc,
49                                          const char* argn[],
50                                          const char* argv[]) {
51   return CallWhileUnlocked(instance_1_1_.DidCreate, instance, argc, argn, argv);
52 }
53 
DidDestroy(PP_Instance instance)54 void PPP_Instance_Combined::DidDestroy(PP_Instance instance) {
55   return CallWhileUnlocked(instance_1_1_.DidDestroy, instance);
56 }
57 
DidChangeView(PP_Instance instance,PP_Resource view_changed_resource,const struct PP_Rect * position,const struct PP_Rect * clip)58 void PPP_Instance_Combined::DidChangeView(PP_Instance instance,
59                                           PP_Resource view_changed_resource,
60                                           const struct PP_Rect* position,
61                                           const struct PP_Rect* clip) {
62   if (instance_1_1_.DidChangeView) {
63     CallWhileUnlocked(instance_1_1_.DidChangeView,
64                       instance,
65                       view_changed_resource);
66   } else {
67     CallWhileUnlocked(did_change_view_1_0_, instance, position, clip);
68   }
69 }
70 
DidChangeFocus(PP_Instance instance,PP_Bool has_focus)71 void PPP_Instance_Combined::DidChangeFocus(PP_Instance instance,
72                                            PP_Bool has_focus) {
73   CallWhileUnlocked(instance_1_1_.DidChangeFocus, instance, has_focus);
74 }
75 
HandleDocumentLoad(PP_Instance instance,PP_Resource url_loader)76 PP_Bool PPP_Instance_Combined::HandleDocumentLoad(PP_Instance instance,
77                                                   PP_Resource url_loader) {
78   return CallWhileUnlocked(instance_1_1_.HandleDocumentLoad,
79                            instance,
80                            url_loader);
81 }
82 
83 }  // namespace ppapi
84 
85