blob: e6b6af6dc444c484335858b80d1456d80a121863 [file] [log] [blame]
// Copyright 2014 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 COMPONENTS_AUTOFILL_CORE_BROWSER_UI_CARD_UNMASK_PROMPT_CONTROLLER_IMPL_H_
#define COMPONENTS_AUTOFILL_CORE_BROWSER_UI_CARD_UNMASK_PROMPT_CONTROLLER_IMPL_H_
#include <string>
#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "components/autofill/core/browser/autofill_client.h"
#include "components/autofill/core/browser/autofill_metrics.h"
#include "components/autofill/core/browser/card_unmask_delegate.h"
#include "components/autofill/core/browser/credit_card.h"
#include "components/autofill/core/browser/ui/card_unmask_prompt_controller.h"
namespace autofill {
class CardUnmaskPromptView;
class CardUnmaskPromptControllerImpl : public CardUnmaskPromptController {
public:
CardUnmaskPromptControllerImpl(
PrefService* pref_service,
bool is_off_the_record);
virtual ~CardUnmaskPromptControllerImpl();
// Functions called by ChromeAutofillClient.
void ShowPrompt(CardUnmaskPromptView* view,
const CreditCard& card,
AutofillClient::UnmaskCardReason reason,
base::WeakPtr<CardUnmaskDelegate> delegate);
// The CVC the user entered went through validation.
void OnVerificationResult(AutofillClient::PaymentsRpcResult result);
// CardUnmaskPromptController implementation.
void OnUnmaskDialogClosed() override;
void OnUnmaskResponse(const base::string16& cvc,
const base::string16& exp_month,
const base::string16& exp_year,
bool should_store_pan) override;
void NewCardLinkClicked() override;
base::string16 GetWindowTitle() const override;
base::string16 GetInstructionsMessage() const override;
base::string16 GetOkButtonLabel() const override;
int GetCvcImageRid() const override;
bool ShouldRequestExpirationDate() const override;
bool CanStoreLocally() const override;
bool GetStoreLocallyStartState() const override;
bool InputCvcIsValid(const base::string16& input_text) const override;
bool InputExpirationIsValid(const base::string16& month,
const base::string16& year) const override;
base::TimeDelta GetSuccessMessageDuration() const override;
protected:
// Exposed for testing.
CardUnmaskPromptView* view() { return card_unmask_view_; }
private:
bool AllowsRetry(AutofillClient::PaymentsRpcResult result);
void LogOnCloseEvents();
AutofillMetrics::UnmaskPromptEvent GetCloseReasonEvent();
PrefService* pref_service_;
bool new_card_link_clicked_;
bool is_off_the_record_;
CreditCard card_;
AutofillClient::UnmaskCardReason reason_;
base::WeakPtr<CardUnmaskDelegate> delegate_;
CardUnmaskPromptView* card_unmask_view_;
AutofillClient::PaymentsRpcResult unmasking_result_;
bool unmasking_initial_should_store_pan_;
int unmasking_number_of_attempts_;
base::Time shown_timestamp_;
// Timestamp of the last time the user clicked the Verify button.
base::Time verify_timestamp_;
CardUnmaskDelegate::UnmaskResponse pending_response_;
base::WeakPtrFactory<CardUnmaskPromptControllerImpl> weak_pointer_factory_;
DISALLOW_COPY_AND_ASSIGN(CardUnmaskPromptControllerImpl);
};
} // namespace autofill
#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_UI_CARD_UNMASK_PROMPT_CONTROLLER_IMPL_H_