// Copyright 2016 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_MEDIA_SANDBOX_IN_MEMORY_DATA_SOURCE_H_
#define COBALT_MEDIA_SANDBOX_IN_MEMORY_DATA_SOURCE_H_

#include <vector>

#include "base/compiler_specific.h"
#include "cobalt/media/base/data_source.h"

namespace cobalt {
namespace media {
namespace sandbox {

// A BufferedDataSource that keeps all its data in memory.  This is used for
// testing or fuzzing only.
class InMemoryDataSource : public ::media::DataSource {
 public:
  static const int64 kInvalidSize = -1;

  explicit InMemoryDataSource(const std::vector<uint8>& content);

  // DataSource methods.
  void Read(int64 position, int size, uint8* data,
            const ReadCB& read_cb) override;
  void Stop() override;
  bool GetSize(int64* size_out) override;
  bool IsStreaming() override { return false; }
  void SetBitrate(int bitrate) override {}

 private:
  std::vector<uint8> content_;
};

}  // namespace sandbox
}  // namespace media
}  // namespace cobalt

#endif  // COBALT_MEDIA_SANDBOX_IN_MEMORY_DATA_SOURCE_H_
