| OLD | NEW |
| 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/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/guid.h" | 6 #include "base/guid.h" |
| 7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "chrome/browser/autofill/risk_util.h" | 9 #include "chrome/browser/autofill/risk_util.h" |
| 10 #include "chrome/browser/ui/autofill/card_unmask_prompt_controller_impl.h" | |
| 11 #include "chrome/browser/ui/autofill/card_unmask_prompt_view_tester.h" | 10 #include "chrome/browser/ui/autofill/card_unmask_prompt_view_tester.h" |
| 11 #include "chrome/browser/ui/autofill/create_card_unmask_prompt_view.h" |
| 12 #include "chrome/browser/ui/browser.h" | 12 #include "chrome/browser/ui/browser.h" |
| 13 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 13 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 14 #include "chrome/test/base/in_process_browser_test.h" | 14 #include "chrome/test/base/in_process_browser_test.h" |
| 15 #include "components/autofill/core/browser/autofill_test_utils.h" | 15 #include "components/autofill/core/browser/autofill_test_utils.h" |
| 16 #include "components/autofill/core/browser/card_unmask_delegate.h" | 16 #include "components/autofill/core/browser/card_unmask_delegate.h" |
| 17 #include "components/autofill/core/browser/ui/card_unmask_prompt_controller_impl
.h" |
| 17 #include "components/user_prefs/user_prefs.h" | 18 #include "components/user_prefs/user_prefs.h" |
| 18 #include "content/public/browser/web_contents.h" | 19 #include "content/public/browser/web_contents.h" |
| 19 #include "content/public/test/test_utils.h" | 20 #include "content/public/test/test_utils.h" |
| 20 | 21 |
| 21 namespace autofill { | 22 namespace autofill { |
| 22 | 23 |
| 23 namespace { | 24 namespace { |
| 24 | 25 |
| 25 class TestCardUnmaskDelegate : public CardUnmaskDelegate { | 26 class TestCardUnmaskDelegate : public CardUnmaskDelegate { |
| 26 public: | 27 public: |
| (...skipping 19 matching lines...) Expand all Loading... |
| 46 base::WeakPtrFactory<TestCardUnmaskDelegate> weak_factory_; | 47 base::WeakPtrFactory<TestCardUnmaskDelegate> weak_factory_; |
| 47 | 48 |
| 48 DISALLOW_COPY_AND_ASSIGN(TestCardUnmaskDelegate); | 49 DISALLOW_COPY_AND_ASSIGN(TestCardUnmaskDelegate); |
| 49 }; | 50 }; |
| 50 | 51 |
| 51 class TestCardUnmaskPromptController : public CardUnmaskPromptControllerImpl { | 52 class TestCardUnmaskPromptController : public CardUnmaskPromptControllerImpl { |
| 52 public: | 53 public: |
| 53 TestCardUnmaskPromptController( | 54 TestCardUnmaskPromptController( |
| 54 content::WebContents* contents, | 55 content::WebContents* contents, |
| 55 scoped_refptr<content::MessageLoopRunner> runner) | 56 scoped_refptr<content::MessageLoopRunner> runner) |
| 56 : CardUnmaskPromptControllerImpl(contents, | 57 : CardUnmaskPromptControllerImpl(base::Bind(&LoadRiskData, 0, contents), |
| 57 base::Bind(&LoadRiskData, 0, contents), | |
| 58 user_prefs::UserPrefs::Get(contents->GetBrowserContext()), false), | 58 user_prefs::UserPrefs::Get(contents->GetBrowserContext()), false), |
| 59 runner_(runner), | 59 runner_(runner), |
| 60 weak_factory_(this) {} | 60 weak_factory_(this) {} |
| 61 | 61 |
| 62 // CardUnmaskPromptControllerImpl implementation. | 62 // CardUnmaskPromptControllerImpl implementation. |
| 63 base::TimeDelta GetSuccessMessageDuration() const override { | 63 base::TimeDelta GetSuccessMessageDuration() const override { |
| 64 return base::TimeDelta::FromMilliseconds(10); | 64 return base::TimeDelta::FromMilliseconds(10); |
| 65 } | 65 } |
| 66 | 66 |
| 67 void LoadRiskFingerprint() override { | 67 void LoadRiskFingerprint() override { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 82 }; | 82 }; |
| 83 | 83 |
| 84 class CardUnmaskPromptViewBrowserTest : public InProcessBrowserTest { | 84 class CardUnmaskPromptViewBrowserTest : public InProcessBrowserTest { |
| 85 public: | 85 public: |
| 86 CardUnmaskPromptViewBrowserTest() : InProcessBrowserTest() {} | 86 CardUnmaskPromptViewBrowserTest() : InProcessBrowserTest() {} |
| 87 | 87 |
| 88 ~CardUnmaskPromptViewBrowserTest() override {} | 88 ~CardUnmaskPromptViewBrowserTest() override {} |
| 89 | 89 |
| 90 void SetUpOnMainThread() override { | 90 void SetUpOnMainThread() override { |
| 91 runner_ = new content::MessageLoopRunner; | 91 runner_ = new content::MessageLoopRunner; |
| 92 controller_.reset(new TestCardUnmaskPromptController( | 92 contents_ = browser()->tab_strip_model()->GetActiveWebContents(); |
| 93 browser()->tab_strip_model()->GetActiveWebContents(), runner_)); | 93 controller_.reset(new TestCardUnmaskPromptController(contents_, runner_)); |
| 94 delegate_.reset(new TestCardUnmaskDelegate()); | 94 delegate_.reset(new TestCardUnmaskDelegate()); |
| 95 } | 95 } |
| 96 | 96 |
| 97 void FreeDelegate() { delegate_.reset(); } | 97 void FreeDelegate() { delegate_.reset(); } |
| 98 | 98 |
| 99 content::WebContents* contents() { return contents_; } |
| 99 TestCardUnmaskPromptController* controller() { return controller_.get(); } | 100 TestCardUnmaskPromptController* controller() { return controller_.get(); } |
| 100 TestCardUnmaskDelegate* delegate() { return delegate_.get(); } | 101 TestCardUnmaskDelegate* delegate() { return delegate_.get(); } |
| 101 | 102 |
| 102 protected: | 103 protected: |
| 103 // This member must outlive the controller. | 104 // This member must outlive the controller. |
| 104 scoped_refptr<content::MessageLoopRunner> runner_; | 105 scoped_refptr<content::MessageLoopRunner> runner_; |
| 105 | 106 |
| 106 private: | 107 private: |
| 108 content::WebContents* contents_; |
| 107 scoped_ptr<TestCardUnmaskPromptController> controller_; | 109 scoped_ptr<TestCardUnmaskPromptController> controller_; |
| 108 scoped_ptr<TestCardUnmaskDelegate> delegate_; | 110 scoped_ptr<TestCardUnmaskDelegate> delegate_; |
| 109 | 111 |
| 110 DISALLOW_COPY_AND_ASSIGN(CardUnmaskPromptViewBrowserTest); | 112 DISALLOW_COPY_AND_ASSIGN(CardUnmaskPromptViewBrowserTest); |
| 111 }; | 113 }; |
| 112 | 114 |
| 113 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest, DisplayUI) { | 115 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest, DisplayUI) { |
| 114 controller()->ShowPrompt(test::GetMaskedServerCard(), | 116 controller()->ShowPrompt(CreateCardUnmaskPromptView(controller(), contents()), |
| 117 test::GetMaskedServerCard(), |
| 115 delegate()->GetWeakPtr()); | 118 delegate()->GetWeakPtr()); |
| 116 } | 119 } |
| 117 | 120 |
| 118 // TODO(bondd): bring up on Mac. | 121 // TODO(bondd): bring up on Mac. |
| 119 #if !defined(OS_MACOSX) | 122 #if !defined(OS_MACOSX) |
| 120 // Makes sure the user can close the dialog while the verification success | 123 // Makes sure the user can close the dialog while the verification success |
| 121 // message is showing. | 124 // message is showing. |
| 122 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest, | 125 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest, |
| 123 EarlyCloseAfterSuccess) { | 126 EarlyCloseAfterSuccess) { |
| 124 controller()->ShowPrompt(test::GetMaskedServerCard(), | 127 controller()->ShowPrompt(CreateCardUnmaskPromptView(controller(), contents()), |
| 128 test::GetMaskedServerCard(), |
| 125 delegate()->GetWeakPtr()); | 129 delegate()->GetWeakPtr()); |
| 126 controller()->OnUnmaskResponse(base::ASCIIToUTF16("123"), | 130 controller()->OnUnmaskResponse(base::ASCIIToUTF16("123"), |
| 127 base::ASCIIToUTF16("10"), | 131 base::ASCIIToUTF16("10"), |
| 128 base::ASCIIToUTF16("19"), false); | 132 base::ASCIIToUTF16("19"), false); |
| 129 EXPECT_EQ(base::ASCIIToUTF16("123"), delegate()->response().cvc); | 133 EXPECT_EQ(base::ASCIIToUTF16("123"), delegate()->response().cvc); |
| 130 controller()->OnVerificationResult(AutofillClient::SUCCESS); | 134 controller()->OnVerificationResult(AutofillClient::SUCCESS); |
| 131 | 135 |
| 132 // Simulate the user clicking [x] before the "Success!" message disappears. | 136 // Simulate the user clicking [x] before the "Success!" message disappears. |
| 133 CardUnmaskPromptViewTester::For(controller()->view())->Close(); | 137 CardUnmaskPromptViewTester::For(controller()->view())->Close(); |
| 134 // Wait a little while; there should be no crash. | 138 // Wait a little while; there should be no crash. |
| 135 base::MessageLoop::current()->PostDelayedTask( | 139 base::MessageLoop::current()->PostDelayedTask( |
| 136 FROM_HERE, base::Bind(&content::MessageLoopRunner::Quit, | 140 FROM_HERE, base::Bind(&content::MessageLoopRunner::Quit, |
| 137 base::Unretained(runner_.get())), | 141 base::Unretained(runner_.get())), |
| 138 2 * controller()->GetSuccessMessageDuration()); | 142 2 * controller()->GetSuccessMessageDuration()); |
| 139 runner_->Run(); | 143 runner_->Run(); |
| 140 } | 144 } |
| 141 #endif | 145 #endif |
| 142 | 146 |
| 143 // Makes sure the tab can be closed while the dialog is showing. | 147 // Makes sure the tab can be closed while the dialog is showing. |
| 144 // https://crbug.com/484376 | 148 // https://crbug.com/484376 |
| 145 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest, | 149 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest, |
| 146 CloseTabWhileDialogShowing) { | 150 CloseTabWhileDialogShowing) { |
| 147 controller()->ShowPrompt(test::GetMaskedServerCard(), | 151 controller()->ShowPrompt(CreateCardUnmaskPromptView(controller(), contents()), |
| 152 test::GetMaskedServerCard(), |
| 148 delegate()->GetWeakPtr()); | 153 delegate()->GetWeakPtr()); |
| 149 // Simulate AutofillManager (the delegate in production code) being destroyed | 154 // Simulate AutofillManager (the delegate in production code) being destroyed |
| 150 // before CardUnmaskPromptViewBridge::OnConstrainedWindowClosed() is called. | 155 // before CardUnmaskPromptViewBridge::OnConstrainedWindowClosed() is called. |
| 151 FreeDelegate(); | 156 FreeDelegate(); |
| 152 browser()->tab_strip_model()->GetActiveWebContents()->Close(); | 157 browser()->tab_strip_model()->GetActiveWebContents()->Close(); |
| 153 | 158 |
| 154 content::RunAllPendingInMessageLoop(); | 159 content::RunAllPendingInMessageLoop(); |
| 155 } | 160 } |
| 156 | 161 |
| 157 } // namespace | 162 } // namespace |
| 158 | 163 |
| 159 } // namespace autofill | 164 } // namespace autofill |
| OLD | NEW |