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