Home | History | Annotate | Download | only in thunk
      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/pp_errors.h"
      6 #include "ppapi/c/private/ppb_talk_private.h"
      7 #include "ppapi/shared_impl/tracked_callback.h"
      8 #include "ppapi/thunk/enter.h"
      9 #include "ppapi/thunk/ppb_talk_private_api.h"
     10 #include "ppapi/thunk/thunk.h"
     11 
     12 namespace ppapi {
     13 namespace thunk {
     14 
     15 namespace {
     16 
     17 PP_Resource Create(PP_Instance instance) {
     18   EnterResourceCreation enter(instance);
     19   if (enter.failed())
     20     return 0;
     21   return enter.functions()->CreateTalk(instance);
     22 }
     23 
     24 int32_t GetPermission(PP_Resource resource,
     25                       PP_CompletionCallback callback) {
     26   EnterResource<PPB_Talk_Private_API> enter(resource, callback, true);
     27   if (enter.failed())
     28     return PP_ERROR_BADRESOURCE;
     29   return enter.SetResult(enter.object()->RequestPermission(
     30       PP_TALKPERMISSION_SCREENCAST, enter.callback()));
     31 }
     32 
     33 int32_t RequestPermission(PP_Resource resource,
     34                           PP_TalkPermission permission,
     35                           PP_CompletionCallback callback) {
     36   EnterResource<PPB_Talk_Private_API> enter(resource, callback, true);
     37   if (enter.failed())
     38     return PP_ERROR_BADRESOURCE;
     39   return enter.SetResult(
     40       enter.object()->RequestPermission(permission, enter.callback()));
     41 }
     42 
     43 int32_t StartRemoting(PP_Resource resource,
     44                       PP_TalkEventCallback event_callback,
     45                       void* user_data,
     46                       PP_CompletionCallback callback) {
     47   EnterResource<PPB_Talk_Private_API> enter(resource, callback, true);
     48   if (enter.failed())
     49     return PP_ERROR_BADRESOURCE;
     50   return enter.SetResult(
     51       enter.object()->StartRemoting(event_callback, user_data,
     52                                     enter.callback()));
     53 }
     54 
     55 int32_t StopRemoting(PP_Resource resource,
     56                   PP_CompletionCallback callback) {
     57   EnterResource<PPB_Talk_Private_API> enter(resource, callback, true);
     58   if (enter.failed())
     59     return PP_ERROR_BADRESOURCE;
     60   return enter.SetResult(
     61       enter.object()->StopRemoting(enter.callback()));
     62 }
     63 
     64 const PPB_Talk_Private_1_0 g_ppb_talk_private_thunk_1_0 = {
     65   &Create,
     66   &GetPermission
     67 };
     68 
     69 const PPB_Talk_Private_2_0 g_ppb_talk_private_thunk_2_0 = {
     70   &Create,
     71   &RequestPermission,
     72   &StartRemoting,
     73   &StopRemoting
     74 };
     75 
     76 }  // namespace
     77 
     78 const PPB_Talk_Private_1_0* GetPPB_Talk_Private_1_0_Thunk() {
     79   return &g_ppb_talk_private_thunk_1_0;
     80 }
     81 
     82 const PPB_Talk_Private_2_0* GetPPB_Talk_Private_2_0_Thunk() {
     83   return &g_ppb_talk_private_thunk_2_0;
     84 }
     85 
     86 }  // namespace thunk
     87 }  // namespace ppapi
     88