blob: be9bec48a09610d6caabeb1e202746cb512f8202 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_PAYMENTS_CVC_UNMASK_VIEW_CONTROLLER_H_
#define CHROME_BROWSER_UI_VIEWS_PAYMENTS_CVC_UNMASK_VIEW_CONTROLLER_H_
#include <string>
#include "base/memory/raw_ptr.h"
#include "chrome/browser/ui/autofill/payments/autofill_dialog_models.h"
#include "chrome/browser/ui/views/payments/payment_request_sheet_controller.h"
#include "components/autofill/core/browser/payments/full_card_request.h"
#include "components/autofill/core/browser/payments/payments_client.h"
#include "components/autofill/core/browser/payments/risk_data_loader.h"
#include "content/public/browser/global_routing_id.h"
#include "ui/views/controls/textfield/textfield_controller.h"
namespace autofill {
class AutofillClient;
}
namespace views {
class Combobox;
class Textfield;
}
namespace payments {
class PaymentRequestCvcUnmaskViewControllerVisualTest;
class PaymentRequestSpec;
class PaymentRequestState;
class PaymentRequestDialogView;
class CvcUnmaskViewController
: public PaymentRequestSheetController,
public autofill::RiskDataLoader,
public autofill::payments::FullCardRequest::UIDelegate,
public views::TextfieldController {
public:
CvcUnmaskViewController(
base::WeakPtr<PaymentRequestSpec> spec,
base::WeakPtr<PaymentRequestState> state,
base::WeakPtr<PaymentRequestDialogView> dialog,
const autofill::CreditCard& credit_card,
base::WeakPtr<autofill::payments::FullCardRequest::ResultDelegate>
result_delegate,
content::RenderFrameHost* render_frame_host);
CvcUnmaskViewController(const CvcUnmaskViewController&) = delete;
CvcUnmaskViewController& operator=(const CvcUnmaskViewController&) = delete;
~CvcUnmaskViewController() override;
// autofill::RiskDataLoader:
void LoadRiskData(
base::OnceCallback<void(const std::string&)> callback) override;
// autofill::payments::FullCardRequest::UIDelegate:
void ShowUnmaskPrompt(
const autofill::CreditCard& card,
autofill::AutofillClient::UnmaskCardReason reason,
base::WeakPtr<autofill::CardUnmaskDelegate> delegate) override;
void OnUnmaskVerificationResult(
autofill::AutofillClient::PaymentsRpcResult result) override;
protected:
// PaymentRequestSheetController:
std::u16string GetSheetTitle() override;
void FillContentView(views::View* content_view) override;
std::u16string GetPrimaryButtonLabel() override;
ButtonCallback GetPrimaryButtonCallback() override;
int GetPrimaryButtonId() override;
bool GetPrimaryButtonEnabled() override;
bool ShouldShowSecondaryButton() override;
private:
friend PaymentRequestCvcUnmaskViewControllerVisualTest;
// Called when the user confirms their CVC. This will pass the value to the
// active FullCardRequest.
void CvcConfirmed();
// Display a label with the text |error|
void DisplayError(std::u16string error);
// Updates the enabled state of the pay button
void UpdatePayButtonState();
bool GetSheetId(DialogViewID* sheet_id) override;
views::View* GetFirstFocusedView() override;
// PaymentRequestSheetController:
void BackButtonPressed() override;
// views::TextfieldController:
void ContentsChanged(views::Textfield* sender,
const std::u16string& new_contents) override;
void OnPerformAction();
autofill::MonthComboboxModel month_combobox_model_;
autofill::YearComboboxModel year_combobox_model_;
raw_ptr<views::Combobox> month_combobox_ = nullptr;
raw_ptr<views::Combobox> year_combobox_ = nullptr;
raw_ptr<views::Textfield>
cvc_field_; // owned by the view hierarchy, outlives this.
autofill::CreditCard credit_card_;
const content::GlobalRenderFrameHostId frame_routing_id_;
autofill::payments::PaymentsClient payments_client_;
autofill::payments::FullCardRequest full_card_request_;
base::WeakPtr<autofill::CardUnmaskDelegate> unmask_delegate_;
base::WeakPtrFactory<CvcUnmaskViewController> weak_ptr_factory_{this};
};
} // namespace payments
#endif // CHROME_BROWSER_UI_VIEWS_PAYMENTS_CVC_UNMASK_VIEW_CONTROLLER_H_