// 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/numerics/safe_conversions.h"

namespace printing {

MetafilePlayer::MetafilePlayer() {
}

MetafilePlayer::~MetafilePlayer() {
}

Metafile::Metafile() {
}

Metafile::~Metafile() {
}

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()));
}

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

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

  int size = base::checked_cast<int>(buffer.size());
  if (file->WriteAtCurrentPos(&buffer[0], size) != size) {
    DLOG(ERROR) << "Failed to save file.";
    return false;
  }
  return true;
}

}  // namespace printing
