| OLD | NEW |
| 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 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 <stdarg.h> | 5 #include <stdarg.h> |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 VLOG(1) << "Adding item attribute " << name << ", value '" << value | 144 VLOG(1) << "Adding item attribute " << name << ", value '" << value |
| 145 << "'"; | 145 << "'"; |
| 146 } else { | 146 } else { |
| 147 uint32_t intvalue = va_arg(ap, uint32_t); | 147 uint32_t intvalue = va_arg(ap, uint32_t); |
| 148 VLOG(1) << "Adding item attribute " << name << ", value " << intvalue; | 148 VLOG(1) << "Adding item attribute " << name << ", value " << intvalue; |
| 149 value = g_strdup_printf("%u", intvalue); | 149 value = g_strdup_printf("%u", intvalue); |
| 150 } | 150 } |
| 151 g_hash_table_insert(attributes, g_strdup(name), value); | 151 g_hash_table_insert(attributes, g_strdup(name), value); |
| 152 } | 152 } |
| 153 va_end(ap); | 153 va_end(ap); |
| 154 for (uint32_t i = 0; i < global_mock_libsecret_items->size();) | 154 |
| 155 if (Matches((*global_mock_libsecret_items)[i], attributes)) { | 155 ScopedVector<MockSecretItem> kept_mock_libsecret_items; |
| 156 global_mock_libsecret_items->erase(global_mock_libsecret_items->begin() + | 156 kept_mock_libsecret_items.reserve(global_mock_libsecret_items->size()); |
| 157 i); | 157 for (auto& item : *global_mock_libsecret_items) { |
| 158 } else { | 158 if (!Matches(item, attributes)) { |
| 159 ++i; | 159 kept_mock_libsecret_items.push_back(item); |
| 160 item = nullptr; |
| 160 } | 161 } |
| 162 } |
| 163 global_mock_libsecret_items->swap(kept_mock_libsecret_items); |
| 164 |
| 161 g_hash_table_unref(attributes); | 165 g_hash_table_unref(attributes); |
| 162 return true; | 166 return true; |
| 163 } | 167 } |
| 164 | 168 |
| 165 MockSecretValue* mock_secret_item_get_secret(MockSecretItem* self) { | 169 MockSecretValue* mock_secret_item_get_secret(MockSecretItem* self) { |
| 166 return self->value; | 170 return self->value; |
| 167 } | 171 } |
| 168 | 172 |
| 169 const gchar* mock_secret_value_get_text(MockSecretValue* value) { | 173 const gchar* mock_secret_value_get_text(MockSecretValue* value) { |
| 170 return value->password; | 174 return value->password; |
| (...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 789 | 793 |
| 790 actual_changes = backend.AddLogin(form_google_); | 794 actual_changes = backend.AddLogin(form_google_); |
| 791 CheckPasswordChanges(expected_changes, actual_changes); | 795 CheckPasswordChanges(expected_changes, actual_changes); |
| 792 | 796 |
| 793 EXPECT_EQ(1u, global_mock_libsecret_items->size()); | 797 EXPECT_EQ(1u, global_mock_libsecret_items->size()); |
| 794 if (!global_mock_libsecret_items->empty()) | 798 if (!global_mock_libsecret_items->empty()) |
| 795 CheckMockSecretItem((*global_mock_libsecret_items)[0], form_google_, | 799 CheckMockSecretItem((*global_mock_libsecret_items)[0], form_google_, |
| 796 "chrome-42"); | 800 "chrome-42"); |
| 797 } | 801 } |
| 798 | 802 |
| 799 TEST_F(NativeBackendLibsecretTest, ListLoginsAppends) { | |
| 800 NativeBackendLibsecret backend(42); | |
| 801 | |
| 802 backend.AddLogin(form_google_); | |
| 803 | |
| 804 // Send the same request twice with the same list both times. | |
| 805 ScopedVector<autofill::PasswordForm> form_list; | |
| 806 backend.GetAutofillableLogins(&form_list); | |
| 807 backend.GetAutofillableLogins(&form_list); | |
| 808 | |
| 809 // Quick check that we got two results back. | |
| 810 EXPECT_EQ(2u, form_list.size()); | |
| 811 form_list.clear(); | |
| 812 | |
| 813 EXPECT_EQ(1u, global_mock_libsecret_items->size()); | |
| 814 if (!global_mock_libsecret_items->empty()) | |
| 815 CheckMockSecretItem((*global_mock_libsecret_items)[0], form_google_, | |
| 816 "chrome-42"); | |
| 817 } | |
| 818 | |
| 819 TEST_F(NativeBackendLibsecretTest, AndroidCredentials) { | 803 TEST_F(NativeBackendLibsecretTest, AndroidCredentials) { |
| 820 NativeBackendLibsecret backend(42); | 804 NativeBackendLibsecret backend(42); |
| 821 backend.Init(); | 805 backend.Init(); |
| 822 | 806 |
| 823 PasswordForm observed_android_form; | 807 PasswordForm observed_android_form; |
| 824 observed_android_form.scheme = PasswordForm::SCHEME_HTML; | 808 observed_android_form.scheme = PasswordForm::SCHEME_HTML; |
| 825 observed_android_form.signon_realm = | 809 observed_android_form.signon_realm = |
| 826 "android://7x7IDboo8u9YKraUsbmVkuf1-@net.rateflix.app/"; | 810 "android://7x7IDboo8u9YKraUsbmVkuf1-@net.rateflix.app/"; |
| 827 PasswordForm saved_android_form = observed_android_form; | 811 PasswordForm saved_android_form = observed_android_form; |
| 828 saved_android_form.username_value = base::UTF8ToUTF16("randomusername"); | 812 saved_android_form.username_value = base::UTF8ToUTF16("randomusername"); |
| 829 saved_android_form.password_value = base::UTF8ToUTF16("password"); | 813 saved_android_form.password_value = base::UTF8ToUTF16("password"); |
| 830 saved_android_form.date_created = base::Time::Now(); | 814 saved_android_form.date_created = base::Time::Now(); |
| 831 | 815 |
| 832 backend.AddLogin(saved_android_form); | 816 backend.AddLogin(saved_android_form); |
| 833 | 817 |
| 834 ScopedVector<autofill::PasswordForm> form_list; | 818 ScopedVector<autofill::PasswordForm> form_list; |
| 835 backend.GetAutofillableLogins(&form_list); | 819 backend.GetAutofillableLogins(&form_list); |
| 836 | 820 |
| 837 EXPECT_EQ(1u, form_list.size()); | 821 EXPECT_EQ(1u, form_list.size()); |
| 838 EXPECT_EQ(saved_android_form, *form_list[0]); | 822 EXPECT_EQ(saved_android_form, *form_list[0]); |
| 839 } | 823 } |
| 840 | 824 |
| 841 | |
| 842 TEST_F(NativeBackendLibsecretTest, RemoveLoginsCreatedBetween) { | 825 TEST_F(NativeBackendLibsecretTest, RemoveLoginsCreatedBetween) { |
| 843 CheckRemoveLoginsBetween(CREATED); | 826 CheckRemoveLoginsBetween(CREATED); |
| 844 } | 827 } |
| 845 | 828 |
| 846 TEST_F(NativeBackendLibsecretTest, RemoveLoginsSyncedBetween) { | 829 TEST_F(NativeBackendLibsecretTest, RemoveLoginsSyncedBetween) { |
| 847 CheckRemoveLoginsBetween(SYNCED); | 830 CheckRemoveLoginsBetween(SYNCED); |
| 848 } | 831 } |
| 849 | 832 |
| 850 TEST_F(NativeBackendLibsecretTest, SomeKeyringAttributesAreMissing) { | 833 TEST_F(NativeBackendLibsecretTest, SomeKeyringAttributesAreMissing) { |
| 851 // Absent attributes should be filled with default values. | 834 // Absent attributes should be filled with default values. |
| 852 NativeBackendLibsecret backend(42); | 835 NativeBackendLibsecret backend(42); |
| 853 | 836 |
| 854 backend.AddLogin(form_google_); | 837 backend.AddLogin(form_google_); |
| 855 | 838 |
| 856 EXPECT_EQ(1u, global_mock_libsecret_items->size()); | 839 EXPECT_EQ(1u, global_mock_libsecret_items->size()); |
| 857 // Remove a string attribute. | 840 // Remove a string attribute. |
| 858 (*global_mock_libsecret_items)[0]->RemoveAttribute("avatar_url"); | 841 (*global_mock_libsecret_items)[0]->RemoveAttribute("avatar_url"); |
| 859 // Remove an integer attribute. | 842 // Remove an integer attribute. |
| 860 (*global_mock_libsecret_items)[0]->RemoveAttribute("ssl_valid"); | 843 (*global_mock_libsecret_items)[0]->RemoveAttribute("ssl_valid"); |
| 861 | 844 |
| 862 ScopedVector<autofill::PasswordForm> form_list; | 845 ScopedVector<autofill::PasswordForm> form_list; |
| 863 backend.GetAutofillableLogins(&form_list); | 846 backend.GetAutofillableLogins(&form_list); |
| 864 | 847 |
| 865 EXPECT_EQ(1u, form_list.size()); | 848 EXPECT_EQ(1u, form_list.size()); |
| 866 EXPECT_EQ(GURL(""), form_list[0]->avatar_url); | 849 EXPECT_EQ(GURL(""), form_list[0]->avatar_url); |
| 867 EXPECT_FALSE(form_list[0]->ssl_valid); | 850 EXPECT_FALSE(form_list[0]->ssl_valid); |
| 868 } | 851 } |
| 869 | 852 |
| 870 // TODO(mdm): add more basic tests here at some point. | 853 // TODO(mdm): add more basic tests here at some point. |
| OLD | NEW |