[WIP][iOS] Create a facepile implementation in Chrome [chromium/src : main]

0 views
Skip to first unread message

Gauthier Ambard (Gerrit)

unread,
Jun 5, 2025, 11:35:53 AM6/5/25
to Aliona Dangla, Louis Romero, Ewann Pellé, AyeAye, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
Attention needed from Aliona Dangla, Ewann Pellé and Louis Romero

Gauthier Ambard added 1 comment

Patchset-level comments
File-level comment, Patchset 4 (Latest):
Gauthier Ambard . resolved

PTAL, not fully ready for review yet, but comments on the approach are welcome

Open in Gerrit

Related details

Attention is currently required from:
  • Aliona Dangla
  • Ewann Pellé
  • Louis Romero
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: I72261db7a02af6939d4574621826a448e13d2f13
Gerrit-Change-Number: 6596982
Gerrit-PatchSet: 4
Gerrit-Owner: Gauthier Ambard <gam...@chromium.org>
Gerrit-Reviewer: Aliona Dangla <aliona...@chromium.org>
Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
Gerrit-Reviewer: Louis Romero <lpro...@google.com>
Gerrit-Attention: Aliona Dangla <aliona...@chromium.org>
Gerrit-Attention: Ewann Pellé <ewa...@chromium.org>
Gerrit-Attention: Louis Romero <lpro...@google.com>
Gerrit-Comment-Date: Thu, 05 Jun 2025 15:35:36 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Ewann Pellé (Gerrit)

unread,
Jun 6, 2025, 4:26:50 AM6/6/25
to Gauthier Ambard, Aliona Dangla, Louis Romero, AyeAye, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
Attention needed from Aliona Dangla, Gauthier Ambard and Louis Romero

Ewann Pellé added 14 comments

File ios/chrome/browser/saved_tab_groups/coordinator/face_pile_mediator.h
Line 24, Patchset 4 (Latest):// to its consumer (typically a FacePileView).
Ewann Pellé . unresolved

optional nit: `FacePileView consumer`

Line 16, Patchset 4 (Latest):}
Ewann Pellé . unresolved

// signin

Line 12, Patchset 4 (Latest):}
Ewann Pellé . unresolved

// data_sharing

File ios/chrome/browser/saved_tab_groups/coordinator/face_pile_mediator.mm
Line 28, Patchset 4 (Latest): raw_ptr<data_sharing::DataSharingService> _dataSharingService;
Ewann Pellé . unresolved
optional nit: add comments for group of ivars.
e.g
```
@implementation FacePileMediator {
// Services required by the mediator.
raw_ptr<data_sharing::DataSharingService> _dataSharingService;
raw_ptr<ShareKitService> _shareKitService;
raw_ptr<signin::IdentityManager> _identityManager;
  // Settings specific to this mediator instance.
FacePileConfiguration* _configuration;
  // Handles observing changes from services.
std::unique_ptr<DataSharingServiceObserverBridge> _dataSharingServiceObserver;
std::unique_ptr<ScopedDataSharingSyncObservation> _scopedDataSharingServiceObservation;
}
```
Line 44, Patchset 4 (Latest): _configuration = configuration;
_dataSharingService = dataSharingService;
_shareKitService = shareKitService;
_identityManager = identityManager;
Ewann Pellé . unresolved

Some services can be nullptr ?

Line 88, Patchset 4 (Latest):- (void)updateConsumer {
Ewann Pellé . unresolved

add a comment.

Line 89, Patchset 4 (Latest): if (!_consumer || !_dataSharingService->IsGroupDataModelLoaded()) {
return;
}
CoreAccountInfo account =
_identityManager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin);

if (account.IsEmpty()) {
// No current logged in user.
return;
}
Ewann Pellé . unresolved
```suggestion
if (!_consumer || !_dataSharingService->IsGroupDataModelLoaded()) {
return;
}

CoreAccountInfo account =
_identityManager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin);
if (account.IsEmpty()) {
// No current logged in user.
return;
}

```

Line 108, Patchset 4 (Latest): ShareKitAvatarConfiguration* ownerConfig;
ShareKitAvatarConfiguration* secondConfig;
ShareKitAvatarConfiguration* thirdConfig;
BOOL foundSelf = NO;
BOOL needThirdFace = groupData->members.size() == 3;

for (data_sharing::GroupMember member : groupData->members) {
if (ownerConfig && secondConfig && foundSelf &&
(!needThirdFace || thirdConfig)) {
break;
}

BOOL isOwner = (member.role == data_sharing::MemberRole::kOwner);
BOOL isSelf = (member.gaia_id == account.gaia);
foundSelf = foundSelf || isSelf;

if (!isOwner && !isSelf && secondConfig &&
(!needThirdFace || thirdConfig)) {
// If we already have a second/third config, there is only a need to
// update the configs when it is self or the owner.
continue;
}

ShareKitAvatarConfiguration* config =
[[ShareKitAvatarConfiguration alloc] init];
config.avatarUrl = net::NSURLWithGURL(member.avatar_url);
config.displayName = base::SysUTF8ToNSString(member.given_name);
config.avatarSize =
CGSizeMake(_configuration.avatarSize, _configuration.avatarSize);

if (isOwner) {
ownerConfig = config;
} else if (isSelf) {
if (needThirdFace) {
thirdConfig = secondConfig;
}
secondConfig = config;
} else if (!secondConfig) {
secondConfig = config;
} else if (needThirdFace && !thirdConfig) {
thirdConfig = config;
}
}
CHECK(ownerConfig);
Ewann Pellé . unresolved

This might not be very clear for someone that is not familiar with the FacePile UI, can you add comments and maybe move this in method helper ?

File ios/chrome/browser/saved_tab_groups/ui/face_pile_view.h
Line 13, Patchset 4 (Latest):@interface FacePileView : UIView <FacePileConsumer>

@end
Ewann Pellé . unresolved

```suggestion
@interface FacePileView : UIView <FacePileConsumer>

// Designated initializer.

  • (instancetype)init NS_DESIGNATED_INITIALIZER;
  • (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
  • (instancetype)initWithCoder:(NSCoder*)aDecoder NS_UNAVAILABLE;

@end
```

