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

Side by Side Diff: chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc

Issue 1009953002: Integrate ManagePasswordsState into ManagePasswordsUIController. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix android 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/prefs/pref_service.h" 6 #include "base/prefs/pref_service.h"
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "base/time/time.h" 8 #include "base/time/time.h"
9 #include "chrome/browser/ui/passwords/manage_passwords_bubble.h" 9 #include "chrome/browser/ui/passwords/manage_passwords_bubble.h"
10 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" 10 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h"
11 #include "chrome/browser/ui/passwords/manage_passwords_icon.h" 11 #include "chrome/browser/ui/passwords/manage_passwords_icon.h"
12 #include "chrome/browser/ui/passwords/manage_passwords_icon_mock.h" 12 #include "chrome/browser/ui/passwords/manage_passwords_icon_mock.h"
13 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h" 13 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h"
14 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 14 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
15 #include "chrome/test/base/testing_profile.h" 15 #include "chrome/test/base/testing_profile.h"
16 #include "components/autofill/core/common/password_form.h" 16 #include "components/autofill/core/common/password_form.h"
17 #include "components/password_manager/content/common/credential_manager_types.h" 17 #include "components/password_manager/content/common/credential_manager_types.h"
18 #include "components/password_manager/core/browser/password_form_manager.h" 18 #include "components/password_manager/core/browser/password_form_manager.h"
19 #include "components/password_manager/core/browser/stub_password_manager_client. h" 19 #include "components/password_manager/core/browser/stub_password_manager_client. h"
20 #include "components/password_manager/core/browser/stub_password_manager_driver. h" 20 #include "components/password_manager/core/browser/stub_password_manager_driver. h"
21 #include "components/password_manager/core/common/password_manager_ui.h" 21 #include "components/password_manager/core/common/password_manager_ui.h"
22 #include "content/public/browser/navigation_details.h"
22 #include "content/public/test/test_browser_thread_bundle.h" 23 #include "content/public/test/test_browser_thread_bundle.h"
23 #include "content/public/test/web_contents_tester.h" 24 #include "content/public/test/web_contents_tester.h"
24 #include "testing/gmock/include/gmock/gmock.h" 25 #include "testing/gmock/include/gmock/gmock.h"
25 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
26 27
28 using ::testing::ElementsAre;
29 using ::testing::Pointee;
30
27 namespace { 31 namespace {
28 32
29 const int64 kSlowNavigationDelayInMS = 2000; 33 const int64 kSlowNavigationDelayInMS = 2000;
30 const int64 kQuickNavigationDelayInMS = 500; 34 const int64 kQuickNavigationDelayInMS = 500;
31 35
36 // This mock is used in tests to ensure that we're just testing the controller
vabr (Chromium) 2015/03/17 09:25:58 The comment speaks about a mock, but the class bel
vasilii 2015/03/17 10:49:49 Done.
37 // behavior, and not the behavior of the bits and pieces it relies upon (like
38 // FormManager).
39 class TestManagePasswordsUIController : public ManagePasswordsUIController {
40 public:
41 explicit TestManagePasswordsUIController(content::WebContents* contents);
42 ~TestManagePasswordsUIController() override;
43
44 base::TimeDelta Elapsed() const override;
45 void SetElapsed(base::TimeDelta elapsed) { elapsed_ = elapsed; }
46
47 using ManagePasswordsUIController::DidNavigateMainFrame;
48
49 private:
50 void UpdateBubbleAndIconVisibility() override;
51 void UpdateAndroidAccountChooserInfoBarVisibility() override;
52 void SavePasswordInternal() override {}
53 void NeverSavePasswordInternal() override {}
54
55 base::TimeDelta elapsed_;
56 };
57
58 TestManagePasswordsUIController::TestManagePasswordsUIController(
59 content::WebContents* contents)
60 : ManagePasswordsUIController(contents) {
61 // Do not silently replace an existing ManagePasswordsUIController because it
62 // unregisters itself in WebContentsDestroyed().
63 EXPECT_FALSE(contents->GetUserData(UserDataKey()));
64 contents->SetUserData(UserDataKey(), this);
65 }
66
67 TestManagePasswordsUIController::~TestManagePasswordsUIController() {
68 }
69
70 base::TimeDelta TestManagePasswordsUIController::Elapsed() const {
71 return elapsed_;
72 }
73
74 void TestManagePasswordsUIController::UpdateBubbleAndIconVisibility() {
75 ManagePasswordsUIController::UpdateBubbleAndIconVisibility();
76 OnBubbleShown();
77 }
78
79 void TestManagePasswordsUIController::
80 UpdateAndroidAccountChooserInfoBarVisibility() {
81 OnBubbleShown();
82 }
83
32 } // namespace 84 } // namespace
33 85
34 class ManagePasswordsUIControllerTest : public ChromeRenderViewHostTestHarness { 86 class ManagePasswordsUIControllerTest : public ChromeRenderViewHostTestHarness {
35 public: 87 public:
36 ManagePasswordsUIControllerTest() {} 88 ManagePasswordsUIControllerTest() {}
37 89
38 void SetUp() override { 90 void SetUp() override {
39 ChromeRenderViewHostTestHarness::SetUp(); 91 ChromeRenderViewHostTestHarness::SetUp();
40 92
41 // Create the test UIController here so that it's bound to 93 // Create the test UIController here so that it's bound to
42 // |test_web_contents_|, and will be retrieved correctly via 94 // |test_web_contents_|, and will be retrieved correctly via
43 // ManagePasswordsUIController::FromWebContents in |controller()|. 95 // ManagePasswordsUIController::FromWebContents in |controller()|.
44 new ManagePasswordsUIControllerMock(web_contents()); 96 new TestManagePasswordsUIController(web_contents());
45 97
46 test_local_form_.origin = GURL("http://example.com"); 98 test_local_form_.origin = GURL("http://example.com");
47 test_local_form_.username_value = base::ASCIIToUTF16("username"); 99 test_local_form_.username_value = base::ASCIIToUTF16("username");
48 test_local_form_.password_value = base::ASCIIToUTF16("12345"); 100 test_local_form_.password_value = base::ASCIIToUTF16("12345");
49 101
50 test_federated_form_.origin = GURL("http://example.com"); 102 test_federated_form_.origin = GURL("http://example.com");
51 test_federated_form_.username_value = base::ASCIIToUTF16("username"); 103 test_federated_form_.username_value = base::ASCIIToUTF16("username");
52 test_federated_form_.federation_url = GURL("https://federation.test/"); 104 test_federated_form_.federation_url = GURL("https://federation.test/");
53 105
54 // We need to be on a "webby" URL for most tests. 106 // We need to be on a "webby" URL for most tests.
55 content::WebContentsTester::For(web_contents()) 107 content::WebContentsTester::For(web_contents())
56 ->NavigateAndCommit(GURL("http://example.com")); 108 ->NavigateAndCommit(GURL("http://example.com"));
57 } 109 }
58 110
59 autofill::PasswordForm& test_local_form() { return test_local_form_; } 111 autofill::PasswordForm& test_local_form() { return test_local_form_; }
60 autofill::PasswordForm& test_federated_form() { return test_federated_form_; } 112 autofill::PasswordForm& test_federated_form() { return test_federated_form_; }
61 password_manager::CredentialInfo* credential_info() const { 113 password_manager::CredentialInfo* credential_info() const {
62 return credential_info_.get(); 114 return credential_info_.get();
63 } 115 }
64 116
65 ManagePasswordsUIControllerMock* controller() { 117 TestManagePasswordsUIController* controller() {
66 return static_cast<ManagePasswordsUIControllerMock*>( 118 return static_cast<TestManagePasswordsUIController*>(
67 ManagePasswordsUIController::FromWebContents(web_contents())); 119 ManagePasswordsUIController::FromWebContents(web_contents()));
68 } 120 }
69 121
70 void CredentialCallback(const password_manager::CredentialInfo& info) { 122 void CredentialCallback(const password_manager::CredentialInfo& info) {
71 credential_info_.reset(new password_manager::CredentialInfo(info)); 123 credential_info_.reset(new password_manager::CredentialInfo(info));
72 } 124 }
73 125
126 scoped_ptr<password_manager::PasswordFormManager> CreateFormManager();
127
74 private: 128 private:
129 password_manager::StubPasswordManagerClient client_;
130
75 autofill::PasswordForm test_local_form_; 131 autofill::PasswordForm test_local_form_;
76 autofill::PasswordForm test_federated_form_; 132 autofill::PasswordForm test_federated_form_;
77 scoped_ptr<password_manager::CredentialInfo> credential_info_; 133 scoped_ptr<password_manager::CredentialInfo> credential_info_;
78 }; 134 };
79 135
136 scoped_ptr<password_manager::PasswordFormManager>
137 ManagePasswordsUIControllerTest::CreateFormManager() {
138 ScopedVector<autofill::PasswordForm> stored_forms;
139 stored_forms.push_back(new autofill::PasswordForm(test_local_form()));
140 return ManagePasswordsUIControllerMock::CreateFormManager(
141 &client_, test_local_form(), stored_forms.Pass());
142 }
143
80 TEST_F(ManagePasswordsUIControllerTest, DefaultState) { 144 TEST_F(ManagePasswordsUIControllerTest, DefaultState) {
81 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); 145 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state());
82 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); 146 EXPECT_FALSE(controller()->PasswordPendingUserDecision());
83 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); 147 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin());
84 148
85 ManagePasswordsIconMock mock; 149 ManagePasswordsIconMock mock;
86 controller()->UpdateIconAndBubbleState(&mock); 150 controller()->UpdateIconAndBubbleState(&mock);
87 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); 151 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state());
88 } 152 }
89 153
90 TEST_F(ManagePasswordsUIControllerTest, PasswordAutofilled) { 154 TEST_F(ManagePasswordsUIControllerTest, PasswordAutofilled) {
91 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); 155 base::string16 kTestUsername = test_local_form().username_value;
92 autofill::PasswordFormMap map; 156 autofill::PasswordFormMap map;
93 map[kTestUsername] = &test_local_form(); 157 map[kTestUsername] = &test_local_form();
94 controller()->OnPasswordAutofilled(map); 158 controller()->OnPasswordAutofilled(map);
95 159
96 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); 160 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state());
97 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); 161 EXPECT_FALSE(controller()->PasswordPendingUserDecision());
98 EXPECT_EQ(test_local_form().origin, controller()->origin()); 162 EXPECT_EQ(test_local_form().origin, controller()->origin());
99 EXPECT_EQ(1u, controller()->best_matches().size()); 163 ASSERT_EQ(1u, controller()->GetCurrentForms().size());
100 ASSERT_EQ(1u, controller()->best_matches().count(kTestUsername)); 164 EXPECT_EQ(kTestUsername, controller()->GetCurrentForms()[0]->username_value);
101 165
102 // Controller should store a separate copy of the form as it doesn't own it. 166 // Controller should store a separate copy of the form as it doesn't own it.
103 EXPECT_NE(&test_local_form(), 167 EXPECT_NE(&test_local_form(), controller()->GetCurrentForms()[0]);
104 controller()->best_matches().find(kTestUsername)->second);
105 168
106 ManagePasswordsIconMock mock; 169 ManagePasswordsIconMock mock;
107 controller()->UpdateIconAndBubbleState(&mock); 170 controller()->UpdateIconAndBubbleState(&mock);
108 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); 171 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state());
109 } 172 }
110 173
111 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmitted) { 174 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmitted) {
112 password_manager::StubPasswordManagerClient client;
113 password_manager::StubPasswordManagerDriver driver;
114 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( 175 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
115 new password_manager::PasswordFormManager( 176 CreateFormManager());
116 NULL, &client, driver.AsWeakPtr(), test_local_form(), false));
117 controller()->OnPasswordSubmitted(test_form_manager.Pass()); 177 controller()->OnPasswordSubmitted(test_form_manager.Pass());
118 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, 178 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
119 controller()->state()); 179 controller()->state());
120 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); 180 EXPECT_TRUE(controller()->PasswordPendingUserDecision());
121 181
122 // TODO(mkwst): This should be the value of test_local_form().origin, but 182 // TODO(mkwst): This should be the value of test_local_form().origin, but
123 // it's being masked by the stub implementation of 183 // it's being masked by the stub implementation of
124 // ManagePasswordsUIControllerMock::PendingCredentials. 184 // ManagePasswordsUIControllerMock::PendingCredentials.
125 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); 185 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin());
126 186
127 ManagePasswordsIconMock mock; 187 ManagePasswordsIconMock mock;
128 controller()->UpdateIconAndBubbleState(&mock); 188 controller()->UpdateIconAndBubbleState(&mock);
129 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, 189 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
130 mock.state()); 190 mock.state());
131 } 191 }
132 192
133 TEST_F(ManagePasswordsUIControllerTest, PasswordSaved) { 193 TEST_F(ManagePasswordsUIControllerTest, PasswordSaved) {
134 password_manager::StubPasswordManagerClient client;
135 password_manager::StubPasswordManagerDriver driver;
136 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( 194 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
137 new password_manager::PasswordFormManager( 195 CreateFormManager());
138 NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); 196 test_form_manager->ProvisionallySave(
197 test_local_form(),
198 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
139 controller()->OnPasswordSubmitted(test_form_manager.Pass()); 199 controller()->OnPasswordSubmitted(test_form_manager.Pass());
140 200
141 ManagePasswordsIconMock mock; 201 ManagePasswordsIconMock mock;
142 controller()->UpdateIconAndBubbleState(&mock); 202 controller()->UpdateIconAndBubbleState(&mock);
143 controller()->SavePassword(); 203 controller()->SavePassword();
144 controller()->UpdateIconAndBubbleState(&mock); 204 controller()->UpdateIconAndBubbleState(&mock);
145 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); 205 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state());
146 } 206 }
147 207
148 TEST_F(ManagePasswordsUIControllerTest, PasswordBlacklisted) { 208 TEST_F(ManagePasswordsUIControllerTest, PasswordBlacklisted) {
149 password_manager::StubPasswordManagerClient client;
150 password_manager::StubPasswordManagerDriver driver;
151 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( 209 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
152 new password_manager::PasswordFormManager( 210 CreateFormManager());
153 NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); 211 test_form_manager->ProvisionallySave(
212 test_local_form(),
213 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
154 controller()->OnPasswordSubmitted(test_form_manager.Pass()); 214 controller()->OnPasswordSubmitted(test_form_manager.Pass());
155 215
156 ManagePasswordsIconMock mock; 216 ManagePasswordsIconMock mock;
157 controller()->UpdateIconAndBubbleState(&mock); 217 controller()->UpdateIconAndBubbleState(&mock);
158 controller()->NeverSavePassword(); 218 controller()->NeverSavePassword();
159 controller()->UpdateIconAndBubbleState(&mock); 219 controller()->UpdateIconAndBubbleState(&mock);
160 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); 220 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state());
161 } 221 }
162 222
163 TEST_F(ManagePasswordsUIControllerTest, QuickNavigations) { 223 TEST_F(ManagePasswordsUIControllerTest, QuickNavigations) {
164 password_manager::StubPasswordManagerClient client;
165 password_manager::StubPasswordManagerDriver driver;
166 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( 224 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
167 new password_manager::PasswordFormManager( 225 CreateFormManager());
168 NULL, &client, driver.AsWeakPtr(), test_local_form(), false));
169 controller()->OnPasswordSubmitted(test_form_manager.Pass()); 226 controller()->OnPasswordSubmitted(test_form_manager.Pass());
170 ManagePasswordsIconMock mock; 227 ManagePasswordsIconMock mock;
171 controller()->UpdateIconAndBubbleState(&mock); 228 controller()->UpdateIconAndBubbleState(&mock);
172 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, 229 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
173 mock.state()); 230 mock.state());
174 231
175 // Fake-navigate within a second. We expect the bubble's state to persist 232 // Fake-navigate within a second. We expect the bubble's state to persist
176 // if a navigation occurs too quickly for a user to reasonably have been 233 // if a navigation occurs too quickly for a user to reasonably have been
177 // able to interact with the bubble. This happens on `accounts.google.com`, 234 // able to interact with the bubble. This happens on `accounts.google.com`,
178 // for instance. 235 // for instance.
179 controller()->SetElapsed( 236 controller()->SetElapsed(
180 base::TimeDelta::FromMilliseconds(kQuickNavigationDelayInMS)); 237 base::TimeDelta::FromMilliseconds(kQuickNavigationDelayInMS));
181 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), 238 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(),
182 content::FrameNavigateParams()); 239 content::FrameNavigateParams());
183 controller()->UpdateIconAndBubbleState(&mock); 240 controller()->UpdateIconAndBubbleState(&mock);
184 241
185 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, 242 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
186 mock.state()); 243 mock.state());
187 } 244 }
188 245
189 TEST_F(ManagePasswordsUIControllerTest, SlowNavigations) { 246 TEST_F(ManagePasswordsUIControllerTest, SlowNavigations) {
190 password_manager::StubPasswordManagerClient client;
191 password_manager::StubPasswordManagerDriver driver;
192 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( 247 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
193 new password_manager::PasswordFormManager( 248 CreateFormManager());
194 NULL, &client, driver.AsWeakPtr(), test_local_form(), false));
195 controller()->OnPasswordSubmitted(test_form_manager.Pass()); 249 controller()->OnPasswordSubmitted(test_form_manager.Pass());
196 ManagePasswordsIconMock mock; 250 ManagePasswordsIconMock mock;
197 controller()->UpdateIconAndBubbleState(&mock); 251 controller()->UpdateIconAndBubbleState(&mock);
198 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, 252 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
199 mock.state()); 253 mock.state());
200 254
201 // Fake-navigate after a second. We expect the bubble's state to be reset 255 // Fake-navigate after a second. We expect the bubble's state to be reset
202 // if a navigation occurs after this limit. 256 // if a navigation occurs after this limit.
203 controller()->SetElapsed( 257 controller()->SetElapsed(
204 base::TimeDelta::FromMilliseconds(kSlowNavigationDelayInMS)); 258 base::TimeDelta::FromMilliseconds(kSlowNavigationDelayInMS));
205 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), 259 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(),
206 content::FrameNavigateParams()); 260 content::FrameNavigateParams());
207 controller()->UpdateIconAndBubbleState(&mock); 261 controller()->UpdateIconAndBubbleState(&mock);
208 262
209 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); 263 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state());
210 } 264 }
211 265
212 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedToNonWebbyURL) { 266 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedToNonWebbyURL) {
213 // Navigate to a non-webby URL, then see what happens! 267 // Navigate to a non-webby URL, then see what happens!
214 content::WebContentsTester::For(web_contents()) 268 content::WebContentsTester::For(web_contents())
215 ->NavigateAndCommit(GURL("chrome://sign-in")); 269 ->NavigateAndCommit(GURL("chrome://sign-in"));
216 270
217 password_manager::StubPasswordManagerClient client;
218 password_manager::StubPasswordManagerDriver driver;
219 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( 271 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
220 new password_manager::PasswordFormManager( 272 CreateFormManager());
221 NULL, &client, driver.AsWeakPtr(), test_local_form(), false));
222 controller()->OnPasswordSubmitted(test_form_manager.Pass()); 273 controller()->OnPasswordSubmitted(test_form_manager.Pass());
223 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); 274 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state());
224 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); 275 EXPECT_FALSE(controller()->PasswordPendingUserDecision());
225 276
226 // TODO(mkwst): This should be the value of test_local_form().origin, but 277 // TODO(mkwst): This should be the value of test_local_form().origin, but
227 // it's being masked by the stub implementation of 278 // it's being masked by the stub implementation of
228 // ManagePasswordsUIControllerMock::PendingCredentials. 279 // ManagePasswordsUIControllerMock::PendingCredentials.
229 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); 280 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin());
230 281
231 ManagePasswordsIconMock mock; 282 ManagePasswordsIconMock mock;
232 controller()->UpdateIconAndBubbleState(&mock); 283 controller()->UpdateIconAndBubbleState(&mock);
233 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); 284 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state());
234 } 285 }
235 286
236 TEST_F(ManagePasswordsUIControllerTest, BlacklistBlockedAutofill) { 287 TEST_F(ManagePasswordsUIControllerTest, BlacklistBlockedAutofill) {
237 test_local_form().blacklisted_by_user = true; 288 test_local_form().blacklisted_by_user = true;
238 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); 289 base::string16 kTestUsername = test_local_form().username_value;
239 autofill::PasswordFormMap map; 290 autofill::PasswordFormMap map;
240 map[kTestUsername] = &test_local_form(); 291 map[kTestUsername] = &test_local_form();
241 controller()->OnBlacklistBlockedAutofill(map); 292 controller()->OnBlacklistBlockedAutofill(map);
242 293
243 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state()); 294 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state());
244 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); 295 EXPECT_FALSE(controller()->PasswordPendingUserDecision());
245 EXPECT_EQ(test_local_form().origin, controller()->origin()); 296 EXPECT_EQ(test_local_form().origin, controller()->origin());
246 EXPECT_EQ(1u, controller()->best_matches().size()); 297 ASSERT_EQ(1u, controller()->GetCurrentForms().size());
247 ASSERT_EQ(1u, controller()->best_matches().count(kTestUsername)); 298 EXPECT_EQ(kTestUsername, controller()->GetCurrentForms()[0]->username_value);
248 299
249 // Controller should store a separate copy of the form as it doesn't own it. 300 // Controller should store a separate copy of the form as it doesn't own it.
250 EXPECT_NE(&test_local_form(), 301 EXPECT_NE(&test_local_form(), controller()->GetCurrentForms()[0]);
251 controller()->best_matches().find(kTestUsername)->second);
252 302
253 ManagePasswordsIconMock mock; 303 ManagePasswordsIconMock mock;
254 controller()->UpdateIconAndBubbleState(&mock); 304 controller()->UpdateIconAndBubbleState(&mock);
255 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); 305 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state());
256 } 306 }
257 307
258 TEST_F(ManagePasswordsUIControllerTest, ClickedUnblacklist) { 308 TEST_F(ManagePasswordsUIControllerTest, ClickedUnblacklist) {
259 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); 309 base::string16 kTestUsername = base::ASCIIToUTF16("test_username");
260 autofill::PasswordFormMap map; 310 autofill::PasswordFormMap map;
261 map[kTestUsername] = &test_local_form(); 311 map[kTestUsername] = &test_local_form();
312 test_local_form().blacklisted_by_user = true;
262 controller()->OnBlacklistBlockedAutofill(map); 313 controller()->OnBlacklistBlockedAutofill(map);
263 controller()->UnblacklistSite(); 314 controller()->UnblacklistSite();
264 315
265 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); 316 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state());
266 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); 317 EXPECT_FALSE(controller()->PasswordPendingUserDecision());
267 EXPECT_EQ(test_local_form().origin, controller()->origin()); 318 EXPECT_EQ(test_local_form().origin, controller()->origin());
268 319
269 ManagePasswordsIconMock mock; 320 ManagePasswordsIconMock mock;
270 controller()->UpdateIconAndBubbleState(&mock); 321 controller()->UpdateIconAndBubbleState(&mock);
271 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); 322 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state());
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state()); 358 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state());
308 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); 359 EXPECT_FALSE(controller()->PasswordPendingUserDecision());
309 EXPECT_EQ(test_local_form().origin, controller()->origin()); 360 EXPECT_EQ(test_local_form().origin, controller()->origin());
310 361
311 ManagePasswordsIconMock mock; 362 ManagePasswordsIconMock mock;
312 controller()->UpdateIconAndBubbleState(&mock); 363 controller()->UpdateIconAndBubbleState(&mock);
313 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); 364 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state());
314 } 365 }
315 366
316 TEST_F(ManagePasswordsUIControllerTest, AutomaticPasswordSave) { 367 TEST_F(ManagePasswordsUIControllerTest, AutomaticPasswordSave) {
317 password_manager::StubPasswordManagerClient client;
318 password_manager::StubPasswordManagerDriver driver;
319 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( 368 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
320 new password_manager::PasswordFormManager( 369 CreateFormManager());
321 NULL, &client, driver.AsWeakPtr(), test_local_form(), false));
322 370
323 controller()->OnAutomaticPasswordSave(test_form_manager.Pass()); 371 controller()->OnAutomaticPasswordSave(test_form_manager.Pass());
324 EXPECT_EQ(password_manager::ui::CONFIRMATION_STATE, controller()->state()); 372 EXPECT_EQ(password_manager::ui::CONFIRMATION_STATE, controller()->state());
325 373
326 controller()->OnBubbleHidden(); 374 controller()->OnBubbleHidden();
327 ManagePasswordsIconMock mock; 375 ManagePasswordsIconMock mock;
328 controller()->UpdateIconAndBubbleState(&mock); 376 controller()->UpdateIconAndBubbleState(&mock);
329 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); 377 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state());
330 } 378 }
331 379
332 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocal) { 380 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocal) {
333 ScopedVector<autofill::PasswordForm> local_credentials; 381 ScopedVector<autofill::PasswordForm> local_credentials;
334 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); 382 local_credentials.push_back(new autofill::PasswordForm(test_local_form()));
335 ScopedVector<autofill::PasswordForm> federated_credentials; 383 ScopedVector<autofill::PasswordForm> federated_credentials;
336 GURL origin("http://example.com"); 384 GURL origin("http://example.com");
337 EXPECT_TRUE(controller()->OnChooseCredentials( 385 EXPECT_TRUE(controller()->OnChooseCredentials(
338 local_credentials.Pass(), federated_credentials.Pass(), origin, 386 local_credentials.Pass(), federated_credentials.Pass(), origin,
339 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, 387 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback,
340 base::Unretained(this)))); 388 base::Unretained(this))));
341 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, 389 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE,
342 controller()->state()); 390 controller()->state());
343 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); 391 EXPECT_FALSE(controller()->PasswordPendingUserDecision());
344 EXPECT_EQ(origin, controller()->origin()); 392 EXPECT_EQ(origin, controller()->origin());
345 EXPECT_EQ(autofill::ConstPasswordFormMap(), controller()->best_matches()); 393 EXPECT_THAT(controller()->GetCurrentForms(),
394 ElementsAre(Pointee(test_local_form())));
346 395
347 ManagePasswordsIconMock mock; 396 ManagePasswordsIconMock mock;
348 controller()->UpdateIconAndBubbleState(&mock); 397 controller()->UpdateIconAndBubbleState(&mock);
349 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, mock.state()); 398 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, mock.state());
350 399
351 controller()->ManagePasswordsUIController::ChooseCredential( 400 controller()->ManagePasswordsUIController::ChooseCredential(
352 test_local_form(), 401 test_local_form(),
353 password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL); 402 password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL);
354 controller()->OnBubbleHidden(); 403 controller()->OnBubbleHidden();
355 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); 404 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state());
356 ASSERT_TRUE(credential_info()); 405 ASSERT_TRUE(credential_info());
357 EXPECT_EQ(test_local_form().username_value, credential_info()->id); 406 EXPECT_EQ(test_local_form().username_value, credential_info()->id);
358 EXPECT_EQ(test_local_form().password_value, credential_info()->password); 407 EXPECT_EQ(test_local_form().password_value, credential_info()->password);
359 EXPECT_TRUE(credential_info()->federation.is_empty()); 408 EXPECT_TRUE(credential_info()->federation.is_empty());
360 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL, 409 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL,
361 credential_info()->type); 410 credential_info()->type);
362 } 411 }
363 412
364 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocalButFederated) { 413 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocalButFederated) {
365 ScopedVector<autofill::PasswordForm> local_credentials; 414 ScopedVector<autofill::PasswordForm> local_credentials;
366 local_credentials.push_back( 415 local_credentials.push_back(
367 new autofill::PasswordForm(test_federated_form())); 416 new autofill::PasswordForm(test_federated_form()));
368 ScopedVector<autofill::PasswordForm> federated_credentials; 417 ScopedVector<autofill::PasswordForm> federated_credentials;
369 GURL origin("http://example.com"); 418 GURL origin("http://example.com");
370 EXPECT_TRUE(controller()->OnChooseCredentials( 419 EXPECT_TRUE(controller()->OnChooseCredentials(
371 local_credentials.Pass(), federated_credentials.Pass(), origin, 420 local_credentials.Pass(), federated_credentials.Pass(), origin,
372 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, 421 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback,
373 base::Unretained(this)))); 422 base::Unretained(this))));
374 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, 423 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE,
375 controller()->state()); 424 controller()->state());
376 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); 425 EXPECT_FALSE(controller()->PasswordPendingUserDecision());
377 EXPECT_EQ(origin, controller()->origin()); 426 EXPECT_EQ(origin, controller()->origin());
378 EXPECT_EQ(autofill::ConstPasswordFormMap(), controller()->best_matches()); 427 EXPECT_THAT(controller()->GetCurrentForms(),
428 ElementsAre(Pointee(test_federated_form())));
379 429
380 ManagePasswordsIconMock mock; 430 ManagePasswordsIconMock mock;
381 controller()->UpdateIconAndBubbleState(&mock); 431 controller()->UpdateIconAndBubbleState(&mock);
382 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, mock.state()); 432 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, mock.state());
383 433
384 controller()->ManagePasswordsUIController::ChooseCredential( 434 controller()->ManagePasswordsUIController::ChooseCredential(
385 test_federated_form(), 435 test_federated_form(),
386 password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL); 436 password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL);
387 controller()->OnBubbleHidden(); 437 controller()->OnBubbleHidden();
388 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); 438 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state());
389 ASSERT_TRUE(credential_info()); 439 ASSERT_TRUE(credential_info());
390 EXPECT_EQ(test_federated_form().username_value, credential_info()->id); 440 EXPECT_EQ(test_federated_form().username_value, credential_info()->id);
391 EXPECT_EQ(test_federated_form().federation_url, 441 EXPECT_EQ(test_federated_form().federation_url,
392 credential_info()->federation); 442 credential_info()->federation);
393 EXPECT_TRUE(credential_info()->password.empty()); 443 EXPECT_TRUE(credential_info()->password.empty());
394 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED, 444 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED,
395 credential_info()->type); 445 credential_info()->type);
396 } 446 }
397 447
398 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialFederated) { 448 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialFederated) {
399 ScopedVector<autofill::PasswordForm> local_credentials; 449 ScopedVector<autofill::PasswordForm> local_credentials;
400 ScopedVector<autofill::PasswordForm> federated_credentials; 450 ScopedVector<autofill::PasswordForm> federated_credentials;
401 federated_credentials.push_back( 451 federated_credentials.push_back(
402 new autofill::PasswordForm(test_local_form())); 452 new autofill::PasswordForm(test_local_form()));
403 GURL origin("http://example.com"); 453 GURL origin("http://example.com");
404 EXPECT_TRUE(controller()->OnChooseCredentials( 454 EXPECT_TRUE(controller()->OnChooseCredentials(
405 local_credentials.Pass(), federated_credentials.Pass(), origin, 455 local_credentials.Pass(), federated_credentials.Pass(), origin,
406 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, 456 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback,
407 base::Unretained(this)))); 457 base::Unretained(this))));
408 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, 458 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE,
409 controller()->state()); 459 controller()->state());
410 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); 460 EXPECT_FALSE(controller()->PasswordPendingUserDecision());
411 EXPECT_EQ(autofill::ConstPasswordFormMap(), controller()->best_matches()); 461 EXPECT_EQ(0u, controller()->GetCurrentForms().size());
412 EXPECT_EQ(origin, controller()->origin()); 462 EXPECT_EQ(origin, controller()->origin());
413 463
414 ManagePasswordsIconMock mock; 464 ManagePasswordsIconMock mock;
415 controller()->UpdateIconAndBubbleState(&mock); 465 controller()->UpdateIconAndBubbleState(&mock);
416 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, mock.state()); 466 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, mock.state());
417 467
418 controller()->ManagePasswordsUIController::ChooseCredential( 468 controller()->ManagePasswordsUIController::ChooseCredential(
419 test_local_form(), 469 test_local_form(),
420 password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED); 470 password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED);
421 controller()->OnBubbleHidden(); 471 controller()->OnBubbleHidden();
422 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); 472 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state());
423 ASSERT_TRUE(credential_info()); 473 ASSERT_TRUE(credential_info());
424 EXPECT_EQ(test_local_form().username_value, credential_info()->id); 474 EXPECT_EQ(test_local_form().username_value, credential_info()->id);
425 EXPECT_TRUE(credential_info()->password.empty()); 475 EXPECT_TRUE(credential_info()->password.empty());
426 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED, 476 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED,
427 credential_info()->type); 477 credential_info()->type);
428 } 478 }
429 479
430 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialCancel) { 480 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialCancel) {
431 ScopedVector<autofill::PasswordForm> local_credentials; 481 ScopedVector<autofill::PasswordForm> local_credentials;
432 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); 482 local_credentials.push_back(new autofill::PasswordForm(test_local_form()));
433 ScopedVector<autofill::PasswordForm> federated_credentials; 483 ScopedVector<autofill::PasswordForm> federated_credentials;
434 GURL origin("http://example.com"); 484 GURL origin("http://example.com");
435 EXPECT_TRUE(controller()->OnChooseCredentials( 485 EXPECT_TRUE(controller()->OnChooseCredentials(
436 local_credentials.Pass(), federated_credentials.Pass(), origin, 486 local_credentials.Pass(), federated_credentials.Pass(), origin,
437 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, 487 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback,
438 base::Unretained(this)))); 488 base::Unretained(this))));
439 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, 489 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE,
440 controller()->state()); 490 controller()->state());
441 EXPECT_EQ(origin, controller()->origin()); 491 EXPECT_EQ(origin, controller()->origin());
442 controller()->ManagePasswordsUIController::ChooseCredential( 492 controller()->ManagePasswordsUIController::ChooseCredential(
443 test_local_form(), 493 test_local_form(),
444 password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY); 494 password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY);
445 controller()->OnBubbleHidden(); 495 controller()->OnBubbleHidden();
446 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); 496 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state());
447 ASSERT_TRUE(credential_info()); 497 ASSERT_TRUE(credential_info());
448 EXPECT_TRUE(credential_info()->federation.is_empty()); 498 EXPECT_TRUE(credential_info()->federation.is_empty());
449 EXPECT_TRUE(credential_info()->password.empty()); 499 EXPECT_TRUE(credential_info()->password.empty());
450 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY, 500 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY,
451 credential_info()->type); 501 credential_info()->type);
452 } 502 }
453 503
454 TEST_F(ManagePasswordsUIControllerTest, AutoSignin) { 504 TEST_F(ManagePasswordsUIControllerTest, AutoSignin) {
455 ScopedVector<autofill::PasswordForm> local_credentials; 505 ScopedVector<autofill::PasswordForm> local_credentials;
456 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); 506 local_credentials.push_back(new autofill::PasswordForm(test_local_form()));
457 controller()->OnAutoSignin(local_credentials.Pass()); 507 controller()->OnAutoSignin(local_credentials.Pass());
458 EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, controller()->state()); 508 EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, controller()->state());
459 EXPECT_EQ(test_local_form().origin, controller()->origin()); 509 EXPECT_EQ(test_local_form().origin, controller()->origin());
460 ASSERT_FALSE(controller()->local_credentials_forms().empty()); 510 ASSERT_FALSE(controller()->GetCurrentForms().empty());
461 EXPECT_EQ(test_local_form(), *controller()->local_credentials_forms()[0]); 511 EXPECT_EQ(test_local_form(), *controller()->GetCurrentForms()[0]);
462 ManagePasswordsIconMock mock; 512 ManagePasswordsIconMock mock;
463 controller()->UpdateIconAndBubbleState(&mock); 513 controller()->UpdateIconAndBubbleState(&mock);
464 EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, mock.state()); 514 EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, mock.state());
465 515
466 controller()->OnBubbleHidden(); 516 controller()->OnBubbleHidden();
467 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); 517 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state());
468 controller()->UpdateIconAndBubbleState(&mock); 518 controller()->UpdateIconAndBubbleState(&mock);
469 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); 519 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state());
470 } 520 }
471 521
472 TEST_F(ManagePasswordsUIControllerTest, InactiveOnPSLMatched) { 522 TEST_F(ManagePasswordsUIControllerTest, InactiveOnPSLMatched) {
473 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); 523 base::string16 kTestUsername = base::ASCIIToUTF16("test_username");
474 autofill::PasswordFormMap map; 524 autofill::PasswordFormMap map;
475 autofill::PasswordForm psl_matched_test_form = test_local_form(); 525 autofill::PasswordForm psl_matched_test_form = test_local_form();
476 psl_matched_test_form.original_signon_realm = "http://pslmatched.example.com"; 526 psl_matched_test_form.original_signon_realm = "http://pslmatched.example.com";
477 map[kTestUsername] = &psl_matched_test_form; 527 map[kTestUsername] = &psl_matched_test_form;
478 controller()->OnPasswordAutofilled(map); 528 controller()->OnPasswordAutofilled(map);
479 529
480 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); 530 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state());
481 } 531 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698