OLD | NEW |
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 "components/password_manager/content/browser/credential_manager_dispatc
her.h" | 5 #include "components/password_manager/content/browser/credential_manager_dispatc
her.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
10 #include "base/strings/string16.h" | 10 #include "base/strings/string16.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 did_prompt_user_to_save_ = true; | 48 did_prompt_user_to_save_ = true; |
49 manager_.reset(manager.release()); | 49 manager_.reset(manager.release()); |
50 return true; | 50 return true; |
51 } | 51 } |
52 | 52 |
53 bool PromptUserToChooseCredentials( | 53 bool PromptUserToChooseCredentials( |
54 const std::vector<autofill::PasswordForm*>& local_forms, | 54 const std::vector<autofill::PasswordForm*>& local_forms, |
55 const std::vector<autofill::PasswordForm*>& federated_forms, | 55 const std::vector<autofill::PasswordForm*>& federated_forms, |
56 base::Callback<void(const password_manager::CredentialInfo&)> callback) | 56 base::Callback<void(const password_manager::CredentialInfo&)> callback) |
57 override { | 57 override { |
| 58 // TODO(melandory): Use ScopedVector instead of std::vector in arguments. |
| 59 // ContentCredentialManagerDispatcher::OnGetPasswordStoreResults contains a |
| 60 // memory leak because of this. |
58 EXPECT_FALSE(local_forms.empty() && federated_forms.empty()); | 61 EXPECT_FALSE(local_forms.empty() && federated_forms.empty()); |
59 did_prompt_user_to_choose_ = true; | 62 did_prompt_user_to_choose_ = true; |
60 ScopedVector<autofill::PasswordForm> local_entries; | 63 ScopedVector<autofill::PasswordForm> local_entries; |
61 local_entries.assign(local_forms.begin(), local_forms.end()); | 64 local_entries.assign(local_forms.begin(), local_forms.end()); |
62 ScopedVector<autofill::PasswordForm> federated_entries; | 65 ScopedVector<autofill::PasswordForm> federated_entries; |
63 federated_entries.assign(federated_forms.begin(), federated_forms.end()); | 66 federated_entries.assign(federated_forms.begin(), federated_forms.end()); |
64 // TODO(vasilii): Do something clever with |federated_forms|. | 67 password_manager::CredentialInfo info( |
65 password_manager::CredentialInfo info(*local_entries[0]); | 68 local_forms.empty() ? *federated_forms[0] : *local_entries[0], |
| 69 local_forms.empty() |
| 70 ? password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED |
| 71 : password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL); |
66 base::MessageLoop::current()->PostTask(FROM_HERE, | 72 base::MessageLoop::current()->PostTask(FROM_HERE, |
67 base::Bind(callback, info)); | 73 base::Bind(callback, info)); |
68 return true; | 74 return true; |
69 } | 75 } |
70 | 76 |
71 bool IsOffTheRecord() override { return is_off_the_record_; } | 77 bool IsOffTheRecord() override { return is_off_the_record_; } |
72 | 78 |
73 bool did_prompt_user_to_save() const { return did_prompt_user_to_save_; } | 79 bool did_prompt_user_to_save() const { return did_prompt_user_to_save_; } |
74 bool did_prompt_user_to_choose() const { return did_prompt_user_to_choose_; } | 80 bool did_prompt_user_to_choose() const { return did_prompt_user_to_choose_; } |
75 | 81 |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 dispatcher()->OnNotifyFailedSignIn(kRequestId, info); | 187 dispatcher()->OnNotifyFailedSignIn(kRequestId, info); |
182 | 188 |
183 const uint32 kMsgID = CredentialManagerMsg_AcknowledgeFailedSignIn::ID; | 189 const uint32 kMsgID = CredentialManagerMsg_AcknowledgeFailedSignIn::ID; |
184 const IPC::Message* message = | 190 const IPC::Message* message = |
185 process()->sink().GetFirstMessageMatching(kMsgID); | 191 process()->sink().GetFirstMessageMatching(kMsgID); |
186 EXPECT_TRUE(message); | 192 EXPECT_TRUE(message); |
187 process()->sink().ClearMessages(); | 193 process()->sink().ClearMessages(); |
188 } | 194 } |
189 | 195 |
190 TEST_F(CredentialManagerDispatcherTest, CredentialManagerOnNotifySignedIn) { | 196 TEST_F(CredentialManagerDispatcherTest, CredentialManagerOnNotifySignedIn) { |
191 CredentialInfo info(form_); | 197 CredentialInfo info(form_, |
| 198 password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL); |
192 dispatcher()->OnNotifySignedIn(kRequestId, info); | 199 dispatcher()->OnNotifySignedIn(kRequestId, info); |
193 | 200 |
194 const uint32 kMsgID = CredentialManagerMsg_AcknowledgeSignedIn::ID; | 201 const uint32 kMsgID = CredentialManagerMsg_AcknowledgeSignedIn::ID; |
195 const IPC::Message* message = | 202 const IPC::Message* message = |
196 process()->sink().GetFirstMessageMatching(kMsgID); | 203 process()->sink().GetFirstMessageMatching(kMsgID); |
197 EXPECT_TRUE(message); | 204 EXPECT_TRUE(message); |
198 process()->sink().ClearMessages(); | 205 process()->sink().ClearMessages(); |
199 | 206 |
200 // Allow the PasswordFormManager to talk to the password store, determine | 207 // Allow the PasswordFormManager to talk to the password store, determine |
201 // that the form is new, and set it as pending. | 208 // that the form is new, and set it as pending. |
202 RunAllPendingTasks(); | 209 RunAllPendingTasks(); |
203 | 210 |
204 EXPECT_TRUE(client_->did_prompt_user_to_save()); | 211 EXPECT_TRUE(client_->did_prompt_user_to_save()); |
205 EXPECT_TRUE(client_->pending_manager()->HasCompletedMatching()); | 212 EXPECT_TRUE(client_->pending_manager()->HasCompletedMatching()); |
206 | 213 |
207 autofill::PasswordForm new_form = | 214 autofill::PasswordForm new_form = |
208 client_->pending_manager()->pending_credentials(); | 215 client_->pending_manager()->pending_credentials(); |
209 EXPECT_EQ(form_.username_value, new_form.username_value); | 216 EXPECT_EQ(form_.username_value, new_form.username_value); |
210 EXPECT_EQ(form_.display_name, new_form.display_name); | 217 EXPECT_EQ(form_.display_name, new_form.display_name); |
211 EXPECT_EQ(form_.password_value, new_form.password_value); | 218 EXPECT_EQ(form_.password_value, new_form.password_value); |
212 EXPECT_EQ(form_.origin, new_form.origin); | 219 EXPECT_EQ(form_.origin, new_form.origin); |
213 EXPECT_EQ(form_.signon_realm, new_form.signon_realm); | 220 EXPECT_EQ(form_.signon_realm, new_form.signon_realm); |
214 EXPECT_EQ(autofill::PasswordForm::SCHEME_HTML, new_form.scheme); | 221 EXPECT_EQ(autofill::PasswordForm::SCHEME_HTML, new_form.scheme); |
215 } | 222 } |
216 | 223 |
217 TEST_F(CredentialManagerDispatcherTest, CredentialManagerIncognitoSignedIn) { | 224 TEST_F(CredentialManagerDispatcherTest, CredentialManagerIncognitoSignedIn) { |
218 CredentialInfo info(form_); | 225 CredentialInfo info(form_, CredentialType::CREDENTIAL_TYPE_LOCAL); |
219 client_->set_off_the_record(true); | 226 client_->set_off_the_record(true); |
220 dispatcher()->OnNotifySignedIn(kRequestId, info); | 227 dispatcher()->OnNotifySignedIn(kRequestId, info); |
221 | 228 |
222 const uint32 kMsgID = CredentialManagerMsg_AcknowledgeSignedIn::ID; | 229 const uint32 kMsgID = CredentialManagerMsg_AcknowledgeSignedIn::ID; |
223 const IPC::Message* message = | 230 const IPC::Message* message = |
224 process()->sink().GetFirstMessageMatching(kMsgID); | 231 process()->sink().GetFirstMessageMatching(kMsgID); |
225 EXPECT_TRUE(message); | 232 EXPECT_TRUE(message); |
226 process()->sink().ClearMessages(); | 233 process()->sink().ClearMessages(); |
227 | 234 |
228 RunAllPendingTasks(); | 235 RunAllPendingTasks(); |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 const IPC::Message* message = | 350 const IPC::Message* message = |
344 process()->sink().GetFirstMessageMatching(kMsgID); | 351 process()->sink().GetFirstMessageMatching(kMsgID); |
345 ASSERT_TRUE(message); | 352 ASSERT_TRUE(message); |
346 CredentialManagerMsg_SendCredential::Param param; | 353 CredentialManagerMsg_SendCredential::Param param; |
347 CredentialManagerMsg_SendCredential::Read(message, ¶m); | 354 CredentialManagerMsg_SendCredential::Read(message, ¶m); |
348 EXPECT_EQ(CredentialType::CREDENTIAL_TYPE_EMPTY, get<1>(param).type); | 355 EXPECT_EQ(CredentialType::CREDENTIAL_TYPE_EMPTY, get<1>(param).type); |
349 EXPECT_FALSE(client_->did_prompt_user_to_choose()); | 356 EXPECT_FALSE(client_->did_prompt_user_to_choose()); |
350 } | 357 } |
351 | 358 |
352 } // namespace password_manager | 359 } // namespace password_manager |
OLD | NEW |