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

#include "printing/metafile.h"

#include <stdint.h>

#include <vector>

#include "base/files/file.h"
#include "base/logging.h"
#include "base/memory/read_only_shared_memory_region.h"
#include "base/numerics/safe_conversions.h"
#include "build/build_config.h"

namespace printing {

MetafilePlayer::MetafilePlayer() = default;

MetafilePlayer::~MetafilePlayer() = default;

Metafile::Metafile() = default;

Metafile::~Metafile() = default;

bool Metafile::GetDataAsVector(std::vector<char>* buffer) const {
  buffer->resize(GetDataSize());
  if (buffer->empty())
    return false;
  return GetData(&buffer->front(),
                 base::checked_cast<uint32_t>(buffer->size()));
}

base::MappedReadOnlyRegion Metafile::GetDataAsSharedMemoryRegion() const {
  uint32_t data_size = GetDataSize();
  if (data_size == 0) {
    DLOG(ERROR) << "Metafile has no data to map to a region.";
    return base::MappedReadOnlyRegion();
  }

  base::MappedReadOnlyRegion region_mapping =
      base::ReadOnlySharedMemoryRegion::Create(data_size);
  if (!region_mapping.IsValid()) {
    DLOG(ERROR) << "Failure mapping metafile data into region for size "
                << data_size;
    return base::MappedReadOnlyRegion();
  }

  if (!GetData(region_mapping.mapping.memory(), data_size)) {
    DLOG(ERROR) << "Failure getting metafile data into region";
    return base::MappedReadOnlyRegion();
  }

  return region_mapping;
}

#if !BUILDFLAG(IS_ANDROID)
bool Metafile::SaveTo(base::File* file) const {
  if (!file->IsValid())
    return false;

  std::vector<char> buffer;
  if (!GetDataAsVector(&buffer))
    return false;

  if (!file->WriteAtCurrentPosAndCheck(
          base::as_bytes(base::make_span(buffer)))) {
    DLOG(ERROR) << "Failed to save file.";
    return false;
  }
  return true;
}
#endif  // !BUILDFLAG(IS_ANDROID)

}  // namespace printing
