1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/browsing_topics/topic_and_domains.h"
#include "base/check_op.h"
#include "base/json/values_util.h"
#include "url/gurl.h"
namespace browsing_topics {
namespace {
const char kTopicNameKey[] = "topic";
const char kHashedDomainsNameKey[] = "hashed_domains";
} // namespace
TopicAndDomains::TopicAndDomains() = default;
TopicAndDomains::TopicAndDomains(Topic topic,
std::set<HashedDomain> hashed_domains)
: topic_(std::move(topic)), hashed_domains_(std::move(hashed_domains)) {}
TopicAndDomains::TopicAndDomains(TopicAndDomains&& other) = default;
TopicAndDomains& TopicAndDomains::operator=(TopicAndDomains&& other) = default;
TopicAndDomains::~TopicAndDomains() = default;
// static
TopicAndDomains TopicAndDomains::FromDictValue(
const base::Value::Dict& dict_value) {
Topic topic(0);
std::optional<int> topic_value = dict_value.FindInt(kTopicNameKey);
if (topic_value)
topic = Topic(*topic_value);
std::set<HashedDomain> hashed_domains;
const base::Value::List* hashed_domains_value =
dict_value.FindList(kHashedDomainsNameKey);
if (hashed_domains_value) {
for (const base::Value& hashed_domain_value : *hashed_domains_value) {
std::optional<int64_t> hashed_domain_int64_value =
base::ValueToInt64(hashed_domain_value);
if (!hashed_domain_int64_value)
return TopicAndDomains();
hashed_domains.insert(HashedDomain(hashed_domain_int64_value.value()));
}
}
return TopicAndDomains(topic, std::move(hashed_domains));
}
base::Value::Dict TopicAndDomains::ToDictValue() const {
base::Value::List hashed_domains_list;
for (const HashedDomain& hashed_domain : hashed_domains_) {
hashed_domains_list.Append(base::Int64ToValue(hashed_domain.value()));
}
base::Value::Dict result_dict;
result_dict.Set(kTopicNameKey, topic_.value());
result_dict.Set(kHashedDomainsNameKey, std::move(hashed_domains_list));
return result_dict;
}
void TopicAndDomains::ClearDomain(const HashedDomain& domain) {
hashed_domains_.erase(domain);
}
} // namespace browsing_topics
|