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 <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/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 // format for the app string. This way we can add them easily to migrate. | 136 // format for the app string. This way we can add them easily to migrate. |
137 if (mock_keyring_reject_local_ids) { | 137 if (mock_keyring_reject_local_ids) { |
138 MockKeyringItem::attribute_map::iterator it = | 138 MockKeyringItem::attribute_map::iterator it = |
139 item->attributes.find("application"); | 139 item->attributes.find("application"); |
140 if (it != item->attributes.end() && | 140 if (it != item->attributes.end() && |
141 it->second.type == MockKeyringItem::ItemAttribute::STRING && | 141 it->second.type == MockKeyringItem::ItemAttribute::STRING && |
142 base::StringPiece(it->second.value_string).starts_with("chrome-")) { | 142 base::StringPiece(it->second.value_string).starts_with("chrome-")) { |
143 mock_keyring_items.pop_back(); | 143 mock_keyring_items.pop_back(); |
144 // GnomeKeyringResult, data | 144 // GnomeKeyringResult, data |
145 callback(GNOME_KEYRING_RESULT_IO_ERROR, data); | 145 callback(GNOME_KEYRING_RESULT_IO_ERROR, data); |
146 return NULL; | 146 return nullptr; |
147 } | 147 } |
148 } | 148 } |
149 // GnomeKeyringResult, data | 149 // GnomeKeyringResult, data |
150 callback(GNOME_KEYRING_RESULT_OK, data); | 150 callback(GNOME_KEYRING_RESULT_OK, data); |
151 return NULL; | 151 return nullptr; |
152 } | 152 } |
153 | 153 |
154 gpointer mock_gnome_keyring_delete_password( | 154 gpointer mock_gnome_keyring_delete_password( |
155 const GnomeKeyringPasswordSchema* schema, | 155 const GnomeKeyringPasswordSchema* schema, |
156 GnomeKeyringOperationDoneCallback callback, | 156 GnomeKeyringOperationDoneCallback callback, |
157 gpointer data, | 157 gpointer data, |
158 GDestroyNotify destroy_data, | 158 GDestroyNotify destroy_data, |
159 ...) { | 159 ...) { |
160 MockKeyringItem::attribute_query query; | 160 MockKeyringItem::attribute_query query; |
161 va_list ap; | 161 va_list ap; |
(...skipping 18 matching lines...) Expand all Loading... |
180 const MockKeyringItem* item = &mock_keyring_items[i - 1]; | 180 const MockKeyringItem* item = &mock_keyring_items[i - 1]; |
181 if (item->Matches(query)) { | 181 if (item->Matches(query)) { |
182 VLOG(1) << "Deleting item with origin " << item->display_name; | 182 VLOG(1) << "Deleting item with origin " << item->display_name; |
183 mock_keyring_items.erase(mock_keyring_items.begin() + (i - 1)); | 183 mock_keyring_items.erase(mock_keyring_items.begin() + (i - 1)); |
184 deleted = true; | 184 deleted = true; |
185 } | 185 } |
186 } | 186 } |
187 // GnomeKeyringResult, data | 187 // GnomeKeyringResult, data |
188 callback(deleted ? GNOME_KEYRING_RESULT_OK | 188 callback(deleted ? GNOME_KEYRING_RESULT_OK |
189 : GNOME_KEYRING_RESULT_NO_MATCH, data); | 189 : GNOME_KEYRING_RESULT_NO_MATCH, data); |
190 return NULL; | 190 return nullptr; |
191 } | 191 } |
192 | 192 |
193 gpointer mock_gnome_keyring_find_items( | 193 gpointer mock_gnome_keyring_find_items( |
194 GnomeKeyringItemType type, | 194 GnomeKeyringItemType type, |
195 GnomeKeyringAttributeList* attributes, | 195 GnomeKeyringAttributeList* attributes, |
196 GnomeKeyringOperationGetListCallback callback, | 196 GnomeKeyringOperationGetListCallback callback, |
197 gpointer data, | 197 gpointer data, |
198 GDestroyNotify destroy_data) { | 198 GDestroyNotify destroy_data) { |
199 MockKeyringItem::attribute_query query; | 199 MockKeyringItem::attribute_query query; |
200 for (size_t i = 0; i < attributes->len; ++i) { | 200 for (size_t i = 0; i < attributes->len; ++i) { |
201 GnomeKeyringAttribute attribute = | 201 GnomeKeyringAttribute attribute = |
202 g_array_index(attributes, GnomeKeyringAttribute, i); | 202 g_array_index(attributes, GnomeKeyringAttribute, i); |
203 if (attribute.type == GNOME_KEYRING_ATTRIBUTE_TYPE_STRING) { | 203 if (attribute.type == GNOME_KEYRING_ATTRIBUTE_TYPE_STRING) { |
204 query.push_back( | 204 query.push_back( |
205 make_pair(std::string(attribute.name), | 205 make_pair(std::string(attribute.name), |
206 MockKeyringItem::ItemAttribute(attribute.value.string))); | 206 MockKeyringItem::ItemAttribute(attribute.value.string))); |
207 VLOG(1) << "Querying with item attribute " << attribute.name | 207 VLOG(1) << "Querying with item attribute " << attribute.name |
208 << ", value '" << query.back().second.value_string << "'"; | 208 << ", value '" << query.back().second.value_string << "'"; |
209 } else { | 209 } else { |
210 query.push_back( | 210 query.push_back( |
211 make_pair(std::string(attribute.name), | 211 make_pair(std::string(attribute.name), |
212 MockKeyringItem::ItemAttribute(attribute.value.integer))); | 212 MockKeyringItem::ItemAttribute(attribute.value.integer))); |
213 VLOG(1) << "Querying with item attribute " << attribute.name << ", value " | 213 VLOG(1) << "Querying with item attribute " << attribute.name << ", value " |
214 << query.back().second.value_uint32; | 214 << query.back().second.value_uint32; |
215 } | 215 } |
216 } | 216 } |
217 // Find matches and add them to a list of results. | 217 // Find matches and add them to a list of results. |
218 GList* results = NULL; | 218 GList* results = nullptr; |
219 for (size_t i = 0; i < mock_keyring_items.size(); ++i) { | 219 for (size_t i = 0; i < mock_keyring_items.size(); ++i) { |
220 const MockKeyringItem* item = &mock_keyring_items[i]; | 220 const MockKeyringItem* item = &mock_keyring_items[i]; |
221 if (item->Matches(query)) { | 221 if (item->Matches(query)) { |
222 GnomeKeyringFound* found = new GnomeKeyringFound; | 222 GnomeKeyringFound* found = new GnomeKeyringFound; |
223 found->keyring = strdup(item->keyring.c_str()); | 223 found->keyring = strdup(item->keyring.c_str()); |
224 found->item_id = i; | 224 found->item_id = i; |
225 found->attributes = gnome_keyring_attribute_list_new(); | 225 found->attributes = gnome_keyring_attribute_list_new(); |
226 for (MockKeyringItem::attribute_map::const_iterator it = | 226 for (MockKeyringItem::attribute_map::const_iterator it = |
227 item->attributes.begin(); | 227 item->attributes.begin(); |
228 it != item->attributes.end(); | 228 it != item->attributes.end(); |
(...skipping 19 matching lines...) Expand all Loading... |
248 GList* element = g_list_first(results); | 248 GList* element = g_list_first(results); |
249 while (element) { | 249 while (element) { |
250 GnomeKeyringFound* found = static_cast<GnomeKeyringFound*>(element->data); | 250 GnomeKeyringFound* found = static_cast<GnomeKeyringFound*>(element->data); |
251 free(found->keyring); | 251 free(found->keyring); |
252 gnome_keyring_attribute_list_free(found->attributes); | 252 gnome_keyring_attribute_list_free(found->attributes); |
253 free(found->secret); | 253 free(found->secret); |
254 delete found; | 254 delete found; |
255 element = g_list_next(element); | 255 element = g_list_next(element); |
256 } | 256 } |
257 g_list_free(results); | 257 g_list_free(results); |
258 return NULL; | 258 return nullptr; |
259 } | 259 } |
260 | 260 |
261 const gchar* mock_gnome_keyring_result_to_message(GnomeKeyringResult res) { | 261 const gchar* mock_gnome_keyring_result_to_message(GnomeKeyringResult res) { |
262 return "mock keyring simulating failure"; | 262 return "mock keyring simulating failure"; |
263 } | 263 } |
264 | 264 |
265 // Inherit to get access to protected fields. | 265 // Inherit to get access to protected fields. |
266 class MockGnomeKeyringLoader : public GnomeKeyringLoader { | 266 class MockGnomeKeyringLoader : public GnomeKeyringLoader { |
267 public: | 267 public: |
268 static bool LoadMockGnomeKeyring() { | 268 static bool LoadMockGnomeKeyring() { |
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
645 form_list[index_non_psl]->signon_realm); | 645 form_list[index_non_psl]->signon_realm); |
646 EXPECT_EQ(kNewPassword, form_list[index_non_psl]->password_value); | 646 EXPECT_EQ(kNewPassword, form_list[index_non_psl]->password_value); |
647 } | 647 } |
648 | 648 |
649 void CheckMatchingWithScheme(const PasswordForm::Scheme& scheme) { | 649 void CheckMatchingWithScheme(const PasswordForm::Scheme& scheme) { |
650 other_auth_.scheme = scheme; | 650 other_auth_.scheme = scheme; |
651 | 651 |
652 // Don't match a non-HTML form with an HTML form. | 652 // Don't match a non-HTML form with an HTML form. |
653 EXPECT_FALSE(CheckCredentialAvailability( | 653 EXPECT_FALSE(CheckCredentialAvailability( |
654 other_auth_, GURL("http://www.example.com"), | 654 other_auth_, GURL("http://www.example.com"), |
655 PasswordForm::SCHEME_HTML, NULL)); | 655 PasswordForm::SCHEME_HTML, nullptr)); |
656 // Don't match an HTML form with non-HTML auth form. | 656 // Don't match an HTML form with non-HTML auth form. |
657 EXPECT_FALSE(CheckCredentialAvailability( | 657 EXPECT_FALSE(CheckCredentialAvailability( |
658 form_google_, GURL("http://www.google.com/"), scheme, NULL)); | 658 form_google_, GURL("http://www.google.com/"), scheme, nullptr)); |
659 // Don't match two different non-HTML auth forms with different origin. | 659 // Don't match two different non-HTML auth forms with different origin. |
660 EXPECT_FALSE(CheckCredentialAvailability( | 660 EXPECT_FALSE(CheckCredentialAvailability( |
661 other_auth_, GURL("http://first.example.com"), scheme, NULL)); | 661 other_auth_, GURL("http://first.example.com"), scheme, nullptr)); |
662 // Do match non-HTML forms from the same origin. | 662 // Do match non-HTML forms from the same origin. |
663 EXPECT_TRUE(CheckCredentialAvailability( | 663 EXPECT_TRUE(CheckCredentialAvailability( |
664 other_auth_, GURL("http://www.example.com/"), scheme, NULL)); | 664 other_auth_, GURL("http://www.example.com/"), scheme, nullptr)); |
665 } | 665 } |
666 | 666 |
667 void CheckRemoveLoginsBetween(RemoveBetweenMethod date_to_test) { | 667 void CheckRemoveLoginsBetween(RemoveBetweenMethod date_to_test) { |
668 NativeBackendGnome backend(42); | 668 NativeBackendGnome backend(42); |
669 backend.Init(); | 669 backend.Init(); |
670 | 670 |
671 base::Time now = base::Time::Now(); | 671 base::Time now = base::Time::Now(); |
672 base::Time next_day = now + base::TimeDelta::FromDays(1); | 672 base::Time next_day = now + base::TimeDelta::FromDays(1); |
673 form_google_.date_synced = base::Time(); | 673 form_google_.date_synced = base::Time(); |
674 form_isc_.date_synced = base::Time(); | 674 form_isc_.date_synced = base::Time(); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
800 form_facebook_, kMobileURL, PasswordForm::SCHEME_HTML, &result)); | 800 form_facebook_, kMobileURL, PasswordForm::SCHEME_HTML, &result)); |
801 EXPECT_EQ(kMobileURL, result.origin); | 801 EXPECT_EQ(kMobileURL, result.origin); |
802 EXPECT_EQ(kMobileURL.spec(), result.signon_realm); | 802 EXPECT_EQ(kMobileURL.spec(), result.signon_realm); |
803 } | 803 } |
804 | 804 |
805 // Save a password for www.facebook.com and see it not suggested for | 805 // Save a password for www.facebook.com and see it not suggested for |
806 // m-facebook.com. | 806 // m-facebook.com. |
807 TEST_F(NativeBackendGnomeTest, PSLMatchingNegativeDomainMismatch) { | 807 TEST_F(NativeBackendGnomeTest, PSLMatchingNegativeDomainMismatch) { |
808 EXPECT_FALSE(CheckCredentialAvailability( | 808 EXPECT_FALSE(CheckCredentialAvailability( |
809 form_facebook_, GURL("http://m-facebook.com/"), | 809 form_facebook_, GURL("http://m-facebook.com/"), |
810 PasswordForm::SCHEME_HTML, NULL)); | 810 PasswordForm::SCHEME_HTML, nullptr)); |
811 } | 811 } |
812 | 812 |
813 // Test PSL matching is off for domains excluded from it. | 813 // Test PSL matching is off for domains excluded from it. |
814 TEST_F(NativeBackendGnomeTest, PSLMatchingDisabledDomains) { | 814 TEST_F(NativeBackendGnomeTest, PSLMatchingDisabledDomains) { |
815 EXPECT_FALSE(CheckCredentialAvailability( | 815 EXPECT_FALSE(CheckCredentialAvailability( |
816 form_google_, GURL("http://one.google.com/"), | 816 form_google_, GURL("http://one.google.com/"), |
817 PasswordForm::SCHEME_HTML, NULL)); | 817 PasswordForm::SCHEME_HTML, nullptr)); |
818 } | 818 } |
819 | 819 |
820 // Make sure PSL matches aren't available for non-HTML forms. | 820 // Make sure PSL matches aren't available for non-HTML forms. |
821 TEST_F(NativeBackendGnomeTest, PSLMatchingDisabledForNonHTMLForms) { | 821 TEST_F(NativeBackendGnomeTest, PSLMatchingDisabledForNonHTMLForms) { |
822 CheckMatchingWithScheme(PasswordForm::SCHEME_BASIC); | 822 CheckMatchingWithScheme(PasswordForm::SCHEME_BASIC); |
823 CheckMatchingWithScheme(PasswordForm::SCHEME_DIGEST); | 823 CheckMatchingWithScheme(PasswordForm::SCHEME_DIGEST); |
824 CheckMatchingWithScheme(PasswordForm::SCHEME_OTHER); | 824 CheckMatchingWithScheme(PasswordForm::SCHEME_OTHER); |
825 | 825 |
826 } | 826 } |
827 | 827 |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1099 | 1099 |
1100 TEST_F(NativeBackendGnomeTest, RemoveLoginsCreatedBetween) { | 1100 TEST_F(NativeBackendGnomeTest, RemoveLoginsCreatedBetween) { |
1101 CheckRemoveLoginsBetween(CREATED); | 1101 CheckRemoveLoginsBetween(CREATED); |
1102 } | 1102 } |
1103 | 1103 |
1104 TEST_F(NativeBackendGnomeTest, RemoveLoginsSyncedBetween) { | 1104 TEST_F(NativeBackendGnomeTest, RemoveLoginsSyncedBetween) { |
1105 CheckRemoveLoginsBetween(SYNCED); | 1105 CheckRemoveLoginsBetween(SYNCED); |
1106 } | 1106 } |
1107 | 1107 |
1108 // TODO(mdm): add more basic tests here at some point. | 1108 // TODO(mdm): add more basic tests here at some point. |
OLD | NEW |