Chromium Code Reviews| Index: chrome/browser/ui/autofill/card_unmask_prompt_controller_impl_unittest.cc |
| diff --git a/chrome/browser/ui/autofill/card_unmask_prompt_controller_impl_unittest.cc b/chrome/browser/ui/autofill/card_unmask_prompt_controller_impl_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5d2cc4793f2d9561c24f2a863ba99c40c1025f84 |
| --- /dev/null |
| +++ b/chrome/browser/ui/autofill/card_unmask_prompt_controller_impl_unittest.cc |
| @@ -0,0 +1,256 @@ |
| +// Copyright (c) 2015 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/message_loop/message_loop.h" |
| +#include "base/prefs/pref_service.h" |
| +#include "base/strings/utf_string_conversions.cc" |
| +#include "base/test/histogram_tester.h" |
| +#include "chrome/browser/ui/autofill/card_unmask_prompt_view.h" |
| +#include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| +#include "components/autofill/core/browser/autofill_client.h" |
| +#include "components/autofill/core/browser/autofill_metrics.h" |
| +#include "components/autofill/core/browser/autofill_test_utils.h" |
| +#include "components/autofill/core/common/autofill_pref_names.h" |
| +#include "components/user_prefs/user_prefs.h" |
| +#include "content/public/browser/web_contents.h" |
| +#include "content/public/test/test_utils.h" |
| + |
| +namespace autofill { |
| + |
| +CreditCard CreateCard() { |
| + CreditCard credit_card(CreditCard::MASKED_SERVER_CARD, "a123"); |
| + test::SetCreditCardInfo(&credit_card, "Bonnie Parker", |
| + "2109" /* Mastercard */, "12", "2012"); |
| + credit_card.SetTypeForMaskedCard(kMasterCard); |
| + return credit_card; |
| +} |
| + |
| +class TestCardUnmaskDelegate : public CardUnmaskDelegate { |
| + public: |
| + TestCardUnmaskDelegate() : weak_factory_(this) {} |
| + |
| + virtual ~TestCardUnmaskDelegate() {} |
| + |
| + // CardUnmaskDelegate implementation. |
| + void OnUnmaskResponse(const UnmaskResponse& response) override {} |
| + void OnUnmaskPromptClosed() override {} |
| + |
| + base::WeakPtr<TestCardUnmaskDelegate> GetWeakPtr() { |
| + return weak_factory_.GetWeakPtr(); |
| + } |
| + |
| + private: |
| + base::WeakPtrFactory<TestCardUnmaskDelegate> weak_factory_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(TestCardUnmaskDelegate); |
| +}; |
| + |
| +class TestCardUnmaskPromptView : public CardUnmaskPromptView { |
| + public: |
| + void ControllerGone() override {} |
| + void DisableAndWaitForVerification() override {} |
| + void GotVerificationResult(const base::string16& error_message, |
| + bool allow_retry) override {} |
| +}; |
| + |
| +class TestCardUnmaskPromptController : public CardUnmaskPromptControllerImpl { |
| + public: |
| + TestCardUnmaskPromptController( |
| + content::WebContents* contents, |
| + TestCardUnmaskPromptView* test_unmask_prompt_view, |
| + scoped_refptr<content::MessageLoopRunner> runner) |
| + : CardUnmaskPromptControllerImpl(contents), |
| + test_unmask_prompt_view_(test_unmask_prompt_view), |
| + runner_(runner), |
| + weak_factory_(this) {} |
| + |
| + CardUnmaskPromptView* CreateAndShowView() override { |
| + return test_unmask_prompt_view_; |
| + } |
| + void LoadRiskFingerprint() override {} |
| + |
| + base::WeakPtr<TestCardUnmaskPromptController> GetWeakPtr() { |
| + return weak_factory_.GetWeakPtr(); |
| + } |
| + |
| + private: |
| + TestCardUnmaskPromptView* test_unmask_prompt_view_; |
| + scoped_refptr<content::MessageLoopRunner> runner_; |
| + base::WeakPtrFactory<TestCardUnmaskPromptController> weak_factory_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(TestCardUnmaskPromptController); |
| +}; |
| + |
| +class CardUnmaskPromptControllerImplTest |
| + : public ChromeRenderViewHostTestHarness { |
| + public: |
| + CardUnmaskPromptControllerImplTest() {} |
| + ~CardUnmaskPromptControllerImplTest() override {} |
| + |
| + void SetUp() override { |
| + ChromeRenderViewHostTestHarness::SetUp(); |
| + test_unmask_prompt_view_.reset(new TestCardUnmaskPromptView()); |
| + controller_.reset(new TestCardUnmaskPromptController( |
| + web_contents(), test_unmask_prompt_view_.get(), runner_)); |
| + delegate_.reset(new TestCardUnmaskDelegate()); |
| + SetImportCheckboxState(false); |
| + } |
| + |
| + void TearDown() override { |
| + ChromeRenderViewHostTestHarness::TearDown(); |
| + } |
| + |
| + TestCardUnmaskPromptController* controller() { return controller_.get(); } |
| + TestCardUnmaskDelegate* delegate() { return delegate_.get(); } |
| + |
| + protected: |
| + void SetImportCheckboxState(bool value) { |
| + user_prefs::UserPrefs::Get(web_contents()->GetBrowserContext()) |
| + ->SetBoolean(prefs::kAutofillWalletImportStorageCheckboxState, value); |
| + } |
| + |
| + private: |
| + // This member must outlive the controller. |
| + scoped_refptr<content::MessageLoopRunner> runner_; |
| + |
| + scoped_ptr<TestCardUnmaskPromptView> test_unmask_prompt_view_; |
| + scoped_ptr<TestCardUnmaskPromptController> controller_; |
| + scoped_ptr<TestCardUnmaskDelegate> delegate_; |
| +}; |
| + |
| +TEST_F(CardUnmaskPromptControllerImplTest, LogShown) { |
| + base::HistogramTester histogram_tester; |
| + |
| + controller()->ShowPrompt(CreateCard(), delegate()->GetWeakPtr()); |
| + |
| + histogram_tester.ExpectUniqueSample( |
| + "Autofill.UnmaskPrompt.Events", |
| + AutofillMetrics::UNMASK_PROMPT_SHOWN, 1); |
| +} |
| + |
| +TEST_F(CardUnmaskPromptControllerImplTest, LogClosedNoAttempts) { |
| + controller()->ShowPrompt(CreateCard(), delegate()->GetWeakPtr()); |
| + base::HistogramTester histogram_tester; |
| + |
| + controller()->OnUnmaskDialogClosed(); |
| + |
| + histogram_tester.ExpectBucketCount( |
| + "Autofill.UnmaskPrompt.Events", |
| + AutofillMetrics::UNMASK_PROMPT_CLOSED_NO_ATTEMPTS, 1); |
| +} |
| + |
| +TEST_F(CardUnmaskPromptControllerImplTest, LogClosedFailedToUnmask) { |
| + controller()->ShowPrompt(CreateCard(), delegate()->GetWeakPtr()); |
| + controller()->OnUnmaskResponse(base::UTF8ToUTF16("123"), |
|
Evan Stade
2015/03/18 01:47:59
nit: ASCIIToUTF16
Walter Cacau
2015/03/18 17:04:54
Done.
|
| + base::UTF8ToUTF16("01"), |
| + base::UTF8ToUTF16("2015"), |
| + false /* should_store_pan */); |
| + base::HistogramTester histogram_tester; |
| + |
| + controller()->OnUnmaskDialogClosed(); |
| + |
| + histogram_tester.ExpectBucketCount( |
| + "Autofill.UnmaskPrompt.Events", |
| + AutofillMetrics::UNMASK_PROMPT_CLOSED_FAILED_TO_UNMASK, 1); |
| +} |
| + |
| +TEST_F(CardUnmaskPromptControllerImplTest, LogUnmaskedCard) { |
| + controller()->ShowPrompt(CreateCard(), delegate()->GetWeakPtr()); |
| + controller()->OnUnmaskResponse(base::UTF8ToUTF16("123"), |
| + base::UTF8ToUTF16("01"), |
| + base::UTF8ToUTF16("2015"), |
| + false /* should_store_pan */); |
| + base::HistogramTester histogram_tester; |
| + |
| + controller()->OnVerificationResult(AutofillClient::SUCCESS); |
| + controller()->OnUnmaskDialogClosed(); |
| + |
| + histogram_tester.ExpectBucketCount( |
| + "Autofill.UnmaskPrompt.Events", |
| + AutofillMetrics::UNMASK_PROMPT_UNMASKED_CARD, 1); |
| +} |
| + |
| +TEST_F(CardUnmaskPromptControllerImplTest, LogSavedCardLocally) { |
| + controller()->ShowPrompt(CreateCard(), delegate()->GetWeakPtr()); |
| + controller()->OnUnmaskResponse(base::UTF8ToUTF16("123"), |
| + base::UTF8ToUTF16("01"), |
| + base::UTF8ToUTF16("2015"), |
| + true /* should_store_pan */); |
| + base::HistogramTester histogram_tester; |
| + |
| + controller()->OnVerificationResult(AutofillClient::SUCCESS); |
| + controller()->OnUnmaskDialogClosed(); |
| + |
| + histogram_tester.ExpectBucketCount( |
| + "Autofill.UnmaskPrompt.Events", |
| + AutofillMetrics::UNMASK_PROMPT_SAVED_CARD_LOCALLY, 1); |
| +} |
| + |
| +TEST_F(CardUnmaskPromptControllerImplTest, LogDidOptIn) { |
| + SetImportCheckboxState(false); |
| + controller()->ShowPrompt(CreateCard(), delegate()->GetWeakPtr()); |
| + base::HistogramTester histogram_tester; |
| + |
| + controller()->OnUnmaskResponse(base::UTF8ToUTF16("123"), |
| + base::UTF8ToUTF16("01"), |
| + base::UTF8ToUTF16("2015"), |
| + true /* should_store_pan */); |
| + controller()->OnUnmaskDialogClosed(); |
| + |
| + histogram_tester.ExpectBucketCount( |
| + "Autofill.UnmaskPrompt.Events", |
| + AutofillMetrics::UNMASK_PROMPT_LOCAL_SAVE_DID_OPT_IN, 1); |
| +} |
| + |
| +TEST_F(CardUnmaskPromptControllerImplTest, LogDidNotOptIn) { |
| + SetImportCheckboxState(false); |
| + controller()->ShowPrompt(CreateCard(), delegate()->GetWeakPtr()); |
| + base::HistogramTester histogram_tester; |
| + |
| + controller()->OnUnmaskResponse(base::UTF8ToUTF16("123"), |
| + base::UTF8ToUTF16("01"), |
| + base::UTF8ToUTF16("2015"), |
| + false /* should_store_pan */); |
| + controller()->OnUnmaskDialogClosed(); |
| + |
| + histogram_tester.ExpectBucketCount( |
| + "Autofill.UnmaskPrompt.Events", |
| + AutofillMetrics::UNMASK_PROMPT_LOCAL_SAVE_DID_NOT_OPT_IN, 1); |
| +} |
| + |
| +TEST_F(CardUnmaskPromptControllerImplTest, LogDidOptOut) { |
| + SetImportCheckboxState(true); |
| + controller()->ShowPrompt(CreateCard(), delegate()->GetWeakPtr()); |
| + base::HistogramTester histogram_tester; |
| + |
| + controller()->OnUnmaskResponse(base::UTF8ToUTF16("123"), |
| + base::UTF8ToUTF16("01"), |
| + base::UTF8ToUTF16("2015"), |
| + false /* should_store_pan */); |
| + controller()->OnUnmaskDialogClosed(); |
| + |
| + histogram_tester.ExpectBucketCount( |
| + "Autofill.UnmaskPrompt.Events", |
| + AutofillMetrics::UNMASK_PROMPT_LOCAL_SAVE_DID_OPT_OUT, 1); |
| +} |
| + |
| +TEST_F(CardUnmaskPromptControllerImplTest, LogDidNotOptOut) { |
| + SetImportCheckboxState(true); |
| + controller()->ShowPrompt(CreateCard(), delegate()->GetWeakPtr()); |
| + base::HistogramTester histogram_tester; |
| + |
| + controller()->OnUnmaskResponse(base::UTF8ToUTF16("123"), |
| + base::UTF8ToUTF16("01"), |
| + base::UTF8ToUTF16("2015"), |
| + true /* should_store_pan */); |
| + controller()->OnUnmaskDialogClosed(); |
| + |
| + histogram_tester.ExpectBucketCount( |
| + "Autofill.UnmaskPrompt.Events", |
| + AutofillMetrics::UNMASK_PROMPT_LOCAL_SAVE_DID_NOT_OPT_OUT, 1); |
| +} |
| + |
| +} // namespace autofill |