// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_FONT_UNIQUE_NAME_LOOKUP_FONT_TABLE_PERSISTENCE_H_
#define THIRD_PARTY_BLINK_PUBLIC_COMMON_FONT_UNIQUE_NAME_LOOKUP_FONT_TABLE_PERSISTENCE_H_
#include "base/files/file.h"
#include "base/memory/read_only_shared_memory_region.h"
#include "third_party/blink/public/common/common_export.h"
#include "third_party/blink/public/common/font_unique_name_lookup/font_unique_name_table.pb.h"
namespace blink {
// Persistence functions for storing to and reading from disk the font table
// lookup structure. The storage format is a pickle of a PersistenceHash prefix
// computed over the protobuf, followed by a dump of the FontUniqueNameTable
// protobuf. The persistence functions ensure that the format is followed, that
// persisting stores the checksum and reading validates the checksum.
namespace font_table_persistence {
// Load a FontUniqueNameTable protobuf from a persistence file, and if the
// checksum validates correctly, allocate the MappedReadOnlyRegion and copy the
// read ProtoBuf into it. Returns true on success, false on failures such as
// inabilitiy to access the file, empty file, incorrect checksum, or failing to
// parse the read dump as a FontUniqueNameTable protobuf.
bool BLINK_COMMON_EXPORT
LoadFromFile(base::FilePath file_path,
base::MappedReadOnlyRegion* name_table_region);
// Store a FontUniqueNameTable protobuf to a dump file, prefixing the protobuf
// dump with a PersistenceHash checksum. Returns true on success, false on
// failures such as failing to open the file or failing to write the dump into
// it.
bool BLINK_COMMON_EXPORT
PersistToFile(const base::MappedReadOnlyRegion& name_table_region,
base::FilePath file_path);
} // namespace font_table_persistence
} // namespace blink
#endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_FONT_UNIQUE_NAME_LOOKUP_FONT_TABLE_PERSISTENCE_H_