Index: chrome/browser/ui/autofill/card_unmask_prompt_controller_impl.cc |
diff --git a/chrome/browser/ui/autofill/card_unmask_prompt_controller_impl.cc b/chrome/browser/ui/autofill/card_unmask_prompt_controller_impl.cc |
deleted file mode 100644 |
index 6de0858e51ef017a91863ef93755ac4386242f6b..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/autofill/card_unmask_prompt_controller_impl.cc |
+++ /dev/null |
@@ -1,329 +0,0 @@ |
-// 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. |
- |
-#include "chrome/browser/ui/autofill/card_unmask_prompt_controller_impl.h" |
- |
-#include "base/bind.h" |
-#include "base/prefs/pref_service.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/strings/string_util.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/ui/autofill/card_unmask_prompt_view.h" |
-#include "chrome/grit/generated_resources.h" |
-#include "components/autofill/core/browser/autofill_experiments.h" |
-#include "components/autofill/core/browser/autofill_metrics.h" |
-#include "components/autofill/core/common/autofill_pref_names.h" |
-#include "grit/theme_resources.h" |
-#include "ui/base/l10n/l10n_util.h" |
- |
-namespace autofill { |
- |
-CardUnmaskPromptControllerImpl::CardUnmaskPromptControllerImpl( |
- content::WebContents* web_contents, |
- const RiskDataCallback& risk_data_callback, |
- PrefService* pref_service, |
- bool is_off_the_record) |
- : web_contents_(web_contents), |
- risk_data_callback_(risk_data_callback), |
- pref_service_(pref_service), |
- new_card_link_clicked_(false), |
- is_off_the_record_(is_off_the_record), |
- card_unmask_view_(nullptr), |
- unmasking_result_(AutofillClient::NONE), |
- unmasking_initial_should_store_pan_(false), |
- unmasking_number_of_attempts_(0), |
- weak_pointer_factory_(this) { |
-} |
- |
-CardUnmaskPromptControllerImpl::~CardUnmaskPromptControllerImpl() { |
- if (card_unmask_view_) |
- card_unmask_view_->ControllerGone(); |
-} |
- |
-void CardUnmaskPromptControllerImpl::ShowPrompt( |
- const CreditCard& card, |
- base::WeakPtr<CardUnmaskDelegate> delegate) { |
- if (card_unmask_view_) |
- card_unmask_view_->ControllerGone(); |
- |
- shown_timestamp_ = base::Time::Now(); |
- pending_response_ = CardUnmaskDelegate::UnmaskResponse(); |
- LoadRiskFingerprint(); |
- card_ = card; |
- delegate_ = delegate; |
- card_unmask_view_ = CreateAndShowView(); |
- unmasking_result_ = AutofillClient::NONE; |
- unmasking_number_of_attempts_ = 0; |
- unmasking_initial_should_store_pan_ = GetStoreLocallyStartState(); |
- AutofillMetrics::LogUnmaskPromptEvent(AutofillMetrics::UNMASK_PROMPT_SHOWN); |
-} |
- |
-bool CardUnmaskPromptControllerImpl::AllowsRetry( |
- AutofillClient::GetRealPanResult result) { |
- if (result == AutofillClient::NETWORK_ERROR || |
- result == AutofillClient::PERMANENT_FAILURE) { |
- return false; |
- } |
- return true; |
-} |
- |
-void CardUnmaskPromptControllerImpl::OnVerificationResult( |
- AutofillClient::GetRealPanResult result) { |
- if (!card_unmask_view_) |
- return; |
- |
- base::string16 error_message; |
- switch (result) { |
- case AutofillClient::SUCCESS: |
- break; |
- |
- case AutofillClient::TRY_AGAIN_FAILURE: { |
- error_message = l10n_util::GetStringUTF16( |
- IDS_AUTOFILL_CARD_UNMASK_PROMPT_ERROR_TRY_AGAIN); |
- break; |
- } |
- |
- case AutofillClient::PERMANENT_FAILURE: { |
- error_message = l10n_util::GetStringUTF16( |
- IDS_AUTOFILL_CARD_UNMASK_PROMPT_ERROR_PERMANENT); |
- break; |
- } |
- |
- case AutofillClient::NETWORK_ERROR: { |
- error_message = l10n_util::GetStringUTF16( |
- IDS_AUTOFILL_CARD_UNMASK_PROMPT_ERROR_NETWORK); |
- break; |
- } |
- |
- case AutofillClient::NONE: |
- NOTREACHED(); |
- return; |
- } |
- |
- unmasking_result_ = result; |
- AutofillMetrics::LogRealPanResult(result); |
- AutofillMetrics::LogUnmaskingDuration(base::Time::Now() - verify_timestamp_, |
- result); |
- card_unmask_view_->GotVerificationResult(error_message, |
- AllowsRetry(result)); |
-} |
- |
-void CardUnmaskPromptControllerImpl::OnUnmaskDialogClosed() { |
- card_unmask_view_ = nullptr; |
- LogOnCloseEvents(); |
- if (delegate_.get()) |
- delegate_->OnUnmaskPromptClosed(); |
-} |
- |
-void CardUnmaskPromptControllerImpl::LogOnCloseEvents() { |
- AutofillMetrics::UnmaskPromptEvent close_reason_event = GetCloseReasonEvent(); |
- AutofillMetrics::LogUnmaskPromptEvent(close_reason_event); |
- AutofillMetrics::LogUnmaskPromptEventDuration( |
- base::Time::Now() - shown_timestamp_, close_reason_event); |
- |
- if (close_reason_event == AutofillMetrics::UNMASK_PROMPT_CLOSED_NO_ATTEMPTS) |
- return; |
- |
- if (close_reason_event == |
- AutofillMetrics::UNMASK_PROMPT_CLOSED_ABANDON_UNMASKING) { |
- AutofillMetrics::LogTimeBeforeAbandonUnmasking(base::Time::Now() - |
- verify_timestamp_); |
- } |
- |
- bool final_should_store_pan = pending_response_.should_store_pan; |
- if (unmasking_result_ == AutofillClient::SUCCESS && final_should_store_pan) { |
- AutofillMetrics::LogUnmaskPromptEvent( |
- AutofillMetrics::UNMASK_PROMPT_SAVED_CARD_LOCALLY); |
- } |
- |
- if (CanStoreLocally()) { |
- // Tracking changes in local save preference. |
- AutofillMetrics::UnmaskPromptEvent event; |
- if (unmasking_initial_should_store_pan_ && final_should_store_pan) { |
- event = AutofillMetrics::UNMASK_PROMPT_LOCAL_SAVE_DID_NOT_OPT_OUT; |
- } else if (!unmasking_initial_should_store_pan_ && |
- !final_should_store_pan) { |
- event = AutofillMetrics::UNMASK_PROMPT_LOCAL_SAVE_DID_NOT_OPT_IN; |
- } else if (unmasking_initial_should_store_pan_ && !final_should_store_pan) { |
- event = AutofillMetrics::UNMASK_PROMPT_LOCAL_SAVE_DID_OPT_OUT; |
- } else { |
- event = AutofillMetrics::UNMASK_PROMPT_LOCAL_SAVE_DID_OPT_IN; |
- } |
- AutofillMetrics::LogUnmaskPromptEvent(event); |
- } |
-} |
- |
-AutofillMetrics::UnmaskPromptEvent |
-CardUnmaskPromptControllerImpl::GetCloseReasonEvent() { |
- if (unmasking_number_of_attempts_ == 0) |
- return AutofillMetrics::UNMASK_PROMPT_CLOSED_NO_ATTEMPTS; |
- |
- // If NONE and we have a pending request, we have a pending GetRealPan |
- // request. |
- if (unmasking_result_ == AutofillClient::NONE) |
- return AutofillMetrics::UNMASK_PROMPT_CLOSED_ABANDON_UNMASKING; |
- |
- if (unmasking_result_ == AutofillClient::SUCCESS) { |
- return unmasking_number_of_attempts_ == 1 |
- ? AutofillMetrics::UNMASK_PROMPT_UNMASKED_CARD_FIRST_ATTEMPT |
- : AutofillMetrics:: |
- UNMASK_PROMPT_UNMASKED_CARD_AFTER_FAILED_ATTEMPTS; |
- } else { |
- return AllowsRetry(unmasking_result_) |
- ? AutofillMetrics:: |
- UNMASK_PROMPT_CLOSED_FAILED_TO_UNMASK_RETRIABLE_FAILURE |
- : AutofillMetrics:: |
- UNMASK_PROMPT_CLOSED_FAILED_TO_UNMASK_NON_RETRIABLE_FAILURE; |
- } |
-} |
- |
-void CardUnmaskPromptControllerImpl::OnUnmaskResponse( |
- const base::string16& cvc, |
- const base::string16& exp_month, |
- const base::string16& exp_year, |
- bool should_store_pan) { |
- verify_timestamp_ = base::Time::Now(); |
- unmasking_number_of_attempts_++; |
- unmasking_result_ = AutofillClient::NONE; |
- card_unmask_view_->DisableAndWaitForVerification(); |
- |
- DCHECK(InputCvcIsValid(cvc)); |
- base::TrimWhitespace(cvc, base::TRIM_ALL, &pending_response_.cvc); |
- if (ShouldRequestExpirationDate()) { |
- DCHECK(InputExpirationIsValid(exp_month, exp_year)); |
- pending_response_.exp_month = exp_month; |
- pending_response_.exp_year = exp_year; |
- } |
- if (CanStoreLocally()) { |
- pending_response_.should_store_pan = should_store_pan; |
- // Remember the last choice the user made (on this device). |
- pref_service_->SetBoolean( |
- prefs::kAutofillWalletImportStorageCheckboxState, should_store_pan); |
- } else { |
- DCHECK(!should_store_pan); |
- pending_response_.should_store_pan = false; |
- } |
- |
- if (!pending_response_.risk_data.empty()) |
- delegate_->OnUnmaskResponse(pending_response_); |
-} |
- |
-void CardUnmaskPromptControllerImpl::NewCardLinkClicked() { |
- new_card_link_clicked_ = true; |
-} |
- |
-content::WebContents* CardUnmaskPromptControllerImpl::GetWebContents() { |
- return web_contents_; |
-} |
- |
-base::string16 CardUnmaskPromptControllerImpl::GetWindowTitle() const { |
- int ids = ShouldRequestExpirationDate() |
- ? IDS_AUTOFILL_CARD_UNMASK_PROMPT_UPDATE_TITLE |
- : IDS_AUTOFILL_CARD_UNMASK_PROMPT_TITLE; |
- return l10n_util::GetStringFUTF16(ids, card_.TypeAndLastFourDigits()); |
-} |
- |
-base::string16 CardUnmaskPromptControllerImpl::GetInstructionsMessage() const { |
- if (ShouldRequestExpirationDate()) { |
- return l10n_util::GetStringUTF16( |
- card_.type() == kAmericanExpressCard |
- ? IDS_AUTOFILL_CARD_UNMASK_PROMPT_INSTRUCTIONS_EXPIRED_AMEX |
- : IDS_AUTOFILL_CARD_UNMASK_PROMPT_INSTRUCTIONS_EXPIRED); |
- } |
- |
- return l10n_util::GetStringUTF16( |
- card_.type() == kAmericanExpressCard |
- ? IDS_AUTOFILL_CARD_UNMASK_PROMPT_INSTRUCTIONS_AMEX |
- : IDS_AUTOFILL_CARD_UNMASK_PROMPT_INSTRUCTIONS); |
-} |
- |
-int CardUnmaskPromptControllerImpl::GetCvcImageRid() const { |
- return card_.type() == kAmericanExpressCard ? IDR_CREDIT_CARD_CVC_HINT_AMEX |
- : IDR_CREDIT_CARD_CVC_HINT; |
-} |
- |
-bool CardUnmaskPromptControllerImpl::ShouldRequestExpirationDate() const { |
- return card_.GetServerStatus() == CreditCard::EXPIRED || |
- new_card_link_clicked_; |
-} |
- |
-bool CardUnmaskPromptControllerImpl::CanStoreLocally() const { |
- // Never offer to save for incognito. |
- if (is_off_the_record_) |
- return false; |
- return autofill::OfferStoreUnmaskedCards(); |
-} |
- |
-bool CardUnmaskPromptControllerImpl::GetStoreLocallyStartState() const { |
- return pref_service_->GetBoolean( |
- prefs::kAutofillWalletImportStorageCheckboxState); |
-} |
- |
-bool CardUnmaskPromptControllerImpl::InputCvcIsValid( |
- const base::string16& input_text) const { |
- base::string16 trimmed_text; |
- base::TrimWhitespace(input_text, base::TRIM_ALL, &trimmed_text); |
- size_t input_size = card_.type() == kAmericanExpressCard ? 4 : 3; |
- return trimmed_text.size() == input_size && |
- base::ContainsOnlyChars(trimmed_text, |
- base::ASCIIToUTF16("0123456789")); |
-} |
- |
-bool CardUnmaskPromptControllerImpl::InputExpirationIsValid( |
- const base::string16& month, |
- const base::string16& year) const { |
- if ((month.size() != 2U && month.size() != 1U) || |
- (year.size() != 4U && year.size() != 2U)) { |
- return false; |
- } |
- |
- int month_value = 0, year_value = 0; |
- if (!base::StringToInt(month, &month_value) || |
- !base::StringToInt(year, &year_value)) { |
- return false; |
- } |
- |
- if (month_value < 1 || month_value > 12) |
- return false; |
- |
- base::Time::Exploded now; |
- base::Time::Now().LocalExplode(&now); |
- |
- // Convert 2 digit year to 4 digit year. |
- if (year_value < 100) |
- year_value += (now.year / 100) * 100; |
- |
- if (year_value < now.year) |
- return false; |
- |
- if (year_value > now.year) |
- return true; |
- |
- return month_value >= now.month; |
-} |
- |
-base::TimeDelta CardUnmaskPromptControllerImpl::GetSuccessMessageDuration() |
- const { |
- return base::TimeDelta::FromMilliseconds(500); |
-} |
- |
-CardUnmaskPromptView* CardUnmaskPromptControllerImpl::CreateAndShowView() { |
- return CardUnmaskPromptView::CreateAndShow(this); |
-} |
- |
-void CardUnmaskPromptControllerImpl::LoadRiskFingerprint() { |
- risk_data_callback_.Run( |
- base::Bind(&CardUnmaskPromptControllerImpl::OnDidLoadRiskFingerprint, |
- weak_pointer_factory_.GetWeakPtr())); |
-} |
- |
-void CardUnmaskPromptControllerImpl::OnDidLoadRiskFingerprint( |
- const std::string& risk_data) { |
- pending_response_.risk_data = risk_data; |
- if (!pending_response_.cvc.empty()) |
- delegate_->OnUnmaskResponse(pending_response_); |
-} |
- |
-} // namespace autofill |