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

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

Powered by Google App Engine
This is Rietveld 408576698