| // 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. |
| |
| #import "ios/chrome/browser/sessions/model/tab_group_util.h" |
| |
| #import "base/notreached.h" |
| #import "base/strings/sys_string_conversions.h" |
| #import "base/strings/utf_string_conversions.h" |
| #import "components/tab_groups/tab_group_id.h" |
| #import "ios/chrome/browser/sessions/model/session_tab_group.h" |
| |
| using tab_groups::TabGroupId; |
| using tab_groups::TabGroupVisualData; |
| |
| namespace tab_group_util { |
| |
| #pragma mark - Public methods |
| |
| DeserializedGroup FromSerializedValue(ios::proto::TabGroupStorage group) { |
| TabGroupVisualData visual_data = tab_groups::TabGroupVisualData( |
| base::UTF8ToUTF16(group.title()), group.color(), group.collapsed()); |
| return DeserializedGroup{ |
| .range_start = group.range().start(), |
| .range_count = group.range().count(), |
| .visual_data = visual_data, |
| .tab_group_id = |
| tab_group_util::TabGroupIdFromStorage(group.tab_group_id())}; |
| } |
| |
| DeserializedGroup FromSerializedValue(SessionTabGroup* group) { |
| TabGroupVisualData visual_data = |
| tab_groups::TabGroupVisualData(base::SysNSStringToUTF16(group.title), |
| group.colorId, group.collapsedState); |
| return DeserializedGroup{.range_start = static_cast<int>(group.rangeStart), |
| .range_count = static_cast<int>(group.rangeCount), |
| .visual_data = visual_data, |
| .tab_group_id = group.tabGroupId}; |
| } |
| |
| ios::proto::TabGroupColorId ColorForStorage( |
| tab_groups::TabGroupColorId color_id) { |
| switch (color_id) { |
| case tab_groups::TabGroupColorId::kGrey: |
| return ios::proto::TabGroupColorId::GREY; |
| case tab_groups::TabGroupColorId::kBlue: |
| return ios::proto::TabGroupColorId::BLUE; |
| case tab_groups::TabGroupColorId::kRed: |
| return ios::proto::TabGroupColorId::RED; |
| case tab_groups::TabGroupColorId::kYellow: |
| return ios::proto::TabGroupColorId::YELLOW; |
| case tab_groups::TabGroupColorId::kGreen: |
| return ios::proto::TabGroupColorId::GREEN; |
| case tab_groups::TabGroupColorId::kPink: |
| return ios::proto::TabGroupColorId::PINK; |
| case tab_groups::TabGroupColorId::kPurple: |
| return ios::proto::TabGroupColorId::PURPLE; |
| case tab_groups::TabGroupColorId::kCyan: |
| return ios::proto::TabGroupColorId::CYAN; |
| case tab_groups::TabGroupColorId::kOrange: |
| return ios::proto::TabGroupColorId::ORANGE; |
| case tab_groups::TabGroupColorId::kNumEntries: |
| NOTREACHED() << "kNumEntries is not a supported color enum."; |
| } |
| } |
| |
| void TabGroupIdForStorage(TabGroupId tab_group_id, |
| ios::proto::TabGroupId& storage) { |
| const base::Token token = tab_group_id.token(); |
| CHECK(!token.is_zero()); |
| storage.set_high(token.high()); |
| storage.set_low(token.low()); |
| } |
| |
| tab_groups::TabGroupColorId ColorFromStorage( |
| ios::proto::TabGroupColorId color_id) { |
| switch (color_id) { |
| case ios::proto::TabGroupColorId::GREY: |
| return tab_groups::TabGroupColorId::kGrey; |
| case ios::proto::TabGroupColorId::BLUE: |
| return tab_groups::TabGroupColorId::kBlue; |
| case ios::proto::TabGroupColorId::RED: |
| return tab_groups::TabGroupColorId::kRed; |
| case ios::proto::TabGroupColorId::YELLOW: |
| return tab_groups::TabGroupColorId::kYellow; |
| case ios::proto::TabGroupColorId::GREEN: |
| return tab_groups::TabGroupColorId::kGreen; |
| case ios::proto::TabGroupColorId::PINK: |
| return tab_groups::TabGroupColorId::kPink; |
| case ios::proto::TabGroupColorId::PURPLE: |
| return tab_groups::TabGroupColorId::kPurple; |
| case ios::proto::TabGroupColorId::CYAN: |
| return tab_groups::TabGroupColorId::kCyan; |
| case ios::proto::TabGroupColorId::ORANGE: |
| return tab_groups::TabGroupColorId::kOrange; |
| default: |
| NOTREACHED() << "value is not a supported color enum."; |
| } |
| } |
| |
| TabGroupId TabGroupIdFromStorage(ios::proto::TabGroupId tab_group_id) { |
| return TabGroupId::FromRawToken( |
| base::Token(tab_group_id.high(), tab_group_id.low())); |
| } |
| |
| } // namespace tab_group_util |