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

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

Issue 399573002: [Password Generation] Trigger confirmation bubble when a password is saved (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Win Again Created 6 years, 5 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 | Annotate | Revision Log
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/metrics/histogram_samples.h" 5 #include "base/metrics/histogram_samples.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/test/statistics_delta_reader.h" 8 #include "base/test/statistics_delta_reader.h"
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "chrome/browser/ui/passwords/manage_passwords_bubble.h" 10 #include "chrome/browser/ui/passwords/manage_passwords_bubble.h"
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 EXPECT_EQ(test_form().origin, controller()->origin()); 95 EXPECT_EQ(test_form().origin, controller()->origin());
96 96
97 ManagePasswordsIconMock mock; 97 ManagePasswordsIconMock mock;
98 controller()->UpdateIconAndBubbleState(&mock); 98 controller()->UpdateIconAndBubbleState(&mock);
99 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); 99 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state());
100 } 100 }
101 101
102 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmitted) { 102 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmitted) {
103 password_manager::StubPasswordManagerClient client; 103 password_manager::StubPasswordManagerClient client;
104 password_manager::StubPasswordManagerDriver driver; 104 password_manager::StubPasswordManagerDriver driver;
105 password_manager::PasswordFormManager* test_form_manager = 105 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
106 new password_manager::PasswordFormManager( 106 new password_manager::PasswordFormManager(
107 NULL, &client, &driver, test_form(), false); 107 NULL, &client, &driver, test_form(), false));
108 controller()->OnPasswordSubmitted(test_form_manager); 108 controller()->OnPasswordSubmitted(test_form_manager.Pass());
109 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE, 109 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE,
110 controller()->state()); 110 controller()->state());
111 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); 111 EXPECT_TRUE(controller()->PasswordPendingUserDecision());
112 112
113 // TODO(mkwst): This should be the value of test_form().origin, but 113 // TODO(mkwst): This should be the value of test_form().origin, but
114 // it's being masked by the stub implementation of 114 // it's being masked by the stub implementation of
115 // ManagePasswordsUIControllerMock::PendingCredentials. 115 // ManagePasswordsUIControllerMock::PendingCredentials.
116 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); 116 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin());
117 117
118 ManagePasswordsIconMock mock; 118 ManagePasswordsIconMock mock;
119 controller()->UpdateIconAndBubbleState(&mock); 119 controller()->UpdateIconAndBubbleState(&mock);
120 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, mock.state()); 120 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
121 mock.state());
121 } 122 }
122 123
123 TEST_F(ManagePasswordsUIControllerTest, PasswordSaved) { 124 TEST_F(ManagePasswordsUIControllerTest, PasswordSaved) {
124 password_manager::StubPasswordManagerClient client; 125 password_manager::StubPasswordManagerClient client;
125 password_manager::StubPasswordManagerDriver driver; 126 password_manager::StubPasswordManagerDriver driver;
126 password_manager::PasswordFormManager* test_form_manager = 127 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
127 new password_manager::PasswordFormManager( 128 new password_manager::PasswordFormManager(
128 NULL, &client, &driver, test_form(), false); 129 NULL, &client, &driver, test_form(), false));
129 controller()->OnPasswordSubmitted(test_form_manager); 130 controller()->OnPasswordSubmitted(test_form_manager.Pass());
130 131
131 ManagePasswordsIconMock mock; 132 ManagePasswordsIconMock mock;
132 controller()->UpdateIconAndBubbleState(&mock); 133 controller()->UpdateIconAndBubbleState(&mock);
133 controller()->SavePassword(); 134 controller()->SavePassword();
134 controller()->UpdateIconAndBubbleState(&mock); 135 controller()->UpdateIconAndBubbleState(&mock);
135 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); 136 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state());
136 } 137 }
137 138
138 TEST_F(ManagePasswordsUIControllerTest, PasswordBlacklisted) { 139 TEST_F(ManagePasswordsUIControllerTest, PasswordBlacklisted) {
139 password_manager::StubPasswordManagerClient client; 140 password_manager::StubPasswordManagerClient client;
140 password_manager::StubPasswordManagerDriver driver; 141 password_manager::StubPasswordManagerDriver driver;
141 password_manager::PasswordFormManager* test_form_manager = 142 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
142 new password_manager::PasswordFormManager( 143 new password_manager::PasswordFormManager(
143 NULL, &client, &driver, test_form(), false); 144 NULL, &client, &driver, test_form(), false));
144 controller()->OnPasswordSubmitted(test_form_manager); 145 controller()->OnPasswordSubmitted(test_form_manager.Pass());
145 146
146 ManagePasswordsIconMock mock; 147 ManagePasswordsIconMock mock;
147 controller()->UpdateIconAndBubbleState(&mock); 148 controller()->UpdateIconAndBubbleState(&mock);
148 controller()->NeverSavePassword(); 149 controller()->NeverSavePassword();
149 controller()->UpdateIconAndBubbleState(&mock); 150 controller()->UpdateIconAndBubbleState(&mock);
150 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); 151 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state());
151 } 152 }
152 153
153 TEST_F(ManagePasswordsUIControllerTest, QuickNavigations) { 154 TEST_F(ManagePasswordsUIControllerTest, QuickNavigations) {
154 password_manager::StubPasswordManagerClient client; 155 password_manager::StubPasswordManagerClient client;
155 password_manager::StubPasswordManagerDriver driver; 156 password_manager::StubPasswordManagerDriver driver;
156 password_manager::PasswordFormManager* test_form_manager = 157 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
157 new password_manager::PasswordFormManager( 158 new password_manager::PasswordFormManager(
158 NULL, &client, &driver, test_form(), false); 159 NULL, &client, &driver, test_form(), false));
159 controller()->OnPasswordSubmitted(test_form_manager); 160 controller()->OnPasswordSubmitted(test_form_manager.Pass());
160 ManagePasswordsIconMock mock; 161 ManagePasswordsIconMock mock;
161 controller()->UpdateIconAndBubbleState(&mock); 162 controller()->UpdateIconAndBubbleState(&mock);
162 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, mock.state()); 163 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
164 mock.state());
163 165
164 // Fake-navigate within a second. We expect the bubble's state to persist 166 // Fake-navigate within a second. We expect the bubble's state to persist
165 // if a navigation occurs too quickly for a user to reasonably have been 167 // if a navigation occurs too quickly for a user to reasonably have been
166 // able to interact with the bubble. This happens on `accounts.google.com`, 168 // able to interact with the bubble. This happens on `accounts.google.com`,
167 // for instance. 169 // for instance.
168 scoped_ptr<MockElapsedTimer> timer(new MockElapsedTimer()); 170 scoped_ptr<MockElapsedTimer> timer(new MockElapsedTimer());
169 timer->Advance(kQuickNavigationDelayInMS); 171 timer->Advance(kQuickNavigationDelayInMS);
170 controller()->SetTimer(timer.release()); 172 controller()->SetTimer(timer.release());
171 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), 173 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(),
172 content::FrameNavigateParams()); 174 content::FrameNavigateParams());
173 controller()->UpdateIconAndBubbleState(&mock); 175 controller()->UpdateIconAndBubbleState(&mock);
174 176
175 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, mock.state()); 177 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
178 mock.state());
176 } 179 }
177 180
178 TEST_F(ManagePasswordsUIControllerTest, SlowNavigations) { 181 TEST_F(ManagePasswordsUIControllerTest, SlowNavigations) {
179 password_manager::StubPasswordManagerClient client; 182 password_manager::StubPasswordManagerClient client;
180 password_manager::StubPasswordManagerDriver driver; 183 password_manager::StubPasswordManagerDriver driver;
181 password_manager::PasswordFormManager* test_form_manager = 184 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
182 new password_manager::PasswordFormManager( 185 new password_manager::PasswordFormManager(
183 NULL, &client, &driver, test_form(), false); 186 NULL, &client, &driver, test_form(), false));
184 controller()->OnPasswordSubmitted(test_form_manager); 187 controller()->OnPasswordSubmitted(test_form_manager.Pass());
185 ManagePasswordsIconMock mock; 188 ManagePasswordsIconMock mock;
186 controller()->UpdateIconAndBubbleState(&mock); 189 controller()->UpdateIconAndBubbleState(&mock);
187 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, mock.state()); 190 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
191 mock.state());
188 192
189 // Fake-navigate after a second. We expect the bubble's state to be reset 193 // Fake-navigate after a second. We expect the bubble's state to be reset
190 // if a navigation occurs after this limit. 194 // if a navigation occurs after this limit.
191 scoped_ptr<MockElapsedTimer> timer(new MockElapsedTimer()); 195 scoped_ptr<MockElapsedTimer> timer(new MockElapsedTimer());
192 timer->Advance(kSlowNavigationDelayInMS); 196 timer->Advance(kSlowNavigationDelayInMS);
193 controller()->SetTimer(timer.release()); 197 controller()->SetTimer(timer.release());
194 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), 198 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(),
195 content::FrameNavigateParams()); 199 content::FrameNavigateParams());
196 controller()->UpdateIconAndBubbleState(&mock); 200 controller()->UpdateIconAndBubbleState(&mock);
197 201
198 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); 202 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state());
199 } 203 }
200 204
201 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedToNonWebbyURL) { 205 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedToNonWebbyURL) {
202 // Navigate to a non-webby URL, then see what happens! 206 // Navigate to a non-webby URL, then see what happens!
203 content::WebContentsTester::For(web_contents()) 207 content::WebContentsTester::For(web_contents())
204 ->NavigateAndCommit(GURL("chrome://sign-in")); 208 ->NavigateAndCommit(GURL("chrome://sign-in"));
205 209
206 password_manager::StubPasswordManagerClient client; 210 password_manager::StubPasswordManagerClient client;
207 password_manager::StubPasswordManagerDriver driver; 211 password_manager::StubPasswordManagerDriver driver;
208 password_manager::PasswordFormManager* test_form_manager = 212 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
209 new password_manager::PasswordFormManager( 213 new password_manager::PasswordFormManager(
210 NULL, &client, &driver, test_form(), false); 214 NULL, &client, &driver, test_form(), false));
211 controller()->OnPasswordSubmitted(test_form_manager); 215 controller()->OnPasswordSubmitted(test_form_manager.Pass());
212 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); 216 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state());
213 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); 217 EXPECT_FALSE(controller()->PasswordPendingUserDecision());
214 218
215 // TODO(mkwst): This should be the value of test_form().origin, but 219 // TODO(mkwst): This should be the value of test_form().origin, but
216 // it's being masked by the stub implementation of 220 // it's being masked by the stub implementation of
217 // ManagePasswordsUIControllerMock::PendingCredentials. 221 // ManagePasswordsUIControllerMock::PendingCredentials.
218 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); 222 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin());
219 223
220 ManagePasswordsIconMock mock; 224 ManagePasswordsIconMock mock;
221 controller()->UpdateIconAndBubbleState(&mock); 225 controller()->UpdateIconAndBubbleState(&mock);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 controller()->OnLoginsChanged(list); 292 controller()->OnLoginsChanged(list);
289 293
290 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state()); 294 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state());
291 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); 295 EXPECT_FALSE(controller()->PasswordPendingUserDecision());
292 EXPECT_EQ(test_form().origin, controller()->origin()); 296 EXPECT_EQ(test_form().origin, controller()->origin());
293 297
294 ManagePasswordsIconMock mock; 298 ManagePasswordsIconMock mock;
295 controller()->UpdateIconAndBubbleState(&mock); 299 controller()->UpdateIconAndBubbleState(&mock);
296 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); 300 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state());
297 } 301 }
302
303 TEST_F(ManagePasswordsUIControllerTest, AutomaticPasswordSave) {
304 password_manager::StubPasswordManagerClient client;
305 password_manager::StubPasswordManagerDriver driver;
306 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
307 new password_manager::PasswordFormManager(
308 NULL, &client, &driver, test_form(), false));
309
310 controller()->OnAutomaticPasswordSave(test_form_manager.Pass());
311 EXPECT_EQ(password_manager::ui::CONFIRMATION_STATE, controller()->state());
312
313 ManagePasswordsIconMock mock;
314 controller()->UpdateIconAndBubbleState(&mock);
315 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state());
316 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698