12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// From ../test_thunk/simple.idl modified Fri Nov 16 11:26:06 2012.
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/../test_thunk/simple.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/pp_errors.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/shared_impl/tracked_callback.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/thunk/enter.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/thunk/ppb_instance_api.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/thunk/resource_creation_api.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/thunk/simple_api.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/thunk/thunk.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ppapi {
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace thunk {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Resource Create(PP_Instance instance) {
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  VLOG(4) << "PPB_Simple::Create()";
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EnterResourceCreation enter(instance);
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (enter.failed())
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return 0;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return enter.functions()->CreateSimple(instance);
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Bool IsSimple(PP_Resource resource) {
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  VLOG(4) << "PPB_Simple::IsSimple()";
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EnterResource<PPB_Simple_API> enter(resource, false);
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return PP_FromBool(enter.succeeded());
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PostMessage(PP_Instance instance, PP_Var message) {
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  VLOG(4) << "PPB_Simple::PostMessage()";
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EnterInstance enter(instance);
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  if (enter.failed())
3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return;
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  enter.functions()->PostMessage(instance, message);
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)uint32_t DoUint32Instance_0_5(PP_Instance instance) {
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  VLOG(4) << "PPB_Simple::DoUint32Instance()";
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EnterInstance enter(instance);
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  if (enter.failed())
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return 0;
4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return enter.functions()->DoUint32Instance0_5(instance);
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)uint32_t DoUint32Instance(PP_Instance instance, PP_Resource resource) {
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  VLOG(4) << "PPB_Simple::DoUint32Instance()";
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EnterInstance enter(instance);
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (enter.failed())
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return 0;
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return enter.functions()->DoUint32Instance(instance, resource);
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint32_t DoUint32Resource(PP_Resource instance) {
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  VLOG(4) << "PPB_Simple::DoUint32Resource()";
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EnterResource<PPB_Simple_API> enter(instance, true);
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (enter.failed())
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return 0;
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return enter.object()->DoUint32Resource();
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint32_t DoUint32ResourceNoErrors(PP_Resource instance) {
6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  VLOG(4) << "PPB_Simple::DoUint32ResourceNoErrors()";
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EnterResource<PPB_Simple_API> enter(instance, false);
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (enter.failed())
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return 0;
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return enter.object()->DoUint32ResourceNoErrors();
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t OnFailure12(PP_Instance instance) {
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  VLOG(4) << "PPB_Simple::OnFailure12()";
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EnterInstance enter(instance);
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (enter.failed())
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return 12;
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return enter.functions()->OnFailure12(instance);
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const PPB_Simple_0_5 g_ppb_simple_thunk_0_5 = {
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  &Create,
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  &IsSimple,
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  &PostMessage,
8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  &DoUint32Instance_0_5,
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  &DoUint32Resource,
8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  &DoUint32ResourceNoErrors
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const PPB_Simple_1_0 g_ppb_simple_thunk_1_0 = {
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  &Create,
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  &IsSimple,
9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  &DoUint32Instance_0_5,
9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  &DoUint32Resource,
9790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  &DoUint32ResourceNoErrors,
9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  &OnFailure12
9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)};
10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const PPB_Simple_1_5 g_ppb_simple_thunk_1_5 = {
10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  &Create,
10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  &IsSimple,
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  &DoUint32Instance,
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  &DoUint32Resource,
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  &DoUint32ResourceNoErrors,
10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  &OnFailure12
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const PPB_Simple_0_5* GetPPB_Simple_0_5_Thunk() {
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return &g_ppb_simple_thunk_0_5;
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const PPB_Simple_1_0* GetPPB_Simple_1_0_Thunk() {
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return &g_ppb_simple_thunk_1_0;
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const PPB_Simple_1_5* GetPPB_Simple_1_5_Thunk() {
12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return &g_ppb_simple_thunk_1_5;
12290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
12390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace thunk
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace ppapi
126