// Copyright 2016 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.

// The <code>chrome.clipboard</code> API is provided to allow users to
// access data of the clipboard. This is a temporary solution for
// chromeos platform apps until open-web alternative is available. It will be
// deprecated once open-web solution is available, which could be in 2017 Q4.
[platforms=("chromeos"),
 implemented_in="extensions/browser/api/clipboard/clipboard_api.h"]
namespace clipboard {
  // Supported image types.
  enum ImageType {png, jpeg};
  
  enum DataItemType {textPlain, textHtml};
  
  // Additional data item to be added along with the |image_data| to describe
  // the |image_data|.
  dictionary AdditionalDataItem {
    // Type of the additional data item.
    DataItemType type;

    // Content of the additional data item. Either the plain text string if
    // |type| is "textPlain" or markup string if |type| is "textHtml". The
    // data can not exceed 2MB.
    DOMString data;
  };
  
  interface Events {
    // Fired when clipboard data changes.
    // Requires clipboard and clipboardRead permissions for adding listener to
    // chrome.clipboard.onClipboardDataChanged event.
    // After this event fires, the clipboard data is available by calling
    // document.execCommand('paste').
    static void onClipboardDataChanged();
  };

  callback SetImageDataCallback = void();

  interface Functions {
    // Sets image data to clipboard.
    //
    // |imageData|: The encoded image data.
    // |type|: The type of image being passed.
    // |additionalItems|: Additional data items for describing image data.
    // The callback is called with <code>chrome.runtime.lastError</code>
    // set to error code if there is an error.
    // Requires clipboard and clipboardWrite permissions.
    static void setImageData(ArrayBuffer imageData,
                             ImageType type,
                             optional AdditionalDataItem[] additionalItems,
                             optional SetImageDataCallback callback);
  };
};
