0

Fix crash in save card banner mediator due to null save card delegate.

This CL adds a check for null AutofillSaveCardInfoBarDelegateIOS
in SaveCardInfoBarBannerOverlayMediator.dismissInfobarBannerFor-
UserInteraction. Fixes immediate crash, see crbug.com/409220427

Bug: 409220427
Change-Id: I207bb4d43ca4a44bd1793150913387e851e8cfd7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6443738
Reviewed-by: Chris Lu <thegreenfrog@chromium.org>
Commit-Queue: Kavita Soni <kavitasoni@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1445625}
This commit is contained in:
Kavita Soni
2025-04-10 18:29:34 -07:00
committed by Chromium LUCI CQ
parent 984c917e27
commit bc8d1dacdd

@ -78,21 +78,22 @@
- (void)dismissInfobarBannerForUserInteraction:(BOOL)userInitiated {
autofill::AutofillSaveCardInfoBarDelegateIOS* delegate =
self.saveCardDelegate;
if (!userInitiated) {
// Banner is dismissed without user interaction when it times out.
delegate->LogSaveCreditCardInfoBarResultMetric(
autofill::autofill_metrics::SaveCreditCardPromptResultIOS::KTimedOut,
autofill::autofill_metrics::SaveCreditCardPromptOverlayType::kBanner);
} else if (userInitiated && !_bannerButtonWasPressed) {
// Banner is dismissed with user interaction by swiping it up or by tapping
// its button. To distinguish swipe-up dismissal, the method checks if the
// button was pressed.
delegate->LogSaveCreditCardInfoBarResultMetric(
autofill::autofill_metrics::SaveCreditCardPromptResultIOS::kSwiped,
autofill::autofill_metrics::SaveCreditCardPromptOverlayType::kBanner);
// Delegate may be null due to crbug.com/409220427
if (delegate) {
if (!userInitiated) {
// Banner is dismissed without user interaction when it times out.
delegate->LogSaveCreditCardInfoBarResultMetric(
autofill::autofill_metrics::SaveCreditCardPromptResultIOS::KTimedOut,
autofill::autofill_metrics::SaveCreditCardPromptOverlayType::kBanner);
} else if (userInitiated && !_bannerButtonWasPressed) {
// Banner is dismissed with user interaction by swiping it up or by
// tapping its button. To distinguish swipe-up dismissal, the method
// checks if the button was pressed.
delegate->LogSaveCreditCardInfoBarResultMetric(
autofill::autofill_metrics::SaveCreditCardPromptResultIOS::kSwiped,
autofill::autofill_metrics::SaveCreditCardPromptOverlayType::kBanner);
}
}
[super dismissInfobarBannerForUserInteraction:userInitiated];
}