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

Side by Side Diff: chrome/browser/password_manager/password_manager_unittest.cc

Issue 19705013: [password autofill] Remove references to PasswordForm from RenderViewImpl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 7 years, 4 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <vector> 5 #include <vector>
6 6
7 #include "base/message_loop/message_loop.h" 7 #include "base/message_loop/message_loop.h"
8 #include "base/strings/string_util.h" 8 #include "base/strings/string_util.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/password_manager/mock_password_store.h" 10 #include "chrome/browser/password_manager/mock_password_store.h"
(...skipping 28 matching lines...) Expand all
39 }; 39 };
40 40
41 ACTION_P(InvokeConsumer, forms) { 41 ACTION_P(InvokeConsumer, forms) {
42 arg0->OnGetPasswordStoreResults(forms); 42 arg0->OnGetPasswordStoreResults(forms);
43 } 43 }
44 44
45 ACTION_P(SaveToScopedPtr, scoped) { 45 ACTION_P(SaveToScopedPtr, scoped) {
46 scoped->reset(arg0); 46 scoped->reset(arg0);
47 } 47 }
48 48
49 class TestPasswordManager : public PasswordManager {
50 public:
51 TestPasswordManager(content::WebContents* contents,
52 PasswordManagerDelegate* delegate);
53 virtual ~TestPasswordManager();
54
55 virtual void OnPasswordFormSubmitted(const PasswordForm& form) OVERRIDE {
56 PasswordManager::OnPasswordFormSubmitted(form);
57 }
58
59 static TestPasswordManager* CreateForWebContentsAndDelegate(
60 content::WebContents* contents,
61 PasswordManagerDelegate* delegate) {
62 TestPasswordManager* tpm = new TestPasswordManager(contents, delegate);
63 contents->SetUserData(UserDataKey(), tpm);
64 return tpm;
65 }
66
67 private:
68 DISALLOW_COPY_AND_ASSIGN(TestPasswordManager);
69 };
70
49 class PasswordManagerTest : public ChromeRenderViewHostTestHarness { 71 class PasswordManagerTest : public ChromeRenderViewHostTestHarness {
50 protected: 72 protected:
51 virtual void SetUp() { 73 virtual void SetUp() {
52 ChromeRenderViewHostTestHarness::SetUp(); 74 ChromeRenderViewHostTestHarness::SetUp();
53 store_ = static_cast<MockPasswordStore*>( 75 store_ = static_cast<MockPasswordStore*>(
54 PasswordStoreFactory::GetInstance()->SetTestingFactoryAndUse( 76 PasswordStoreFactory::GetInstance()->SetTestingFactoryAndUse(
55 profile(), MockPasswordStore::Build).get()); 77 profile(), MockPasswordStore::Build).get());
56 78
57 EXPECT_CALL(delegate_, GetProfile()).WillRepeatedly(Return(profile())); 79 EXPECT_CALL(delegate_, GetProfile()).WillRepeatedly(Return(profile()));
58 PasswordManager::CreateForWebContentsAndDelegate( 80 password_manager_ = TestPasswordManager::CreateForWebContentsAndDelegate(
59 web_contents(), &delegate_); 81 web_contents(), &delegate_);
60 EXPECT_CALL(delegate_, DidLastPageLoadEncounterSSLErrors()) 82 EXPECT_CALL(delegate_, DidLastPageLoadEncounterSSLErrors())
61 .WillRepeatedly(Return(false)); 83 .WillRepeatedly(Return(false));
62 } 84 }
63 85
64 virtual void TearDown() { 86 virtual void TearDown() {
65 store_ = NULL; 87 store_ = NULL;
66 ChromeRenderViewHostTestHarness::TearDown(); 88 ChromeRenderViewHostTestHarness::TearDown();
67 } 89 }
68 90
69 PasswordForm MakeSimpleForm() { 91 PasswordForm MakeSimpleForm() {
70 PasswordForm form; 92 PasswordForm form;
71 form.origin = GURL("http://www.google.com/a/LoginAuth"); 93 form.origin = GURL("http://www.google.com/a/LoginAuth");
72 form.action = GURL("http://www.google.com/a/Login"); 94 form.action = GURL("http://www.google.com/a/Login");
73 form.username_element = ASCIIToUTF16("Email"); 95 form.username_element = ASCIIToUTF16("Email");
74 form.password_element = ASCIIToUTF16("Passwd"); 96 form.password_element = ASCIIToUTF16("Passwd");
75 form.username_value = ASCIIToUTF16("google"); 97 form.username_value = ASCIIToUTF16("google");
76 form.password_value = ASCIIToUTF16("password"); 98 form.password_value = ASCIIToUTF16("password");
77 // Default to true so we only need to add tests in autocomplete=off cases. 99 // Default to true so we only need to add tests in autocomplete=off cases.
78 form.password_autocomplete_set = true; 100 form.password_autocomplete_set = true;
79 form.submit_element = ASCIIToUTF16("signIn"); 101 form.submit_element = ASCIIToUTF16("signIn");
80 form.signon_realm = "http://www.google.com"; 102 form.signon_realm = "http://www.google.com";
81 return form; 103 return form;
82 } 104 }
83 105
84 PasswordManager* manager() { 106 TestPasswordManager* manager() {
85 return PasswordManager::FromWebContents(web_contents()); 107 return manager_;
108 }
109
110 void OnPasswordFormSubmitted(const content::PasswordForm& form) {
111 manager()->OnPasswordFormSubmitted(form);
112 }
113
114 PasswordSubmittedCallback SubmissionCallback() {
115 return base::Bind(&PasswordManagerTest::FormSubmitted,
116 base::Unretained(this));
117 }
118
119 void FormSubmitted(const content::PasswordForm& form) {
120 submitted_form_ = form;
86 } 121 }
87 122
88 scoped_refptr<MockPasswordStore> store_; 123 scoped_refptr<MockPasswordStore> store_;
124 TestPasswordManager manager_;
89 MockPasswordManagerDelegate delegate_; // Owned by manager_. 125 MockPasswordManagerDelegate delegate_; // Owned by manager_.
126 PasswordForm submitted_form_;
90 }; 127 };
91 128
92 MATCHER_P(FormMatches, form, "") { 129 MATCHER_P(FormMatches, form, "") {
93 return form.signon_realm == arg.signon_realm && 130 return form.signon_realm == arg.signon_realm &&
94 form.origin == arg.origin && 131 form.origin == arg.origin &&
95 form.action == arg.action && 132 form.action == arg.action &&
96 form.username_element == arg.username_element && 133 form.username_element == arg.username_element &&
97 form.password_element == arg.password_element && 134 form.password_element == arg.password_element &&
98 form.password_autocomplete_set == 135 form.password_autocomplete_set ==
99 arg.password_autocomplete_set && 136 arg.password_autocomplete_set &&
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 std::vector<PasswordForm*> result; // Empty password store. 238 std::vector<PasswordForm*> result; // Empty password store.
202 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0)); 239 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0));
203 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 240 EXPECT_CALL(*store_.get(), GetLogins(_, _))
204 .WillOnce(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 241 .WillOnce(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1)));
205 std::vector<PasswordForm> observed; 242 std::vector<PasswordForm> observed;
206 PasswordForm form(MakeSimpleForm()); 243 PasswordForm form(MakeSimpleForm());
207 observed.push_back(form); 244 observed.push_back(form);
208 manager()->OnPasswordFormsParsed(observed); // The initial load. 245 manager()->OnPasswordFormsParsed(observed); // The initial load.
209 manager()->OnPasswordFormsRendered(observed); // The initial layout. 246 manager()->OnPasswordFormsRendered(observed); // The initial layout.
210 247
211 PasswordForm empty_form(form); 248 // No message from the renderer that a password was submitted. No
212 empty_form.username_value = string16(); 249 // expected calls.
213 empty_form.password_value = string16();
214 content::LoadCommittedDetails details;
215 content::FrameNavigateParams params;
216 params.password_form = empty_form;
217 manager()->DidNavigateAnyFrame(details, params);
218
219 // No expected calls.
220 EXPECT_CALL(delegate_, AddSavePasswordInfoBarIfPermitted(_)).Times(0); 250 EXPECT_CALL(delegate_, AddSavePasswordInfoBarIfPermitted(_)).Times(0);
221 observed.clear(); 251 observed.clear();
222 manager()->OnPasswordFormsParsed(observed); // The post-navigation load. 252 manager()->OnPasswordFormsParsed(observed); // The post-navigation load.
223 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout. 253 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout.
224 } 254 }
225 255
226 TEST_F(PasswordManagerTest, FormSubmitAfterNavigateSubframe) { 256 TEST_F(PasswordManagerTest, FormSubmitAfterNavigateSubframe) {
227 // Test that navigating a subframe does not prevent us from showing the save 257 // Test that navigating a subframe does not prevent us from showing the save
228 // password infobar. 258 // password infobar.
229 std::vector<PasswordForm*> result; // Empty password store. 259 std::vector<PasswordForm*> result; // Empty password store.
230 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0)); 260 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0));
231 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 261 EXPECT_CALL(*store_.get(), GetLogins(_, _))
232 .WillOnce(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 262 .WillOnce(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1)));
233 std::vector<PasswordForm> observed; 263 std::vector<PasswordForm> observed;
234 PasswordForm form(MakeSimpleForm()); 264 PasswordForm form(MakeSimpleForm());
235 observed.push_back(form); 265 observed.push_back(form);
236 manager()->OnPasswordFormsParsed(observed); // The initial load. 266 manager()->OnPasswordFormsParsed(observed); // The initial load.
237 manager()->OnPasswordFormsRendered(observed); // The initial layout. 267 manager()->OnPasswordFormsRendered(observed); // The initial layout.
238 268
239 // Simulate navigating a sub-frame. 269 // Simulate navigating a sub-frame.
240 content::LoadCommittedDetails details; 270 content::LoadCommittedDetails details;
241 details.is_main_frame = false;
242 content::FrameNavigateParams params; 271 content::FrameNavigateParams params;
243 manager()->DidNavigateAnyFrame(details, params); 272 manager()->DidNavigateAnyFrame(details, params);
244 273
245 // Simulate navigating the real page. 274 // Simulate submitting the password.
246 details.is_main_frame = true; 275 OnPasswordFormSubmitted(form);
247 params.password_form = form;
248 manager()->DidNavigateAnyFrame(details, params);
249 276
250 // Now the password manager waits for the navigation to complete. 277 // Now the password manager waits for the navigation to complete.
251 scoped_ptr<PasswordFormManager> form_to_save; 278 scoped_ptr<PasswordFormManager> form_to_save;
252 EXPECT_CALL(delegate_, AddSavePasswordInfoBarIfPermitted(_)) 279 EXPECT_CALL(delegate_, AddSavePasswordInfoBarIfPermitted(_))
253 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_to_save))); 280 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_to_save)));
254 281
255 observed.clear(); 282 observed.clear();
256 manager()->OnPasswordFormsParsed(observed); // The post-navigation load. 283 manager()->OnPasswordFormsParsed(observed); // The post-navigation load.
257 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout. 284 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout.
258 285
(...skipping 23 matching lines...) Expand all
282 std::vector<PasswordForm> observed; 309 std::vector<PasswordForm> observed;
283 observed.push_back(first_form); 310 observed.push_back(first_form);
284 manager()->OnPasswordFormsParsed(observed); 311 manager()->OnPasswordFormsParsed(observed);
285 observed.clear(); 312 observed.clear();
286 manager()->OnPasswordFormsRendered(observed); 313 manager()->OnPasswordFormsRendered(observed);
287 314
288 // Now navigate to a second page. 315 // Now navigate to a second page.
289 content::LoadCommittedDetails details; 316 content::LoadCommittedDetails details;
290 details.is_main_frame = true; 317 details.is_main_frame = true;
291 content::FrameNavigateParams params; 318 content::FrameNavigateParams params;
292 manager()->DidNavigateAnyFrame(details, params); 319 manager()->DidNavigateMainFrame(details, params);
293 320
294 // This page contains a form with the same markup, but on a different 321 // This page contains a form with the same markup, but on a different
295 // URL. 322 // URL.
296 observed.push_back(second_form); 323 observed.push_back(second_form);
297 manager()->OnPasswordFormsParsed(observed); 324 manager()->OnPasswordFormsParsed(observed);
298 manager()->OnPasswordFormsRendered(observed); 325 manager()->OnPasswordFormsRendered(observed);
299 326
300 // Now submit this form 327 // Now submit this form
301 params.password_form = second_form; 328 OnPasswordFormSubmitted(second_form);
302 manager()->DidNavigateAnyFrame(details, params);
303 329
304 // Navigation after form submit. 330 // Navigation after form submit.
305 scoped_ptr<PasswordFormManager> form_to_save; 331 scoped_ptr<PasswordFormManager> form_to_save;
306 EXPECT_CALL(delegate_, AddSavePasswordInfoBarIfPermitted(_)) 332 EXPECT_CALL(delegate_, AddSavePasswordInfoBarIfPermitted(_))
307 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_to_save))); 333 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_to_save)));
308 observed.clear(); 334 observed.clear();
309 manager()->OnPasswordFormsParsed(observed); 335 manager()->OnPasswordFormsParsed(observed);
310 manager()->OnPasswordFormsRendered(observed); 336 manager()->OnPasswordFormsRendered(observed);
311 337
312 // Make sure that the saved form matches the second form, not the first. 338 // Make sure that the saved form matches the second form, not the first.
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 // navigation occurs. 494 // navigation occurs.
469 EXPECT_CALL(delegate_, 495 EXPECT_CALL(delegate_,
470 AddSavePasswordInfoBarIfPermitted(_)).Times(Exactly(0)); 496 AddSavePasswordInfoBarIfPermitted(_)).Times(Exactly(0));
471 EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form))); 497 EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form)));
472 498
473 // Now the password manager waits for the navigation to complete. 499 // Now the password manager waits for the navigation to complete.
474 observed.clear(); 500 observed.clear();
475 manager()->OnPasswordFormsParsed(observed); // The post-navigation load. 501 manager()->OnPasswordFormsParsed(observed); // The post-navigation load.
476 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout. 502 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout.
477 } 503 }
504
505 TEST_F(PasswordManagerTest, SubmissionCallbackTest) {
506 manager()->AddSubmissionCallback(SubmissionCallback());
507 PasswordForm form = MakeSimpleForm();
508 OnPasswordFormSubmitted(form);
509 EXPECT_EQ(form, submitted_form_);
510 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698