// 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 <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>(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