File ios/chrome/browser/saved_tab_groups/ui/face_pile_view.mm
Line 23, Patchset 4 (Latest): NSArray<id<ShareKitAvatarPrimitive>>* _avatars;
UIStackView* _faces;
Ewann Pellé . unresolved

nit: add comments, this is not very clear.

Line 53, Patchset 4 (Latest): [_faces addArrangedSubview:[avatar view]];
Ewann Pellé . unresolved

Would be nice to add accessibility identifiers to avatar views with their index, could be helpful for testing.

File ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.mm
Line 168, Patchset 4 (Latest): if ([_facePile isDescendantOfView:self]) {
Ewann Pellé . unresolved

I'm curious, is this approach better than `_stackView == _facePile.superview` ?

File ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_item_data_source.h
Line 10, Patchset 4 (Latest):@class TabGroupsPanelCell;
@class TabGroupsPanelItem;
@class TabGroupsPanelItemData;
@protocol FacePileProviding;
Ewann Pellé . unresolved

```suggestion
@protocol FacePileProviding;
@class TabGroupsPanelCell;
@class TabGroupsPanelItem;
@class TabGroupsPanelItemData;
```

File ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_mediator.mm
Line 397, Patchset 4 (Parent): ShareKitFacePileConfiguration* config =
Ewann Pellé . unresolved

you can remove its import

Open in Gerrit

Related details

Attention is currently required from:
  • Aliona Dangla
  • Gauthier Ambard
  • Louis Romero
Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I72261db7a02af6939d4574621826a448e13d2f13
    Gerrit-Change-Number: 6596982
    Gerrit-PatchSet: 4
    Gerrit-Owner: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Reviewer: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Reviewer: Louis Romero <lpro...@google.com>
    Gerrit-Attention: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Attention: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Attention: Louis Romero <lpro...@google.com>
    Gerrit-Comment-Date: Fri, 06 Jun 2025 08:26:37 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Ewann Pellé (Gerrit)

    unread,
    Jun 11, 2025, 9:02:37 AM6/11/25
    to Gauthier Ambard, Code Review Nudger, Aliona Dangla, Louis Romero, AyeAye, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
    Attention needed from Aliona Dangla, Gauthier Ambard and Louis Romero

    Ewann Pellé added 13 comments

    File ios/chrome/browser/saved_tab_groups/coordinator/face_pile_mediator.h
    Line 24, Patchset 4:// to its consumer (typically a FacePileView).
    Ewann Pellé . resolved

    optional nit: `FacePileView consumer`

    Ewann Pellé

    Done

    Line 16, Patchset 4:}
    Ewann Pellé . resolved

    // signin

    Ewann Pellé

    Done

    Line 12, Patchset 4:}
    Ewann Pellé . resolved

    // data_sharing

    Ewann Pellé

    Done

    File ios/chrome/browser/saved_tab_groups/coordinator/face_pile_mediator.mm
    Line 28, Patchset 4: raw_ptr<data_sharing::DataSharingService> _dataSharingService;
    Ewann Pellé . resolved
    optional nit: add comments for group of ivars.
    e.g
    ```
    @implementation FacePileMediator {
    // Services required by the mediator.
    raw_ptr<data_sharing::DataSharingService> _dataSharingService;
    raw_ptr<ShareKitService> _shareKitService;
    raw_ptr<signin::IdentityManager> _identityManager;
      // Settings specific to this mediator instance.
    FacePileConfiguration* _configuration;
      // Handles observing changes from services.
    std::unique_ptr<DataSharingServiceObserverBridge> _dataSharingServiceObserver;
    std::unique_ptr<ScopedDataSharingSyncObservation> _scopedDataSharingServiceObservation;
    }
    ```
    Ewann Pellé

    Done

    Line 44, Patchset 4: _configuration = configuration;

    _dataSharingService = dataSharingService;
    _shareKitService = shareKitService;
    _identityManager = identityManager;
    Ewann Pellé . resolved

    Some services can be nullptr ?

    Ewann Pellé

    Done

    Line 88, Patchset 4:- (void)updateConsumer {
    Ewann Pellé . resolved

    add a comment.

    Ewann Pellé

    Done

    Line 89, Patchset 4: if (!_consumer || !_dataSharingService->IsGroupDataModelLoaded()) {

    return;
    }
    CoreAccountInfo account =
    _identityManager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin);

    if (account.IsEmpty()) {
    // No current logged in user.
    return;
    }
    Ewann Pellé . resolved
    ```suggestion
    if (!_consumer || !_dataSharingService->IsGroupDataModelLoaded()) {
    return;
    }

    CoreAccountInfo account =
    _identityManager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin);
    if (account.IsEmpty()) {
    // No current logged in user.
    return;
    }

    ```

    Ewann Pellé

    Done

    Line 108, Patchset 4: ShareKitAvatarConfiguration* ownerConfig;
    Ewann Pellé . resolved

    This might not be very clear for someone that is not familiar with the FacePile UI, can you add comments and maybe move this in method helper ?

    Ewann Pellé

    Done

    File ios/chrome/browser/saved_tab_groups/ui/face_pile_view.h
    Line 13, Patchset 4:@interface FacePileView : UIView <FacePileConsumer>

    @end
    Ewann Pellé . resolved

    ```suggestion
    @interface FacePileView : UIView <FacePileConsumer>

    // Designated initializer.

    • (instancetype)init NS_DESIGNATED_INITIALIZER;
    • (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    • (instancetype)initWithCoder:(NSCoder*)aDecoder NS_UNAVAILABLE;

    @end
    ```

    Ewann Pellé

    Done

    File ios/chrome/browser/saved_tab_groups/ui/face_pile_view.mm
    Line 23, Patchset 4: NSArray<id<ShareKitAvatarPrimitive>>* _avatars;
    UIStackView* _faces;
    Ewann Pellé . resolved

    nit: add comments, this is not very clear.

    Ewann Pellé

    Done

    Line 53, Patchset 4: [_faces addArrangedSubview:[avatar view]];
    Ewann Pellé . resolved

    Would be nice to add accessibility identifiers to avatar views with their index, could be helpful for testing.

    Ewann Pellé

    Done

    File ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_item_data_source.h
    Line 10, Patchset 4:@class TabGroupsPanelCell;

    @class TabGroupsPanelItem;
    @class TabGroupsPanelItemData;
    @protocol FacePileProviding;
    Ewann Pellé . resolved

    ```suggestion
    @protocol FacePileProviding;
    @class TabGroupsPanelCell;
    @class TabGroupsPanelItem;
    @class TabGroupsPanelItemData;
    ```

    Ewann Pellé

    Done

    File ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_mediator.mm
    Line 397, Patchset 4 (Parent): ShareKitFacePileConfiguration* config =
    Ewann Pellé . resolved

    you can remove its import

    Ewann Pellé

    Done

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Aliona Dangla
    • Gauthier Ambard
    • Louis Romero
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I72261db7a02af6939d4574621826a448e13d2f13
    Gerrit-Change-Number: 6596982
    Gerrit-PatchSet: 6
    Gerrit-Owner: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Reviewer: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Reviewer: Louis Romero <lpro...@google.com>
    Gerrit-CC: Code Review Nudger <android-build...@prod.google.com>
    Gerrit-Attention: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Attention: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Attention: Louis Romero <lpro...@google.com>
    Gerrit-Comment-Date: Wed, 11 Jun 2025 13:02:22 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Ewann Pellé <ewa...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Louis Romero (Gerrit)

    unread,
    Jun 11, 2025, 12:42:26 PM6/11/25
    to Gauthier Ambard, Ewann Pellé, Code Review Nudger, Aliona Dangla, Louis Romero, AyeAye, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
    Attention needed from Aliona Dangla, Ewann Pellé and Gauthier Ambard

    Louis Romero added 11 comments

    File ios/chrome/browser/saved_tab_groups/coordinator/face_pile_coordinator.h
    Line 20, Patchset 6: baseViewController:(UIViewController*)viewController
    Louis Romero . unresolved

    You don't even need the base view controller. Maybe remove it? Does the parent support having a nil base view controller?

    Line 14, Patchset 6:// This coordinator is responsible for creating and managing the FacePileView
    // and its associated FacePileMediator.
    @interface FacePileCoordinator : ChromeCoordinator <FacePileProviding>
    Louis Romero . unresolved

    ```suggestion
    // This coordinator is responsible for creating and managing a FacePileView
    // and its associated FacePileMediator.
    // It is the responsibility of the caller to add the face pile to the view
    // hierarchy. On the other hand, when this coordinator is stopped, the view is
    // automatically removed from the view hierarchy.
    @interface FacePileCoordinator : ChromeCoordinator <FacePileProviding>
    ```

    File ios/chrome/browser/saved_tab_groups/coordinator/face_pile_mediator.mm
    File-level comment, Patchset 6:
    Louis Romero . unresolved

    Consider covering this file with tests.

    File ios/chrome/browser/saved_tab_groups/ui/face_pile_consumer.h
    Line 15, Patchset 6:- (void)setShowTextWhenEmpty:(BOOL)showTextWhenEmpty;
    Louis Romero . unresolved

    Minor nit: ```suggestion

    • (void)setShowsTextWhenEmpty:(BOOL)showsTextWhenEmpty;
    • ```
    File ios/chrome/browser/saved_tab_groups/ui/face_pile_providing.h
    Line 11, Patchset 6:// same). FacePiles provided by this object will be correct as long as this
    Louis Romero . unresolved

    Maybe?
    ```suggestion
    // same). FacePiles provided by this object will be up-to-date as long as this
    ```

    But it seems like an implementation detail of one particular provider, so I wonder if this comment belongs here?

    File ios/chrome/browser/saved_tab_groups/ui/face_pile_view.mm
    Line 18, Patchset 6:@property(nonatomic, strong) UILabel* emptyFacePileLabel;
    Louis Romero . unresolved

    Why isn't it a private ivar?
    Also, it never seems created with the current code?

    Line 43, Patchset 6: if (!showTextWhenEmpty && !_emptyFacePileLabel) {
    return;
    }
    self.emptyFacePileLabel.hidden = ![self isEmpty];
    }
    Louis Romero . unresolved

    This feels complicated.

    What about something like:
    ```suggestion
    if (showsTextWhenEmpty) {
    [self addEmptyFacePileLabelIfNeeded];
    _emptyFacePileLabel.hidden = ![self isEmpty];
    } else {
    [_emptyFacePileLabel removeFromSuperview];
    _emptyFacePileLabel = nil;
    }
    ```

    or

    ```suggestion
    if (showsTextWhenEmpty) {
    [self addEmptyFacePileLabelIfNeeded];
    [self updateEmptyFacePileLabel];
    } else {
    [_emptyFacePileLabel removeFromSuperview];
    _emptyFacePileLabel = nil;
    }
    ```

    then you can reuse `updateEmptyFacePileLabel` in `-updateWithViews:totalNumber:`.

    Line 49, Patchset 6:- (void)updateWithViews:(NSArray<id<ShareKitAvatarPrimitive>>*)faces
    totalNumber:(NSInteger)totalNumber {
    _avatars = faces;
    Louis Romero . unresolved

    Should this also update the hidden property of the empty face pile label, in case the array emptiness changed?

    Line 57, Patchset 6: [_facesStackView addArrangedSubview:[avatar view]];
    Louis Romero . unresolved

    When are the old views removed from the stack view?

    File ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.mm
    Line 147, Patchset 6 (Parent): [_stackView addArrangedSubview:facePile];
    Louis Romero . unresolved

    Did we try having the internal face pile not be in the stack view? Would it have fixed the layout?
    Why don't we add the chromium face pile to the stack view also?

    Line 162, Patchset 6: _facePileProvider = facePileProvider;
    Louis Romero . unresolved

    Why do you need the provider? Can't the caller just set the face pile externally?

    Edit: oh, it's just to keep it in memory. I think this should be better explained in the interface comment. It's rather unusual, no? We have N cells holding onto N coordinators basically (even though they don't know they are coordinators). Coordinators should be part of the coordinator hierarchy instead.
    But maybe it's a pattern we already follow elsewhere?

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Aliona Dangla
    • Ewann Pellé
    • Gauthier Ambard
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I72261db7a02af6939d4574621826a448e13d2f13
    Gerrit-Change-Number: 6596982
    Gerrit-PatchSet: 6
    Gerrit-Owner: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Reviewer: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Reviewer: Louis Romero <lpro...@google.com>
    Gerrit-CC: Code Review Nudger <android-build...@prod.google.com>
    Gerrit-Attention: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Attention: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Attention: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Comment-Date: Wed, 11 Jun 2025 16:42:12 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Ewann Pellé (Gerrit)

    unread,
    Jun 12, 2025, 9:02:37 AM6/12/25
    to Gauthier Ambard, Code Review Nudger, Aliona Dangla, Louis Romero, AyeAye, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
    Attention needed from Aliona Dangla, Gauthier Ambard and Louis Romero

    Ewann Pellé added 9 comments

    File ios/chrome/browser/saved_tab_groups/coordinator/face_pile_coordinator.h
    Line 20, Patchset 6: baseViewController:(UIViewController*)viewController
    Louis Romero . resolved

    You don't even need the base view controller. Maybe remove it? Does the parent support having a nil base view controller?

    Ewann Pellé

    Done

    Line 14, Patchset 6:// This coordinator is responsible for creating and managing the FacePileView
    // and its associated FacePileMediator.
    @interface FacePileCoordinator : ChromeCoordinator <FacePileProviding>
    Louis Romero . resolved

    ```suggestion
    // This coordinator is responsible for creating and managing a FacePileView
    // and its associated FacePileMediator.
    // It is the responsibility of the caller to add the face pile to the view
    // hierarchy. On the other hand, when this coordinator is stopped, the view is
    // automatically removed from the view hierarchy.
    @interface FacePileCoordinator : ChromeCoordinator <FacePileProviding>
    ```

    Ewann Pellé

    Done

    File ios/chrome/browser/saved_tab_groups/ui/face_pile_consumer.h
    Line 15, Patchset 6:- (void)setShowTextWhenEmpty:(BOOL)showTextWhenEmpty;
    Louis Romero . resolved

    Minor nit: ```suggestion

    • (void)setShowsTextWhenEmpty:(BOOL)showsTextWhenEmpty;
    • ```
    Ewann Pellé

    Done

    File ios/chrome/browser/saved_tab_groups/ui/face_pile_providing.h
    Line 11, Patchset 6:// same). FacePiles provided by this object will be correct as long as this
    Louis Romero . resolved

    Maybe?
    ```suggestion
    // same). FacePiles provided by this object will be up-to-date as long as this
    ```

    But it seems like an implementation detail of one particular provider, so I wonder if this comment belongs here?

    Ewann Pellé

    Done

    File ios/chrome/browser/saved_tab_groups/ui/face_pile_view.mm
    Line 18, Patchset 6:@property(nonatomic, strong) UILabel* emptyFacePileLabel;
    Louis Romero . resolved

    Why isn't it a private ivar?
    Also, it never seems created with the current code?

    Ewann Pellé

    Done

    Line 43, Patchset 6: if (!showTextWhenEmpty && !_emptyFacePileLabel) {
    return;
    }
    self.emptyFacePileLabel.hidden = ![self isEmpty];
    }
    Louis Romero . resolved

    This feels complicated.

    What about something like:
    ```suggestion
    if (showsTextWhenEmpty) {
    [self addEmptyFacePileLabelIfNeeded];
    _emptyFacePileLabel.hidden = ![self isEmpty];
    } else {
    [_emptyFacePileLabel removeFromSuperview];
    _emptyFacePileLabel = nil;
    }
    ```

    or

    ```suggestion
    if (showsTextWhenEmpty) {
    [self addEmptyFacePileLabelIfNeeded];
    [self updateEmptyFacePileLabel];
    } else {
    [_emptyFacePileLabel removeFromSuperview];
    _emptyFacePileLabel = nil;
    }
    ```

    then you can reuse `updateEmptyFacePileLabel` in `-updateWithViews:totalNumber:`.

    Ewann Pellé

    Done

    Line 49, Patchset 6:- (void)updateWithViews:(NSArray<id<ShareKitAvatarPrimitive>>*)faces
    totalNumber:(NSInteger)totalNumber {
    _avatars = faces;
    Louis Romero . resolved

    Should this also update the hidden property of the empty face pile label, in case the array emptiness changed?

    Ewann Pellé

    Done

    Line 57, Patchset 6: [_facesStackView addArrangedSubview:[avatar view]];
    Louis Romero . resolved

    When are the old views removed from the stack view?

    Ewann Pellé

    Done

    File ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.mm
    Line 162, Patchset 6: _facePileProvider = facePileProvider;
    Louis Romero . resolved

    Why do you need the provider? Can't the caller just set the face pile externally?

    Edit: oh, it's just to keep it in memory. I think this should be better explained in the interface comment. It's rather unusual, no? We have N cells holding onto N coordinators basically (even though they don't know they are coordinators). Coordinators should be part of the coordinator hierarchy instead.
    But maybe it's a pattern we already follow elsewhere?

    Ewann Pellé

    Done

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Aliona Dangla
    • Gauthier Ambard
    • Louis Romero
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I72261db7a02af6939d4574621826a448e13d2f13
    Gerrit-Change-Number: 6596982
    Gerrit-PatchSet: 8
    Gerrit-Owner: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Reviewer: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Reviewer: Louis Romero <lpro...@google.com>
    Gerrit-CC: Code Review Nudger <android-build...@prod.google.com>
    Gerrit-Attention: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Attention: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Attention: Louis Romero <lpro...@google.com>
    Gerrit-Comment-Date: Thu, 12 Jun 2025 13:02:17 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Louis Romero <lpro...@google.com>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Gauthier Ambard (Gerrit)

    unread,
    Jun 12, 2025, 11:34:14 AM6/12/25
    to Ewann Pellé, Code Review Nudger, Aliona Dangla, Louis Romero, AyeAye, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
    Attention needed from Aliona Dangla, Ewann Pellé and Louis Romero

    Gauthier Ambard added 2 comments

    File ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.mm
    Line 147, Patchset 6 (Parent): [_stackView addArrangedSubview:facePile];
    Louis Romero . unresolved

    Did we try having the internal face pile not be in the stack view? Would it have fixed the layout?
    Why don't we add the chromium face pile to the stack view also?

    Gauthier Ambard

    For the same reason that it is not working with long name today: the facepile's stack view doesn't have a correct intrinsic size, so adding it in a stack view was doing weird things.

    Line 168, Patchset 4: if ([_facePile isDescendantOfView:self]) {
    Ewann Pellé . unresolved

    I'm curious, is this approach better than `_stackView == _facePile.superview` ?

    Gauthier Ambard

    If we add the facepile as subview of something else than the stack view (as I did below), it is still true.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Aliona Dangla
    • Ewann Pellé
    • Louis Romero
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I72261db7a02af6939d4574621826a448e13d2f13
    Gerrit-Change-Number: 6596982
    Gerrit-PatchSet: 8
    Gerrit-Owner: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Reviewer: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Reviewer: Louis Romero <lpro...@google.com>
    Gerrit-CC: Code Review Nudger <android-build...@prod.google.com>
    Gerrit-Attention: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Attention: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Attention: Louis Romero <lpro...@google.com>
    Gerrit-Comment-Date: Thu, 12 Jun 2025 15:34:02 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Ewann Pellé <ewa...@chromium.org>
    Comment-In-Reply-To: Louis Romero <lpro...@google.com>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Louis Romero (Gerrit)

    unread,
    Jun 12, 2025, 12:18:22 PM6/12/25
    to Gauthier Ambard, Ewann Pellé, Code Review Nudger, Aliona Dangla, Louis Romero, AyeAye, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
    Attention needed from Aliona Dangla, Ewann Pellé and Gauthier Ambard

    Louis Romero added 1 comment

    File ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.mm
    Line 147, Patchset 6 (Parent): [_stackView addArrangedSubview:facePile];
    Louis Romero . unresolved

    Did we try having the internal face pile not be in the stack view? Would it have fixed the layout?
    Why don't we add the chromium face pile to the stack view also?

    Gauthier Ambard

    For the same reason that it is not working with long name today: the facepile's stack view doesn't have a correct intrinsic size, so adding it in a stack view was doing weird things.

    Louis Romero

    So should we separate that in its own CL?

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Aliona Dangla
    • Ewann Pellé
    • Gauthier Ambard
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I72261db7a02af6939d4574621826a448e13d2f13
    Gerrit-Change-Number: 6596982
    Gerrit-PatchSet: 8
    Gerrit-Owner: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Reviewer: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Reviewer: Louis Romero <lpro...@google.com>
    Gerrit-CC: Code Review Nudger <android-build...@prod.google.com>
    Gerrit-Attention: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Attention: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Attention: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Comment-Date: Thu, 12 Jun 2025 16:18:09 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Gauthier Ambard <gam...@chromium.org>
    Comment-In-Reply-To: Louis Romero <lpro...@google.com>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Louis Romero (Gerrit)

    unread,
    Jun 12, 2025, 12:25:48 PM6/12/25
    to Gauthier Ambard, Ewann Pellé, Code Review Nudger, Aliona Dangla, Louis Romero, AyeAye, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
    Attention needed from Aliona Dangla, Ewann Pellé and Gauthier Ambard

    Louis Romero added 2 comments

    File ios/chrome/browser/saved_tab_groups/coordinator/face_pile_coordinator.mm
    Line 39, Patchset 8 (Latest): CHECK(_facePileView);
    Louis Romero . unresolved

    Maybe add an error log asking to first start the coordinator?

    ```suggestion
    CHECK(_facePileView)
    << "Call -[FacePileCoordinator start] before requesting `facePileView`.";
    ```

    (I somehow miss the AI-suggested fixes already.)

    File ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.mm
    Line 162, Patchset 6: _facePileProvider = facePileProvider;
    Louis Romero . unresolved

    Why do you need the provider? Can't the caller just set the face pile externally?

    Edit: oh, it's just to keep it in memory. I think this should be better explained in the interface comment. It's rather unusual, no? We have N cells holding onto N coordinators basically (even though they don't know they are coordinators). Coordinators should be part of the coordinator hierarchy instead.
    But maybe it's a pattern we already follow elsewhere?

    Ewann Pellé

    Done

    Louis Romero

    I don't see this addressed?

    Gerrit-Comment-Date: Thu, 12 Jun 2025 16:25:32 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Ewann Pellé (Gerrit)

    unread,
    Jun 16, 2025, 6:08:18 AM6/16/25
    to Gauthier Ambard, Code Review Nudger, Aliona Dangla, Louis Romero, AyeAye, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
    Attention needed from Aliona Dangla and Gauthier Ambard

    Ewann Pellé added 1 comment

    Patchset-level comments
    Open in Gerrit

    Related details

    Attention is currently required from:
    • Aliona Dangla
    • Gauthier Ambard
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I72261db7a02af6939d4574621826a448e13d2f13
    Gerrit-Change-Number: 6596982
    Gerrit-PatchSet: 8
    Gerrit-Owner: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Reviewer: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Reviewer: Louis Romero <lpro...@google.com>
    Gerrit-CC: Code Review Nudger <android-build...@prod.google.com>
    Gerrit-Attention: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Attention: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Comment-Date: Mon, 16 Jun 2025 10:08:07 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Ewann Pellé (Gerrit)

    unread,
    Jun 16, 2025, 6:08:36 AM6/16/25
    to Gauthier Ambard, Code Review Nudger, Aliona Dangla, Louis Romero, AyeAye, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
    Attention needed from Aliona Dangla, Gauthier Ambard and Louis Romero

    Ewann Pellé added 4 comments

    File ios/chrome/browser/saved_tab_groups/coordinator/face_pile_coordinator.mm
    Line 39, Patchset 8 (Latest): CHECK(_facePileView);
    Louis Romero . resolved

    Maybe add an error log asking to first start the coordinator?

    ```suggestion
    CHECK(_facePileView)
    << "Call -[FacePileCoordinator start] before requesting `facePileView`.";
    ```

    (I somehow miss the AI-suggested fixes already.)

    Ewann Pellé

    Done

    File ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.mm
    Line 147, Patchset 6 (Parent): [_stackView addArrangedSubview:facePile];
    Louis Romero . resolved

    Did we try having the internal face pile not be in the stack view? Would it have fixed the layout?
    Why don't we add the chromium face pile to the stack view also?

    Gauthier Ambard

    For the same reason that it is not working with long name today: the facepile's stack view doesn't have a correct intrinsic size, so adding it in a stack view was doing weird things.

    Louis Romero

    So should we separate that in its own CL?

    Ewann Pellé

    Acknowledged

    Line 162, Patchset 6: _facePileProvider = facePileProvider;
    Louis Romero . resolved

    Why do you need the provider? Can't the caller just set the face pile externally?

    Edit: oh, it's just to keep it in memory. I think this should be better explained in the interface comment. It's rather unusual, no? We have N cells holding onto N coordinators basically (even though they don't know they are coordinators). Coordinators should be part of the coordinator hierarchy instead.
    But maybe it's a pattern we already follow elsewhere?

    Ewann Pellé

    Done

    Louis Romero

    I don't see this addressed?

    Ewann Pellé

    Added a comment.

    Line 168, Patchset 4: if ([_facePile isDescendantOfView:self]) {
    Ewann Pellé . resolved

    I'm curious, is this approach better than `_stackView == _facePile.superview` ?

    Gauthier Ambard

    If we add the facepile as subview of something else than the stack view (as I did below), it is still true.

    Ewann Pellé

    Done

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Aliona Dangla
    • Gauthier Ambard
    • Louis Romero
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I72261db7a02af6939d4574621826a448e13d2f13
    Gerrit-Change-Number: 6596982
    Gerrit-PatchSet: 8
    Gerrit-Owner: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Reviewer: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Reviewer: Louis Romero <lpro...@google.com>
    Gerrit-CC: Code Review Nudger <android-build...@prod.google.com>
    Gerrit-Attention: Aliona Dangla <aliona...@chromium.org>
    Gerrit-Attention: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Attention: Louis Romero <lpro...@google.com>
    Gerrit-Comment-Date: Mon, 16 Jun 2025 10:08:18 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Gauthier Ambard <gam...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Gauthier Ambard (Gerrit)

    unread,
    Jun 16, 2025, 7:58:41 AM6/16/25
    to Ewann Pellé, Code Review Nudger, Aliona Dangla, Louis Romero, AyeAye, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org

    Gauthier Ambard abandoned this change

    Related details

    Attention set is empty
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: abandon
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Gauthier Ambard (Gerrit)

    unread,
    Jun 16, 2025, 10:38:15 AM6/16/25
    to Ewann Pellé, Chromium LUCI CQ, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
    Attention needed from Ewann Pellé

    Gauthier Ambard added 3 comments

    File ios/chrome/browser/saved_tab_groups/ui/face_pile_consumer.h
    Line 18, Patchset 3 (Latest): totalNumber:(NSInteger)totalNumber;
    Gauthier Ambard . unresolved

    Nit: comments

    File ios/chrome/browser/saved_tab_groups/ui/face_pile_view.mm
    Line 13, Patchset 3 (Latest):#import "ui/base/l10n/l10n_util.h"
    Gauthier Ambard . unresolved

    Nit: weird empty lines in this file (one too many at the top too).

    File ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.h
    Line 24, Patchset 3 (Latest):@property(nonatomic, strong) id<FacePileProviding> facePileProvider;
    Gauthier Ambard . unresolved

    We are passing it to be kept alive right? Maybe it should be mentioned somewhere?

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Ewann Pellé
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I71798f190836a23181f251f5ea95b55092b173a6
    Gerrit-Change-Number: 6640998
    Gerrit-PatchSet: 3
    Gerrit-Owner: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
    Gerrit-CC: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Attention: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Comment-Date: Mon, 16 Jun 2025 14:38:03 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Ewann Pellé (Gerrit)

    unread,
    Jun 16, 2025, 10:48:58 AM6/16/25
    to Gauthier Ambard, Chromium LUCI CQ, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
    Attention needed from Gauthier Ambard

    Ewann Pellé voted and added 3 comments

    Votes added by Ewann Pellé

    Commit-Queue+1

    3 comments

    File ios/chrome/browser/saved_tab_groups/ui/face_pile_consumer.h
    Line 18, Patchset 3: totalNumber:(NSInteger)totalNumber;
    Gauthier Ambard . resolved

    Nit: comments

    Ewann Pellé

    Done

    File ios/chrome/browser/saved_tab_groups/ui/face_pile_view.mm
    Line 13, Patchset 3:#import "ui/base/l10n/l10n_util.h"
    Gauthier Ambard . resolved

    Nit: weird empty lines in this file (one too many at the top too).

    Ewann Pellé

    Done

    File ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.h
    Line 24, Patchset 3:@property(nonatomic, strong) id<FacePileProviding> facePileProvider;
    Gauthier Ambard . resolved

    We are passing it to be kept alive right? Maybe it should be mentioned somewhere?

    Ewann Pellé

    Done

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Gauthier Ambard
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Review
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: I71798f190836a23181f251f5ea95b55092b173a6
    Gerrit-Change-Number: 6640998
    Gerrit-PatchSet: 4
    Gerrit-Owner: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
    Gerrit-Reviewer: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Attention: Gauthier Ambard <gam...@chromium.org>
    Gerrit-Comment-Date: Mon, 16 Jun 2025 14:48:45 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    Comment-In-Reply-To: Gauthier Ambard <gam...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Ewann Pellé (Gerrit)

    unread,
    Jun 16, 2025, 10:59:20 AM6/16/25
    to Gauthier Ambard, Chromium LUCI CQ, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
    Attention needed from Gauthier Ambard

    Ewann Pellé added 1 comment

    File ios/chrome/browser/saved_tab_groups/coordinator/DEPS
    Line 5, Patchset 4 (Latest): "+components/saved_tab_groups/test_support",
    Ewann Pellé . unresolved

    will reformat.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Gauthier Ambard
    Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I71798f190836a23181f251f5ea95b55092b173a6
      Gerrit-Change-Number: 6640998
      Gerrit-PatchSet: 4
      Gerrit-Owner: Ewann Pellé <ewa...@chromium.org>
      Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
      Gerrit-Reviewer: Gauthier Ambard <gam...@chromium.org>
      Gerrit-Attention: Gauthier Ambard <gam...@chromium.org>
      Gerrit-Comment-Date: Mon, 16 Jun 2025 14:59:07 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Gauthier Ambard (Gerrit)

      unread,
      Jun 16, 2025, 12:44:40 PM6/16/25
      to Ewann Pellé, Chromium LUCI CQ, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org
      Attention needed from Ewann Pellé

      Gauthier Ambard voted and added 5 comments

      Votes added by Gauthier Ambard

      Code-Review+1

      5 comments

      File ios/chrome/browser/saved_tab_groups/coordinator/face_pile_coordinator.mm
      Line 63, Patchset 4 (Latest): [super stop];
      Gauthier Ambard . unresolved

      Here and above, I think the coordinators should not call super on start/stop.

      File ios/chrome/browser/saved_tab_groups/ui/face_pile_consumer.h
      Line 20, Patchset 4 (Latest):- (void)updateWithViews:(NSArray<id<ShareKitAvatarPrimitive>>*)faces
      Gauthier Ambard . unresolved

      Should this be "views" or "faces"?

      Line 18, Patchset 4 (Latest):// Updates the FacePileView with a new set of avatar primitives and the total
      Gauthier Ambard . unresolved

      Nit: update comments

      File ios/chrome/browser/saved_tab_groups/ui/face_pile_view.mm
      Line 3, Patchset 4 (Latest):// found in the LICENSE file.
      Gauthier Ambard . unresolved

      Nit: empty line

      Line 34, Patchset 4 (Latest):#pragma mark - FacePileConsumer
      Gauthier Ambard . unresolved

      Nit: add empty line

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Ewann Pellé
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I71798f190836a23181f251f5ea95b55092b173a6
      Gerrit-Change-Number: 6640998
      Gerrit-PatchSet: 4
      Gerrit-Owner: Ewann Pellé <ewa...@chromium.org>
      Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
      Gerrit-Reviewer: Gauthier Ambard <gam...@chromium.org>
      Gerrit-Attention: Ewann Pellé <ewa...@chromium.org>
      Gerrit-Comment-Date: Mon, 16 Jun 2025 16:44:27 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Ewann Pellé (Gerrit)

      unread,
      Jun 17, 2025, 4:07:46 AM6/17/25
      to Louis Romero, Gauthier Ambard, Chromium LUCI CQ, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org

      Ewann Pellé voted and added 6 comments

      Votes added by Ewann Pellé

      Commit-Queue+2

      6 comments

      File ios/chrome/browser/saved_tab_groups/coordinator/DEPS
      Line 5, Patchset 4: "+components/saved_tab_groups/test_support",
      Ewann Pellé . resolved

      will reformat.

      Ewann Pellé

      Done

      File ios/chrome/browser/saved_tab_groups/coordinator/face_pile_coordinator.mm
      Line 63, Patchset 4: [super stop];
      Gauthier Ambard . resolved

      Here and above, I think the coordinators should not call super on start/stop.

      Ewann Pellé

      Done

      File ios/chrome/browser/saved_tab_groups/ui/face_pile_consumer.h
      Line 20, Patchset 4:- (void)updateWithViews:(NSArray<id<ShareKitAvatarPrimitive>>*)faces
      Gauthier Ambard . resolved

      Should this be "views" or "faces"?

      Ewann Pellé

      Done

      Line 18, Patchset 4:// Updates the FacePileView with a new set of avatar primitives and the total
      Gauthier Ambard . resolved

      Nit: update comments

      Ewann Pellé

      I guess you prefer `faces` ?

      File ios/chrome/browser/saved_tab_groups/ui/face_pile_view.mm
      Line 3, Patchset 4:// found in the LICENSE file.
      Gauthier Ambard . resolved

      Nit: empty line

      Ewann Pellé

      Done

      Line 34, Patchset 4:#pragma mark - FacePileConsumer
      Gauthier Ambard . resolved

      Nit: add empty line

      Ewann Pellé

      Done

      Open in Gerrit

      Related details

      Attention set is empty
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement satisfiedCode-Review
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I71798f190836a23181f251f5ea95b55092b173a6
      Gerrit-Change-Number: 6640998
      Gerrit-PatchSet: 5
      Gerrit-Owner: Ewann Pellé <ewa...@chromium.org>
      Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
      Gerrit-Reviewer: Gauthier Ambard <gam...@chromium.org>
      Gerrit-CC: Louis Romero <lpro...@google.com>
      Gerrit-Comment-Date: Tue, 17 Jun 2025 08:07:33 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      open
      diffy

      Ewann Pellé (Gerrit)

      unread,
      Jun 17, 2025, 4:17:16 AM6/17/25
      to Louis Romero, Gauthier Ambard, Chromium LUCI CQ, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org

      Ewann Pellé voted Commit-Queue+0

      Commit-Queue+0
      Open in Gerrit

      Related details

      Attention set is empty
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement satisfiedCode-Review
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I71798f190836a23181f251f5ea95b55092b173a6
      Gerrit-Change-Number: 6640998
      Gerrit-PatchSet: 5
      Gerrit-Owner: Ewann Pellé <ewa...@chromium.org>
      Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
      Gerrit-Reviewer: Gauthier Ambard <gam...@chromium.org>
      Gerrit-CC: Louis Romero <lpro...@google.com>
      Gerrit-Comment-Date: Tue, 17 Jun 2025 08:17:04 +0000
      Gerrit-HasComments: No
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      open
      diffy

      Ewann Pellé (Gerrit)

      unread,
      Jun 17, 2025, 4:18:27 AM6/17/25
      to Louis Romero, Gauthier Ambard, Chromium LUCI CQ, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org

      Ewann Pellé voted Commit-Queue+2

      Commit-Queue+2
      Open in Gerrit

      Related details

      Attention set is empty
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement satisfiedCode-Review
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I71798f190836a23181f251f5ea95b55092b173a6
      Gerrit-Change-Number: 6640998
      Gerrit-PatchSet: 6
      Gerrit-Owner: Ewann Pellé <ewa...@chromium.org>
      Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
      Gerrit-Reviewer: Gauthier Ambard <gam...@chromium.org>
      Gerrit-CC: Louis Romero <lpro...@google.com>
      Gerrit-Comment-Date: Tue, 17 Jun 2025 08:18:12 +0000
      Gerrit-HasComments: No
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      open
      diffy

      Chromium LUCI CQ (Gerrit)

      unread,
      Jun 17, 2025, 5:12:51 AM6/17/25
      to Ewann Pellé, Louis Romero, Gauthier Ambard, chromium...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org

      Chromium LUCI CQ submitted the change with unreviewed changes

      Unreviewed changes

      4 is the latest approved patch-set.
      The change was submitted with unreviewed changes in the following files:

      ```
      The name of the file: ios/chrome/browser/saved_tab_groups/ui/face_pile_view.mm
      Insertions: 3, Deletions: 1.

      The diff is too large to show. Please review the diff.
      ```
      ```
      The name of the file: ios/chrome/browser/saved_tab_groups/ui/fake_face_pile_consumer.mm
      Insertions: 1, Deletions: 1.

      The diff is too large to show. Please review the diff.
      ```
      ```
      The name of the file: ios/chrome/browser/saved_tab_groups/coordinator/face_pile_mediator.mm
      Insertions: 1, Deletions: 1.

      The diff is too large to show. Please review the diff.
      ```
      ```
      The name of the file: ios/chrome/browser/saved_tab_groups/ui/face_pile_consumer.h
      Insertions: 3, Deletions: 3.

      The diff is too large to show. Please review the diff.
      ```
      ```
      The name of the file: ios/chrome/browser/saved_tab_groups/coordinator/face_pile_coordinator.mm
      Insertions: 0, Deletions: 3.

      The diff is too large to show. Please review the diff.
      ```
      ```
      The name of the file: ios/chrome/browser/saved_tab_groups/coordinator/DEPS
      Insertions: 2, Deletions: 2.

      The diff is too large to show. Please review the diff.
      ```

      Change information

      Commit message:
      [iOS] Create a facepile implementation in Chrome

      As the one from downstream has issues, this a skeleton of what it would
      look like in Chromium.
      Based on: https://crrev.com/c/6596982
      Bug: 407545906
      Change-Id: I71798f190836a23181f251f5ea95b55092b173a6
      Commit-Queue: Ewann Pellé <ewa...@chromium.org>
      Reviewed-by: Gauthier Ambard <gam...@chromium.org>
      Cr-Commit-Position: refs/heads/main@{#1474831}
      Files:
      • A ios/chrome/browser/saved_tab_groups/coordinator/BUILD.gn
      • A ios/chrome/browser/saved_tab_groups/coordinator/DEPS
      • A ios/chrome/browser/saved_tab_groups/coordinator/face_pile_configuration.h
      • A ios/chrome/browser/saved_tab_groups/coordinator/face_pile_configuration.mm
      • A ios/chrome/browser/saved_tab_groups/coordinator/face_pile_coordinator.h
      • A ios/chrome/browser/saved_tab_groups/coordinator/face_pile_coordinator.mm
      • A ios/chrome/browser/saved_tab_groups/coordinator/face_pile_mediator.h
      • A ios/chrome/browser/saved_tab_groups/coordinator/face_pile_mediator.mm
      • A ios/chrome/browser/saved_tab_groups/coordinator/face_pile_mediator_unittest.mm
      • M ios/chrome/browser/saved_tab_groups/ui/BUILD.gn
      • A ios/chrome/browser/saved_tab_groups/ui/DEPS
      • A ios/chrome/browser/saved_tab_groups/ui/face_pile_consumer.h
      • A ios/chrome/browser/saved_tab_groups/ui/face_pile_providing.h
      • A ios/chrome/browser/saved_tab_groups/ui/face_pile_view.h
      • A ios/chrome/browser/saved_tab_groups/ui/face_pile_view.mm
      • A ios/chrome/browser/saved_tab_groups/ui/fake_face_pile_consumer.h
      • A ios/chrome/browser/saved_tab_groups/ui/fake_face_pile_consumer.mm
      • A ios/chrome/browser/saved_tab_groups/ui/fake_face_pile_provider.h
      • A ios/chrome/browser/saved_tab_groups/ui/fake_face_pile_provider.mm
      • M ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/regular/BUILD.gn
      • M ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/BUILD.gn
      • M ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/DEPS
      • M ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.h
      • M ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.mm
      • M ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_coordinator.mm
      • M ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_item_data_source.h
      • M ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_mediator.mm
      • M ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_mediator_delegate.h
      • M ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_mediator_unittest.mm
      • M ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_view_controller.mm
      • M ios/chrome/test/BUILD.gn
      Change size: XL
      Delta: 31 files changed, 1021 insertions(+), 26 deletions(-)
      Branch: refs/heads/main
      Submit Requirements:
      • requirement satisfiedCode-Review: +1 by Gauthier Ambard
      Open in Gerrit
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: merged
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I71798f190836a23181f251f5ea95b55092b173a6
      Gerrit-Change-Number: 6640998
      Gerrit-PatchSet: 7
      Gerrit-Owner: Ewann Pellé <ewa...@chromium.org>
      Gerrit-Reviewer: Chromium LUCI CQ <chromiu...@luci-project-accounts.iam.gserviceaccount.com>
      Gerrit-Reviewer: Ewann Pellé <ewa...@chromium.org>
      Gerrit-Reviewer: Gauthier Ambard <gam...@chromium.org>
      open
      diffy
      satisfied_requirement
      Reply all
      Reply to author
      Forward
      0 new messages