| // 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. |
| |
| #ifndef COMPONENTS_DATA_SHARING_PUBLIC_GROUP_DATA_H_ |
| #define COMPONENTS_DATA_SHARING_PUBLIC_GROUP_DATA_H_ |
| |
| #include <optional> |
| #include <string> |
| #include <vector> |
| |
| #include "base/time/time.h" |
| #include "base/types/strong_alias.h" |
| #include "google_apis/gaia/gaia_id.h" |
| #include "url/gurl.h" |
| |
| namespace data_sharing { |
| |
| using GroupId = base::StrongAlias<class GroupIdTag, std::string>; |
| |
| // GENERATED_JAVA_ENUM_PACKAGE: ( |
| // org.chromium.components.data_sharing.member_role) |
| enum class MemberRole { |
| kUnknown = 0, |
| kOwner = 1, |
| kMember = 2, |
| kInvitee = 3, |
| kFormerMember = 4 |
| }; |
| |
| // This tells if the group is enabled or not. This field is set by chrome client |
| // after comparing the version info from ReadGroup request and comparing it with |
| // hardcoded version info in Chrome client. |
| enum class GroupEnabledStatus { |
| kUnknown = 0, |
| kEnabled = 1, |
| kDisabledChromeNeedsUpdate = 2, |
| }; |
| |
| struct GroupMember { |
| GroupMember(); |
| |
| GroupMember(GaiaId gaia_id, |
| std::string display_name, |
| std::string email, |
| MemberRole role, |
| GURL avatar_url, |
| std::string given_name, |
| base::Time creation_time = base::Time(), |
| base::Time last_updated_time = base::Time()); |
| |
| GroupMember(const GroupMember&); |
| GroupMember& operator=(const GroupMember&); |
| |
| GroupMember(GroupMember&&); |
| GroupMember& operator=(GroupMember&&); |
| |
| ~GroupMember(); |
| |
| GaiaId gaia_id; |
| std::string display_name; |
| std::string email; |
| MemberRole role = MemberRole::kUnknown; |
| GURL avatar_url; |
| std::string given_name; |
| base::Time creation_time; |
| base::Time last_updated_time; |
| }; |
| |
| // Subset of GroupMember fields that could be temporarily stored after member is |
| // removed from the group. |
| struct GroupMemberPartialData { |
| static GroupMemberPartialData FromGroupMember(const GroupMember& member); |
| |
| GroupMemberPartialData(); |
| |
| GroupMemberPartialData(const GroupMemberPartialData&); |
| GroupMemberPartialData& operator=(const GroupMemberPartialData&); |
| |
| GroupMemberPartialData(GroupMemberPartialData&&); |
| GroupMemberPartialData& operator=(GroupMemberPartialData&&); |
| |
| ~GroupMemberPartialData(); |
| |
| GroupMember ToGroupMember(); |
| |
| GaiaId gaia_id; |
| std::string display_name; |
| std::string email; |
| GURL avatar_url; |
| std::string given_name; |
| base::Time creation_time; |
| base::Time last_updated_time; |
| }; |
| |
| struct GroupToken { |
| GroupToken(); |
| |
| GroupToken(GroupId group_id, const std::string& access_token); |
| |
| GroupToken(const GroupToken&); |
| GroupToken& operator=(const GroupToken&); |
| |
| GroupToken(GroupToken&&); |
| GroupToken& operator=(GroupToken&&); |
| |
| ~GroupToken(); |
| |
| bool IsValid() const; |
| |
| GroupId group_id; |
| std::string access_token; |
| }; |
| |
| struct GroupData { |
| GroupData(); |
| |
| GroupData(GroupId group_id, |
| std::string display_name, |
| std::vector<GroupMember> members, |
| std::vector<GroupMember> former_members, |
| std::string access_token, |
| GroupEnabledStatus enabled_status = GroupEnabledStatus::kEnabled); |
| |
| GroupData(const GroupData&); |
| GroupData& operator=(const GroupData&); |
| |
| GroupData(GroupData&&); |
| GroupData& operator=(GroupData&&); |
| |
| ~GroupData(); |
| |
| GroupToken group_token; |
| std::string display_name; |
| std::vector<GroupMember> members; |
| std::vector<GroupMember> former_members; |
| GroupEnabledStatus enabled_status = GroupEnabledStatus::kEnabled; |
| }; |
| |
| struct GroupEvent { |
| enum class EventType { |
| kGroupAdded, |
| kGroupRemoved, |
| kMemberRemoved, |
| kMemberAdded, |
| }; |
| |
| GroupEvent(); |
| |
| GroupEvent(const GroupEvent&); |
| GroupEvent& operator=(const GroupEvent&); |
| |
| GroupEvent(GroupEvent&&); |
| GroupEvent& operator=(GroupEvent&&); |
| |
| GroupEvent(EventType event_type, |
| const GroupId& group_id, |
| const std::optional<GaiaId>& affected_member_gaia_id, |
| const base::Time& event_time); |
| |
| ~GroupEvent(); |
| |
| EventType event_type; |
| GroupId group_id; |
| // Unset for kGroupAdded and kGroupRemoved events. |
| std::optional<GaiaId> affected_member_gaia_id; |
| base::Time event_time; |
| }; |
| |
| // Represents a tab that is shared in a group. |
| struct TabPreview { |
| explicit TabPreview(const GURL& url); |
| |
| TabPreview(const TabPreview&); |
| TabPreview& operator=(const TabPreview&); |
| |
| TabPreview(TabPreview&&); |
| TabPreview& operator=(TabPreview&&); |
| |
| ~TabPreview(); |
| |
| // Trim the tab url to display url. E.g. |
| // "https://www.google.com/search?q=wiki" to "google.com". |
| std::string GetDisplayUrl() const; |
| |
| // URL of the tab. |
| GURL url; |
| }; |
| |
| // Represents a tab group that is shared between users. |
| struct SharedTabGroupPreview { |
| SharedTabGroupPreview(); |
| |
| SharedTabGroupPreview(const SharedTabGroupPreview&); |
| SharedTabGroupPreview& operator=(const SharedTabGroupPreview&); |
| |
| SharedTabGroupPreview(SharedTabGroupPreview&&); |
| SharedTabGroupPreview& operator=(SharedTabGroupPreview&&); |
| |
| ~SharedTabGroupPreview(); |
| |
| // Title of the group. |
| std::string title; |
| |
| // All tabs in the group, ordered by their UniquePosition. |
| std::vector<TabPreview> tabs; |
| }; |
| |
| // A preview of shared data. |
| struct SharedDataPreview { |
| SharedDataPreview(); |
| |
| SharedDataPreview(const SharedDataPreview&); |
| SharedDataPreview& operator=(const SharedDataPreview&); |
| |
| SharedDataPreview(SharedDataPreview&&); |
| SharedDataPreview& operator=(SharedDataPreview&&); |
| |
| ~SharedDataPreview(); |
| |
| // Shared tab group data. |
| std::optional<SharedTabGroupPreview> shared_tab_group_preview; |
| }; |
| |
| // The state of the sync bridge wrt sign-in / sign-out, i.e. whether the bridge |
| // has completed initial merge and isn't in the process of disabling sync. |
| // Interested consumers might want to ignore the incoming updates from sync |
| // based on this enum. |
| enum class SyncBridgeUpdateType { |
| // The bridge is currently undergoing initial merge. After this stage, it will |
| // transition to `kDefaultState`. |
| kInitialMerge = 0, |
| |
| // The bridge is currently in the process of disabling, i.e. |
| // ApplyDisableSyncChanges has been invoked. After this stage, it will |
| // transition to `kDefaultState`. |
| kDisableSync = 1, |
| |
| // The bridge is not currently doing an initial merge or disable sync |
| // operation. |
| kDefaultState = 2, |
| }; |
| |
| // Only takes `group_id` into account, used to allow storing GroupData in |
| // std::set. |
| bool operator<(const GroupData& lhs, const GroupData& rhs); |
| |
| // Used to allow storing GroupToken in arrays. |
| bool operator==(const GroupToken& lhs, const GroupToken& rhs); |
| bool operator<(const GroupToken& lhs, const GroupToken& rhs); |
| |
| } // namespace data_sharing |
| |
| #endif // COMPONENTS_DATA_SHARING_PUBLIC_GROUP_DATA_H_ |