| OLD | NEW |
| 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 "components/password_manager/core/browser/password_manager.h" | 5 #include "components/password_manager/core/browser/password_manager.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 11 #include "base/message_loop/message_loop.h" | 11 #include "base/message_loop/message_loop.h" |
| 12 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 14 #include "components/password_manager/core/browser/mock_password_store.h" | 14 #include "components/password_manager/core/browser/mock_password_store.h" |
| 15 #include "components/password_manager/core/browser/password_autofill_manager.h" | 15 #include "components/password_manager/core/browser/password_autofill_manager.h" |
| 16 #include "components/password_manager/core/browser/password_manager_driver.h" | 16 #include "components/password_manager/core/browser/password_manager_driver.h" |
| 17 #include "components/password_manager/core/browser/password_store.h" | 17 #include "components/password_manager/core/browser/password_store.h" |
| 18 #include "components/password_manager/core/browser/statistics_table.h" | 18 #include "components/password_manager/core/browser/statistics_table.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_features.h" |
| 21 #include "components/password_manager/core/common/password_manager_pref_names.h" | 22 #include "components/password_manager/core/common/password_manager_pref_names.h" |
| 22 #include "components/password_manager/core/common/password_manager_switches.h" | 23 #include "components/password_manager/core/common/password_manager_switches.h" |
| 23 #include "testing/gmock/include/gmock/gmock.h" | 24 #include "testing/gmock/include/gmock/gmock.h" |
| 24 #include "testing/gtest/include/gtest/gtest.h" | 25 #include "testing/gtest/include/gtest/gtest.h" |
| 25 | 26 |
| 26 using autofill::PasswordForm; | 27 using autofill::PasswordForm; |
| 27 using base::ASCIIToUTF16; | 28 using base::ASCIIToUTF16; |
| 28 using testing::_; | 29 using testing::_; |
| 29 using testing::AnyNumber; | 30 using testing::AnyNumber; |
| 30 using testing::Return; | 31 using testing::Return; |
| (...skipping 1176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1207 observed.clear(); | 1208 observed.clear(); |
| 1208 manager()->OnPasswordFormsParsed(&driver_, observed); | 1209 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1209 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1210 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1210 EXPECT_EQ(form.username_value, form_to_save.username_value); | 1211 EXPECT_EQ(form.username_value, form_to_save.username_value); |
| 1211 // What was "new password" field in the submitted form, becomes the current | 1212 // What was "new password" field in the submitted form, becomes the current |
| 1212 // password field in the form to save. | 1213 // password field in the form to save. |
| 1213 EXPECT_EQ(form.new_password_value, form_to_save.password_value); | 1214 EXPECT_EQ(form.new_password_value, form_to_save.password_value); |
| 1214 } | 1215 } |
| 1215 | 1216 |
| 1216 TEST_F(PasswordManagerTest, ForceSavingPasswords) { | 1217 TEST_F(PasswordManagerTest, ForceSavingPasswords) { |
| 1217 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 1218 // Add the enable-password-force-saving feature. |
| 1218 switches::kEnablePasswordForceSaving); | 1219 base::FeatureList::ClearInstanceForTesting(); |
| 1220 scoped_ptr<base::FeatureList> feature_list(new base::FeatureList); |
| 1221 feature_list->InitializeFromCommandLine( |
| 1222 password_manager::features::kEnablePasswordForceSaving.name, ""); |
| 1223 base::FeatureList::SetInstance(std::move(feature_list)); |
| 1219 PasswordForm form(MakeSimpleForm()); | 1224 PasswordForm form(MakeSimpleForm()); |
| 1220 | 1225 |
| 1221 std::vector<PasswordForm> observed; | 1226 std::vector<PasswordForm> observed; |
| 1222 observed.push_back(form); | 1227 observed.push_back(form); |
| 1223 EXPECT_CALL(*store_, GetLogins(_, _, _)) | 1228 EXPECT_CALL(*store_, GetLogins(_, _, _)) |
| 1224 .WillRepeatedly(WithArg<2>(InvokeEmptyConsumerWithForms())); | 1229 .WillRepeatedly(WithArg<2>(InvokeEmptyConsumerWithForms())); |
| 1225 manager()->OnPasswordFormsParsed(&driver_, observed); | 1230 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1226 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1231 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1227 | 1232 |
| 1228 scoped_ptr<PasswordFormManager> form_manager_to_save; | 1233 scoped_ptr<PasswordFormManager> form_manager_to_save; |
| 1229 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1234 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 1230 .WillRepeatedly(Return(true)); | 1235 .WillRepeatedly(Return(true)); |
| 1231 EXPECT_CALL(client_, | 1236 EXPECT_CALL(client_, |
| 1232 PromptUserToSaveOrUpdatePasswordPtr( | 1237 PromptUserToSaveOrUpdatePasswordPtr( |
| 1233 _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER)) | 1238 _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER)) |
| 1234 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 1239 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); |
| 1235 manager()->OnPasswordFormForceSaveRequested(&driver_, form); | 1240 manager()->OnPasswordFormForceSaveRequested(&driver_, form); |
| 1236 ASSERT_TRUE(form_manager_to_save); | 1241 ASSERT_TRUE(form_manager_to_save); |
| 1237 EXPECT_EQ(form.password_value, | 1242 EXPECT_EQ(form.password_value, |
| 1238 PasswordFormManager::PasswordToSave( | 1243 PasswordFormManager::PasswordToSave( |
| 1239 form_manager_to_save->pending_credentials())); | 1244 form_manager_to_save->pending_credentials())); |
| 1240 } | 1245 } |
| 1241 | 1246 |
| 1242 // Forcing Chrome to save an empty passwords should fail without a crash. | 1247 // Forcing Chrome to save an empty passwords should fail without a crash. |
| 1243 TEST_F(PasswordManagerTest, ForceSavingPasswords_Empty) { | 1248 TEST_F(PasswordManagerTest, ForceSavingPasswords_Empty) { |
| 1244 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 1249 // Add the enable-password-force-saving feature. |
| 1245 switches::kEnablePasswordForceSaving); | 1250 base::FeatureList::ClearInstanceForTesting(); |
| 1251 scoped_ptr<base::FeatureList> feature_list(new base::FeatureList); |
| 1252 feature_list->InitializeFromCommandLine( |
| 1253 password_manager::features::kEnablePasswordForceSaving.name, ""); |
| 1254 base::FeatureList::SetInstance(std::move(feature_list)); |
| 1246 PasswordForm empty_password_form; | 1255 PasswordForm empty_password_form; |
| 1247 | 1256 |
| 1248 std::vector<PasswordForm> observed; | 1257 std::vector<PasswordForm> observed; |
| 1249 observed.push_back(empty_password_form); | 1258 observed.push_back(empty_password_form); |
| 1250 EXPECT_CALL(*store_, GetLogins(_, _, _)) | 1259 EXPECT_CALL(*store_, GetLogins(_, _, _)) |
| 1251 .WillRepeatedly(WithArg<2>(InvokeEmptyConsumerWithForms())); | 1260 .WillRepeatedly(WithArg<2>(InvokeEmptyConsumerWithForms())); |
| 1252 manager()->OnPasswordFormsParsed(&driver_, observed); | 1261 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1253 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1262 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1254 | 1263 |
| 1255 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1264 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1298 observed.clear(); | 1307 observed.clear(); |
| 1299 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1308 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1300 | 1309 |
| 1301 EXPECT_EQ(android_form.username_value, form_data.username_field.value); | 1310 EXPECT_EQ(android_form.username_value, form_data.username_field.value); |
| 1302 EXPECT_EQ(android_form.password_value, form_data.password_field.value); | 1311 EXPECT_EQ(android_form.password_value, form_data.password_field.value); |
| 1303 EXPECT_FALSE(form_data.wait_for_username); | 1312 EXPECT_FALSE(form_data.wait_for_username); |
| 1304 EXPECT_EQ(android_form.signon_realm, form_data.preferred_realm); | 1313 EXPECT_EQ(android_form.signon_realm, form_data.preferred_realm); |
| 1305 } | 1314 } |
| 1306 | 1315 |
| 1307 } // namespace password_manager | 1316 } // namespace password_manager |
| OLD | NEW |