| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ui/android/autofill/autofill_save_iban_delegate.h" |
| |
| #include <string> |
| |
| #include "base/notreached.h" |
| #include "components/browser_ui/device_lock/android/device_lock_bridge.h" |
| #include "ui/android/view_android.h" |
| |
| namespace autofill { |
| |
| AutofillSaveIbanDelegate::AutofillSaveIbanDelegate( |
| payments::PaymentsAutofillClient::SaveIbanPromptCallback save_iban_callback, |
| content::WebContents* web_contents) |
| : save_iban_callback_(std::move(save_iban_callback)), |
| web_contents_(web_contents), |
| device_lock_bridge_(std::make_unique<DeviceLockBridge>()) {} |
| |
| AutofillSaveIbanDelegate::~AutofillSaveIbanDelegate() = default; |
| |
| void AutofillSaveIbanDelegate::OnUiAccepted( |
| base::OnceClosure callback, |
| std::u16string_view user_provided_nickname) { |
| on_finished_gathering_consent_callback_ = std::move(callback); |
| device_lock_bridge_->LaunchDeviceLockUiIfNeededBeforeRunningCallback( |
| web_contents_->GetNativeView()->GetWindowAndroid(), |
| base::BindOnce(&AutofillSaveIbanDelegate::OnAfterDeviceLockUi, |
| weak_ptr_factory_.GetWeakPtr(), user_provided_nickname)); |
| } |
| |
| void AutofillSaveIbanDelegate::OnUiCanceled() { |
| std::move(save_iban_callback_) |
| .Run(payments::PaymentsAutofillClient::SaveIbanOfferUserDecision:: |
| kDeclined, |
| /*user_provided_nickname=*/u""); |
| } |
| |
| void AutofillSaveIbanDelegate::OnUiIgnored() { |
| std::move(save_iban_callback_) |
| .Run( |
| payments::PaymentsAutofillClient::SaveIbanOfferUserDecision::kIgnored, |
| /*user_provided_nickname=*/u""); |
| } |
| |
| void AutofillSaveIbanDelegate::SetDeviceLockBridgeForTesting( |
| std::unique_ptr<DeviceLockBridge> device_lock_bridge) { |
| device_lock_bridge_ = std::move(device_lock_bridge); |
| } |
| |
| void AutofillSaveIbanDelegate::OnAfterDeviceLockUi( |
| std::u16string_view user_provided_nickname, |
| bool user_decision) { |
| std::move(save_iban_callback_) |
| .Run(user_decision ? payments::PaymentsAutofillClient:: |
| SaveIbanOfferUserDecision::kAccepted |
| : payments::PaymentsAutofillClient:: |
| SaveIbanOfferUserDecision::kDeclined, |
| user_decision ? user_provided_nickname : u""); |
| std::move(on_finished_gathering_consent_callback_).Run(); |
| } |
| |
| } // namespace autofill |