// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef PPAPI_PROXY_FLASH_CLIPBOARD_RESOURCE_H_
#define PPAPI_PROXY_FLASH_CLIPBOARD_RESOURCE_H_

#include <stdint.h>

#include "base/macros.h"
#include "ppapi/proxy/connection.h"
#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/shared_impl/flash_clipboard_format_registry.h"
#include "ppapi/thunk/ppb_flash_clipboard_api.h"

namespace ppapi {
namespace proxy {

class FlashClipboardResource
    : public PluginResource,
      public NON_EXPORTED_BASE(thunk::PPB_Flash_Clipboard_API) {
 public:
  FlashClipboardResource(Connection connection, PP_Instance instance);
  ~FlashClipboardResource() override;

  // Resource implementation.
  thunk::PPB_Flash_Clipboard_API* AsPPB_Flash_Clipboard_API() override;

  // PPB_Flash_Clipboard_API implementation.
  uint32_t RegisterCustomFormat(PP_Instance instance,
                                const char* format_name) override;
  PP_Bool IsFormatAvailable(PP_Instance instance,
                            PP_Flash_Clipboard_Type clipboard_type,
                            uint32_t format) override;
  PP_Var ReadData(PP_Instance instance,
                  PP_Flash_Clipboard_Type clipboard_type,
                  uint32_t format) override;
  int32_t WriteData(PP_Instance instance,
                    PP_Flash_Clipboard_Type clipboard_type,
                    uint32_t data_item_count,
                    const uint32_t formats[],
                    const PP_Var data_items[]) override;
  PP_Bool GetSequenceNumber(
      PP_Instance instance,
      PP_Flash_Clipboard_Type clipboard_type,
      uint64_t* sequence_number) override;

 private:
  FlashClipboardFormatRegistry clipboard_formats_;

  DISALLOW_COPY_AND_ASSIGN(FlashClipboardResource);
};

}  // namespace proxy
}  // namespace ppapi

#endif  // PPAPI_PROXY_FLASH_CLIPBOARD_RESOURCE_H_
