// 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 "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 { SB_UNREFERENCED_PARAMETER(bitrate); }

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

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

#endif  // COBALT_MEDIA_SANDBOX_IN_MEMORY_DATA_SOURCE_H_
