diff --git a/components/autofill/core/browser/payments/virtual_card_enrollment_manager.cc b/components/autofill/core/browser/payments/virtual_card_enrollment_manager.cc index 55fa906339d69..eb46396cd4355 100644 --- a/components/autofill/core/browser/payments/virtual_card_enrollment_manager.cc +++ b/components/autofill/core/browser/payments/virtual_card_enrollment_manager.cc @@ -339,8 +339,15 @@ void VirtualCardEnrollmentManager::OnDidGetUpdateVirtualCardEnrollmentResponse( // Relay the response to the server card editor page. This also destroys the // payments delegate if the editor was already closed. if (virtual_card_enrollment_update_response_callback_.has_value()) { + // The callback may synchronously destroy `this` (on Android the Java + // callback can call AutofillPaymentMethodsDelegate::Cleanup() which owns + // this object). Guard with a WeakPtr. + auto weak_this = weak_ptr_factory_.GetWeakPtr(); std::move(virtual_card_enrollment_update_response_callback_.value()) .Run(result); + if (!weak_this) { + return; + } } LogUpdateVirtualCardEnrollmentRequestResult(