1 // Copyright 2021 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "cc/paint/skottie_resource_metadata.h"
9 #include "base/check.h"
10 #include "base/hash/hash.h"
11 #include "base/logging.h"
12 #include "base/strings/utf_string_conversions.h"
16 SkottieResourceMetadataMap::ImageAssetMetadata::ImageAssetMetadata(
17 base::FilePath resource_path_in,
18 absl::optional<gfx::Size> size_in)
19 : resource_path(std::move(resource_path_in)), size(std::move(size_in)) {}
21 SkottieResourceMetadataMap::SkottieResourceMetadataMap() = default;
23 SkottieResourceMetadataMap::SkottieResourceMetadataMap(
24 const SkottieResourceMetadataMap&) = default;
26 SkottieResourceMetadataMap& SkottieResourceMetadataMap::operator=(
27 const SkottieResourceMetadataMap&) = default;
29 SkottieResourceMetadataMap::~SkottieResourceMetadataMap() = default;
31 bool SkottieResourceMetadataMap::RegisterAsset(base::StringPiece resource_path,
32 base::StringPiece resource_name,
33 base::StringPiece resource_id,
34 absl::optional<gfx::Size> size) {
35 DCHECK(!size || !size->IsEmpty());
36 if (resource_id.empty()) {
37 LOG(ERROR) << "Skottie animation has asset with empty resource_id";
41 base::FilePath resource_name_component =
42 base::FilePath::FromASCII(resource_name);
43 if (resource_name_component.IsAbsolute()) {
44 // If the path is absolute, base::FilePath::Append() will fail anyways,
45 // likely with a fatal error.
46 LOG(ERROR) << "Skottie animation specifies an absolute resource_name path: "
47 << resource_name << ". Must be relative.";
51 bool inserted = asset_storage_
52 .try_emplace(std::string(resource_id),
53 base::FilePath::FromASCII(resource_path)
54 .Append(resource_name_component),
58 LOG(ERROR) << "Skottie animation has assets with duplicate resource_id: "
64 SkottieResourceIdHash HashSkottieResourceId(base::StringPiece resource_id) {
65 return SkottieResourceIdHash::FromUnsafeValue(
66 base::PersistentHash(resource_id.data(), resource_id.length()));