Chromium Code Reviews| 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 | 
| index abd616f0cb3be6b12478acfb72beb9bfae2360c8..4918d90bcd5ed32241b65f0efbe235fd83f0e2ac 100644 | 
| --- a/chrome/browser/ui/autofill/card_unmask_prompt_controller_impl.cc | 
| +++ b/chrome/browser/ui/autofill/card_unmask_prompt_controller_impl.cc | 
| @@ -12,6 +12,7 @@ | 
| #include "chrome/browser/autofill/risk_util.h" | 
| #include "chrome/browser/ui/autofill/card_unmask_prompt_view.h" | 
| #include "chrome/grit/generated_resources.h" | 
| +#include "components/autofill/core/browser/autofill_metrics.h" | 
| #include "components/autofill/core/common/autofill_pref_names.h" | 
| #include "components/user_prefs/user_prefs.h" | 
| #include "content/public/browser/web_contents.h" | 
| @@ -24,6 +25,9 @@ CardUnmaskPromptControllerImpl::CardUnmaskPromptControllerImpl( | 
| content::WebContents* web_contents) | 
| : web_contents_(web_contents), | 
| card_unmask_view_(nullptr), | 
| + unmasking_success_(false), | 
| + unmasking_initial_should_store_pan_(false), | 
| + unmasking_number_of_attempts_(0), | 
| weak_pointer_factory_(this) { | 
| } | 
| @@ -32,6 +36,10 @@ CardUnmaskPromptControllerImpl::~CardUnmaskPromptControllerImpl() { | 
| card_unmask_view_->ControllerGone(); | 
| } | 
| +CardUnmaskPromptView* CardUnmaskPromptControllerImpl::CreateAndShowView() { | 
| + return CardUnmaskPromptView::CreateAndShow(this); | 
| +} | 
| + | 
| void CardUnmaskPromptControllerImpl::ShowPrompt( | 
| const CreditCard& card, | 
| base::WeakPtr<CardUnmaskDelegate> delegate) { | 
| @@ -42,7 +50,11 @@ void CardUnmaskPromptControllerImpl::ShowPrompt( | 
| LoadRiskFingerprint(); | 
| card_ = card; | 
| delegate_ = delegate; | 
| - card_unmask_view_ = CardUnmaskPromptView::CreateAndShow(this); | 
| + card_unmask_view_ = CreateAndShowView(); | 
| + unmasking_success_ = false; | 
| + unmasking_number_of_attempts_ = 0; | 
| + unmasking_initial_should_store_pan_ = GetStoreLocallyStartState(); | 
| + AutofillMetrics::LogUnmaskPromptEvent(AutofillMetrics::UNMASK_PROMPT_SHOWN); | 
| } | 
| void CardUnmaskPromptControllerImpl::OnVerificationResult( | 
| @@ -53,8 +65,19 @@ void CardUnmaskPromptControllerImpl::OnVerificationResult( | 
| base::string16 error_message; | 
| bool allow_retry = true; | 
| switch (result) { | 
| - case AutofillClient::SUCCESS: | 
| + case AutofillClient::SUCCESS: { | 
| + unmasking_success_ = true; | 
| + AutofillMetrics::LogUnmaskPromptEvent( | 
| 
 
Evan Stade
2015/03/18 21:29:07
you can move this logging down to OnUnmaskDialogCl
 
Walter Cacau
2015/03/18 23:50:05
Done.
Also extracted that code to a method to mak
 
 | 
| + AutofillMetrics::UNMASK_PROMPT_UNMASKED_CARD); | 
| + bool final_should_store_pan = | 
| + user_prefs::UserPrefs::Get(web_contents_->GetBrowserContext()) | 
| + ->GetBoolean(prefs::kAutofillWalletImportStorageCheckboxState); | 
| + if (final_should_store_pan) { | 
| + AutofillMetrics::LogUnmaskPromptEvent( | 
| + AutofillMetrics::UNMASK_PROMPT_SAVED_CARD_LOCALLY); | 
| + } | 
| break; | 
| + } | 
| case AutofillClient::TRY_AGAIN_FAILURE: { | 
| error_message = l10n_util::GetStringUTF16( | 
| @@ -82,6 +105,34 @@ void CardUnmaskPromptControllerImpl::OnVerificationResult( | 
| void CardUnmaskPromptControllerImpl::OnUnmaskDialogClosed() { | 
| card_unmask_view_ = nullptr; | 
| + if (!unmasking_success_) { | 
| + if (unmasking_number_of_attempts_ > 0) { | 
| 
 
Evan Stade
2015/03/18 01:47:59
nit: use ternary operator
 
Walter Cacau
2015/03/18 17:04:54
Done.
 
 | 
| + AutofillMetrics::LogUnmaskPromptEvent( | 
| + AutofillMetrics::UNMASK_PROMPT_CLOSED_FAILED_TO_UNMASK); | 
| + } else { | 
| + AutofillMetrics::LogUnmaskPromptEvent( | 
| + AutofillMetrics::UNMASK_PROMPT_CLOSED_NO_ATTEMPTS); | 
| + } | 
| + } | 
| + if (unmasking_number_of_attempts_ > 0) { | 
| + bool final_should_store_pan = | 
| + user_prefs::UserPrefs::Get(web_contents_->GetBrowserContext()) | 
| + ->GetBoolean(prefs::kAutofillWalletImportStorageCheckboxState); | 
| 
 
Evan Stade
2015/03/18 01:47:59
final_should_store_pan needs to come from the para
 
Walter Cacau
2015/03/18 17:04:54
Shouldn't we care? IMHO, it is changing chrome sta
 
Evan Stade
2015/03/18 21:29:07
ok
 
 | 
| + if (unmasking_initial_should_store_pan_ && final_should_store_pan) { | 
| + AutofillMetrics::LogUnmaskPromptEvent( | 
| 
 
Evan Stade
2015/03/18 01:47:59
nit: pull out LogUnmaskPromptEvent so it looks lik
 
Walter Cacau
2015/03/18 17:04:54
Done.
 
 | 
| + AutofillMetrics::UNMASK_PROMPT_LOCAL_SAVE_DID_NOT_OPT_OUT); | 
| + } else if (!unmasking_initial_should_store_pan_ | 
| + && !final_should_store_pan) { | 
| + AutofillMetrics::LogUnmaskPromptEvent( | 
| + AutofillMetrics::UNMASK_PROMPT_LOCAL_SAVE_DID_NOT_OPT_IN); | 
| + } else if (unmasking_initial_should_store_pan_ && !final_should_store_pan) { | 
| + AutofillMetrics::LogUnmaskPromptEvent( | 
| + AutofillMetrics::UNMASK_PROMPT_LOCAL_SAVE_DID_OPT_OUT); | 
| + } else { | 
| + AutofillMetrics::LogUnmaskPromptEvent( | 
| + AutofillMetrics::UNMASK_PROMPT_LOCAL_SAVE_DID_OPT_IN); | 
| + } | 
| + } | 
| delegate_->OnUnmaskPromptClosed(); | 
| } | 
| @@ -90,6 +141,7 @@ void CardUnmaskPromptControllerImpl::OnUnmaskResponse( | 
| const base::string16& exp_month, | 
| const base::string16& exp_year, | 
| bool should_store_pan) { | 
| + unmasking_number_of_attempts_++; | 
| card_unmask_view_->DisableAndWaitForVerification(); | 
| DCHECK(!cvc.empty()); |