saved_tab_group_tab.cc 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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/saved_tab_groups/saved_tab_group_tab.h"
  5. #include "components/saved_tab_groups/saved_tab_group.h"
  6. SavedTabGroupTab::SavedTabGroupTab(
  7. const GURL& url,
  8. const base::GUID& group_guid,
  9. SavedTabGroup* group,
  10. absl::optional<base::GUID> guid,
  11. absl::optional<base::Time> creation_time_windows_epoch_micros,
  12. absl::optional<base::Time> update_time_windows_epoch_micros,
  13. absl::optional<std::u16string> title,
  14. absl::optional<gfx::Image> favicon)
  15. : guid_(guid.has_value() ? guid.value() : base::GUID::GenerateRandomV4()),
  16. group_guid_(group_guid),
  17. saved_tab_group_(group),
  18. url_(url),
  19. title_(title),
  20. favicon_(favicon),
  21. creation_time_windows_epoch_micros_(
  22. creation_time_windows_epoch_micros.has_value()
  23. ? creation_time_windows_epoch_micros.value()
  24. : base::Time::Now()),
  25. update_time_windows_epoch_micros_(
  26. update_time_windows_epoch_micros.has_value()
  27. ? update_time_windows_epoch_micros.value()
  28. : base::Time::Now()) {}
  29. SavedTabGroupTab::SavedTabGroupTab(const SavedTabGroupTab& other) = default;
  30. SavedTabGroupTab::~SavedTabGroupTab() = default;
  31. // static
  32. SavedTabGroupTab SavedTabGroupTab::FromSpecifics(
  33. const sync_pb::SavedTabGroupSpecifics& specific) {
  34. const base::GUID& group_guid =
  35. base::GUID::ParseLowercase(specific.tab().group_guid());
  36. const GURL& url = GURL(specific.tab().url());
  37. base::GUID guid = base::GUID::ParseLowercase(specific.guid());
  38. base::Time creation_time = base::Time::FromDeltaSinceWindowsEpoch(
  39. base::Microseconds(specific.creation_time_windows_epoch_micros()));
  40. base::Time update_time = base::Time::FromDeltaSinceWindowsEpoch(
  41. base::Microseconds(specific.update_time_windows_epoch_micros()));
  42. return SavedTabGroupTab(url, group_guid, nullptr, guid, creation_time,
  43. update_time);
  44. }
  45. std::unique_ptr<sync_pb::SavedTabGroupSpecifics>
  46. SavedTabGroupTab::ToSpecifics() {
  47. std::unique_ptr<sync_pb::SavedTabGroupSpecifics> pb_specific =
  48. std::make_unique<sync_pb::SavedTabGroupSpecifics>();
  49. pb_specific->set_guid(guid().AsLowercaseString());
  50. pb_specific->set_creation_time_windows_epoch_micros(
  51. creation_time_windows_epoch_micros()
  52. .ToDeltaSinceWindowsEpoch()
  53. .InMicroseconds());
  54. pb_specific->set_update_time_windows_epoch_micros(
  55. update_time_windows_epoch_micros()
  56. .ToDeltaSinceWindowsEpoch()
  57. .InMicroseconds());
  58. sync_pb::SavedTabGroupTab* pb_tab = pb_specific->mutable_tab();
  59. pb_tab->set_url(url().spec());
  60. pb_tab->set_group_guid(group_guid().AsLowercaseString());
  61. return pb_specific;
  62. }