| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "extensions/common/icons/extension_icon_variants.h" |
| |
| #include "base/values.h" |
| #include "extensions/buildflags/buildflags.h" |
| #include "extensions/common/icons/extension_icon_variants_diagnostics.h" |
| |
| static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE)); |
| |
| namespace extensions { |
| |
| namespace { |
| using Diagnostic = diagnostics::icon_variants::Diagnostic; |
| } // namespace |
| |
| ExtensionIconVariants::ExtensionIconVariants() = default; |
| |
| ExtensionIconVariants::~ExtensionIconVariants() = default; |
| |
| ExtensionIconVariants::ExtensionIconVariants(ExtensionIconVariants&& other) = |
| default; |
| |
| ExtensionIconVariants::ExtensionIconVariants( |
| const ExtensionIconVariants& other) = default; |
| |
| void ExtensionIconVariants::Parse(const Extension& extension, |
| const base::Value::List* list) { |
| // Parse each icon variant in `icon_variants`. |
| for (auto& entry : *list) { |
| std::string issue; |
| std::unique_ptr<ExtensionIconVariant> icon_variant = |
| ExtensionIconVariant::Parse(extension, entry); |
| if (!icon_variant) { |
| diagnostics_.emplace_back(diagnostics::icon_variants::GetDiagnostic( |
| diagnostics::icon_variants::Feature::kIconVariants, |
| diagnostics::icon_variants::Id::kEmptyIconVariant)); |
| continue; |
| } |
| |
| // Move diagnostics for an icon_variant directly into icon_variants. |
| auto& diagnostics = icon_variant->get_diagnostics(); |
| diagnostics_.insert(diagnostics_.end(), diagnostics.begin(), |
| diagnostics.end()); |
| diagnostics.clear(); |
| |
| list_.emplace_back(std::move(*icon_variant)); |
| } |
| |
| // Add a warning for an empty list, but don't generate an error. |
| if (list_.empty()) { |
| diagnostics_.emplace_back(diagnostics::icon_variants::GetDiagnostic( |
| diagnostics::icon_variants::Feature::kIconVariants, |
| diagnostics::icon_variants::Id::kIconVariantsEmpty)); |
| } |
| } |
| |
| bool ExtensionIconVariants::IsEmpty() const { |
| return list_.empty(); |
| } |
| |
| void ExtensionIconVariants::Add( |
| std::unique_ptr<ExtensionIconVariant> icon_variant) { |
| list_.emplace_back(std::move(*icon_variant)); |
| } |
| |
| void ExtensionIconVariants::AddDiagnostic( |
| diagnostics::icon_variants::Feature feature, |
| diagnostics::icon_variants::Id id) { |
| diagnostics_.emplace_back( |
| diagnostics::icon_variants::GetDiagnostic(feature, id)); |
| } |
| |
| } // namespace extensions |