// Copyright (c) 2011 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_SHARED_IMPL_PPB_IMAGE_DATA_SHARED_H_
#define PPAPI_SHARED_IMPL_PPB_IMAGE_DATA_SHARED_H_

#include "ppapi/c/pp_bool.h"
#include "ppapi/c/ppb_image_data.h"
#include "ppapi/shared_impl/ppapi_shared_export.h"

namespace ppapi {

// Contains the implementation of some simple image data functions that are
// shared between the proxy and Chrome's implementation. Since these functions
// are just lists of what we support, it's much easier to just have the same
// code run in the plugin process than to proxy it.
//
// It's possible the implementation will get more complex. In this case, it's
// probably best to have some kind of "configuration" message that the renderer
// sends to the plugin process on startup that contains all of these kind of
// settings.
class PPAPI_SHARED_EXPORT PPB_ImageData_Shared {
 public:
  enum ImageDataType {
    // An ImageData backed by a PlatformCanvas. You must create this type if
    // you intend the ImageData to be usable in platform-specific APIs (like
    // font rendering or rendering widgets like scrollbars). This type is not
    // available in untrusted (NaCl) plugins.
    PLATFORM,
    // An ImageData that doesn't need access to the platform-specific canvas.
    // This is backed by a simple shared memory buffer. This is the only type
    // of ImageData that can be used by untrusted (NaCl) plugins.
    SIMPLE
  };

  static PP_ImageDataFormat GetNativeImageDataFormat();
  static PP_Bool IsImageDataFormatSupported(PP_ImageDataFormat format);
  static PP_Bool IsImageDataDescValid(const PP_ImageDataDesc& desc);
};

}  // namespace ppapi

#endif  // PPAPI_SHARED_IMPL_PPB_IMAGE_DATA_SHARED_H_
