[Glic] Creates ActorUiTabController Observer and Updates UI in Tab Grid [chromium/src : main]

0 views
Skip to first unread message

Calder Kitagawa (Gerrit)

unread,
Feb 25, 2026, 1:08:58 PM (3 days ago) Feb 25
to Bhuvana Betini, Madhav Pruthi, Sky Malice, Wenyu Fu, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
Attention needed from Bhuvana Betini, Madhav Pruthi, Sky Malice and Wenyu Fu

Calder Kitagawa added 6 comments

File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridView.java
Line 334, Patchset 5 (Latest): View actorContainer = fastFindViewById(R.id.actor_ui_container);
if (visible && actorContainer == null) {
LayoutInflater.from(getContext())
.inflate(R.layout.actor_tab_grid_view_overlay, this, true);

actorContainer = fastFindViewById(R.id.actor_ui_container);

if (actorContainer != null) {
actorContainer.setLayoutParams(
new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}
}
Calder Kitagawa . unresolved

Let's turn this into a helper: `getActorUi(boolean inflateIfMissing)`?

@madhav...@google.com is also working on a spinner for loading thumbnails can you sync with him so we can coordinate on not doing this all twice or at least sharing some infrastructure?

File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
Line 256, Patchset 5 (Latest): if (!ViewCompat.isAttachedToWindow(view)) {
return;
}

if (tabGridView.isActorUiVisible() != isDynamic) {
if (view.getWidth() <= 0) {
view.post(
() -> {
if (ViewCompat.isAttachedToWindow(view)) {
tabGridView.setActorActiveUiVisible(isDynamic);
}
});
} else {
tabGridView.setActorActiveUiVisible(isDynamic);
}
}
Calder Kitagawa . unresolved

I think we should be able to remove most of this logic. It should be possible to set things up even without the view attached to anything. I suspect we need a different fix inside `TabGridView` to gracefully handle not being attached when this is set. Otherwise if we get attached later we might fail to show something.

Also since this adds an animation inside a recyclerview adding @sk...@chromium.org who knows some gotchas about this we should be looking for.

File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
Line 1762, Patchset 5 (Latest): for (int i = 0; i < mModelList.size(); i++) {
PropertyModel model = mModelList.get(i).model;
int tabId = model.get(TabProperties.TAB_ID);
Tab tab = getCurrentTabModelChecked().getTabById(tabId);
if (tab != null) {
ActorUiTabController.from(tab).removeObserver(mActorObserver);
}
}
Calder Kitagawa . unresolved

We should be doing this inside `removeObservers` to avoid an extra loop and leverage the existing tab handling logic there.

Line 2254, Patchset 5 (Latest): // Add this line to ensure real-time updates for NEW tabs too:
controller.removeObserver(mActorObserver);
controller.addObserver(mActorObserver);
Calder Kitagawa . unresolved

I don't think we should be relying on toggling the observer attachment here, that seems like it is papering over a bug.

There are two places where we handle updates

`addTabInfoToModel` new additions, `updateTab` for large mutations. What exactly is the removal and addition trying to accomplish? Should we be checking some state here?

File chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java
Line 377, Patchset 5 (Latest): @Mock ActorOverlayState mActorOverlayState; // Import from your actor package
Calder Kitagawa . unresolved

?

File chrome/browser/actor/actor_keyed_service.cc
Line 353, Patchset 5 (Latest): LOG(ERROR) << "BBETINI" << "Actor Keyed Service - CreateTaskImpl";
Calder Kitagawa . unresolved

Remove these?

Open in Gerrit

Related details

Attention is currently required from:
  • Bhuvana Betini
  • Madhav Pruthi
  • Sky Malice
  • Wenyu Fu
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
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: I1d890f2afa7d207306d81bee7362aa6ce81d283e
Gerrit-Change-Number: 7598511
Gerrit-PatchSet: 5
Gerrit-Owner: Bhuvana Betini <bbe...@google.com>
Gerrit-Reviewer: Bhuvana Betini <bbe...@google.com>
Gerrit-Reviewer: Calder Kitagawa <ckit...@chromium.org>
Gerrit-Reviewer: Wenyu Fu <wen...@chromium.org>
Gerrit-CC: Madhav Pruthi <madhav...@google.com>
Gerrit-CC: Sky Malice <sk...@chromium.org>
Gerrit-Attention: Bhuvana Betini <bbe...@google.com>
Gerrit-Attention: Sky Malice <sk...@chromium.org>
Gerrit-Attention: Wenyu Fu <wen...@chromium.org>
Gerrit-Attention: Madhav Pruthi <madhav...@google.com>
Gerrit-Comment-Date: Wed, 25 Feb 2026 18:08:51 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Bhuvana Betini (Gerrit)

unread,
Feb 25, 2026, 2:24:31 PM (2 days ago) Feb 25
to Sky Malice, Madhav Pruthi, Wenyu Fu, Calder Kitagawa, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
Attention needed from Calder Kitagawa, Madhav Pruthi, Sky Malice and Wenyu Fu

Bhuvana Betini added 3 comments

File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridView.java
Line 334, Patchset 5: View actorContainer = fastFindViewById(R.id.actor_ui_container);

if (visible && actorContainer == null) {
LayoutInflater.from(getContext())
.inflate(R.layout.actor_tab_grid_view_overlay, this, true);

actorContainer = fastFindViewById(R.id.actor_ui_container);

if (actorContainer != null) {
actorContainer.setLayoutParams(
new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}
}
Calder Kitagawa . resolved

Let's turn this into a helper: `getActorUi(boolean inflateIfMissing)`?

@madhav...@google.com is also working on a spinner for loading thumbnails can you sync with him so we can coordinate on not doing this all twice or at least sharing some infrastructure?

Bhuvana Betini

Done.

Discussing with Madhav, but seems like UI is at a very high-risk state so I will default to just showing an icon for now.

File chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java
Line 377, Patchset 5: @Mock ActorOverlayState mActorOverlayState; // Import from your actor package
Calder Kitagawa . resolved

?

Bhuvana Betini

Done

File chrome/browser/actor/actor_keyed_service.cc
Line 353, Patchset 5: LOG(ERROR) << "BBETINI" << "Actor Keyed Service - CreateTaskImpl";
Calder Kitagawa . resolved

Remove these?

Bhuvana Betini

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Calder Kitagawa
  • Madhav Pruthi
  • Sky Malice
  • Wenyu Fu
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
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: I1d890f2afa7d207306d81bee7362aa6ce81d283e
Gerrit-Change-Number: 7598511
Gerrit-PatchSet: 10
Gerrit-Owner: Bhuvana Betini <bbe...@google.com>
Gerrit-Reviewer: Bhuvana Betini <bbe...@google.com>
Gerrit-Reviewer: Calder Kitagawa <ckit...@chromium.org>
Gerrit-Reviewer: Sky Malice <sk...@chromium.org>
Gerrit-Reviewer: Wenyu Fu <wen...@chromium.org>
Gerrit-CC: Madhav Pruthi <madhav...@google.com>
Gerrit-Attention: Calder Kitagawa <ckit...@chromium.org>
Gerrit-Attention: Sky Malice <sk...@chromium.org>
Gerrit-Attention: Wenyu Fu <wen...@chromium.org>
Gerrit-Attention: Madhav Pruthi <madhav...@google.com>
Gerrit-Comment-Date: Wed, 25 Feb 2026 19:24:25 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Calder Kitagawa <ckit...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

Wenyu Fu (Gerrit)

unread,
Feb 25, 2026, 7:02:31 PM (2 days ago) Feb 25
to Bhuvana Betini, Sky Malice, Calder Kitagawa, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
Attention needed from Bhuvana Betini, Calder Kitagawa and Sky Malice

Wenyu Fu voted and added 6 comments

Votes added by Wenyu Fu

Code-Review+1

6 comments

Patchset-level comments
File-level comment, Patchset 10 (Latest):
Wenyu Fu . resolved

LGTM % nits and Calder's comments

File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
Line 256, Patchset 5: if (!ViewCompat.isAttachedToWindow(view)) {

return;
}

if (tabGridView.isActorUiVisible() != isDynamic) {
if (view.getWidth() <= 0) {
view.post(
() -> {
if (ViewCompat.isAttachedToWindow(view)) {
tabGridView.setActorActiveUiVisible(isDynamic);
}
});
} else {
tabGridView.setActorActiveUiVisible(isDynamic);
}
}
Calder Kitagawa . unresolved

I think we should be able to remove most of this logic. It should be possible to set things up even without the view attached to anything. I suspect we need a different fix inside `TabGridView` to gracefully handle not being attached when this is set. Otherwise if we get attached later we might fail to show something.

Also since this adds an animation inside a recyclerview adding @sk...@chromium.org who knows some gotchas about this we should be looking for.

Wenyu Fu

Drive by on this, WRT animation, I think UX design is not finalized yet, so if that's a problem for this CL we can remove it and just have it to be a plain colors.

But we will likely need to have an animated view somewhere around in terms of few weeks

File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java
Line 207, Patchset 10 (Latest): public static final WritableObjectPropertyKey<UiTabState> ACTOR_UI_STATE =
Wenyu Fu . unresolved

nit: Javadoc to be consistent

File chrome/browser/actor/android/java/res/layout/actor_tab_grid_view_overlay.xml
Line 7, Patchset 10 (Latest):<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
Wenyu Fu . unresolved

Can you put a comment what this is? Currently this has a similar name with actor_overlay which is for much different purposes.

Otherwise naming suggestion: actor_gts_tab_indicator.xml or something down the line

File chrome/browser/actor/android/java/src/org/chromium/chrome/browser/actor/ui/ActorUiTabController.java
Line 177, Patchset 10 (Parent): mTab.getUserDataHost().removeUserData(USER_DATA_KEY);
Wenyu Fu . unresolved

Is removing this intended?

File chrome/browser/actor/android/ui/actor_ui_tab_controller_android.cc
Line 11, Patchset 10 (Latest):#include "chrome/browser/actor/actor_keyed_service_factory.h"
Wenyu Fu . unresolved

nit: IS this still needed? The rest of the file is not changed.

Open in Gerrit

Related details

Attention is currently required from:
  • Bhuvana Betini
  • Calder Kitagawa
  • Sky Malice
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement satisfiedReview-Enforcement
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: I1d890f2afa7d207306d81bee7362aa6ce81d283e
Gerrit-Change-Number: 7598511
Gerrit-PatchSet: 10
Gerrit-Owner: Bhuvana Betini <bbe...@google.com>
Gerrit-Reviewer: Bhuvana Betini <bbe...@google.com>
Gerrit-Reviewer: Calder Kitagawa <ckit...@chromium.org>
Gerrit-Reviewer: Sky Malice <sk...@chromium.org>
Gerrit-Reviewer: Wenyu Fu <wen...@chromium.org>
Gerrit-Attention: Bhuvana Betini <bbe...@google.com>
Gerrit-Attention: Calder Kitagawa <ckit...@chromium.org>
Gerrit-Attention: Sky Malice <sk...@chromium.org>
Gerrit-Comment-Date: Thu, 26 Feb 2026 00:02:22 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Comment-In-Reply-To: Calder Kitagawa <ckit...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

Wenyu Fu (Gerrit)

unread,
Feb 25, 2026, 7:03:27 PM (2 days ago) Feb 25
to Bhuvana Betini, Madhav Pruthi, Sky Malice, Calder Kitagawa, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
Attention needed from Bhuvana Betini, Calder Kitagawa and Sky Malice

Wenyu Fu voted and added 1 comment

Votes added by Wenyu Fu

Code-Review+0

1 comment

Patchset-level comments
Wenyu Fu . resolved

(Sorry misclick)

Open in Gerrit

Related details

Attention is currently required from:
  • Bhuvana Betini
  • Calder Kitagawa
  • Sky Malice
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
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: I1d890f2afa7d207306d81bee7362aa6ce81d283e
Gerrit-Change-Number: 7598511
Gerrit-PatchSet: 10
Gerrit-Owner: Bhuvana Betini <bbe...@google.com>
Gerrit-Reviewer: Bhuvana Betini <bbe...@google.com>
Gerrit-Reviewer: Calder Kitagawa <ckit...@chromium.org>
Gerrit-Reviewer: Sky Malice <sk...@chromium.org>
Gerrit-Reviewer: Wenyu Fu <wen...@chromium.org>
Gerrit-CC: Madhav Pruthi <madhav...@google.com>
Gerrit-Attention: Bhuvana Betini <bbe...@google.com>
Gerrit-Attention: Calder Kitagawa <ckit...@chromium.org>
Gerrit-Attention: Sky Malice <sk...@chromium.org>
Gerrit-Comment-Date: Thu, 26 Feb 2026 00:03:21 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Bhuvana Betini (Gerrit)

unread,
Feb 25, 2026, 10:48:22 PM (2 days ago) Feb 25
to Madhav Pruthi, Wenyu Fu, Sky Malice, Calder Kitagawa, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
Attention needed from Calder Kitagawa, Sky Malice and Wenyu Fu

Bhuvana Betini added 7 comments

File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
Line 256, Patchset 5: if (!ViewCompat.isAttachedToWindow(view)) {
return;
}

if (tabGridView.isActorUiVisible() != isDynamic) {
if (view.getWidth() <= 0) {
view.post(
() -> {
if (ViewCompat.isAttachedToWindow(view)) {
tabGridView.setActorActiveUiVisible(isDynamic);
}
});
} else {
tabGridView.setActorActiveUiVisible(isDynamic);
}
}
Calder Kitagawa . resolved

I think we should be able to remove most of this logic. It should be possible to set things up even without the view attached to anything. I suspect we need a different fix inside `TabGridView` to gracefully handle not being attached when this is set. Otherwise if we get attached later we might fail to show something.

Also since this adds an animation inside a recyclerview adding @sk...@chromium.org who knows some gotchas about this we should be looking for.

Wenyu Fu

Drive by on this, WRT animation, I think UX design is not finalized yet, so if that's a problem for this CL we can remove it and just have it to be a plain colors.

But we will likely need to have an animated view somewhere around in terms of few weeks

Bhuvana Betini

Done, I think!

File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
Line 1762, Patchset 5: for (int i = 0; i < mModelList.size(); i++) {

PropertyModel model = mModelList.get(i).model;
int tabId = model.get(TabProperties.TAB_ID);
Tab tab = getCurrentTabModelChecked().getTabById(tabId);
if (tab != null) {
ActorUiTabController.from(tab).removeObserver(mActorObserver);
}
}
Calder Kitagawa . resolved

We should be doing this inside `removeObservers` to avoid an extra loop and leverage the existing tab handling logic there.

Bhuvana Betini

Done

Line 2254, Patchset 5: // Add this line to ensure real-time updates for NEW tabs too:
controller.removeObserver(mActorObserver);
controller.addObserver(mActorObserver);
Calder Kitagawa . unresolved

I don't think we should be relying on toggling the observer attachment here, that seems like it is papering over a bug.

There are two places where we handle updates

`addTabInfoToModel` new additions, `updateTab` for large mutations. What exactly is the removal and addition trying to accomplish? Should we be checking some state here?

Bhuvana Betini

The purpose of this is to add an observer when a new tab is added.. but I suppose this may not even be neccessary? We would only need an observer when we get a UiTabState update.

File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java
Line 207, Patchset 10: public static final WritableObjectPropertyKey<UiTabState> ACTOR_UI_STATE =
Wenyu Fu . resolved

nit: Javadoc to be consistent

Bhuvana Betini

Done

File chrome/browser/actor/android/java/res/layout/actor_tab_grid_view_overlay.xml
Line 7, Patchset 10:<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
Wenyu Fu . resolved

Can you put a comment what this is? Currently this has a similar name with actor_overlay which is for much different purposes.

Otherwise naming suggestion: actor_gts_tab_indicator.xml or something down the line

Bhuvana Betini

Renamed.

File chrome/browser/actor/android/java/src/org/chromium/chrome/browser/actor/ui/ActorUiTabController.java
Line 177, Patchset 10 (Parent): mTab.getUserDataHost().removeUserData(USER_DATA_KEY);
Wenyu Fu . resolved

Is removing this intended?

Bhuvana Betini

thanks for catching!

File chrome/browser/actor/android/ui/actor_ui_tab_controller_android.cc
Line 11, Patchset 10:#include "chrome/browser/actor/actor_keyed_service_factory.h"
Wenyu Fu . resolved

nit: IS this still needed? The rest of the file is not changed.

Bhuvana Betini

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Calder Kitagawa
  • Sky Malice
  • Wenyu Fu
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
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: I1d890f2afa7d207306d81bee7362aa6ce81d283e
Gerrit-Change-Number: 7598511
Gerrit-PatchSet: 12
Gerrit-Owner: Bhuvana Betini <bbe...@google.com>
Gerrit-Reviewer: Bhuvana Betini <bbe...@google.com>
Gerrit-Reviewer: Calder Kitagawa <ckit...@chromium.org>
Gerrit-Reviewer: Sky Malice <sk...@chromium.org>
Gerrit-Reviewer: Wenyu Fu <wen...@chromium.org>
Gerrit-CC: Madhav Pruthi <madhav...@google.com>
Gerrit-Attention: Wenyu Fu <wen...@chromium.org>
Gerrit-Attention: Calder Kitagawa <ckit...@chromium.org>
Gerrit-Attention: Sky Malice <sk...@chromium.org>
Gerrit-Comment-Date: Thu, 26 Feb 2026 03:48:16 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Wenyu Fu <wen...@chromium.org>
Comment-In-Reply-To: Calder Kitagawa <ckit...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

Calder Kitagawa (Gerrit)

unread,
Feb 26, 2026, 9:21:00 AM (2 days ago) Feb 26
to Bhuvana Betini, Madhav Pruthi, Wenyu Fu, Sky Malice, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
Attention needed from Bhuvana Betini, Sky Malice and Wenyu Fu

Calder Kitagawa added 5 comments

File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridView.java
Line 327, Patchset 12 (Latest): @Nullable
private View getActorUi(boolean inflateIfMissing) {
Calder Kitagawa . unresolved
```suggestion
private @Nullable View getActorUi(boolean inflateIfMissing) {
```
Line 336, Patchset 12 (Latest): if (actorContainer != null) {
Calder Kitagawa . unresolved

Change this to an assert it shouldn't be null anymore.

Line 359, Patchset 12 (Latest): bringChildToFront(actorContainer);
Calder Kitagawa . unresolved

Can we just do this once when inflating the view?

File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
Line 2254, Patchset 5: // Add this line to ensure real-time updates for NEW tabs too:
controller.removeObserver(mActorObserver);
controller.addObserver(mActorObserver);
Calder Kitagawa . unresolved

I don't think we should be relying on toggling the observer attachment here, that seems like it is papering over a bug.

There are two places where we handle updates

`addTabInfoToModel` new additions, `updateTab` for large mutations. What exactly is the removal and addition trying to accomplish? Should we be checking some state here?

Bhuvana Betini

The purpose of this is to add an observer when a new tab is added.. but I suppose this may not even be neccessary? We would only need an observer when we get a UiTabState update.

Calder Kitagawa

Then we should add/remove the observer wherever `mTabObserver` is added/removed. (Can create helper methods for this). I don't want to include the new observer logic inside `addTabInfoToModel` since that is concerned with property model updates.

File chrome/browser/actor/android/java/res/layout/actor_gts_tab_indicator.xml
Line 15, Patchset 12 (Latest):
Calder Kitagawa . unresolved

Please fix this WARNING reported by Trailing Whitespace: Please remove the trailing whitespace.

Please remove the trailing whitespace.

Open in Gerrit

Related details

Attention is currently required from:
  • Bhuvana Betini
  • Sky Malice
  • Wenyu Fu
Gerrit-Attention: Bhuvana Betini <bbe...@google.com>
Gerrit-Attention: Wenyu Fu <wen...@chromium.org>
Gerrit-Attention: Sky Malice <sk...@chromium.org>
Gerrit-Comment-Date: Thu, 26 Feb 2026 14:19:16 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Bhuvana Betini <bbe...@google.com>
Comment-In-Reply-To: Calder Kitagawa <ckit...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

Bhuvana Betini (Gerrit)

unread,
Feb 26, 2026, 4:33:44 PM (2 days ago) Feb 26
to Madhav Pruthi, Wenyu Fu, Sky Malice, Calder Kitagawa, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
Attention needed from Calder Kitagawa, Sky Malice and Wenyu Fu

Bhuvana Betini added 6 comments

File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridView.java
Line 327, Patchset 12: @Nullable
private View getActorUi(boolean inflateIfMissing) {
Calder Kitagawa . resolved
```suggestion
private @Nullable View getActorUi(boolean inflateIfMissing) {
```
Bhuvana Betini

Done

Line 336, Patchset 12: if (actorContainer != null) {
Calder Kitagawa . resolved

Change this to an assert it shouldn't be null anymore.

Bhuvana Betini

Done

Line 359, Patchset 12: bringChildToFront(actorContainer);
Calder Kitagawa . resolved

Can we just do this once when inflating the view?

Bhuvana Betini

Done

File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
Line 2254, Patchset 5: // Add this line to ensure real-time updates for NEW tabs too:
controller.removeObserver(mActorObserver);
controller.addObserver(mActorObserver);
Calder Kitagawa . resolved

I don't think we should be relying on toggling the observer attachment here, that seems like it is papering over a bug.

There are two places where we handle updates

`addTabInfoToModel` new additions, `updateTab` for large mutations. What exactly is the removal and addition trying to accomplish? Should we be checking some state here?

Bhuvana Betini

The purpose of this is to add an observer when a new tab is added.. but I suppose this may not even be neccessary? We would only need an observer when we get a UiTabState update.

Calder Kitagawa

Then we should add/remove the observer wherever `mTabObserver` is added/removed. (Can create helper methods for this). I don't want to include the new observer logic inside `addTabInfoToModel` since that is concerned with property model updates.

Bhuvana Betini

Done. Created helpers and replaced calls to add/removeObserver.

File chrome/browser/actor/android/java/res/layout/actor_gts_tab_indicator.xml
Line 15, Patchset 12:
Calder Kitagawa . resolved

Please fix this WARNING reported by Trailing Whitespace: Please remove the trailing whitespace.

Please remove the trailing whitespace.

Bhuvana Betini

Done

File chrome/browser/actor/android/java/src/org/chromium/chrome/browser/actor/ui/ActorUiTabController.java
Line 177, Patchset 10 (Parent): mTab.getUserDataHost().removeUserData(USER_DATA_KEY);
Wenyu Fu . resolved

Is removing this intended?

Bhuvana Betini

thanks for catching!

Bhuvana Betini

I think this may actually be necessary since its redundant to call removeUserData on the tab itself. I keep failing tests on this line since I don't think we should be able to call removeUserData after the destroy.

Open in Gerrit

Related details

Attention is currently required from:
  • Calder Kitagawa
  • Sky Malice
  • Wenyu Fu
Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedReview-Enforcement
    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: I1d890f2afa7d207306d81bee7362aa6ce81d283e
    Gerrit-Change-Number: 7598511
    Gerrit-PatchSet: 13
    Gerrit-Owner: Bhuvana Betini <bbe...@google.com>
    Gerrit-Reviewer: Bhuvana Betini <bbe...@google.com>
    Gerrit-Reviewer: Calder Kitagawa <ckit...@chromium.org>
    Gerrit-Reviewer: Sky Malice <sk...@chromium.org>
    Gerrit-Reviewer: Wenyu Fu <wen...@chromium.org>
    Gerrit-CC: Madhav Pruthi <madhav...@google.com>
    Gerrit-Attention: Calder Kitagawa <ckit...@chromium.org>
    Gerrit-Attention: Wenyu Fu <wen...@chromium.org>
    Gerrit-Attention: Sky Malice <sk...@chromium.org>
    Gerrit-Comment-Date: Thu, 26 Feb 2026 21:33:37 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Bhuvana Betini <bbe...@google.com>
    Comment-In-Reply-To: Calder Kitagawa <ckit...@chromium.org>
    Comment-In-Reply-To: Wenyu Fu <wen...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Calder Kitagawa (Gerrit)

    unread,
    Feb 26, 2026, 4:59:44 PM (2 days ago) Feb 26
    to Bhuvana Betini, Madhav Pruthi, Wenyu Fu, Sky Malice, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
    Attention needed from Bhuvana Betini, Sky Malice and Wenyu Fu

    Calder Kitagawa added 2 comments

    File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
    Line 381, Patchset 13 (Latest): int tabIndex = mModelList.indexFromTabId(state.tabId);
    if (tabIndex != TabModel.INVALID_TAB_INDEX) {
    mModelList.get(tabIndex).model.set(TabProperties.ACTOR_UI_STATE, state);
    }
    Calder Kitagawa . unresolved

    For `mActionsOnAllRelatedTabs = true` you will need to find the group entry and see if any or all members of the group are actuating before changing this.

    Line 2235, Patchset 13 (Latest): .with(TabProperties.ACTOR_UI_STATE, initialState)
    Calder Kitagawa . unresolved

    For `mActionsOnAllRelatedTabs == true` a single "tab" represents all tabs in its group (This is bad design from a long time ago). Do we want to show the indicator if ANY tab in the group is being actuated? If so we probably need to iterate over all tabs in the group here.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Bhuvana Betini
    • Sky Malice
    • Wenyu Fu
    Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      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: I1d890f2afa7d207306d81bee7362aa6ce81d283e
      Gerrit-Change-Number: 7598511
      Gerrit-PatchSet: 13
      Gerrit-Owner: Bhuvana Betini <bbe...@google.com>
      Gerrit-Reviewer: Bhuvana Betini <bbe...@google.com>
      Gerrit-Reviewer: Calder Kitagawa <ckit...@chromium.org>
      Gerrit-Reviewer: Sky Malice <sk...@chromium.org>
      Gerrit-Reviewer: Wenyu Fu <wen...@chromium.org>
      Gerrit-CC: Madhav Pruthi <madhav...@google.com>
      Gerrit-Attention: Bhuvana Betini <bbe...@google.com>
      Gerrit-Attention: Wenyu Fu <wen...@chromium.org>
      Gerrit-Attention: Sky Malice <sk...@chromium.org>
      Gerrit-Comment-Date: Thu, 26 Feb 2026 21:59:38 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Wenyu Fu (Gerrit)

      unread,
      Feb 26, 2026, 7:04:30 PM (2 days ago) Feb 26
      to Bhuvana Betini, Madhav Pruthi, Sky Malice, Calder Kitagawa, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
      Attention needed from Bhuvana Betini and Sky Malice

      Wenyu Fu added 5 comments

      File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridView.java
      Line 328, Patchset 13 (Latest): private @Nullable View getActorUi(boolean inflateIfMissing) {
      Wenyu Fu . unresolved

      When will this be null?

      Line 332, Patchset 13 (Latest): LayoutInflater.from(getContext()).inflate(R.layout.actor_gts_tab_indicator, this, true);
      Wenyu Fu . unresolved

      nit: `inflate` already returns the view that's inflated, so no need to do `fastFindViewById` afterwards.

      Or do we want to call `fastFindViewById` so that it is cached?

      Line 372, Patchset 13 (Latest): View actorContainer = fastFindViewById(R.id.actor_ui_container);
      Wenyu Fu . unresolved

      nit: What's the scenario this method is useful (ie. when layout not inflated)?

      I wonder if we can just track `mActorUiVisible && mIsAttachedToWindow`?

      File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
      Line 246, Patchset 13 (Latest):
      Wenyu Fu . unresolved

      nit: remove empty line

      File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
      Line 2235, Patchset 13 (Latest): .with(TabProperties.ACTOR_UI_STATE, initialState)
      Calder Kitagawa . unresolved

      For `mActionsOnAllRelatedTabs == true` a single "tab" represents all tabs in its group (This is bad design from a long time ago). Do we want to show the indicator if ANY tab in the group is being actuated? If so we probably need to iterate over all tabs in the group here.

      Wenyu Fu

      We'll need this....

      Is it ok to leave a TODO for the next CL?

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Bhuvana Betini
      • Sky Malice
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      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: I1d890f2afa7d207306d81bee7362aa6ce81d283e
      Gerrit-Change-Number: 7598511
      Gerrit-PatchSet: 13
      Gerrit-Owner: Bhuvana Betini <bbe...@google.com>
      Gerrit-Reviewer: Bhuvana Betini <bbe...@google.com>
      Gerrit-Reviewer: Calder Kitagawa <ckit...@chromium.org>
      Gerrit-Reviewer: Sky Malice <sk...@chromium.org>
      Gerrit-Reviewer: Wenyu Fu <wen...@chromium.org>
      Gerrit-CC: Madhav Pruthi <madhav...@google.com>
      Gerrit-Attention: Bhuvana Betini <bbe...@google.com>
      Gerrit-Attention: Sky Malice <sk...@chromium.org>
      Gerrit-Comment-Date: Fri, 27 Feb 2026 00:04:24 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Calder Kitagawa <ckit...@chromium.org>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Calder Kitagawa (Gerrit)

      unread,
      Feb 26, 2026, 7:20:12 PM (2 days ago) Feb 26
      to Bhuvana Betini, Madhav Pruthi, Wenyu Fu, Sky Malice, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
      Attention needed from Bhuvana Betini and Sky Malice

      Calder Kitagawa added 1 comment

      File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridView.java
      Line 332, Patchset 13 (Latest): LayoutInflater.from(getContext()).inflate(R.layout.actor_gts_tab_indicator, this, true);
      Wenyu Fu . unresolved

      nit: `inflate` already returns the view that's inflated, so no need to do `fastFindViewById` afterwards.

      Or do we want to call `fastFindViewById` so that it is cached?

      Gerrit-Comment-Date: Fri, 27 Feb 2026 00:20:07 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Wenyu Fu <wen...@chromium.org>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Bhuvana Betini (Gerrit)

      unread,
      Feb 27, 2026, 2:39:33 PM (11 hours ago) Feb 27
      to Madhav Pruthi, Wenyu Fu, Sky Malice, Calder Kitagawa, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
      Attention needed from Calder Kitagawa, Sky Malice and Wenyu Fu

      Bhuvana Betini added 5 comments

      File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridView.java
      Line 328, Patchset 13: private @Nullable View getActorUi(boolean inflateIfMissing) {
      Wenyu Fu . unresolved

      When will this be null?

      nit: What's the scenario this method is useful (ie. when layout not inflated)?

      I wonder if we can just track `mActorUiVisible && mIsAttachedToWindow`?

      Bhuvana Betini

      Replaced to just track mActorUiVisible and mIsAttachedToWindow

      File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
      Line 246, Patchset 13:
      Wenyu Fu . resolved

      nit: remove empty line

      Bhuvana Betini

      Done

      File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
      Line 381, Patchset 13: int tabIndex = mModelList.indexFromTabId(state.tabId);

      if (tabIndex != TabModel.INVALID_TAB_INDEX) {
      mModelList.get(tabIndex).model.set(TabProperties.ACTOR_UI_STATE, state);
      }
      Calder Kitagawa . resolved

      For `mActionsOnAllRelatedTabs = true` you will need to find the group entry and see if any or all members of the group are actuating before changing this.

      Bhuvana Betini

      Done

      Line 2235, Patchset 13: .with(TabProperties.ACTOR_UI_STATE, initialState)
      Calder Kitagawa . unresolved

      For `mActionsOnAllRelatedTabs == true` a single "tab" represents all tabs in its group (This is bad design from a long time ago). Do we want to show the indicator if ANY tab in the group is being actuated? If so we probably need to iterate over all tabs in the group here.

      Bhuvana Betini

      I think for this Cl since UX is at a high-risk state, I'll just add the indicator to the overall tab group thumbnail as well as the thumbnail in the expanded Tab Group view.

      But I think it would be helpful to know how much of a technical complexity it would be to show the indicator on a specific sub-quadrant in a tab group of the tab being acted on in the full grid view. How feasible is this?

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Calder Kitagawa
      • Sky Malice
      • Wenyu Fu
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      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: I1d890f2afa7d207306d81bee7362aa6ce81d283e
      Gerrit-Change-Number: 7598511
      Gerrit-PatchSet: 15
      Gerrit-Owner: Bhuvana Betini <bbe...@google.com>
      Gerrit-Reviewer: Bhuvana Betini <bbe...@google.com>
      Gerrit-Reviewer: Calder Kitagawa <ckit...@chromium.org>
      Gerrit-Reviewer: Sky Malice <sk...@chromium.org>
      Gerrit-Reviewer: Wenyu Fu <wen...@chromium.org>
      Gerrit-CC: Madhav Pruthi <madhav...@google.com>
      Gerrit-Attention: Wenyu Fu <wen...@chromium.org>
      Gerrit-Attention: Calder Kitagawa <ckit...@chromium.org>
      Gerrit-Attention: Sky Malice <sk...@chromium.org>
      Gerrit-Comment-Date: Fri, 27 Feb 2026 19:39:27 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Wenyu Fu <wen...@chromium.org>
      Comment-In-Reply-To: Calder Kitagawa <ckit...@chromium.org>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Wenyu Fu (Gerrit)

      unread,
      Feb 27, 2026, 2:52:38 PM (11 hours ago) Feb 27
      to Bhuvana Betini, Madhav Pruthi, Sky Malice, Calder Kitagawa, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
      Attention needed from Bhuvana Betini, Calder Kitagawa and Sky Malice

      Wenyu Fu voted and added 3 comments

      Votes added by Wenyu Fu

      Code-Review+1

      3 comments

      File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridView.java
      Line 328, Patchset 13: private @Nullable View getActorUi(boolean inflateIfMissing) {
      Wenyu Fu

      For this method though, can we do `assertNonNull(actorContainer)`?

      Line 332, Patchset 13: LayoutInflater.from(getContext()).inflate(R.layout.actor_gts_tab_indicator, this, true);
      Wenyu Fu . resolved

      nit: `inflate` already returns the view that's inflated, so no need to do `fastFindViewById` afterwards.

      Or do we want to call `fastFindViewById` so that it is cached?

      Wenyu Fu

      Acknowledged - thanks Calder!

      File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
      Line 2235, Patchset 13: .with(TabProperties.ACTOR_UI_STATE, initialState)
      Calder Kitagawa . unresolved

      For `mActionsOnAllRelatedTabs == true` a single "tab" represents all tabs in its group (This is bad design from a long time ago). Do we want to show the indicator if ANY tab in the group is being actuated? If so we probably need to iterate over all tabs in the group here.

      Bhuvana Betini

      I think for this Cl since UX is at a high-risk state, I'll just add the indicator to the overall tab group thumbnail as well as the thumbnail in the expanded Tab Group view.

      But I think it would be helpful to know how much of a technical complexity it would be to show the indicator on a specific sub-quadrant in a tab group of the tab being acted on in the full grid view. How feasible is this?

      Wenyu Fu

      I think we'd have to modify the thumbnail in order to do that.

      I really want to press UX to no going into that route to avoid complexity; that shouldn't impact the structure of this CL too much, though

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Bhuvana Betini
      • Calder Kitagawa
      • Sky Malice
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement satisfiedCode-Owners
      • requirement satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement satisfiedReview-Enforcement
      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: I1d890f2afa7d207306d81bee7362aa6ce81d283e
      Gerrit-Change-Number: 7598511
      Gerrit-PatchSet: 15
      Gerrit-Owner: Bhuvana Betini <bbe...@google.com>
      Gerrit-Reviewer: Bhuvana Betini <bbe...@google.com>
      Gerrit-Reviewer: Calder Kitagawa <ckit...@chromium.org>
      Gerrit-Reviewer: Sky Malice <sk...@chromium.org>
      Gerrit-Reviewer: Wenyu Fu <wen...@chromium.org>
      Gerrit-CC: Madhav Pruthi <madhav...@google.com>
      Gerrit-Attention: Bhuvana Betini <bbe...@google.com>
      Gerrit-Attention: Calder Kitagawa <ckit...@chromium.org>
      Gerrit-Attention: Sky Malice <sk...@chromium.org>
      Gerrit-Comment-Date: Fri, 27 Feb 2026 19:52:31 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      Comment-In-Reply-To: Bhuvana Betini <bbe...@google.com>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Calder Kitagawa (Gerrit)

      unread,
      Feb 27, 2026, 2:53:32 PM (11 hours ago) Feb 27
      to Bhuvana Betini, Wenyu Fu, Madhav Pruthi, Sky Malice, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
      Attention needed from Bhuvana Betini and Sky Malice

      Calder Kitagawa added 3 comments

      File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
      Line 390, Patchset 15 (Latest): PropertyModel groupModel =
      mModelList.getModelFromTabId(tab.getRootId());
      if (groupModel != null) {
      groupModel.set(TabProperties.ACTOR_UI_STATE, state);
      }
      Calder Kitagawa . unresolved

      I think you should extract the logic from `addTabInfoToModel` and reuse it here. The state of one tab switching might not mean all tabs in the group switched. Also `getRootId()` is deprecated and will not find you the right model, you need to iterate over all the tabs in the tab group until you find a valid propertymodel from one of their tab ids.

      Line 2220, Patchset 15 (Latest): if (mActionsOnAllRelatedTabs && isInTabGroup && tab.isInitialized()) {
      Calder Kitagawa . unresolved

      I think this should always be true? Was there a reason you encountered to add it?

      Line 2235, Patchset 13: .with(TabProperties.ACTOR_UI_STATE, initialState)
      Calder Kitagawa . unresolved

      For `mActionsOnAllRelatedTabs == true` a single "tab" represents all tabs in its group (This is bad design from a long time ago). Do we want to show the indicator if ANY tab in the group is being actuated? If so we probably need to iterate over all tabs in the group here.

      Bhuvana Betini

      I think for this Cl since UX is at a high-risk state, I'll just add the indicator to the overall tab group thumbnail as well as the thumbnail in the expanded Tab Group view.

      But I think it would be helpful to know how much of a technical complexity it would be to show the indicator on a specific sub-quadrant in a tab group of the tab being acted on in the full grid view. How feasible is this?

      Calder Kitagawa

      You'd need to add the logic into the [`MultiThumbnailFetcher`](https://source.chromium.org/chromium/chromium/src/+/main:chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MultiThumbnailCardProvider.java) that generates the quadrants. It would be non-trivial, but feasible.

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Bhuvana Betini
      • Sky Malice
      Gerrit-Attention: Sky Malice <sk...@chromium.org>
      Gerrit-Comment-Date: Fri, 27 Feb 2026 19:53:26 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Bhuvana Betini <bbe...@google.com>
      Comment-In-Reply-To: Calder Kitagawa <ckit...@chromium.org>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Bhuvana Betini (Gerrit)

      unread,
      Feb 27, 2026, 9:13:10 PM (5 hours ago) Feb 27
      to Wenyu Fu, Madhav Pruthi, Sky Malice, Calder Kitagawa, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, aashna...@google.com, boujan...@google.com, chrstn...@google.com, davidj...@chromium.org, gogeral...@chromium.org, hanxi...@chromium.org, kenok...@google.com, kmg+...@google.com, mattsimm...@chromium.org, meilian...@chromium.org, mfoltz+wa...@chromium.org, wychen...@chromium.org, yuezhang...@chromium.org, yusufo...@chromium.org
      Attention needed from Calder Kitagawa, Sky Malice and Wenyu Fu

      Bhuvana Betini added 4 comments

      File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridView.java
      Line 328, Patchset 13: private @Nullable View getActorUi(boolean inflateIfMissing) {
      Wenyu Fu . resolved
      Bhuvana Betini

      Done

      File chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
      Line 390, Patchset 15: PropertyModel groupModel =

      mModelList.getModelFromTabId(tab.getRootId());
      if (groupModel != null) {
      groupModel.set(TabProperties.ACTOR_UI_STATE, state);
      }
      Calder Kitagawa . resolved

      I think you should extract the logic from `addTabInfoToModel` and reuse it here. The state of one tab switching might not mean all tabs in the group switched. Also `getRootId()` is deprecated and will not find you the right model, you need to iterate over all the tabs in the tab group until you find a valid propertymodel from one of their tab ids.

      Bhuvana Betini

      Done

      Line 2220, Patchset 15: if (mActionsOnAllRelatedTabs && isInTabGroup && tab.isInitialized()) {
      Calder Kitagawa . resolved

      I think this should always be true? Was there a reason you encountered to add it?

      Bhuvana Betini

      You're right, this shouldn't be needed. I added it originally because there seemed to be ocassional crashing when the Actor Task is creating a tab on the native side, but I think that needs to be addressed separately. This doesn't seem to fix it regardless.

      Line 2235, Patchset 13: .with(TabProperties.ACTOR_UI_STATE, initialState)
      Calder Kitagawa . unresolved

      For `mActionsOnAllRelatedTabs == true` a single "tab" represents all tabs in its group (This is bad design from a long time ago). Do we want to show the indicator if ANY tab in the group is being actuated? If so we probably need to iterate over all tabs in the group here.

      Bhuvana Betini

      I think for this Cl since UX is at a high-risk state, I'll just add the indicator to the overall tab group thumbnail as well as the thumbnail in the expanded Tab Group view.

      But I think it would be helpful to know how much of a technical complexity it would be to show the indicator on a specific sub-quadrant in a tab group of the tab being acted on in the full grid view. How feasible is this?

      Calder Kitagawa

      You'd need to add the logic into the [`MultiThumbnailFetcher`](https://source.chromium.org/chromium/chromium/src/+/main:chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MultiThumbnailCardProvider.java) that generates the quadrants. It would be non-trivial, but feasible.

      Bhuvana Betini

      Makes sense. And we could support animations on the quadrants too?

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Calder Kitagawa
      • Sky Malice
      • Wenyu Fu
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement satisfiedCode-Owners
      • requirement satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement satisfiedReview-Enforcement
      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: I1d890f2afa7d207306d81bee7362aa6ce81d283e
      Gerrit-Change-Number: 7598511
      Gerrit-PatchSet: 16
      Gerrit-Owner: Bhuvana Betini <bbe...@google.com>
      Gerrit-Reviewer: Bhuvana Betini <bbe...@google.com>
      Gerrit-Reviewer: Calder Kitagawa <ckit...@chromium.org>
      Gerrit-Reviewer: Sky Malice <sk...@chromium.org>
      Gerrit-Reviewer: Wenyu Fu <wen...@chromium.org>
      Gerrit-CC: Madhav Pruthi <madhav...@google.com>
      Gerrit-Attention: Calder Kitagawa <ckit...@chromium.org>
      Gerrit-Attention: Wenyu Fu <wen...@chromium.org>
      Gerrit-Attention: Sky Malice <sk...@chromium.org>
      Gerrit-Comment-Date: Sat, 28 Feb 2026 02:13:03 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Bhuvana Betini <bbe...@google.com>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy
      Reply all
      Reply to author
      Forward
      0 new messages