topic_and_domains.cc 2.2 KB

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