[iOS][PRDBD] Sets strings for "Manage other data" in QuickDeleteMediator [chromium/src : main]

0 views
Skip to first unread message

Angela Novakovic (Gerrit)

unread,
Jan 23, 2026, 11:07:41 AMJan 23
to Noémie St-Onge, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
Attention needed from Noémie St-Onge

Angela Novakovic added 2 comments

Patchset-level comments
File-level comment, Patchset 11 (Latest):
Angela Novakovic . resolved

I am writing the unittest for this CL and having issues with verifying that the string changes when the DSE changes, so I would like to know if I set it up correctly here. 😊

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
Line 923, Patchset 11 (Latest):- (NSString*)manageOtherDataSubtitle {
Angela Novakovic . unresolved
This will be updated in the following CL. It will take in account when _templateURLService ||
_templateURLService->GetDefaultSearchProvider() are nil. In that case, a separate set of string will be displayed.

if(!_templateURLService ||
!_templateURLService->GetDefaultSearchProvider()){
_identityManager->HasPrimaryAccount(signin::ConsentLevel::kSignin)? string1 : string2 }
Open in Gerrit

Related details

Attention is currently required from:
  • Noémie St-Onge
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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
Gerrit-Change-Number: 7412187
Gerrit-PatchSet: 11
Gerrit-Owner: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
Gerrit-Attention: Noémie St-Onge <noe...@google.com>
Gerrit-Comment-Date: Fri, 23 Jan 2026 16:07:36 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Noémie St-Onge (Gerrit)

unread,
Jan 23, 2026, 5:13:06 PMJan 23
to Angela Novakovic, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
Attention needed from Angela Novakovic

Noémie St-Onge added 15 comments

Patchset-level comments
Noémie St-Onge . unresolved

This change isn't guarded by the feature flag, so landing it would have an immediate impact on the current feature, we want to avoid that

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
Line 205, Patchset 11 (Latest): _searchEngineObserver.reset();
Noémie St-Onge . unresolved

We don't need to reset an already null pointer

Line 249, Patchset 11 (Latest): _searchEngineObserver.reset();
Noémie St-Onge . unresolved

Same, we don't need to reset an already null pointer

Line 595, Patchset 11 (Latest):// update the strings for `Manage other data`.
Noémie St-Onge . unresolved

`"Manage other data"`, backticks are used for symbols

Line 908, Patchset 11 (Latest): return _templateURLService &&
_templateURLService->GetDefaultSearchProvider() &&
_templateURLService->GetDefaultSearchProvider()->GetEngineType(
_templateURLService->search_terms_data()) == SEARCH_ENGINE_GOOGLE;
Noémie St-Onge . unresolved

This code is run quite often (every time we update the title and subtitle), should we instead store the result in `init` and update it whenever `-searchEngineChanged` is called?

Line 914, Patchset 11 (Latest):// Sets the title for `Manage other data` section.
Noémie St-Onge . unresolved

```suggestion
// Sets the title for the "Manage other data" section.
```

Line 922, Patchset 11 (Latest):// Sets the subtitle for `Manage other data` section.
Noémie St-Onge . unresolved

```suggestion
// Sets the subtitle for the "Manage other data" section.
```

Line 923, Patchset 11 (Latest):- (NSString*)manageOtherDataSubtitle {
Angela Novakovic . resolved
This will be updated in the following CL. It will take in account when _templateURLService ||
_templateURLService->GetDefaultSearchProvider() are nil. In that case, a separate set of string will be displayed.

if(!_templateURLService ||
!_templateURLService->GetDefaultSearchProvider()){
_identityManager->HasPrimaryAccount(signin::ConsentLevel::kSignin)? string1 : string2 }
Noémie St-Onge

Acknowledged

Line 926, Patchset 11 (Latest): ? l10n_util::GetNSString(IDS_SETTINGS_MANAGE_PASSWORDS_SUB_LABEL)
Noémie St-Onge . unresolved

Passwords?

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
Line 53, Patchset 11 (Latest):
Noémie St-Onge . unresolved

Added by mistake?

Line 72, Patchset 11 (Latest): // These are the expected strings when templateURLService is a nullptr.
Noémie St-Onge . unresolved

`` `templateURLService` ``

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browsing_data/ui/quick_delete_browsing_data_view_controller.mm
Line 82, Patchset 11 (Latest): NSString* _manageOtherDataTitle;
NSString* _manageOtherDataSubtitle;
Noémie St-Onge . unresolved

ivars should come with a comment

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/ui/quick_delete_consumer.h
Line 25, Patchset 11 (Latest):// Sets the subtitle for the `Manage other data` section.
Noémie St-Onge . unresolved

`"Manage other data"`

Line 22, Patchset 11 (Latest):// Sets the title for the `Manage other data` section.
Noémie St-Onge . unresolved

`"Manage other data"`

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/ui/quick_delete_view_controller.mm
Line 318, Patchset 11 (Latest):}
- (void)setManageOtherDataSubtitle:(NSString*)manageOtherDataSubtitle {
Noémie St-Onge . unresolved

skip a line between methods

Open in Gerrit

Related details

Attention is currently required from:
  • Angela Novakovic
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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
Gerrit-Change-Number: 7412187
Gerrit-PatchSet: 11
Gerrit-Owner: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
Gerrit-Attention: Angela Novakovic <novak...@google.com>
Gerrit-Comment-Date: Fri, 23 Jan 2026 22:13:00 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Angela Novakovic <novak...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Angela Novakovic (Gerrit)

unread,
Jan 26, 2026, 4:46:31 PMJan 26
to Noémie St-Onge, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
Attention needed from Noémie St-Onge

Angela Novakovic voted and added 15 comments

Votes added by Angela Novakovic

Commit-Queue+1

15 comments

Patchset-level comments
File-level comment, Patchset 11:
Noémie St-Onge . resolved

This change isn't guarded by the feature flag, so landing it would have an immediate impact on the current feature, we want to avoid that

Angela Novakovic

Done

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
Line 205, Patchset 11: _searchEngineObserver.reset();
Noémie St-Onge . resolved

We don't need to reset an already null pointer

Angela Novakovic

Done

Line 249, Patchset 11: _searchEngineObserver.reset();
Noémie St-Onge . resolved

Same, we don't need to reset an already null pointer

Angela Novakovic

Done

Line 595, Patchset 11:// update the strings for `Manage other data`.
Noémie St-Onge . resolved

`"Manage other data"`, backticks are used for symbols

Angela Novakovic

Done

Line 908, Patchset 11: return _templateURLService &&

_templateURLService->GetDefaultSearchProvider() &&
_templateURLService->GetDefaultSearchProvider()->GetEngineType(
_templateURLService->search_terms_data()) == SEARCH_ENGINE_GOOGLE;
Noémie St-Onge . resolved

This code is run quite often (every time we update the title and subtitle), should we instead store the result in `init` and update it whenever `-searchEngineChanged` is called?

Angela Novakovic

Done

Line 914, Patchset 11:// Sets the title for `Manage other data` section.
Noémie St-Onge . resolved

```suggestion
// Sets the title for the "Manage other data" section.
```

Angela Novakovic

Done

Line 922, Patchset 11:// Sets the subtitle for `Manage other data` section.
Noémie St-Onge . resolved

```suggestion
// Sets the subtitle for the "Manage other data" section.
```

Angela Novakovic

Done

Line 926, Patchset 11: ? l10n_util::GetNSString(IDS_SETTINGS_MANAGE_PASSWORDS_SUB_LABEL)
Noémie St-Onge . resolved

Passwords?

Angela Novakovic

The name for the string is a bit confusing, but it is "Passwords can be deleted in their management settings" which is what the subtitle should be when DSE is Google and user is not signed in.

Line 932, Patchset 15 (Latest): // if(!_templateURLService ||
// !_templateURLService->GetDefaultSearchProvider()){
// _identityManager->HasPrimaryAccount(signin::ConsentLevel::kSignin)?
// l10n_util::GetNSString(IDS_IOS_CLEAR_BROWSING_DATA_MANAGE_OTHER_DATA_SUBTITLE_WHEN_DSE_NULL)
// : l10n_util::GetNSString(IDS_SETTINGS_MANAGE_PASSWORDS_SUB_LABEL)}
Angela Novakovic . unresolved

Will uncomment this block once the CL with the new string has been merged. 😊

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
Line 53, Patchset 11:
Noémie St-Onge . resolved

Added by mistake?

Angela Novakovic

Done

Line 72, Patchset 11: // These are the expected strings when templateURLService is a nullptr.
Noémie St-Onge . resolved

`` `templateURLService` ``

Angela Novakovic

Done

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browsing_data/ui/quick_delete_browsing_data_view_controller.mm
Line 82, Patchset 11: NSString* _manageOtherDataTitle;
NSString* _manageOtherDataSubtitle;
Noémie St-Onge . resolved

ivars should come with a comment

Angela Novakovic

Done

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/ui/quick_delete_consumer.h
Line 25, Patchset 11:// Sets the subtitle for the `Manage other data` section.
Noémie St-Onge . resolved

`"Manage other data"`

Angela Novakovic

Done

Line 22, Patchset 11:// Sets the title for the `Manage other data` section.
Noémie St-Onge . resolved

`"Manage other data"`

Angela Novakovic

Done

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/ui/quick_delete_view_controller.mm
Line 318, Patchset 11:}
- (void)setManageOtherDataSubtitle:(NSString*)manageOtherDataSubtitle {
Noémie St-Onge . resolved

skip a line between methods

Angela Novakovic

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Noémie St-Onge
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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
Gerrit-Change-Number: 7412187
Gerrit-PatchSet: 15
Gerrit-Owner: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
Gerrit-Attention: Noémie St-Onge <noe...@google.com>
Gerrit-Comment-Date: Mon, 26 Jan 2026 21:46:26 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Comment-In-Reply-To: Noémie St-Onge <noe...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Noémie St-Onge (Gerrit)

unread,
Jan 27, 2026, 11:53:29 AMJan 27
to Angela Novakovic, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
Attention needed from Angela Novakovic

Noémie St-Onge added 20 comments

Commit Message
Line 14, Patchset 15 (Latest):A following CL will add the unit tests for this CL.
Noémie St-Onge . unresolved

I highly encourage adding tests in the same CL as the change when possible. It's fine to do it in a follow-up when adding the tests would be a big CL in itself

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/DEPS
Line 2, Patchset 15 (Parent): # keep-sorted start
"+ios/chrome/browser/saved_tab_groups/model",
# keep-sorted end
Noémie St-Onge . unresolved

Why are we removing lines 2 and 4?

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_coordinator.mm
Line 105, Patchset 15 (Latest): templateURLService:templateURLService
Noémie St-Onge . unresolved

Do we really need the TemplateURLService here? Isn't it just needed for Quick Delete Browsing Data?

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
Line 124, Patchset 15 (Latest): // This boolean return true if the default seach engine is Google.
Noémie St-Onge . unresolved

`returns`, but even then, a variable doesn't "return" something

Line 125, Patchset 15 (Latest): BOOL _theDefaultSearchEngineIsGoogle;
Noémie St-Onge . unresolved

we can remove `the` from the variable name

Line 202, Patchset 15 (Latest): if (IsPasswordRemovalFromDeleteBrowsingDataEnabled()) {
Noémie St-Onge . unresolved

I think it would be simpler to just guard the calls to `-setManageOtherDataTitle` and `-setManageOtherDataTitle`. It's fine to set the service and observer when the flag is off since it is temporary

Line 208, Patchset 15 (Latest): _theDefaultSearchEngineIsGoogle = [self isGoogleTheDefaultSearchEngine];
Noémie St-Onge . unresolved

Calling a function on `self` while `self` is being constructed is discouraged. We should look to convert `-isGoogleTheDefaultSearchEngine` to a non-member function declared in the anonymous namespace

Line 564, Patchset 15 (Latest): if ([self isGoogleTheDefaultSearchEngine]) {
Noémie St-Onge . unresolved

we should use the ivar instead

Line 601, Patchset 15 (Latest): [self isGoogleTheDefaultSearchEngine];
Noémie St-Onge . unresolved
We should update the ivar here. `-setManageOtherDataTitle` and `-setsetManageOtherDataSubtitle` are reading `_theDefaultSearchEngineIsGoogle`, so an update to the DSE wouldn't have been taken into account
```suggestion
_theDefaultSearchEngineIsGoogle = [self isGoogleTheDefaultSearchEngine];
```
Line 911, Patchset 15 (Latest):// Sets whether the user's default search engine is Google.
Noémie St-Onge . unresolved

`Returns` as it doesn't set anything

Line 920, Patchset 15 (Latest):// Sets the title for the "Manage other data" section.
Noémie St-Onge . unresolved

Table view sections can have a title, so this could be misleading. I would use the term `cell` instead

Line 920, Patchset 15 (Latest):// Sets the title for the "Manage other data" section.
Noémie St-Onge . unresolved

nit: This function doesn't actually "set" the title, it returns it. The view controller will use the received string to set the title of the cell. Same for the subtitle function

Line 929, Patchset 15 (Latest):// Sets the subtitle for the "Manage other data" section.
Noémie St-Onge . unresolved

`cell`

Line 932, Patchset 15 (Latest): // if(!_templateURLService ||
// !_templateURLService->GetDefaultSearchProvider()){
// _identityManager->HasPrimaryAccount(signin::ConsentLevel::kSignin)?
// l10n_util::GetNSString(IDS_IOS_CLEAR_BROWSING_DATA_MANAGE_OTHER_DATA_SUBTITLE_WHEN_DSE_NULL)
// : l10n_util::GetNSString(IDS_SETTINGS_MANAGE_PASSWORDS_SUB_LABEL)}
Angela Novakovic . unresolved

Will uncomment this block once the CL with the new string has been merged. 😊

Noémie St-Onge

this would be a great use case for chained CLs!

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browsing_data/ui/quick_delete_browsing_data_view_controller.mm
Line 230, Patchset 15 (Latest): CHECK(!IsPasswordRemovalFromDeleteBrowsingDataEnabled());
Noémie St-Onge . unresolved
This is going to crash. This is a great example of why having the tests in the same CL is preferred, the tests would have caught that
```suggestion
CHECK(IsPasswordRemovalFromDeleteBrowsingDataEnabled());
```
Line 235, Patchset 15 (Latest): CHECK(!IsPasswordRemovalFromDeleteBrowsingDataEnabled());
Noémie St-Onge . unresolved
```suggestion
CHECK(IsPasswordRemovalFromDeleteBrowsingDataEnabled());
```
File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/ui/quick_delete_consumer.h
Line 25, Patchset 15 (Latest):// Sets the subtitle for the "Manage other data" section.
Noémie St-Onge . unresolved

```suggestion
// Sets the ViewController with the subtitle for the "Manage other data" cell.
```

Line 22, Patchset 15 (Latest):// Sets the title for the "Manage other data" section.
Noémie St-Onge . unresolved

I would follow the same phrasing as the other comments:
```suggestion
// Sets the ViewController with the title for the "Manage other data" cell.
```

Otherwise, it sounds like this function will actually set the title itself, which can or can't be true as it will depend on the view controller's implementation

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/ui/quick_delete_view_controller.mm
Line 317, Patchset 15 (Latest): // No-op: This ViewController doesn't show `Manage Other Data`.
Noémie St-Onge . unresolved
```suggestion
// No-op: This ViewController doesn't show the "Manage Other Data" cell.
```
Line 321, Patchset 15 (Latest): // No-op: This ViewController doesn't show `Manage Other Data`.
Noémie St-Onge . unresolved
```suggestion
// No-op: This ViewController doesn't show the "Manage Other Data" cell.
```
Open in Gerrit

Related details

Attention is currently required from:
  • Angela Novakovic
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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
Gerrit-Change-Number: 7412187
Gerrit-PatchSet: 15
Gerrit-Owner: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
Gerrit-Attention: Angela Novakovic <novak...@google.com>
Gerrit-Comment-Date: Tue, 27 Jan 2026 16:53:22 +0000
satisfied_requirement
unsatisfied_requirement
open
diffy

Angela Novakovic (Gerrit)

unread,
Jan 28, 2026, 12:28:15 PMJan 28
to Noémie St-Onge, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
Attention needed from Noémie St-Onge

Angela Novakovic added 21 comments

Commit Message
Line 14, Patchset 15:A following CL will add the unit tests for this CL.
Noémie St-Onge . resolved

I highly encourage adding tests in the same CL as the change when possible. It's fine to do it in a follow-up when adding the tests would be a big CL in itself

Angela Novakovic

Done

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/DEPS
Line 2, Patchset 15 (Parent): # keep-sorted start
"+ios/chrome/browser/saved_tab_groups/model",
# keep-sorted end
Noémie St-Onge . resolved

Why are we removing lines 2 and 4?

Angela Novakovic

I didn't realize that these were added to all deps in the codebase! Have put them back.

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_coordinator.mm
Line 105, Patchset 15: templateURLService:templateURLService
Noémie St-Onge . resolved

Do we really need the TemplateURLService here? Isn't it just needed for Quick Delete Browsing Data?

Angela Novakovic

Correct, we do not need it. I think I've made a mistake when updating my code.

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
Line 124, Patchset 15: // This boolean return true if the default seach engine is Google.
Noémie St-Onge . resolved

`returns`, but even then, a variable doesn't "return" something

Angela Novakovic

Done

Line 125, Patchset 15: BOOL _theDefaultSearchEngineIsGoogle;
Noémie St-Onge . resolved

we can remove `the` from the variable name

Angela Novakovic

Done

Line 202, Patchset 15: if (IsPasswordRemovalFromDeleteBrowsingDataEnabled()) {
Noémie St-Onge . resolved

I think it would be simpler to just guard the calls to `-setManageOtherDataTitle` and `-setManageOtherDataTitle`. It's fine to set the service and observer when the flag is off since it is temporary

Angela Novakovic

Done

Line 208, Patchset 15: _theDefaultSearchEngineIsGoogle = [self isGoogleTheDefaultSearchEngine];
Noémie St-Onge . resolved

Calling a function on `self` while `self` is being constructed is discouraged. We should look to convert `-isGoogleTheDefaultSearchEngine` to a non-member function declared in the anonymous namespace

Angela Novakovic

Done

Line 564, Patchset 15: if ([self isGoogleTheDefaultSearchEngine]) {
Noémie St-Onge . resolved

we should use the ivar instead

Angela Novakovic

Done

Line 601, Patchset 15: [self isGoogleTheDefaultSearchEngine];
Noémie St-Onge . resolved
We should update the ivar here. `-setManageOtherDataTitle` and `-setsetManageOtherDataSubtitle` are reading `_theDefaultSearchEngineIsGoogle`, so an update to the DSE wouldn't have been taken into account
```suggestion
_theDefaultSearchEngineIsGoogle = [self isGoogleTheDefaultSearchEngine];
```
Angela Novakovic

Done

Line 911, Patchset 15:// Sets whether the user's default search engine is Google.
Noémie St-Onge . resolved

`Returns` as it doesn't set anything

Angela Novakovic

Done

Line 913, Patchset 15: CHECK(IsPasswordRemovalFromDeleteBrowsingDataEnabled());
Angela Novakovic . unresolved

This was removed, as this can be reached even when the feature flag is disabled.

Line 920, Patchset 15:// Sets the title for the "Manage other data" section.
Noémie St-Onge . resolved

nit: This function doesn't actually "set" the title, it returns it. The view controller will use the received string to set the title of the cell. Same for the subtitle function

Angela Novakovic

Done

Line 920, Patchset 15:// Sets the title for the "Manage other data" section.
Noémie St-Onge . resolved

Table view sections can have a title, so this could be misleading. I would use the term `cell` instead

Angela Novakovic

Done

Line 929, Patchset 15:// Sets the subtitle for the "Manage other data" section.
Noémie St-Onge . resolved

`cell`

Angela Novakovic

Done

Line 932, Patchset 15: // if(!_templateURLService ||

// !_templateURLService->GetDefaultSearchProvider()){
// _identityManager->HasPrimaryAccount(signin::ConsentLevel::kSignin)?
// l10n_util::GetNSString(IDS_IOS_CLEAR_BROWSING_DATA_MANAGE_OTHER_DATA_SUBTITLE_WHEN_DSE_NULL)
// : l10n_util::GetNSString(IDS_SETTINGS_MANAGE_PASSWORDS_SUB_LABEL)}
Angela Novakovic . resolved

Will uncomment this block once the CL with the new string has been merged. 😊

Noémie St-Onge

this would be a great use case for chained CLs!

Angela Novakovic

Absolutely, I only realized after I had created this CL that I needed an additional string. 😊 Is there a way to chain a CL on another CL after the fact?

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browsing_data/ui/quick_delete_browsing_data_view_controller.mm
Line 230, Patchset 15: CHECK(!IsPasswordRemovalFromDeleteBrowsingDataEnabled());
Noémie St-Onge . resolved
This is going to crash. This is a great example of why having the tests in the same CL is preferred, the tests would have caught that
```suggestion
CHECK(IsPasswordRemovalFromDeleteBrowsingDataEnabled());
```
Angela Novakovic

Done

Line 235, Patchset 15: CHECK(!IsPasswordRemovalFromDeleteBrowsingDataEnabled());
Noémie St-Onge . resolved
```suggestion
CHECK(IsPasswordRemovalFromDeleteBrowsingDataEnabled());
```
Angela Novakovic

Done

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/ui/quick_delete_consumer.h
Line 25, Patchset 15:// Sets the subtitle for the "Manage other data" section.
Noémie St-Onge . resolved

```suggestion
// Sets the ViewController with the subtitle for the "Manage other data" cell.
```

Angela Novakovic

Done

Line 22, Patchset 15:// Sets the title for the "Manage other data" section.
Noémie St-Onge . resolved

I would follow the same phrasing as the other comments:
```suggestion
// Sets the ViewController with the title for the "Manage other data" cell.
```

Otherwise, it sounds like this function will actually set the title itself, which can or can't be true as it will depend on the view controller's implementation

Angela Novakovic

Done

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/ui/quick_delete_view_controller.mm
Line 317, Patchset 15: // No-op: This ViewController doesn't show `Manage Other Data`.
Noémie St-Onge . resolved
```suggestion
// No-op: This ViewController doesn't show the "Manage Other Data" cell.
```
Angela Novakovic

Done

Line 321, Patchset 15: // No-op: This ViewController doesn't show `Manage Other Data`.
Noémie St-Onge . resolved
```suggestion
// No-op: This ViewController doesn't show the "Manage Other Data" cell.
```
Angela Novakovic

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Noémie St-Onge
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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
Gerrit-Change-Number: 7412187
Gerrit-PatchSet: 17
Gerrit-Owner: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
Gerrit-Attention: Noémie St-Onge <noe...@google.com>
Gerrit-Comment-Date: Wed, 28 Jan 2026 17:28:07 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Angela Novakovic <novak...@google.com>
Comment-In-Reply-To: Noémie St-Onge <noe...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Noémie St-Onge (Gerrit)

unread,
Jan 29, 2026, 11:26:29 AMJan 29
to Angela Novakovic, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
Attention needed from Angela Novakovic

Noémie St-Onge added 12 comments

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/DEPS
Line 2, Patchset 17 (Latest):# keep-sorted start
"+ios/chrome/browser/saved_tab_groups/model",
"+ios/chrome/browser/search_engines/model",
# keep-sorted end
Noémie St-Onge . unresolved

Indentation is off

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
Line 49, Patchset 17 (Latest): raw_ptr<TemplateURLService> templateURLService) {
Noémie St-Onge . unresolved

`template_url_service` as this is C++

Line 49, Patchset 17 (Latest): raw_ptr<TemplateURLService> templateURLService) {
Noémie St-Onge . unresolved

Use `TemplateURLService*`, `raw_ptr` should only be used for class and struct fields
https://chromium.googlesource.com/chromium/src/+/HEAD/base/memory/raw_ptr.md

Line 255, Patchset 17 (Latest): if (_templateURLService) {
_searchEngineObserver = std::make_unique<SearchEngineObserverBridge>(
self, templateURLService);
}
_defaultSearchEngineIsGoogle =
IsGoogleTheDefaultSearchEngine(_templateURLService);
Noémie St-Onge . unresolved

There is a lot of duplicated code between the 2 initializers, and we're now also duplicating a bit less trivial logic. Could you look into refactoring these? I think having a private designated initializer and making the existing initializers convenience initializers would make sense. This can be done in another CL

Line 570, Patchset 17 (Latest): if (_defaultSearchEngineIsGoogle) {
Noémie St-Onge . unresolved

If the DSE is null and the user goes from being signed in to signed out (or vice-versa), we wouldn't update the subtitle, which is wrong. This case should be covered in a test

Line 605, Patchset 17 (Latest):// update the strings for "Manage other data".
Noémie St-Onge . unresolved

```suggestion
// update the strings for the "Manage other data" cell.
```

Line 913, Patchset 15: CHECK(IsPasswordRemovalFromDeleteBrowsingDataEnabled());
Angela Novakovic . resolved

This was removed, as this can be reached even when the feature flag is disabled.

Noémie St-Onge

Acknowledged

Line 918, Patchset 17 (Latest):// Returns the title for the "Manage other data" cell.
Noémie St-Onge . unresolved

```suggestion
// Returns the title for the "Manage other data" cell. The title depends on the user's default search engine.
```

Line 927, Patchset 17 (Latest):// Returns the subtitle for the "Manage other data" cell.
Noémie St-Onge . unresolved

```suggestion
// Returns the subtitle for the "Manage other data" cell. The subtitle depends on the user's default search engine and sign-in status.
```

Line 930, Patchset 17 (Latest): if (!_templateURLService ||
!_templateURLService->GetDefaultSearchProvider()) {
return _identityManager->HasPrimaryAccount(signin::ConsentLevel::kSignin)
? l10n_util::GetNSString(
IDS_IOS_CLEAR_BROWSING_DATA_MANAGE_OTHER_DATA_SUBTITLE_UNKNOWN_DSE)
: l10n_util::GetNSString(
IDS_SETTINGS_MANAGE_PASSWORDS_SUB_LABEL);
}
Noémie St-Onge . unresolved

I would add a comment here to explain that this is handling the case where the DSE is unknown

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/ui/quick_delete_view_controller.mm
Line 317, Patchset 17 (Latest): // No-op: This ViewController doesn't show the "Manage Other Data" cell.
Noémie St-Onge . unresolved

`"Manage other data" cell` to be consistent

Line 321, Patchset 17 (Latest): // No-op: This ViewController doesn't show the "Manage Other Data" cell.
Noémie St-Onge . unresolved

`"Manage other data" cell` to be consistent

Open in Gerrit

Related details

Attention is currently required from:
  • Angela Novakovic
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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
Gerrit-Change-Number: 7412187
Gerrit-PatchSet: 17
Gerrit-Owner: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
Gerrit-Attention: Angela Novakovic <novak...@google.com>
Gerrit-Comment-Date: Thu, 29 Jan 2026 16:26:23 +0000
satisfied_requirement
unsatisfied_requirement
open
diffy

Angela Novakovic (Gerrit)

unread,
Jan 29, 2026, 4:47:45 PMJan 29
to Noémie St-Onge, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
Attention needed from Noémie St-Onge

Angela Novakovic added 11 comments

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/DEPS
Line 2, Patchset 17:# keep-sorted start

"+ios/chrome/browser/saved_tab_groups/model",
"+ios/chrome/browser/search_engines/model",
# keep-sorted end
Noémie St-Onge . resolved

Indentation is off

Angela Novakovic

Done

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
Line 49, Patchset 17: raw_ptr<TemplateURLService> templateURLService) {
Noémie St-Onge . resolved

Use `TemplateURLService*`, `raw_ptr` should only be used for class and struct fields
https://chromium.googlesource.com/chromium/src/+/HEAD/base/memory/raw_ptr.md

Angela Novakovic

Done

Line 49, Patchset 17: raw_ptr<TemplateURLService> templateURLService) {
Noémie St-Onge . resolved

`template_url_service` as this is C++

Angela Novakovic

Done

Line 255, Patchset 17: if (_templateURLService) {

_searchEngineObserver = std::make_unique<SearchEngineObserverBridge>(
self, templateURLService);
}
_defaultSearchEngineIsGoogle =
IsGoogleTheDefaultSearchEngine(_templateURLService);
Noémie St-Onge . unresolved

There is a lot of duplicated code between the 2 initializers, and we're now also duplicating a bit less trivial logic. Could you look into refactoring these? I think having a private designated initializer and making the existing initializers convenience initializers would make sense. This can be done in another CL

Angela Novakovic

Will do in a following CL. 😊

Line 570, Patchset 17: if (_defaultSearchEngineIsGoogle) {
Noémie St-Onge . resolved

If the DSE is null and the user goes from being signed in to signed out (or vice-versa), we wouldn't update the subtitle, which is wrong. This case should be covered in a test

Angela Novakovic

Done

Line 605, Patchset 17:// update the strings for "Manage other data".
Noémie St-Onge . resolved

```suggestion
// update the strings for the "Manage other data" cell.
```

Angela Novakovic

Done

Line 918, Patchset 17:// Returns the title for the "Manage other data" cell.
Noémie St-Onge . resolved

```suggestion
// Returns the title for the "Manage other data" cell. The title depends on the user's default search engine.
```

Angela Novakovic

Done

Line 927, Patchset 17:// Returns the subtitle for the "Manage other data" cell.
Noémie St-Onge . resolved

```suggestion
// Returns the subtitle for the "Manage other data" cell. The subtitle depends on the user's default search engine and sign-in status.
```

Angela Novakovic

Done

Line 930, Patchset 17: if (!_templateURLService ||

!_templateURLService->GetDefaultSearchProvider()) {
return _identityManager->HasPrimaryAccount(signin::ConsentLevel::kSignin)
? l10n_util::GetNSString(
IDS_IOS_CLEAR_BROWSING_DATA_MANAGE_OTHER_DATA_SUBTITLE_UNKNOWN_DSE)
: l10n_util::GetNSString(
IDS_SETTINGS_MANAGE_PASSWORDS_SUB_LABEL);
}
Noémie St-Onge . resolved

I would add a comment here to explain that this is handling the case where the DSE is unknown

Angela Novakovic

Done

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/ui/quick_delete_view_controller.mm
Line 317, Patchset 17: // No-op: This ViewController doesn't show the "Manage Other Data" cell.
Noémie St-Onge . resolved

`"Manage other data" cell` to be consistent

Angela Novakovic

Done

Line 321, Patchset 17: // No-op: This ViewController doesn't show the "Manage Other Data" cell.
Noémie St-Onge . resolved

`"Manage other data" cell` to be consistent

Angela Novakovic

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Noémie St-Onge
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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
Gerrit-Change-Number: 7412187
Gerrit-PatchSet: 22
Gerrit-Owner: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
Gerrit-Attention: Noémie St-Onge <noe...@google.com>
Gerrit-Comment-Date: Thu, 29 Jan 2026 21:47:40 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Noémie St-Onge <noe...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Noémie St-Onge (Gerrit)

unread,
Jan 30, 2026, 10:43:36 AM (13 days ago) Jan 30
to Angela Novakovic, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
Attention needed from Angela Novakovic

Noémie St-Onge added 11 comments

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
Line 255, Patchset 17: if (_templateURLService) {
_searchEngineObserver = std::make_unique<SearchEngineObserverBridge>(
self, templateURLService);
}
_defaultSearchEngineIsGoogle =
IsGoogleTheDefaultSearchEngine(_templateURLService);
Noémie St-Onge . resolved

There is a lot of duplicated code between the 2 initializers, and we're now also duplicating a bit less trivial logic. Could you look into refactoring these? I think having a private designated initializer and making the existing initializers convenience initializers would make sense. This can be done in another CL

Angela Novakovic

Will do in a following CL. 😊

Noémie St-Onge

Acknowledged

Line 570, Patchset 22 (Latest): if (!_templateURLService ||
!_templateURLService->GetDefaultSearchProvider() ||
_defaultSearchEngineIsGoogle) {
[_consumer setManageOtherDataSubtitle:[self manageOtherDataSubtitle]];
}
Noémie St-Onge . unresolved

I think it's fine to just call `[_consumer setManageOtherDataSubtitle:[self manageOtherDataSubtitle]];` here.

Assuming you did it that way to prevent an unnecessary consumer update - by having the condition, you are:

1) Essentially duplicating logic from `-manageOtherDataSubtitle`, and duplicated logic means 2 places to maintain, which brings risk and is to be avoided in general.

2) Potentially querying the `_templateURLService` twice in a row (once in the condition and once in `-manageOtherDataSubtitle`. So we would potentially save a call to `-setManageOtherDataSubtitle`, by risking to call `_templateURLService->GetDefaultSearchProvider()` twice, which isn't better.

Line 934, Patchset 22 (Latest): // Sets the subtitle when the default search engine is null.
Noémie St-Onge . unresolved

`Set`

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
Line 94, Patchset 22 (Latest): [OCMockObject niceMockForProtocol:@protocol(QuickDeleteConsumer)];
Noémie St-Onge . unresolved

What's the reason for this change?

Line 657, Patchset 22 (Parent):
Noémie St-Onge . unresolved

? Same for other occurrences below

Line 769, Patchset 22 (Latest):// data" cell when the default search engine (DSE) is Google when the feature
Noémie St-Onge . unresolved

`and`?

Line 769, Patchset 22 (Latest):// data" cell when the default search engine (DSE) is Google when the feature
// 'kPasswordRemovalFromDeleteBrowsingData` is enabled.
Noémie St-Onge . unresolved

Actually, since these are all tests that require the feature to be enabled, and don't come with a "feature disabled" version, I think we can remove the flag mention from the comments. Enabling the flag in the tests should speak for itself

Line 772, Patchset 22 (Latest): base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeature(kPasswordRemovalFromDeleteBrowsingData);
Noémie St-Onge . unresolved

You don't need the second line to enable a feature. `ScopedFeatureList` has this constructor available https://source.chromium.org/chromium/chromium/src/+/main:base/test/scoped_feature_list.h;l=91;drc=4b18d0c047503e82fdfc53c8b57a397458b18958

Please update other occurences

Line 797, Patchset 22 (Latest): TemplateURLData non_google_provider_data;
non_google_provider_data.SetURL("https://www.nongoogle.com/?q={searchTerms}");
non_google_provider_data.suggestions_url =
"https://www.nongoogle.com/suggest/?q={searchTerms}";

auto* non_google_provider = template_url_service_->Add(
std::make_unique<TemplateURL>(non_google_provider_data));
template_url_service_->SetUserSelectedDefaultSearchProvider(
non_google_provider);
Noémie St-Onge . unresolved

This is repeated a few times, let's create a helper function

Line 864, Patchset 22 (Latest):// Verifies that the consumer receives the correct subtitle for the "Manage
// Other Data" cell when the user is signed in and the DSE is Google when the
Noémie St-Onge . unresolved

`"Manage other data" cell` for consistency. Please also update all other occurrences

Line 951, Patchset 22 (Latest): mediator_ = [[QuickDeleteMediator alloc] initWithPrefs:profile_->GetPrefs()
browsingDataCounterWrapperProducer:
fake_browsing_data_counter_wrapper_producer_
identityManager:identity_manager_
browsingDataRemover:browsing_data_remover_
discoverFeedService:discover_feed_service_
templateURLService:nullptr
canPerformRadialWipeAnimation:NO
uiBlockerTarget:scene_state_
featureEngagementTracker:tracker_];
Noémie St-Onge . unresolved

Why not just call `CreateMediator()`? We can add an argument to the function if it's just that we need to change the `templateURLService`

Open in Gerrit

Related details

Attention is currently required from:
  • Angela Novakovic
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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
Gerrit-Change-Number: 7412187
Gerrit-PatchSet: 22
Gerrit-Owner: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
Gerrit-Attention: Angela Novakovic <novak...@google.com>
Gerrit-Comment-Date: Fri, 30 Jan 2026 15:43:29 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Angela Novakovic (Gerrit)

unread,
Jan 30, 2026, 7:28:30 PM (13 days ago) Jan 30
to Noémie St-Onge, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
Attention needed from Noémie St-Onge

Angela Novakovic added 11 comments

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
Line 212, Patchset 23 (Latest): _searchEngineObserver = std::make_unique<SearchEngineObserverBridge>(
self, templateURLService);
Angela Novakovic . unresolved

Is there a possibility that the user on iPad might change their DSE and cause a crash here? Since it would call the `searchEngineChanged` method and result in reaching the CHECK() lines in `ManageOtherDataTitle` and `ManageOtherDataSubtitle`. Perhaps, we should add a check to see if the flag is on and change:

`if(_templateURLService)` to `if(_templateURLService && IsPasswordRemovalFromDeleteBrowsingDataEnabled())`

What do you think?

Line 570, Patchset 22: if (!_templateURLService ||

!_templateURLService->GetDefaultSearchProvider() ||
_defaultSearchEngineIsGoogle) {
[_consumer setManageOtherDataSubtitle:[self manageOtherDataSubtitle]];
}
Noémie St-Onge . resolved

I think it's fine to just call `[_consumer setManageOtherDataSubtitle:[self manageOtherDataSubtitle]];` here.

Assuming you did it that way to prevent an unnecessary consumer update - by having the condition, you are:

1) Essentially duplicating logic from `-manageOtherDataSubtitle`, and duplicated logic means 2 places to maintain, which brings risk and is to be avoided in general.

2) Potentially querying the `_templateURLService` twice in a row (once in the condition and once in `-manageOtherDataSubtitle`. So we would potentially save a call to `-setManageOtherDataSubtitle`, by risking to call `_templateURLService->GetDefaultSearchProvider()` twice, which isn't better.

Angela Novakovic

Yes, that was my intent, but I do see now that it makes more sense to do it this way.

Line 934, Patchset 22: // Sets the subtitle when the default search engine is null.
Noémie St-Onge . resolved

`Set`

Angela Novakovic

Done

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
Line 94, Patchset 22: [OCMockObject niceMockForProtocol:@protocol(QuickDeleteConsumer)];
Noémie St-Onge . resolved

What's the reason for this change?

Angela Novakovic

This change allows me to not setup a OCMStub for setManageOtherDataTitle or setManageOtherDataSubtitle. If I do set them up, I need to set OCMExpect for both title and subtitle when testing these to avoid crashes. In addition, if my OCMExpect is the same as the OCMStub, then the test says that the method was never call for the OCMExpect.

An example is for TestTitleWhenDSEIsGoogle, where I check that the correct title is displayed. As the DSE is google to start with, the OCMStub is already set to the correct title, so when I use OCMExpect to check that the correct title (same as in OCMStub) is displayed, it fails.

Noémie St-Onge . unresolved

? Same for other occurrences below

Angela Novakovic

I thought we could remove this line between the feature flag setup and CreateMediator().

Line 769, Patchset 22:// data" cell when the default search engine (DSE) is Google when the feature
Noémie St-Onge . resolved

`and`?

Angela Novakovic

Acknowledged

Line 769, Patchset 22:// data" cell when the default search engine (DSE) is Google when the feature
// 'kPasswordRemovalFromDeleteBrowsingData` is enabled.
Noémie St-Onge . resolved

Actually, since these are all tests that require the feature to be enabled, and don't come with a "feature disabled" version, I think we can remove the flag mention from the comments. Enabling the flag in the tests should speak for itself

Angela Novakovic

Done

Line 772, Patchset 22: base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeature(kPasswordRemovalFromDeleteBrowsingData);
Noémie St-Onge . resolved

You don't need the second line to enable a feature. `ScopedFeatureList` has this constructor available https://source.chromium.org/chromium/chromium/src/+/main:base/test/scoped_feature_list.h;l=91;drc=4b18d0c047503e82fdfc53c8b57a397458b18958

Please update other occurences

Angela Novakovic

Done

Line 797, Patchset 22: TemplateURLData non_google_provider_data;

non_google_provider_data.SetURL("https://www.nongoogle.com/?q={searchTerms}");
non_google_provider_data.suggestions_url =
"https://www.nongoogle.com/suggest/?q={searchTerms}";

auto* non_google_provider = template_url_service_->Add(
std::make_unique<TemplateURL>(non_google_provider_data));
template_url_service_->SetUserSelectedDefaultSearchProvider(
non_google_provider);
Noémie St-Onge . resolved

This is repeated a few times, let's create a helper function

Angela Novakovic

Done

Line 864, Patchset 22:// Verifies that the consumer receives the correct subtitle for the "Manage

// Other Data" cell when the user is signed in and the DSE is Google when the
Noémie St-Onge . resolved

`"Manage other data" cell` for consistency. Please also update all other occurrences

Angela Novakovic

Done

Line 951, Patchset 22: mediator_ = [[QuickDeleteMediator alloc] initWithPrefs:profile_->GetPrefs()

browsingDataCounterWrapperProducer:
fake_browsing_data_counter_wrapper_producer_
identityManager:identity_manager_
browsingDataRemover:browsing_data_remover_
discoverFeedService:discover_feed_service_
templateURLService:nullptr
canPerformRadialWipeAnimation:NO
uiBlockerTarget:scene_state_
featureEngagementTracker:tracker_];
Noémie St-Onge . resolved

Why not just call `CreateMediator()`? We can add an argument to the function if it's just that we need to change the `templateURLService`

Angela Novakovic

I was considering this, but I think when I did try to implement it the first time, I didn't do it properly, so it looked less elegant. Now, I've improve upon it 😊

Open in Gerrit

Related details

Attention is currently required from:
  • Noémie St-Onge
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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
Gerrit-Change-Number: 7412187
Gerrit-PatchSet: 23
Gerrit-Owner: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
Gerrit-Attention: Noémie St-Onge <noe...@google.com>
Gerrit-Comment-Date: Sat, 31 Jan 2026 00:28:21 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Noémie St-Onge <noe...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Noémie St-Onge (Gerrit)

unread,
Feb 2, 2026, 11:11:05 AM (10 days ago) Feb 2
to Angela Novakovic, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
Attention needed from Angela Novakovic

Noémie St-Onge added 2 comments

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
Line 212, Patchset 23 (Latest): _searchEngineObserver = std::make_unique<SearchEngineObserverBridge>(
self, templateURLService);
Angela Novakovic . unresolved

Is there a possibility that the user on iPad might change their DSE and cause a crash here? Since it would call the `searchEngineChanged` method and result in reaching the CHECK() lines in `ManageOtherDataTitle` and `ManageOtherDataSubtitle`. Perhaps, we should add a check to see if the flag is on and change:

`if(_templateURLService)` to `if(_templateURLService && IsPasswordRemovalFromDeleteBrowsingDataEnabled())`

What do you think?

Noémie St-Onge

Good catch! I would add the flag check in `searchEngineChanged` though, like we've done in other places. Calls to `setManageOtherDataTitle` and `setManageOtherDataSubtitle` should be guarded by a flag check

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
Noémie St-Onge . unresolved

? Same for other occurrences below

Angela Novakovic

I thought we could remove this line between the feature flag setup and CreateMediator().

Noémie St-Onge

IMO, separating the feature changes (and other similar setups) from the actual test helps with readability. But there's no strict guidance on this so I'll leave it up to you

Open in Gerrit

Related details

Attention is currently required from:
  • Angela Novakovic
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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
Gerrit-Change-Number: 7412187
Gerrit-PatchSet: 23
Gerrit-Owner: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
Gerrit-Attention: Angela Novakovic <novak...@google.com>
Gerrit-Comment-Date: Mon, 02 Feb 2026 16:10:57 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Angela Novakovic (Gerrit)

unread,
Feb 2, 2026, 1:59:53 PM (10 days ago) Feb 2
to Noémie St-Onge, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
Attention needed from Noémie St-Onge

Angela Novakovic added 2 comments

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
Line 212, Patchset 23: _searchEngineObserver = std::make_unique<SearchEngineObserverBridge>(
self, templateURLService);
Angela Novakovic . resolved

Is there a possibility that the user on iPad might change their DSE and cause a crash here? Since it would call the `searchEngineChanged` method and result in reaching the CHECK() lines in `ManageOtherDataTitle` and `ManageOtherDataSubtitle`. Perhaps, we should add a check to see if the flag is on and change:

`if(_templateURLService)` to `if(_templateURLService && IsPasswordRemovalFromDeleteBrowsingDataEnabled())`

What do you think?

Noémie St-Onge

Good catch! I would add the flag check in `searchEngineChanged` though, like we've done in other places. Calls to `setManageOtherDataTitle` and `setManageOtherDataSubtitle` should be guarded by a flag check

Angela Novakovic

Done

File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
Noémie St-Onge . resolved

? Same for other occurrences below

Angela Novakovic

I thought we could remove this line between the feature flag setup and CreateMediator().

Noémie St-Onge

IMO, separating the feature changes (and other similar setups) from the actual test helps with readability. But there's no strict guidance on this so I'll leave it up to you

Angela Novakovic

Agree. I think I had more in mind to minimize the space between code. 😊

Open in Gerrit

Related details

Attention is currently required from:
  • Noémie St-Onge
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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
    Gerrit-Change-Number: 7412187
    Gerrit-PatchSet: 24
    Gerrit-Owner: Angela Novakovic <novak...@google.com>
    Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
    Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
    Gerrit-Attention: Noémie St-Onge <noe...@google.com>
    Gerrit-Comment-Date: Mon, 02 Feb 2026 18:59:44 +0000
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Noémie St-Onge (Gerrit)

    unread,
    Feb 3, 2026, 3:41:17 PM (9 days ago) Feb 3
    to Angela Novakovic, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
    Attention needed from Angela Novakovic

    Noémie St-Onge added 14 comments

    File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
    Line 132, Patchset 24 (Latest): // This boolean tells if user's default search engine is Google.
    Noémie St-Onge . unresolved
    nit
    ```suggestion
    // This boolean tells if the user's default search engine is Google.
    ```
    Line 608, Patchset 24 (Latest): if (IsPasswordRemovalFromDeleteBrowsingDataEnabled()) {
    _defaultSearchEngineIsGoogle =
    IsGoogleTheDefaultSearchEngine(_templateURLService);
    [_consumer setManageOtherDataTitle:[self manageOtherDataTitle]];
    [_consumer setManageOtherDataSubtitle:[self manageOtherDataSubtitle]];
    }
    Noémie St-Onge . unresolved

    in the init methods, we set `_defaultSearchEngineIsGoogle` regardless of the flag's state. I think it would make more sense to be consistent and to just guard the calls to `setManageOtherDataTitle` and `setManageOtherDataSubtitle` like we did elsewhere

    Line 936, Patchset 24 (Latest): if (!_templateURLService ||
    !_templateURLService->GetDefaultSearchProvider()) {
    Noémie St-Onge . unresolved

    nit: instead of having a `_defaultSearchEngineIsGoogle` variable and having to query the service here again to check for a null DSE, we could have an enum with the 3 options: google, null and other and store that in an ivar

    Line 938, Patchset 24 (Latest): return _identityManager->HasPrimaryAccount(signin::ConsentLevel::kSignin)
    Noémie St-Onge . unresolved

    nit: we could create a `isSignedIn` local variable to improve readability

    File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
    Line 118, Patchset 24 (Latest): identity_manager_ = IdentityManagerFactory::GetForProfile(profile_.get());
    browsing_data_remover_ =
    BrowsingDataRemoverFactory::GetForProfile(profile_.get());
    discover_feed_service_ =
    DiscoverFeedServiceFactory::GetForProfile(profile_.get());
    Noémie St-Onge . unresolved

    Why do we need these changes?

    Line 126, Patchset 24 (Latest): tracker_ =
    Noémie St-Onge . unresolved

    Same, this change doesn't seem needed

    Line 226, Patchset 24 (Parent): raw_ptr<history::HistoryService> history_service_;
    scoped_refptr<password_manager::MockPasswordStoreInterface> password_store_;
    FakeBrowsingDataCounterWrapperProducer*
    fake_browsing_data_counter_wrapper_producer_;
    SceneState* scene_state_;
    Noémie St-Onge . unresolved

    Any reasons for re-ordering these?

    Line 256, Patchset 24 (Latest): void setDSEToNonGoogle() {
    Noémie St-Onge . unresolved

    In C++, only the first letter of the acronym is capitalized (same for the other functions below)

    Line 256, Patchset 24 (Latest): void setDSEToNonGoogle() {
    Noémie St-Onge . unresolved

    C++ functions start with a capital letter (same for the other functions below)

    Line 324, Patchset 24 (Latest): AuthenticationService* auth_service() {
    return AuthenticationServiceFactory::GetForProfile(profile_.get());
    }
    Noémie St-Onge . unresolved

    Functions usually go above ivars. Also, other services that need to used in the tests have an ivar (e.g., `history_service_`). Is there a reason for doing this differently for the auth service?

    Line 651, Patchset 24 (Parent):// Tests that `setPasswordsSelection` is not called when the feature
    // `kPasswordRemovalFromDeleteBrowsingData` is enabled.
    Noémie St-Onge . unresolved

    Sorry if my comment wasn't clear, but I think mentioning the feature in tests like this one is actually useful because we are comparing the behaviour with and without the flag. Mentioning the feature helps understanding what's being tested. Otherwise, testing that "something is not called" without more context can be confusing to the reader.

    Whereas with tests like `TestStringsWhenDSEIsGoogleAndUserIsSignedOut`, where we test something that's brand new an only apply when the feature is enabled, mentioning "when X feature is enabled" kind of gives the impression that we would have a test case testing the opposite

    Line 753, Patchset 24 (Latest): CreateMediator(template_url_service_);
    Noémie St-Onge . unresolved

    To prevent having to pass the service every time, we have to options:
    1) Give a default `nullptr` value to the `template_url_service` argument of `CreateMediator`. The mediator is expected to be working with a null `TemplateURLService` [[ref](https://source.chromium.org/chromium/chromium/src/+/main:ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.h;l=5?q=quick_delete_medi&sq=#:~:text=%60templateURLService%60%20can,//%20be%20null%20if%20not%20needed.)], so we could leave it as null for tests that don't require it.

    2) Add another `CreateMediator` (without any arguments), that will simply call `CreateMediator(template_url_service_)`

    Line 765, Patchset 24 (Latest): verifyStringsWhenDSEisGoogleAndUserIsSignedOut();
    Noémie St-Onge . unresolved

    We should instead declare a stub for `[consumer_ setManageOtherDataTitle:]` and`[consumer_ setManageOtherDataSubtitle:]`. We shouldn't be checking those in every test

    Line 858, Patchset 24 (Latest): // Set OCMExpect for when DSE is Google.
    verifyStringsWhenDSEisGoogleAndUserIsSignedOut();
    Noémie St-Onge . unresolved

    We don't have to validate the initial state every time

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Angela Novakovic
    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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
      Gerrit-Change-Number: 7412187
      Gerrit-PatchSet: 24
      Gerrit-Owner: Angela Novakovic <novak...@google.com>
      Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
      Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
      Gerrit-Attention: Angela Novakovic <novak...@google.com>
      Gerrit-Comment-Date: Tue, 03 Feb 2026 20:41:10 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Angela Novakovic (Gerrit)

      unread,
      Feb 5, 2026, 8:49:21 AM (7 days ago) Feb 5
      to Noémie St-Onge, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
      Attention needed from Noémie St-Onge

      Angela Novakovic added 14 comments

      File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
      Line 132, Patchset 24: // This boolean tells if user's default search engine is Google.
      Noémie St-Onge . resolved
      nit
      ```suggestion
      // This boolean tells if the user's default search engine is Google.
      ```
      Angela Novakovic

      Done

      Line 608, Patchset 24: if (IsPasswordRemovalFromDeleteBrowsingDataEnabled()) {

      _defaultSearchEngineIsGoogle =
      IsGoogleTheDefaultSearchEngine(_templateURLService);
      [_consumer setManageOtherDataTitle:[self manageOtherDataTitle]];
      [_consumer setManageOtherDataSubtitle:[self manageOtherDataSubtitle]];
      }
      Noémie St-Onge . resolved

      in the init methods, we set `_defaultSearchEngineIsGoogle` regardless of the flag's state. I think it would make more sense to be consistent and to just guard the calls to `setManageOtherDataTitle` and `setManageOtherDataSubtitle` like we did elsewhere

      Angela Novakovic

      Done

      Line 936, Patchset 24: if (!_templateURLService ||
      !_templateURLService->GetDefaultSearchProvider()) {
      Noémie St-Onge . resolved

      nit: instead of having a `_defaultSearchEngineIsGoogle` variable and having to query the service here again to check for a null DSE, we could have an enum with the 3 options: google, null and other and store that in an ivar

      Angela Novakovic

      Done

      Line 938, Patchset 24: return _identityManager->HasPrimaryAccount(signin::ConsentLevel::kSignin)
      Noémie St-Onge . resolved

      nit: we could create a `isSignedIn` local variable to improve readability

      Angela Novakovic

      Done

      File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
      Line 118, Patchset 24: identity_manager_ = IdentityManagerFactory::GetForProfile(profile_.get());

      browsing_data_remover_ =
      BrowsingDataRemoverFactory::GetForProfile(profile_.get());
      discover_feed_service_ =
      DiscoverFeedServiceFactory::GetForProfile(profile_.get());
      Noémie St-Onge . resolved

      Why do we need these changes?

      Angela Novakovic

      We do not need them. I had a different idea at the time. I am reverting this change.

      Line 126, Patchset 24: tracker_ =
      Noémie St-Onge . resolved

      Same, this change doesn't seem needed

      Angela Novakovic

      Done

      Line 226, Patchset 24 (Parent): raw_ptr<history::HistoryService> history_service_;
      scoped_refptr<password_manager::MockPasswordStoreInterface> password_store_;
      FakeBrowsingDataCounterWrapperProducer*
      fake_browsing_data_counter_wrapper_producer_;
      SceneState* scene_state_;
      Noémie St-Onge . resolved

      Any reasons for re-ordering these?

      Angela Novakovic

      I was trying to put it in somewhat of an order and group the raw_ptrs together.

      Line 256, Patchset 24: void setDSEToNonGoogle() {
      Noémie St-Onge . resolved

      C++ functions start with a capital letter (same for the other functions below)

      Angela Novakovic

      Done

      Line 256, Patchset 24: void setDSEToNonGoogle() {
      Noémie St-Onge . resolved

      In C++, only the first letter of the acronym is capitalized (same for the other functions below)

      Angela Novakovic

      Done

      Line 324, Patchset 24: AuthenticationService* auth_service() {
      return AuthenticationServiceFactory::GetForProfile(profile_.get());
      }
      Noémie St-Onge . resolved

      Functions usually go above ivars. Also, other services that need to used in the tests have an ivar (e.g., `history_service_`). Is there a reason for doing this differently for the auth service?

      Angela Novakovic

      Done

      Line 651, Patchset 24 (Parent):// Tests that `setPasswordsSelection` is not called when the feature
      // `kPasswordRemovalFromDeleteBrowsingData` is enabled.
      Noémie St-Onge . resolved

      Sorry if my comment wasn't clear, but I think mentioning the feature in tests like this one is actually useful because we are comparing the behaviour with and without the flag. Mentioning the feature helps understanding what's being tested. Otherwise, testing that "something is not called" without more context can be confusing to the reader.

      Whereas with tests like `TestStringsWhenDSEIsGoogleAndUserIsSignedOut`, where we test something that's brand new an only apply when the feature is enabled, mentioning "when X feature is enabled" kind of gives the impression that we would have a test case testing the opposite

      Angela Novakovic

      Done

      Line 753, Patchset 24: CreateMediator(template_url_service_);
      Noémie St-Onge . resolved

      To prevent having to pass the service every time, we have to options:
      1) Give a default `nullptr` value to the `template_url_service` argument of `CreateMediator`. The mediator is expected to be working with a null `TemplateURLService` [[ref](https://source.chromium.org/chromium/chromium/src/+/main:ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.h;l=5?q=quick_delete_medi&sq=#:~:text=%60templateURLService%60%20can,//%20be%20null%20if%20not%20needed.)], so we could leave it as null for tests that don't require it.

      2) Add another `CreateMediator` (without any arguments), that will simply call `CreateMediator(template_url_service_)`

      Angela Novakovic

      Done

      Line 765, Patchset 24: verifyStringsWhenDSEisGoogleAndUserIsSignedOut();
      Noémie St-Onge . resolved

      We should instead declare a stub for `[consumer_ setManageOtherDataTitle:]` and`[consumer_ setManageOtherDataSubtitle:]`. We shouldn't be checking those in every test

      Angela Novakovic

      Discussed offline - reached conclusion that switching to a non-strict OCM Protocol is the better approach in this case to avoid repeated code.

      Line 858, Patchset 24: // Set OCMExpect for when DSE is Google.
      verifyStringsWhenDSEisGoogleAndUserIsSignedOut();
      Noémie St-Onge . resolved

      We don't have to validate the initial state every time

      Angela Novakovic

      Done

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Noémie St-Onge
      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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
        Gerrit-Change-Number: 7412187
        Gerrit-PatchSet: 26
        Gerrit-Owner: Angela Novakovic <novak...@google.com>
        Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
        Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
        Gerrit-Attention: Noémie St-Onge <noe...@google.com>
        Gerrit-Comment-Date: Thu, 05 Feb 2026 13:49:17 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        Comment-In-Reply-To: Noémie St-Onge <noe...@google.com>
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Noémie St-Onge (Gerrit)

        unread,
        Feb 5, 2026, 4:31:49 PM (7 days ago) Feb 5
        to Angela Novakovic, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
        Attention needed from Angela Novakovic

        Noémie St-Onge added 17 comments

        File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
        Line 47, Patchset 26 (Latest):// Default Search Engine States.
        Noémie St-Onge . unresolved

        ```suggestion
        // Default search engine states.
        ```

        Line 48, Patchset 26 (Latest):typedef NS_ENUM(NSInteger, DefaultSearchEngine) {
        Noémie St-Onge . unresolved

        ```suggestion
        typedef NS_ENUM(NSInteger, DefaultSearchEngineState) {
        ```

        Line 48, Patchset 26 (Latest):typedef NS_ENUM(NSInteger, DefaultSearchEngine) {
        DefaultSearchEngineIsGoogle,
        DefaultSearchEngineIsNotGoogle,
        DefaultSearchEngineIsNull,
        };
        Noémie St-Onge . unresolved

        Prefer C++ enums go/bling-best-practices#ns-enum-vs-c-enums

        Line 55, Patchset 26 (Latest):NSInteger SetDefaultSearchEngine(TemplateURLService* template_url_service) {
        Noémie St-Onge . unresolved

        This function doesn't "set" anything. We can use "get" instead

        Line 55, Patchset 26 (Latest):NSInteger SetDefaultSearchEngine(TemplateURLService* template_url_service) {
        Noémie St-Onge . unresolved

        I would keep the word "state". It otherwise sounds like we are setting the search engine in the model. Same for the comment
        ```suggestion
        NSInteger SetDefaultSearchEngineState(TemplateURLService* template_url_service) {
        ```

        Line 146, Patchset 26 (Latest): NSInteger _defaultSearchEngineStatus;
        Noémie St-Onge . unresolved

        Use the enum as the type

        Line 623, Patchset 26 (Latest):// When the default search engine changes, the consumer is called in order to

        // update the strings for the "Manage other data" cell.
        Noémie St-Onge . unresolved

        We shouldn't document protocol methods that we're implementing because they're already (or at least should be) documented in the protocol / observer class. You can add comments in the body though

        File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
        Line 37, Patchset 26 (Latest):#import "ios/chrome/browser/shared/model/application_context/application_context.h"
        Noémie St-Onge . unresolved

        Do we need this import? If not, please also clean up the build file

        Line 283, Patchset 26 (Latest): // other data" cell are given to the consumer when the DSE is not Google. The
        // string doesn't change based on the sign-in status.
        Noémie St-Onge . unresolved

        This doesn't add value IMO. If anything, I feel like it might be confusing to talk about the sign-in status here while there's nothing in this function that relates to it.

        Line 736, Patchset 26 (Latest): CreateMediator(template_url_service_);
        Noémie St-Onge . unresolved

        The purpose of having a default value for an argument is so that we can change the value when needed, without having to pass an argument each time given that the value is the same in most cases. Here, we have more `CreateMediator(template_url_service_)` calls than `CreateMediator()` calls, so the default value isn't really helping us. If we want to pass a valid template URL service in most cases, then we should go with the option of having 2 `CreateMediator` methods: one that takes is a parameter and another that call the first one with the `template_url_service_` as argument

        Line 817, Patchset 26 (Latest): // Set OCMExpect for when DSE is Google.
        Noémie St-Onge . unresolved
        ```suggestion
        // Set expectations on `consumer_` for when the DSE is Google and the user is signed out.
        ```

        Same for other similar comments

        Line 820, Patchset 26 (Latest): mediator_.consumer = consumer_;
        EXPECT_OCMOCK_VERIFY(consumer_);
        Noémie St-Onge . unresolved

        skip line to be consistent with other test cases. Same for other occurrences below

        Line 824, Patchset 26 (Latest):// Verifies that the consumer receives the correct title and subtitle for the
        Noémie St-Onge . unresolved

        we're only checking the subtitle here because we are setting the expectation after a **change** to the sign-in status. So this is basically testing that the consumer is updated on sign-in status updates, which ends up being really similar to `TestStringsWhenSignInStatusChangesAndDSEIsNull`. `TestStringsWhenDSEIsNullAndUserIsSignedIn` and `TestStringsWhenSignInStatusChangesAndDSEIsNull` are actually the exact same.

        To test the various DSE/sign-in status combinations, we can set the states **before** creating the mediator, and then check that the title and subtitle are correct after setting the consumer.

        Then, to test that the consumer is updated when there are changes later on to the DSE or sign-in status, we can have 1 test for each and check that the expected methods are being called:

        • For a DSE change:
        • `OCMExpect([consumer_ setManageOtherDataTitle:[OCMArg any]])`
        • `OCMExpect([consumer_ setManageOtherDataSubtitle:[OCMArg any]])`
        • For a sign-in status change:
        • `OCMReject([consumer_ setManageOtherDataTitle:[OCMArg any]])`
        • `OCMExpect([consumer_ setManageOtherDataSubtitle:[OCMArg any]])`
        Line 874, Patchset 26 (Latest): // Verify that Google is the default search provider.
        Noémie St-Onge . unresolved
        ```suggestion
        // Verify that Google is the default search provider initially.
        ```
        Line 886, Patchset 26 (Latest): VerifyStringsWhenDseIsNotGoogle();
        // Change the default search provider to a non-Google one.
        Noémie St-Onge . unresolved

        skip line for consistency

        Line 891, Patchset 26 (Latest): VerifyStringsWhenDseIsGoogleAndUserIsSignedOut();
        // Change the default search provider back to Google.
        Noémie St-Onge . unresolved

        skip line for consistency

        Line 905, Patchset 26 (Latest): // Create the mediator with a nullptr for the templateURLService.
        Noémie St-Onge . unresolved
        ```suggestion
        // Create the mediator with a null template URL service. This will result in getting a null DSE.
        ```
        Open in Gerrit

        Related details

        Attention is currently required from:
        • Angela Novakovic
        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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
          Gerrit-Change-Number: 7412187
          Gerrit-PatchSet: 26
          Gerrit-Owner: Angela Novakovic <novak...@google.com>
          Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
          Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
          Gerrit-Attention: Angela Novakovic <novak...@google.com>
          Gerrit-Comment-Date: Thu, 05 Feb 2026 21:31:45 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: No
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Angela Novakovic (Gerrit)

          unread,
          Feb 6, 2026, 1:16:59 PM (6 days ago) Feb 6
          to Noémie St-Onge, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
          Attention needed from Noémie St-Onge

          Angela Novakovic added 17 comments

          File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
          Line 47, Patchset 26:// Default Search Engine States.
          Noémie St-Onge . resolved

          ```suggestion
          // Default search engine states.
          ```

          Angela Novakovic

          Done

          Line 48, Patchset 26:typedef NS_ENUM(NSInteger, DefaultSearchEngine) {
          Noémie St-Onge . resolved

          ```suggestion
          typedef NS_ENUM(NSInteger, DefaultSearchEngineState) {
          ```

          Angela Novakovic

          Done

          Line 48, Patchset 26:typedef NS_ENUM(NSInteger, DefaultSearchEngine) {
          DefaultSearchEngineIsGoogle,
          DefaultSearchEngineIsNotGoogle,
          DefaultSearchEngineIsNull,
          };
          Noémie St-Onge . resolved

          Prefer C++ enums go/bling-best-practices#ns-enum-vs-c-enums

          Angela Novakovic

          Done

          Line 55, Patchset 26:NSInteger SetDefaultSearchEngine(TemplateURLService* template_url_service) {
          Noémie St-Onge . resolved

          I would keep the word "state". It otherwise sounds like we are setting the search engine in the model. Same for the comment
          ```suggestion
          NSInteger SetDefaultSearchEngineState(TemplateURLService* template_url_service) {
          ```

          Angela Novakovic

          Done

          Line 55, Patchset 26:NSInteger SetDefaultSearchEngine(TemplateURLService* template_url_service) {
          Noémie St-Onge . resolved

          This function doesn't "set" anything. We can use "get" instead

          Angela Novakovic

          Done

          Line 146, Patchset 26: NSInteger _defaultSearchEngineStatus;
          Noémie St-Onge . resolved

          Use the enum as the type

          Angela Novakovic

          Done

          Line 623, Patchset 26:// When the default search engine changes, the consumer is called in order to

          // update the strings for the "Manage other data" cell.
          Noémie St-Onge . resolved

          We shouldn't document protocol methods that we're implementing because they're already (or at least should be) documented in the protocol / observer class. You can add comments in the body though

          Angela Novakovic

          Done

          File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
          Line 37, Patchset 26:#import "ios/chrome/browser/shared/model/application_context/application_context.h"
          Noémie St-Onge . resolved

          Do we need this import? If not, please also clean up the build file

          Angela Novakovic
          We need it for `FakeSystemIdentityManager* system_identity_manager =
          FakeSystemIdentityManager::FromSystemIdentityManager(
          GetApplicationContext()->GetSystemIdentityManager());`
          Line 283, Patchset 26: // other data" cell are given to the consumer when the DSE is not Google. The

          // string doesn't change based on the sign-in status.
          Noémie St-Onge . resolved

          This doesn't add value IMO. If anything, I feel like it might be confusing to talk about the sign-in status here while there's nothing in this function that relates to it.

          Angela Novakovic

          Done

          Line 736, Patchset 26: CreateMediator(template_url_service_);
          Noémie St-Onge . unresolved

          The purpose of having a default value for an argument is so that we can change the value when needed, without having to pass an argument each time given that the value is the same in most cases. Here, we have more `CreateMediator(template_url_service_)` calls than `CreateMediator()` calls, so the default value isn't really helping us. If we want to pass a valid template URL service in most cases, then we should go with the option of having 2 `CreateMediator` methods: one that takes is a parameter and another that call the first one with the `template_url_service_` as argument

          Angela Novakovic

          If there were more calls that needed `TemplateURLService` to be null, then the first option would have been better, or would it still have been fine if I had set the default value to be `template_url_service_` instead of nullptr?

          Line 817, Patchset 26: // Set OCMExpect for when DSE is Google.
          Noémie St-Onge . resolved
          ```suggestion
          // Set expectations on `consumer_` for when the DSE is Google and the user is signed out.
          ```

          Same for other similar comments

          Angela Novakovic

          Done

          Line 820, Patchset 26: mediator_.consumer = consumer_;
          EXPECT_OCMOCK_VERIFY(consumer_);
          Noémie St-Onge . resolved

          skip line to be consistent with other test cases. Same for other occurrences below

          Angela Novakovic

          Done

          Line 824, Patchset 26:// Verifies that the consumer receives the correct title and subtitle for the
          Noémie St-Onge . unresolved

          we're only checking the subtitle here because we are setting the expectation after a **change** to the sign-in status. So this is basically testing that the consumer is updated on sign-in status updates, which ends up being really similar to `TestStringsWhenSignInStatusChangesAndDSEIsNull`. `TestStringsWhenDSEIsNullAndUserIsSignedIn` and `TestStringsWhenSignInStatusChangesAndDSEIsNull` are actually the exact same.

          To test the various DSE/sign-in status combinations, we can set the states **before** creating the mediator, and then check that the title and subtitle are correct after setting the consumer.

          Then, to test that the consumer is updated when there are changes later on to the DSE or sign-in status, we can have 1 test for each and check that the expected methods are being called:

          • For a DSE change:
          • `OCMExpect([consumer_ setManageOtherDataTitle:[OCMArg any]])`
          • `OCMExpect([consumer_ setManageOtherDataSubtitle:[OCMArg any]])`
          • For a sign-in status change:
          • `OCMReject([consumer_ setManageOtherDataTitle:[OCMArg any]])`
          • `OCMExpect([consumer_ setManageOtherDataSubtitle:[OCMArg any]])`
          Angela Novakovic

          This is very clear! Thank you! 😊

          For DSE and sign-in change, since we just want to verify that the appropriate methods are called/rejected, we do not care about the arguments given to `setManageOtherDataTitle` and `setManageOtherDataSubtitle` as we've already tested that the consumer receives the correct strings based on the DSE and sign-in state, right?

          Line 874, Patchset 26: // Verify that Google is the default search provider.
          Noémie St-Onge . resolved
          ```suggestion
          // Verify that Google is the default search provider initially.
          ```
          Angela Novakovic

          Done

          Line 886, Patchset 26: VerifyStringsWhenDseIsNotGoogle();

          // Change the default search provider to a non-Google one.
          Noémie St-Onge . resolved

          skip line for consistency

          Angela Novakovic

          Done

          Line 891, Patchset 26: VerifyStringsWhenDseIsGoogleAndUserIsSignedOut();

          // Change the default search provider back to Google.
          Noémie St-Onge . resolved

          skip line for consistency

          Angela Novakovic

          Done

          Line 905, Patchset 26: // Create the mediator with a nullptr for the templateURLService.
          Noémie St-Onge . resolved
          ```suggestion
          // Create the mediator with a null template URL service. This will result in getting a null DSE.
          ```
          Angela Novakovic

          Done

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Noémie St-Onge
          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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
          Gerrit-Change-Number: 7412187
          Gerrit-PatchSet: 27
          Gerrit-Owner: Angela Novakovic <novak...@google.com>
          Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
          Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
          Gerrit-Attention: Noémie St-Onge <noe...@google.com>
          Gerrit-Comment-Date: Fri, 06 Feb 2026 18:16:54 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: No
          Comment-In-Reply-To: Noémie St-Onge <noe...@google.com>
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Noémie St-Onge (Gerrit)

          unread,
          Feb 9, 2026, 1:54:36 PM (3 days ago) Feb 9
          to Angela Novakovic, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
          Attention needed from Angela Novakovic

          Noémie St-Onge added 2 comments

          File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
          Line 736, Patchset 26: CreateMediator(template_url_service_);
          Noémie St-Onge . unresolved

          The purpose of having a default value for an argument is so that we can change the value when needed, without having to pass an argument each time given that the value is the same in most cases. Here, we have more `CreateMediator(template_url_service_)` calls than `CreateMediator()` calls, so the default value isn't really helping us. If we want to pass a valid template URL service in most cases, then we should go with the option of having 2 `CreateMediator` methods: one that takes is a parameter and another that call the first one with the `template_url_service_` as argument

          Angela Novakovic

          If there were more calls that needed `TemplateURLService` to be null, then the first option would have been better, or would it still have been fine if I had set the default value to be `template_url_service_` instead of nullptr?

          Noémie St-Onge

          we can't set an ivar as the default value, but if it was a static variable, then, yes, we could have used it as the default value

          Line 824, Patchset 26:// Verifies that the consumer receives the correct title and subtitle for the
          Noémie St-Onge . unresolved

          we're only checking the subtitle here because we are setting the expectation after a **change** to the sign-in status. So this is basically testing that the consumer is updated on sign-in status updates, which ends up being really similar to `TestStringsWhenSignInStatusChangesAndDSEIsNull`. `TestStringsWhenDSEIsNullAndUserIsSignedIn` and `TestStringsWhenSignInStatusChangesAndDSEIsNull` are actually the exact same.

          To test the various DSE/sign-in status combinations, we can set the states **before** creating the mediator, and then check that the title and subtitle are correct after setting the consumer.

          Then, to test that the consumer is updated when there are changes later on to the DSE or sign-in status, we can have 1 test for each and check that the expected methods are being called:

          • For a DSE change:
          • `OCMExpect([consumer_ setManageOtherDataTitle:[OCMArg any]])`
          • `OCMExpect([consumer_ setManageOtherDataSubtitle:[OCMArg any]])`
          • For a sign-in status change:
          • `OCMReject([consumer_ setManageOtherDataTitle:[OCMArg any]])`
          • `OCMExpect([consumer_ setManageOtherDataSubtitle:[OCMArg any]])`
          Angela Novakovic

          This is very clear! Thank you! 😊

          For DSE and sign-in change, since we just want to verify that the appropriate methods are called/rejected, we do not care about the arguments given to `setManageOtherDataTitle` and `setManageOtherDataSubtitle` as we've already tested that the consumer receives the correct strings based on the DSE and sign-in state, right?

          Noémie St-Onge

          For the expected calls, we can pass the expected string instead of `[OCMArg any]` to validate that the `isSignedIn` & `_defaultSearchEngineState` have been updated, but, IMO, it would be redundant to also test the consumer update with every DSE/Sign-in status combination

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Angela Novakovic
          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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
          Gerrit-Change-Number: 7412187
          Gerrit-PatchSet: 27
          Gerrit-Owner: Angela Novakovic <novak...@google.com>
          Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
          Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
          Gerrit-Attention: Angela Novakovic <novak...@google.com>
          Gerrit-Comment-Date: Mon, 09 Feb 2026 18:54:28 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: No
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Angela Novakovic (Gerrit)

          unread,
          Feb 9, 2026, 2:12:27 PM (3 days ago) Feb 9
          to Noémie St-Onge, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
          Attention needed from Noémie St-Onge

          Angela Novakovic added 3 comments

          Patchset-level comments
          File-level comment, Patchset 27 (Latest):
          Angela Novakovic . resolved

          Please let me know if any modification is needed 😊

          File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
          Line 736, Patchset 26: CreateMediator(template_url_service_);
          Noémie St-Onge . resolved

          The purpose of having a default value for an argument is so that we can change the value when needed, without having to pass an argument each time given that the value is the same in most cases. Here, we have more `CreateMediator(template_url_service_)` calls than `CreateMediator()` calls, so the default value isn't really helping us. If we want to pass a valid template URL service in most cases, then we should go with the option of having 2 `CreateMediator` methods: one that takes is a parameter and another that call the first one with the `template_url_service_` as argument

          Angela Novakovic

          If there were more calls that needed `TemplateURLService` to be null, then the first option would have been better, or would it still have been fine if I had set the default value to be `template_url_service_` instead of nullptr?

          Noémie St-Onge

          we can't set an ivar as the default value, but if it was a static variable, then, yes, we could have used it as the default value

          Angela Novakovic

          Acknowledged

          Line 824, Patchset 26:// Verifies that the consumer receives the correct title and subtitle for the
          Noémie St-Onge . resolved

          we're only checking the subtitle here because we are setting the expectation after a **change** to the sign-in status. So this is basically testing that the consumer is updated on sign-in status updates, which ends up being really similar to `TestStringsWhenSignInStatusChangesAndDSEIsNull`. `TestStringsWhenDSEIsNullAndUserIsSignedIn` and `TestStringsWhenSignInStatusChangesAndDSEIsNull` are actually the exact same.

          To test the various DSE/sign-in status combinations, we can set the states **before** creating the mediator, and then check that the title and subtitle are correct after setting the consumer.

          Then, to test that the consumer is updated when there are changes later on to the DSE or sign-in status, we can have 1 test for each and check that the expected methods are being called:

          • For a DSE change:
          • `OCMExpect([consumer_ setManageOtherDataTitle:[OCMArg any]])`
          • `OCMExpect([consumer_ setManageOtherDataSubtitle:[OCMArg any]])`
          • For a sign-in status change:
          • `OCMReject([consumer_ setManageOtherDataTitle:[OCMArg any]])`
          • `OCMExpect([consumer_ setManageOtherDataSubtitle:[OCMArg any]])`
          Angela Novakovic

          This is very clear! Thank you! 😊

          For DSE and sign-in change, since we just want to verify that the appropriate methods are called/rejected, we do not care about the arguments given to `setManageOtherDataTitle` and `setManageOtherDataSubtitle` as we've already tested that the consumer receives the correct strings based on the DSE and sign-in state, right?

          Noémie St-Onge

          For the expected calls, we can pass the expected string instead of `[OCMArg any]` to validate that the `isSignedIn` & `_defaultSearchEngineState` have been updated, but, IMO, it would be redundant to also test the consumer update with every DSE/Sign-in status combination

          Angela Novakovic

          Perfect. I've done that. I've only left `OCMReject` with `[OCMArg any]` as I would not expect any calls to be made to change the title when the sign-in status changes.

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Noémie St-Onge
          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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
            Gerrit-Change-Number: 7412187
            Gerrit-PatchSet: 27
            Gerrit-Owner: Angela Novakovic <novak...@google.com>
            Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
            Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
            Gerrit-Attention: Noémie St-Onge <noe...@google.com>
            Gerrit-Comment-Date: Mon, 09 Feb 2026 19:12:23 +0000
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            Noémie St-Onge (Gerrit)

            unread,
            Feb 10, 2026, 2:49:21 PM (2 days ago) Feb 10
            to Angela Novakovic, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
            Attention needed from Angela Novakovic

            Noémie St-Onge added 11 comments

            File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
            Line 57, Patchset 28 (Latest):// Get the user's default search engine state.
            Noémie St-Onge . unresolved

            `Gets` or `Returns`

            Line 60, Patchset 28 (Latest): if (!template_url_service ||
            !template_url_service->GetDefaultSearchProvider()) {
            return DefaultSearchEngineState::kNull;
            }
            if (template_url_service->GetDefaultSearchProvider()->GetEngineType(
            template_url_service->search_terms_data()) == SEARCH_ENGINE_GOOGLE) {
            return DefaultSearchEngineState::kGoogle;
            } else {
            return DefaultSearchEngineState::kNotGoogle;
            }
            Noémie St-Onge . unresolved
            Same as in https://chromium-review.googlesource.com/c/chromium/src/+/7489686/comment/bd04d030_d3ee0c20/. Please remove this function and the enum if the other CL ends up landing first
            ```suggestion
            if (!template_url_service ||
            !template_url_service->GetDefaultSearchProvider()) {
            return DefaultSearchEngineState::kNull;
            }

            if (template_url_service->GetDefaultSearchProvider()->GetEngineType(
            template_url_service->search_terms_data()) == SEARCH_ENGINE_GOOGLE) {
            return DefaultSearchEngineState::kGoogle;
            }

            return DefaultSearchEngineState::kNotGoogle;
            ```
            Line 150, Patchset 28 (Latest): DefaultSearchEngineState _defaultSearchEngineStatus;
            Noémie St-Onge . unresolved

            Let's stick with the word `state` for consistency (same in the comment)

            Line 185, Patchset 28 (Latest): // Used to get the user's current sign-in status.
            Noémie St-Onge . unresolved

            This is not used to "get" the status, it is just storing the status

            Line 310, Patchset 28 (Latest): BOOL shouldShowFooter = _isSignedIn;
            [_consumer setShouldShowFooter:shouldShowFooter];
            Noémie St-Onge . unresolved

            Let's just pass `_isSignedIn` to `setShouldShowFooter`. The `shouldShowFooter` variable doesn't add value IMO

            File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
            Line 115, Patchset 28 (Latest): void CreateMediator(raw_ptr<TemplateURLService> template_url_service) {
            Noémie St-Onge . unresolved

            Add a comment

            Line 145, Patchset 28 (Latest): void CreateMediator() { CreateMediator(template_url_service_); }
            Noémie St-Onge . unresolved

            Add a comment

            Line 707, Patchset 28 (Parent):
            Noémie St-Onge . unresolved

            Let's keep this empty line for consistency with other test cases

            Line 806, Patchset 28 (Latest):TEST_F(QuickDeleteMediatorTest, TestStringsWhenDseIsGoogleAndUserIsSignedOut) {
            Noémie St-Onge . unresolved

            I think this test and the other ones that check the strings for a given DSE/Sign-in status combination could be grouped into a single parametrized test case https://engdoc.corp.google.com/eng/doc/devguide/testing/parameterized-testing.md?cl=head&polyglot=cpp

            This would look something like this:
            ```
            struct ManageOtherDataTestParams {
            std::string test_name;
            DefaultSearchEngineState dse_state;
            bool signed_in;
            int expected_title_id;
            int expected_subtitle_id;
            };
            class QuickDeleteMediatorManageOtherDataTest
            : public QuickDeleteMediatorTest,
            public ::testing::WithParamInterface<ManageOtherDataTestParams> {};
            TEST_P(QuickDeleteMediatorManageOtherDataTest, TestStrings) {
            base::test::ScopedFeatureList feature_list(
            kPasswordRemovalFromDeleteBrowsingData);
            const ManageOtherDataTestParams& params = GetParam();
              // Set up DSE.
            switch (params.dse_state) {
            case DefaultSearchEngineState::kNull:
            CreateMediator(/*template_url_service=*/nullptr);
            break;
            case DefaultSearchEngineState::kGoogle:
            CreateMediator(); // Google is default in test env.
            break;
            case DefaultSearchEngineState::kNotGoogle:
            SetDseToNonGoogle();
            CreateMediator();
            break;
            }

            // Set up sign-in status.
            if (params.signed_in) {
            auth_service_->SignIn(fake_identity_,
            signin_metrics::AccessPoint::kSettings);
            }
              OCMExpect([consumer_ setManageOtherDataTitle:l10n_util::GetNSString(
            params.expected_title_id)]);
            OCMExpect(
            [consumer_ setManageOtherDataSubtitle:l10n_util::GetNSString(
            params.expected_subtitle_id)]);
              mediator_.consumer = consumer_;
              EXPECT_OCMOCK_VERIFY(consumer_);
            }
            INSTANTIATE_TEST_SUITE_P(
            AllVariants,
            QuickDeleteMediatorManageOtherDataTest,
            ::testing::ValuesIn<ManageOtherDataTestParams>({
            {.test_name = "Google_SignedOut",
            .dse_state = DefaultSearchEngineState::kGoogle,
            .signed_in = false,
            .expected_title_id = IDS_SETTINGS_MANAGE_OTHER_GOOGLE_DATA_LABEL,
            .expected_subtitle_id = IDS_SETTINGS_MANAGE_PASSWORDS_SUB_LABEL},
                    {.test_name = "Google_SignedIn",
            .dse_state = DefaultSearchEngineState::kGoogle,
            .signed_in = true,
            .expected_title_id = IDS_SETTINGS_MANAGE_OTHER_GOOGLE_DATA_LABEL,
            .expected_subtitle_id = IDS_SETTINGS_MANAGE_OTHER_DATA_SUB_LABEL},
                    {.test_name = "NonGoogle",
            .dse_state = DefaultSearchEngineState::kNotGoogle,
            .signed_in = false,
            .expected_title_id = IDS_SETTINGS_MANAGE_OTHER_DATA_LABEL,
            .expected_subtitle_id = IDS_SETTINGS_MANAGE_OTHER_DATA_SUB_LABEL},
                    {.test_name = "NullDSE_SignedOut",
            .dse_state = DefaultSearchEngineState::kNull,
            .signed_in = false,
            .expected_title_id = IDS_SETTINGS_MANAGE_OTHER_DATA_LABEL,
            .expected_subtitle_id = IDS_SETTINGS_MANAGE_PASSWORDS_SUB_LABEL},
                    {.test_name = "NullDSE_SignedIn",
            .dse_state = DefaultSearchEngineState::kNull,
            .signed_in = true,
            .expected_title_id = IDS_SETTINGS_MANAGE_OTHER_DATA_LABEL,
            .expected_subtitle_id =
            IDS_IOS_CLEAR_BROWSING_DATA_MANAGE_OTHER_DATA_SUBTITLE_UNKNOWN_DSE},
            }),
            [](const ::testing::TestParamInfo<ManageOtherDataTestParams>& info) {
            return info.param.test_name;
            });
            ```
            Line 956, Patchset 28 (Latest):// "Manage other data" cell when the user's sign-in status changes and the DSE
            // is Google.
            Noémie St-Onge . unresolved

            nit: I would remove this part from the comment as it sounds like an important setup of this test. It is going to impact the expected string, but here the scope is checking a sign-in status change

            Line 972, Patchset 28 (Latest): OCMReject([consumer_ setManageOtherDataTitle:[OCMArg any]]);
            Noémie St-Onge . unresolved

            I would add a comment like: `A change in the sign-in status doesn't impact the title`

            Open in Gerrit

            Related details

            Attention is currently required from:
            • Angela Novakovic
            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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
              Gerrit-Change-Number: 7412187
              Gerrit-PatchSet: 28
              Gerrit-Owner: Angela Novakovic <novak...@google.com>
              Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
              Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
              Gerrit-Attention: Angela Novakovic <novak...@google.com>
              Gerrit-Comment-Date: Tue, 10 Feb 2026 19:49:13 +0000
              Gerrit-HasComments: Yes
              Gerrit-Has-Labels: No
              satisfied_requirement
              unsatisfied_requirement
              open
              diffy

              Angela Novakovic (Gerrit)

              unread,
              Feb 11, 2026, 12:44:22 PM (yesterday) Feb 11
              to Noémie St-Onge, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
              Attention needed from Noémie St-Onge

              Angela Novakovic added 11 comments

              File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator.mm
              Line 57, Patchset 28:// Get the user's default search engine state.
              Noémie St-Onge . resolved

              `Gets` or `Returns`

              Angela Novakovic

              Done

              Line 60, Patchset 28: if (!template_url_service ||

              !template_url_service->GetDefaultSearchProvider()) {
              return DefaultSearchEngineState::kNull;
              }
              if (template_url_service->GetDefaultSearchProvider()->GetEngineType(
              template_url_service->search_terms_data()) == SEARCH_ENGINE_GOOGLE) {
              return DefaultSearchEngineState::kGoogle;
              } else {
              return DefaultSearchEngineState::kNotGoogle;
              }
              Noémie St-Onge . resolved
              Same as in https://chromium-review.googlesource.com/c/chromium/src/+/7489686/comment/bd04d030_d3ee0c20/. Please remove this function and the enum if the other CL ends up landing first
              ```suggestion
              if (!template_url_service ||
              !template_url_service->GetDefaultSearchProvider()) {
              return DefaultSearchEngineState::kNull;
              }

              if (template_url_service->GetDefaultSearchProvider()->GetEngineType(
              template_url_service->search_terms_data()) == SEARCH_ENGINE_GOOGLE) {
              return DefaultSearchEngineState::kGoogle;
              }

              return DefaultSearchEngineState::kNotGoogle;
              ```
              Angela Novakovic

              Done

              Line 150, Patchset 28: DefaultSearchEngineState _defaultSearchEngineStatus;
              Noémie St-Onge . resolved

              Let's stick with the word `state` for consistency (same in the comment)

              Angela Novakovic

              Done

              Line 185, Patchset 28: // Used to get the user's current sign-in status.
              Noémie St-Onge . resolved

              This is not used to "get" the status, it is just storing the status

              Angela Novakovic

              Done

              Line 310, Patchset 28: BOOL shouldShowFooter = _isSignedIn;
              [_consumer setShouldShowFooter:shouldShowFooter];
              Noémie St-Onge . resolved

              Let's just pass `_isSignedIn` to `setShouldShowFooter`. The `shouldShowFooter` variable doesn't add value IMO

              Angela Novakovic

              Agree, I have removed it.

              File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
              Line 115, Patchset 28: void CreateMediator(raw_ptr<TemplateURLService> template_url_service) {
              Noémie St-Onge . resolved

              Add a comment

              Angela Novakovic

              Done

              Line 145, Patchset 28: void CreateMediator() { CreateMediator(template_url_service_); }
              Noémie St-Onge . resolved

              Add a comment

              Angela Novakovic

              Done

              Line 707, Patchset 28 (Parent):
              Noémie St-Onge . resolved

              Let's keep this empty line for consistency with other test cases

              Angela Novakovic

              Done

              Line 806, Patchset 28:TEST_F(QuickDeleteMediatorTest, TestStringsWhenDseIsGoogleAndUserIsSignedOut) {
              Noémie St-Onge . resolved
              Angela Novakovic

              Done

              Line 956, Patchset 28:// "Manage other data" cell when the user's sign-in status changes and the DSE
              // is Google.
              Noémie St-Onge . resolved

              nit: I would remove this part from the comment as it sounds like an important setup of this test. It is going to impact the expected string, but here the scope is checking a sign-in status change

              Angela Novakovic

              Done

              Line 972, Patchset 28: OCMReject([consumer_ setManageOtherDataTitle:[OCMArg any]]);
              Noémie St-Onge . resolved

              I would add a comment like: `A change in the sign-in status doesn't impact the title`

              Angela Novakovic

              Done

              Open in Gerrit

              Related details

              Attention is currently required from:
              • Noémie St-Onge
              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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
                Gerrit-Change-Number: 7412187
                Gerrit-PatchSet: 29
                Gerrit-Owner: Angela Novakovic <novak...@google.com>
                Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
                Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
                Gerrit-Attention: Noémie St-Onge <noe...@google.com>
                Gerrit-Comment-Date: Wed, 11 Feb 2026 17:44:14 +0000
                Gerrit-HasComments: Yes
                Gerrit-Has-Labels: No
                Comment-In-Reply-To: Noémie St-Onge <noe...@google.com>
                satisfied_requirement
                unsatisfied_requirement
                open
                diffy

                Noémie St-Onge (Gerrit)

                unread,
                Feb 11, 2026, 5:30:25 PM (yesterday) Feb 11
                to Angela Novakovic, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
                Attention needed from Angela Novakovic

                Noémie St-Onge added 7 comments

                File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm
                Line 57, Patchset 29 (Latest):namespace {

                using quick_delete_util::DefaultSearchEngineState;

                } // namespace
                Noémie St-Onge . unresolved

                no need to wrap the using declaration in a namespace

                Line 121, Patchset 29 (Latest): // Creates the QuickDeleteMediator. `template_url_service` can be a nullptr.
                Noémie St-Onge . unresolved
                ```suggestion
                // Creates a QuickDeleteMediator with a given `template_url_service`. `template_url_service` can be a nullptr.
                ```
                Line 152, Patchset 29 (Latest): // Creates the QuickDeleteMediator with a default value of
                // `template_url_service_` for the `templateURLService`.
                Noémie St-Onge . unresolved
                ```suggestion
                // Creates a QuickDeleteMediator with a valid template URL service.
                ```
                Line 283, Patchset 29 (Latest): void VerifyStringsWhenDseIsGoogleAndUserIsSignedOut() {
                Noémie St-Onge . unresolved

                This function is now only used once. I would remove it as I feel like it would be clearer to see the OCMExpects directly in the test

                Line 294, Patchset 29 (Latest): void VerifyStringsWhenDseIsNotGoogle() {
                Noémie St-Onge . unresolved

                Same, this function is now only used once. I would remove it as I feel like it would be clearer to see the OCMExpects directly in the test

                Line 876, Patchset 29 (Latest):struct ManageOtherDataTestParams {
                Noémie St-Onge . unresolved

                Add comment

                Line 884, Patchset 29 (Latest):class QuickDeleteMediatorManageOtherDataTest
                Noémie St-Onge . unresolved

                Add comment

                Open in Gerrit

                Related details

                Attention is currently required from:
                • Angela Novakovic
                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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
                  Gerrit-Change-Number: 7412187
                  Gerrit-PatchSet: 29
                  Gerrit-Owner: Angela Novakovic <novak...@google.com>
                  Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
                  Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
                  Gerrit-Attention: Angela Novakovic <novak...@google.com>
                  Gerrit-Comment-Date: Wed, 11 Feb 2026 22:30:18 +0000
                  Gerrit-HasComments: Yes
                  Gerrit-Has-Labels: No
                  satisfied_requirement
                  unsatisfied_requirement
                  open
                  diffy

                  Angela Novakovic (Gerrit)

                  unread,
                  9:28 AM (10 hours ago) 9:28 AM
                  to Noémie St-Onge, Chromium LUCI CQ, chromium...@chromium.org, dullweb...@chromium.org, feature-me...@chromium.org, ios-revie...@chromium.org, ios-r...@chromium.org, marq+...@chromium.org, msrame...@chromium.org
                  Attention needed from Noémie St-Onge

                  Angela Novakovic added 7 comments

                  File ios/chrome/browser/settings/ui_bundled/clear_browsing_data/coordinator/quick_delete_mediator_unittest.mm


                  using quick_delete_util::DefaultSearchEngineState;

                  } // namespace
                  Noémie St-Onge . resolved

                  no need to wrap the using declaration in a namespace

                  Angela Novakovic

                  Done

                  Line 121, Patchset 29: // Creates the QuickDeleteMediator. `template_url_service` can be a nullptr.
                  Noémie St-Onge . resolved
                  ```suggestion
                  // Creates a QuickDeleteMediator with a given `template_url_service`. `template_url_service` can be a nullptr.
                  ```
                  Angela Novakovic

                  Done

                  Line 152, Patchset 29: // Creates the QuickDeleteMediator with a default value of

                  // `template_url_service_` for the `templateURLService`.
                  Noémie St-Onge . resolved
                  ```suggestion
                  // Creates a QuickDeleteMediator with a valid template URL service.
                  ```
                  Angela Novakovic

                  Done

                  Line 283, Patchset 29: void VerifyStringsWhenDseIsGoogleAndUserIsSignedOut() {
                  Noémie St-Onge . resolved

                  This function is now only used once. I would remove it as I feel like it would be clearer to see the OCMExpects directly in the test

                  Angela Novakovic

                  Done

                  Line 294, Patchset 29: void VerifyStringsWhenDseIsNotGoogle() {
                  Noémie St-Onge . resolved

                  Same, this function is now only used once. I would remove it as I feel like it would be clearer to see the OCMExpects directly in the test

                  Angela Novakovic

                  Done

                  Line 876, Patchset 29:struct ManageOtherDataTestParams {
                  Noémie St-Onge . resolved

                  Add comment

                  Angela Novakovic

                  Done

                  Line 884, Patchset 29:class QuickDeleteMediatorManageOtherDataTest
                  Noémie St-Onge . resolved

                  Add comment

                  Angela Novakovic

                  Done

                  Open in Gerrit

                  Related details

                  Attention is currently required from:
                  • Noémie St-Onge
                  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: Ic98e770913d7e7ba6358de27785ddd0c295d7462
                    Gerrit-Change-Number: 7412187
                    Gerrit-PatchSet: 30
                    Gerrit-Owner: Angela Novakovic <novak...@google.com>
                    Gerrit-Reviewer: Angela Novakovic <novak...@google.com>
                    Gerrit-Reviewer: Noémie St-Onge <noe...@google.com>
                    Gerrit-Attention: Noémie St-Onge <noe...@google.com>
                    Gerrit-Comment-Date: Thu, 12 Feb 2026 14:28:43 +0000
                    Gerrit-HasComments: Yes
                    Gerrit-Has-Labels: No
                    Comment-In-Reply-To: Noémie St-Onge <noe...@google.com>
                    satisfied_requirement
                    unsatisfied_requirement
                    open
                    diffy
                    Reply all
                    Reply to author
                    Forward
                    0 new messages