// Copyright 2019 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 "services/network/trust_tokens/in_memory_trust_token_persister.h" namespace network { InMemoryTrustTokenPersister::InMemoryTrustTokenPersister() = default; InMemoryTrustTokenPersister::~InMemoryTrustTokenPersister() = default; std::unique_ptr InMemoryTrustTokenPersister::GetToplevelConfig( const SuitableTrustTokenOrigin& toplevel) { auto it = toplevel_configs_.find(toplevel); if (it == toplevel_configs_.end()) return nullptr; return std::make_unique(*it->second); } std::unique_ptr InMemoryTrustTokenPersister::GetIssuerConfig( const SuitableTrustTokenOrigin& issuer) { auto it = issuer_configs_.find(issuer); if (it == issuer_configs_.end()) return nullptr; return std::make_unique(*it->second); } std::unique_ptr InMemoryTrustTokenPersister::GetIssuerToplevelPairConfig( const SuitableTrustTokenOrigin& issuer, const SuitableTrustTokenOrigin& toplevel) { auto it = issuer_toplevel_pair_configs_.find(std::make_pair(issuer, toplevel)); if (it == issuer_toplevel_pair_configs_.end()) return nullptr; return std::make_unique(*it->second); } void InMemoryTrustTokenPersister::SetToplevelConfig( const SuitableTrustTokenOrigin& toplevel, std::unique_ptr config) { toplevel_configs_[toplevel] = std::move(config); } void InMemoryTrustTokenPersister::SetIssuerConfig( const SuitableTrustTokenOrigin& issuer, std::unique_ptr config) { issuer_configs_[issuer] = std::move(config); } void InMemoryTrustTokenPersister::SetIssuerToplevelPairConfig( const SuitableTrustTokenOrigin& issuer, const SuitableTrustTokenOrigin& toplevel, std::unique_ptr config) { issuer_toplevel_pair_configs_[std::make_pair(issuer, toplevel)] = std::move(config); } bool InMemoryTrustTokenPersister::DeleteForOrigins( base::RepeatingCallback matcher) { bool deleted_any_data = false; auto predicate_for_origin_keyed_maps = [&matcher](const auto& entry) { return matcher.Run(entry.first); }; deleted_any_data |= base::EraseIf(issuer_configs_, predicate_for_origin_keyed_maps); deleted_any_data |= base::EraseIf(toplevel_configs_, predicate_for_origin_keyed_maps); deleted_any_data |= base::EraseIf( issuer_toplevel_pair_configs_, [&matcher](const auto& entry) { const std::pair& key = entry.first; return matcher.Run(key.first) || matcher.Run(key.second); }); return deleted_any_data; } } // namespace network