Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(263)

Side by Side Diff: chrome/browser/ui/autofill/card_unmask_prompt_view_browsertest.cc

Issue 1020013003: Add a regression test for the CardUnmaskPrompt. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: git add Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/guid.h" 5 #include "base/guid.h"
6 #include "base/message_loop/message_loop.h" 6 #include "base/message_loop/message_loop.h"
7 #include "base/strings/utf_string_conversions.h"
7 #include "chrome/browser/ui/autofill/card_unmask_prompt_controller_impl.h" 8 #include "chrome/browser/ui/autofill/card_unmask_prompt_controller_impl.h"
9 #include "chrome/browser/ui/autofill/card_unmask_prompt_view_tester.h"
8 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/browser.h"
9 #include "chrome/browser/ui/tabs/tab_strip_model.h" 11 #include "chrome/browser/ui/tabs/tab_strip_model.h"
10 #include "chrome/test/base/in_process_browser_test.h" 12 #include "chrome/test/base/in_process_browser_test.h"
11 #include "components/autofill/core/browser/autofill_test_utils.h" 13 #include "components/autofill/core/browser/autofill_test_utils.h"
12 #include "components/autofill/core/browser/card_unmask_delegate.h" 14 #include "components/autofill/core/browser/card_unmask_delegate.h"
13 #include "content/public/browser/web_contents.h" 15 #include "content/public/browser/web_contents.h"
14 #include "content/public/test/test_utils.h" 16 #include "content/public/test/test_utils.h"
15 17
16 namespace autofill { 18 namespace autofill {
17 19
18 namespace { 20 namespace {
19 21
20 class TestCardUnmaskDelegate : public CardUnmaskDelegate { 22 class TestCardUnmaskDelegate : public CardUnmaskDelegate {
21 public: 23 public:
22 TestCardUnmaskDelegate() : weak_factory_(this) {} 24 TestCardUnmaskDelegate() : weak_factory_(this) {}
23 25
24 virtual ~TestCardUnmaskDelegate() {} 26 virtual ~TestCardUnmaskDelegate() {}
25 27
26 // CardUnmaskDelegate implementation. 28 // CardUnmaskDelegate implementation.
27 void OnUnmaskResponse(const UnmaskResponse& response) override {} 29 void OnUnmaskResponse(const UnmaskResponse& response) override {
30 response_ = response;
31 }
28 void OnUnmaskPromptClosed() override {} 32 void OnUnmaskPromptClosed() override {}
29 33
30 base::WeakPtr<TestCardUnmaskDelegate> GetWeakPtr() { 34 base::WeakPtr<TestCardUnmaskDelegate> GetWeakPtr() {
31 return weak_factory_.GetWeakPtr(); 35 return weak_factory_.GetWeakPtr();
32 } 36 }
33 37
38 UnmaskResponse response() { return response_; }
39
34 private: 40 private:
41 UnmaskResponse response_;
42
35 base::WeakPtrFactory<TestCardUnmaskDelegate> weak_factory_; 43 base::WeakPtrFactory<TestCardUnmaskDelegate> weak_factory_;
36 44
37 DISALLOW_COPY_AND_ASSIGN(TestCardUnmaskDelegate); 45 DISALLOW_COPY_AND_ASSIGN(TestCardUnmaskDelegate);
38 }; 46 };
39 47
40 class TestCardUnmaskPromptController : public CardUnmaskPromptControllerImpl { 48 class TestCardUnmaskPromptController : public CardUnmaskPromptControllerImpl {
41 public: 49 public:
42 TestCardUnmaskPromptController( 50 TestCardUnmaskPromptController(
43 content::WebContents* contents, 51 content::WebContents* contents,
44 scoped_refptr<content::MessageLoopRunner> runner) 52 scoped_refptr<content::MessageLoopRunner> runner)
45 : CardUnmaskPromptControllerImpl(contents), 53 : CardUnmaskPromptControllerImpl(contents),
46 runner_(runner), 54 runner_(runner),
47 weak_factory_(this) {} 55 weak_factory_(this) {}
48 56
49 // CardUnmaskPromptControllerImpl implementation. 57 // CardUnmaskPromptControllerImpl implementation.
50 void OnDidLoadRiskFingerprint(const std::string& risk_data) override { 58 base::TimeDelta GetSuccessMessageDuration() const override {
51 CardUnmaskPromptControllerImpl::OnDidLoadRiskFingerprint(risk_data); 59 return base::TimeDelta::FromMilliseconds(10);
52
53 // Call Quit() from here rather than from OnUnmaskDialogClosed().
54 // FingerprintDataLoader starts several async tasks that take a while to
55 // complete. If Quit() is called before FingerprintDataLoader is all done
56 // then LeakTracker will detect that some resources have not been freed
57 // and cause the browser test to fail. This is not a real leak though -
58 // normally the async tasks would complete and encounter weak callbacks.
59 runner_->Quit();
60 } 60 }
61 61
62 void RunMessageLoop() { runner_->Run(); } 62 void LoadRiskFingerprint() override {
63 OnDidLoadRiskFingerprint(std::string());
64 }
63 65
64 base::WeakPtr<TestCardUnmaskPromptController> GetWeakPtr() { 66 base::WeakPtr<TestCardUnmaskPromptController> GetWeakPtr() {
65 return weak_factory_.GetWeakPtr(); 67 return weak_factory_.GetWeakPtr();
66 } 68 }
67 69
70 using CardUnmaskPromptControllerImpl::view;
71
68 private: 72 private:
69 scoped_refptr<content::MessageLoopRunner> runner_; 73 scoped_refptr<content::MessageLoopRunner> runner_;
70 base::WeakPtrFactory<TestCardUnmaskPromptController> weak_factory_; 74 base::WeakPtrFactory<TestCardUnmaskPromptController> weak_factory_;
71 75
72 DISALLOW_COPY_AND_ASSIGN(TestCardUnmaskPromptController); 76 DISALLOW_COPY_AND_ASSIGN(TestCardUnmaskPromptController);
73 }; 77 };
74 78
75 class CardUnmaskPromptViewBrowserTest : public InProcessBrowserTest { 79 class CardUnmaskPromptViewBrowserTest : public InProcessBrowserTest {
76 public: 80 public:
77 CardUnmaskPromptViewBrowserTest() : InProcessBrowserTest() {} 81 CardUnmaskPromptViewBrowserTest() : InProcessBrowserTest() {}
78 82
79 ~CardUnmaskPromptViewBrowserTest() override {} 83 ~CardUnmaskPromptViewBrowserTest() override {}
80 84
81 void SetUpOnMainThread() override { 85 void SetUpOnMainThread() override {
82 runner_ = new content::MessageLoopRunner; 86 runner_ = new content::MessageLoopRunner;
83 controller_.reset(new TestCardUnmaskPromptController( 87 controller_.reset(new TestCardUnmaskPromptController(
84 browser()->tab_strip_model()->GetActiveWebContents(), runner_)); 88 browser()->tab_strip_model()->GetActiveWebContents(), runner_));
85 delegate_.reset(new TestCardUnmaskDelegate()); 89 delegate_.reset(new TestCardUnmaskDelegate());
86 } 90 }
87 91
88 TestCardUnmaskPromptController* controller() { return controller_.get(); } 92 TestCardUnmaskPromptController* controller() { return controller_.get(); }
89 TestCardUnmaskDelegate* delegate() { return delegate_.get(); } 93 TestCardUnmaskDelegate* delegate() { return delegate_.get(); }
90 94
91 private: 95 protected:
92 // This member must outlive the controller. 96 // This member must outlive the controller.
93 scoped_refptr<content::MessageLoopRunner> runner_; 97 scoped_refptr<content::MessageLoopRunner> runner_;
94 98
99 private:
95 scoped_ptr<TestCardUnmaskPromptController> controller_; 100 scoped_ptr<TestCardUnmaskPromptController> controller_;
96 scoped_ptr<TestCardUnmaskDelegate> delegate_; 101 scoped_ptr<TestCardUnmaskDelegate> delegate_;
97 102
98 DISALLOW_COPY_AND_ASSIGN(CardUnmaskPromptViewBrowserTest); 103 DISALLOW_COPY_AND_ASSIGN(CardUnmaskPromptViewBrowserTest);
99 }; 104 };
100 105
101 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest, DisplayUI) { 106 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest, DisplayUI) {
102 CreditCard credit_card(CreditCard::MASKED_SERVER_CARD, "a123"); 107 controller()->ShowPrompt(test::GetMaskedServerCard(),
103 test::SetCreditCardInfo(&credit_card, "Bonnie Parker", 108 delegate()->GetWeakPtr());
104 "2109" /* Mastercard */, "12", "2012"); 109 }
105 credit_card.SetTypeForMaskedCard(kMasterCard);
106 110
107 controller()->ShowPrompt(credit_card, delegate()->GetWeakPtr()); 111 // TODO(bondd): bring up on Mac.
108 controller()->RunMessageLoop(); 112 #if !defined(OS_MACOSX)
113 // Makes sure the user can close the dialog while the verification success
114 // message is showing.
115 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest,
116 EarlyCloseAfterSuccess) {
117 controller()->ShowPrompt(test::GetMaskedServerCard(),
118 delegate()->GetWeakPtr());
119 controller()->OnUnmaskResponse(base::ASCIIToUTF16("123"),
120 base::ASCIIToUTF16("10"),
121 base::ASCIIToUTF16("19"), false);
122 DCHECK_EQ(delegate()->response().cvc, base::ASCIIToUTF16("123"));
123 controller()->OnVerificationResult(AutofillClient::SUCCESS);
124
125 // Simulate the user clicking [x] before the "Success!" message disappears.
126 CardUnmaskPromptViewTester::For(controller()->view())->Close();
127 // Wait a little while; there should be no crash.
groby-ooo-7-16 2015/03/19 23:47:56 I suppose there's no way we can do without a fuzzy
Evan Stade 2015/03/20 00:22:42 The nature of the crash was that a stale closure w
128 base::MessageLoop::current()->PostDelayedTask(
129 FROM_HERE, base::Bind(&content::MessageLoopRunner::Quit,
130 base::Unretained(runner_.get())),
131 2 * controller()->GetSuccessMessageDuration());
132 runner_->Run();
109 } 133 }
134 #endif
110 135
111 } // namespace 136 } // namespace
112 137
113 } // namespace autofill 138 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698