15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_errors.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/private/ppb_flash_clipboard.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/enter.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/ppb_flash_clipboard_api.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/thunk.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace thunk {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t RegisterCustomFormat(PP_Instance instance,
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const char* format_name) {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EnterInstanceAPI<PPB_Flash_Clipboard_API> enter(instance);
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_FALSE;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return enter.functions()->RegisterCustomFormat(instance, format_name);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsFormatAvailable(PP_Instance instance,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          PP_Flash_Clipboard_Type clipboard_type,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          uint32_t format) {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EnterInstanceAPI<PPB_Flash_Clipboard_API> enter(instance);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_FALSE;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return enter.functions()->IsFormatAvailable(instance, clipboard_type, format);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Var ReadData(PP_Instance instance,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                PP_Flash_Clipboard_Type clipboard_type,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                uint32_t format) {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EnterInstanceAPI<PPB_Flash_Clipboard_API> enter(instance);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_MakeUndefined();
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return enter.functions()->ReadData(instance, clipboard_type, format);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t WriteData(PP_Instance instance,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  PP_Flash_Clipboard_Type clipboard_type,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  uint32_t data_item_count,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  const uint32_t formats[],
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  const PP_Var data_items[]) {
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EnterInstanceAPI<PPB_Flash_Clipboard_API> enter(instance);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.failed())
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return enter.retval();
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return enter.functions()->WriteData(
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      instance, clipboard_type, data_item_count, formats, data_items);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsFormatAvailable_4_0(PP_Instance instance,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              PP_Flash_Clipboard_Type clipboard_type,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              PP_Flash_Clipboard_Format format) {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return IsFormatAvailable(instance, clipboard_type,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           static_cast<uint32_t>(format));
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Var ReadData_4_0(PP_Instance instance,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    PP_Flash_Clipboard_Type clipboard_type,
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    PP_Flash_Clipboard_Format format) {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return ReadData(instance, clipboard_type, static_cast<uint32_t>(format));
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t WriteData_4_0(PP_Instance instance,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      PP_Flash_Clipboard_Type clipboard_type,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      uint32_t data_item_count,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const PP_Flash_Clipboard_Format formats[],
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const PP_Var data_items[]) {
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<uint32_t[]> new_formats(new uint32_t[data_item_count]);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (uint32_t i = 0; i < data_item_count; ++i)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    new_formats[i] = static_cast<uint32_t>(formats[i]);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return WriteData(instance, clipboard_type, data_item_count,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   new_formats.get(), data_items);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PP_Bool GetSequenceNumber(PP_Instance instance,
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                          PP_Flash_Clipboard_Type clipboard_type,
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                          uint64_t* sequence_number) {
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EnterInstanceAPI<PPB_Flash_Clipboard_API> enter(instance);
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (enter.failed())
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return PP_FALSE;
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return enter.functions()->GetSequenceNumber(instance, clipboard_type,
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                              sequence_number);
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Flash_Clipboard_4_0 g_ppb_flash_clipboard_thunk_4_0 = {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &IsFormatAvailable_4_0,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &ReadData_4_0,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &WriteData_4_0
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Flash_Clipboard_5_0 g_ppb_flash_clipboard_thunk_5_0 = {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &RegisterCustomFormat,
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &IsFormatAvailable,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &ReadData,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &WriteData
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const PPB_Flash_Clipboard_5_1 g_ppb_flash_clipboard_thunk_5_1 = {
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &RegisterCustomFormat,
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &IsFormatAvailable,
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &ReadData,
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &WriteData,
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  &GetSequenceNumber
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Flash_Clipboard_4_0* GetPPB_Flash_Clipboard_4_0_Thunk() {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &g_ppb_flash_clipboard_thunk_4_0;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Flash_Clipboard_5_0* GetPPB_Flash_Clipboard_5_0_Thunk() {
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &g_ppb_flash_clipboard_thunk_5_0;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const PPB_Flash_Clipboard_5_1* GetPPB_Flash_Clipboard_5_1_Thunk() {
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return &g_ppb_flash_clipboard_thunk_5_1;
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace thunk
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ppapi
127