// Copyright 2018 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef COBALT_DOM_SCREENSHOT_H_
#define COBALT_DOM_SCREENSHOT_H_

#include <string>

#include "cobalt/script/array_buffer.h"
#include "cobalt/script/wrappable.h"

namespace cobalt {
namespace dom {

class Screenshot : public script::Wrappable {
 public:
  explicit Screenshot(const script::Handle<script::ArrayBuffer>& pixel_data);

  // Readonly Attributes.
  script::Handle<script::ArrayBuffer> buffer() const {
    return script::Handle<script::ArrayBuffer>(pixel_data_reference_);
  }

  DEFINE_WRAPPABLE_TYPE(Screenshot);

 private:
  script::ScriptValue<script::ArrayBuffer>::Reference pixel_data_reference_;

  Screenshot(const Screenshot&) = delete;
  Screenshot& operator=(const Screenshot&) = delete;
};

}  // namespace dom
}  // namespace cobalt

#endif  // COBALT_DOM_SCREENSHOT_H_
