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/c/trusted/ppb_broker_trusted.h" 6 #include "ppapi/c/pp_errors.h" 7 #include "ppapi/shared_impl/tracked_callback.h" 8 #include "ppapi/thunk/enter.h" 9 #include "ppapi/thunk/thunk.h" 10 #include "ppapi/thunk/ppb_broker_api.h" 11 #include "ppapi/thunk/resource_creation_api.h" 12 13 namespace ppapi { 14 namespace thunk { 15 16 namespace { 17 18 PP_Resource CreateTrusted(PP_Instance instance) { 19 EnterResourceCreation enter(instance); 20 if (enter.failed()) 21 return 0; 22 return enter.functions()->CreateBroker(instance); 23 } 24 25 PP_Bool IsBrokerTrusted(PP_Resource resource) { 26 EnterResource<PPB_Broker_API> enter(resource, false); 27 return PP_FromBool(enter.succeeded()); 28 } 29 30 int32_t Connect(PP_Resource resource, 31 PP_CompletionCallback callback) { 32 EnterResource<PPB_Broker_API> enter(resource, callback, true); 33 if (enter.failed()) 34 return enter.retval(); 35 return enter.SetResult(enter.object()->Connect(enter.callback())); 36 } 37 38 int32_t GetHandle(PP_Resource resource, int32_t* handle) { 39 EnterResource<PPB_Broker_API> enter(resource, true); 40 if (enter.failed()) 41 return enter.retval(); 42 return enter.object()->GetHandle(handle); 43 } 44 45 PP_Bool IsAllowed(PP_Resource resource) { 46 // TODO(raymes): This is a hack. See the note in ppb_broker_api.h. 47 PP_Instance instance = 0; 48 { 49 EnterResource<PPB_Broker_API> enter_resource(resource, true); 50 if (enter_resource.failed()) 51 return PP_FALSE; 52 instance = enter_resource.resource()->pp_instance(); 53 } 54 EnterInstanceAPI<PPB_Broker_Instance_API> enter_instance(instance); 55 if (enter_instance.failed()) 56 return PP_FALSE; 57 return enter_instance.functions()->IsAllowed(); 58 } 59 60 const PPB_BrokerTrusted_0_2 g_ppb_broker_0_2_thunk = { 61 &CreateTrusted, 62 &IsBrokerTrusted, 63 &Connect, 64 &GetHandle, 65 }; 66 67 const PPB_BrokerTrusted_0_3 g_ppb_broker_0_3_thunk = { 68 &CreateTrusted, 69 &IsBrokerTrusted, 70 &Connect, 71 &GetHandle, 72 &IsAllowed, 73 }; 74 75 } // namespace 76 77 const PPB_BrokerTrusted_0_2* GetPPB_BrokerTrusted_0_2_Thunk() { 78 return &g_ppb_broker_0_2_thunk; 79 } 80 81 const PPB_BrokerTrusted_0_3* GetPPB_BrokerTrusted_0_3_Thunk() { 82 return &g_ppb_broker_0_3_thunk; 83 } 84 85 } // namespace thunk 86 } // namespace ppapi 87