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

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

Issue 283563002: Password Login Database: report correct changes from AddLogin(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: the nit addressed Created 6 years, 7 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 <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_util.h" 10 #include "base/strings/string_util.h"
11 #include "base/strings/stringprintf.h" 11 #include "base/strings/stringprintf.h"
12 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
13 #include "base/time/time.h" 13 #include "base/time/time.h"
14 #include "chrome/browser/password_manager/native_backend_gnome_x.h" 14 #include "chrome/browser/password_manager/native_backend_gnome_x.h"
15 #include "chrome/test/base/testing_profile.h" 15 #include "chrome/test/base/testing_profile.h"
16 #include "components/autofill/core/common/password_form.h" 16 #include "components/autofill/core/common/password_form.h"
17 #include "components/password_manager/core/browser/psl_matching_helper.h" 17 #include "components/password_manager/core/browser/psl_matching_helper.h"
18 #include "components/password_manager/core/common/password_manager_pref_names.h" 18 #include "components/password_manager/core/common/password_manager_pref_names.h"
19 #include "content/public/test/test_browser_thread.h" 19 #include "content/public/test/test_browser_thread.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 21
22 using autofill::PasswordForm; 22 using autofill::PasswordForm;
23 using base::UTF8ToUTF16; 23 using base::UTF8ToUTF16;
24 using base::UTF16ToUTF8; 24 using base::UTF16ToUTF8;
25 using content::BrowserThread; 25 using content::BrowserThread;
26 using password_manager::PasswordStoreChange;
27 using password_manager::PasswordStoreChangeList;
26 28
27 namespace { 29 namespace {
28 30
29 // What follows is a very simple implementation of the subset of the GNOME 31 // What follows is a very simple implementation of the subset of the GNOME
30 // Keyring API that we actually use. It gets substituted for the real one by 32 // Keyring API that we actually use. It gets substituted for the real one by
31 // MockGnomeKeyringLoader, which hooks into the facility normally used to load 33 // MockGnomeKeyringLoader, which hooks into the facility normally used to load
32 // the GNOME Keyring library at runtime to avoid a static dependency on it. 34 // the GNOME Keyring library at runtime to avoid a static dependency on it.
33 35
34 struct MockKeyringItem { 36 struct MockKeyringItem {
35 MockKeyringItem() {} 37 MockKeyringItem() {}
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 GNOME_KEYRING_FOR_EACH_MOCKED_FUNC(GNOME_KEYRING_ASSIGN_POINTER) 273 GNOME_KEYRING_FOR_EACH_MOCKED_FUNC(GNOME_KEYRING_ASSIGN_POINTER)
272 #undef GNOME_KEYRING_ASSIGN_POINTER 274 #undef GNOME_KEYRING_ASSIGN_POINTER
273 keyring_loaded = true; 275 keyring_loaded = true;
274 // Reset the state of the mock library. 276 // Reset the state of the mock library.
275 mock_keyring_items.clear(); 277 mock_keyring_items.clear();
276 mock_keyring_reject_local_ids = false; 278 mock_keyring_reject_local_ids = false;
277 return true; 279 return true;
278 } 280 }
279 }; 281 };
280 282
283 void CheckPasswordChanges(const PasswordStoreChangeList& expected_list,
284 const PasswordStoreChangeList& actual_list) {
285 ASSERT_EQ(expected_list.size(), actual_list.size());
286 for (size_t i = 0; i < expected_list.size(); ++i) {
287 EXPECT_EQ(expected_list[i].type(), actual_list[i].type());
288 const PasswordForm& expected = expected_list[i].form();
289 const PasswordForm& actual = actual_list[i].form();
290
291 EXPECT_EQ(expected.origin, actual.origin);
292 EXPECT_EQ(expected.password_value, actual.password_value);
293 EXPECT_EQ(expected.action, actual.action);
294 EXPECT_EQ(expected.username_element, actual.username_element);
295 EXPECT_EQ(expected.username_value, actual.username_value);
296 EXPECT_EQ(expected.password_element, actual.password_element);
297 EXPECT_EQ(expected.submit_element, actual.submit_element);
298 EXPECT_EQ(expected.signon_realm, actual.signon_realm);
299 EXPECT_EQ(expected.ssl_valid, actual.ssl_valid);
300 EXPECT_EQ(expected.preferred, actual.preferred);
301 // We don't check the date created. It varies due to bug in the
302 // serialization. Integer seconds are saved instead of microseconds.
303 EXPECT_EQ(expected.blacklisted_by_user, actual.blacklisted_by_user);
304 EXPECT_EQ(expected.type, actual.type);
305 EXPECT_EQ(expected.times_used, actual.times_used);
306 EXPECT_EQ(expected.scheme, actual.scheme);
307 }
308 }
309
281 } // anonymous namespace 310 } // anonymous namespace
282 311
283 class NativeBackendGnomeTest : public testing::Test { 312 class NativeBackendGnomeTest : public testing::Test {
284 protected: 313 protected:
285 enum UpdateType { // Used in CheckPSLUpdate(). 314 enum UpdateType { // Used in CheckPSLUpdate().
286 UPDATE_BY_UPDATELOGIN, 315 UPDATE_BY_UPDATELOGIN,
287 UPDATE_BY_ADDLOGIN, 316 UPDATE_BY_ADDLOGIN,
288 }; 317 };
289 318
290 NativeBackendGnomeTest() 319 NativeBackendGnomeTest()
291 : ui_thread_(BrowserThread::UI, &message_loop_), 320 : ui_thread_(BrowserThread::UI, &message_loop_),
292 db_thread_(BrowserThread::DB) { 321 db_thread_(BrowserThread::DB) {
293 } 322 }
294 323
295 virtual void SetUp() { 324 virtual void SetUp() {
296 ASSERT_TRUE(db_thread_.Start()); 325 ASSERT_TRUE(db_thread_.Start());
297 326
298 ASSERT_TRUE(MockGnomeKeyringLoader::LoadMockGnomeKeyring()); 327 ASSERT_TRUE(MockGnomeKeyringLoader::LoadMockGnomeKeyring());
299 328
300 form_google_.origin = GURL("http://www.google.com/"); 329 form_google_.origin = GURL("http://www.google.com/");
301 form_google_.action = GURL("http://www.google.com/login"); 330 form_google_.action = GURL("http://www.google.com/login");
302 form_google_.username_element = UTF8ToUTF16("user"); 331 form_google_.username_element = UTF8ToUTF16("user");
303 form_google_.username_value = UTF8ToUTF16("joeschmoe"); 332 form_google_.username_value = UTF8ToUTF16("joeschmoe");
304 form_google_.password_element = UTF8ToUTF16("pass"); 333 form_google_.password_element = UTF8ToUTF16("pass");
305 form_google_.password_value = UTF8ToUTF16("seekrit"); 334 form_google_.password_value = UTF8ToUTF16("seekrit");
306 form_google_.submit_element = UTF8ToUTF16("submit"); 335 form_google_.submit_element = UTF8ToUTF16("submit");
307 form_google_.signon_realm = "http://www.google.com/"; 336 form_google_.signon_realm = "http://www.google.com/";
308 form_google_.type = PasswordForm::TYPE_GENERATED; 337 form_google_.type = PasswordForm::TYPE_GENERATED;
338 form_google_.date_created = base::Time::Now();
309 339
310 form_facebook_.origin = GURL("http://www.facebook.com/"); 340 form_facebook_.origin = GURL("http://www.facebook.com/");
311 form_facebook_.action = GURL("http://www.facebook.com/login"); 341 form_facebook_.action = GURL("http://www.facebook.com/login");
312 form_facebook_.username_element = UTF8ToUTF16("user"); 342 form_facebook_.username_element = UTF8ToUTF16("user");
313 form_facebook_.username_value = UTF8ToUTF16("a"); 343 form_facebook_.username_value = UTF8ToUTF16("a");
314 form_facebook_.password_element = UTF8ToUTF16("password"); 344 form_facebook_.password_element = UTF8ToUTF16("password");
315 form_facebook_.password_value = UTF8ToUTF16("b"); 345 form_facebook_.password_value = UTF8ToUTF16("b");
316 form_facebook_.submit_element = UTF8ToUTF16("submit"); 346 form_facebook_.submit_element = UTF8ToUTF16("submit");
317 form_facebook_.signon_realm = "http://www.facebook.com/"; 347 form_facebook_.signon_realm = "http://www.facebook.com/";
348 form_facebook_.date_created = base::Time::Now();
318 349
319 form_isc_.origin = GURL("http://www.isc.org/"); 350 form_isc_.origin = GURL("http://www.isc.org/");
320 form_isc_.action = GURL("http://www.isc.org/auth"); 351 form_isc_.action = GURL("http://www.isc.org/auth");
321 form_isc_.username_element = UTF8ToUTF16("id"); 352 form_isc_.username_element = UTF8ToUTF16("id");
322 form_isc_.username_value = UTF8ToUTF16("janedoe"); 353 form_isc_.username_value = UTF8ToUTF16("janedoe");
323 form_isc_.password_element = UTF8ToUTF16("passwd"); 354 form_isc_.password_element = UTF8ToUTF16("passwd");
324 form_isc_.password_value = UTF8ToUTF16("ihazabukkit"); 355 form_isc_.password_value = UTF8ToUTF16("ihazabukkit");
325 form_isc_.submit_element = UTF8ToUTF16("login"); 356 form_isc_.submit_element = UTF8ToUTF16("login");
326 form_isc_.signon_realm = "http://www.isc.org/"; 357 form_isc_.signon_realm = "http://www.isc.org/";
358 form_isc_.date_created = base::Time::Now();
327 359
328 other_auth_.origin = GURL("http://www.example.com/"); 360 other_auth_.origin = GURL("http://www.example.com/");
329 other_auth_.username_value = UTF8ToUTF16("username"); 361 other_auth_.username_value = UTF8ToUTF16("username");
330 other_auth_.password_value = UTF8ToUTF16("pass"); 362 other_auth_.password_value = UTF8ToUTF16("pass");
331 other_auth_.signon_realm = "http://www.example.com/Realm"; 363 other_auth_.signon_realm = "http://www.example.com/Realm";
364 other_auth_.date_created = base::Time::Now();
332 } 365 }
333 366
334 virtual void TearDown() { 367 virtual void TearDown() {
335 base::MessageLoop::current()->PostTask(FROM_HERE, 368 base::MessageLoop::current()->PostTask(FROM_HERE,
336 base::MessageLoop::QuitClosure()); 369 base::MessageLoop::QuitClosure());
337 base::MessageLoop::current()->Run(); 370 base::MessageLoop::current()->Run();
338 db_thread_.Stop(); 371 db_thread_.Stop();
339 } 372 }
340 373
341 void RunBothThreads() { 374 void RunBothThreads() {
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 828
796 EXPECT_EQ(1u, mock_keyring_items.size()); 829 EXPECT_EQ(1u, mock_keyring_items.size());
797 if (mock_keyring_items.size() > 0) 830 if (mock_keyring_items.size() > 0)
798 CheckMockKeyringItem(&mock_keyring_items[0], form_google_, "chrome-42"); 831 CheckMockKeyringItem(&mock_keyring_items[0], form_google_, "chrome-42");
799 } 832 }
800 833
801 TEST_F(NativeBackendGnomeTest, AddDuplicateLogin) { 834 TEST_F(NativeBackendGnomeTest, AddDuplicateLogin) {
802 NativeBackendGnome backend(42); 835 NativeBackendGnome backend(42);
803 backend.Init(); 836 backend.Init();
804 837
805 BrowserThread::PostTask( 838 PasswordStoreChangeList changes;
839 changes.push_back(PasswordStoreChange(PasswordStoreChange::ADD,
840 form_google_));
841 BrowserThread::PostTaskAndReplyWithResult(
806 BrowserThread::DB, FROM_HERE, 842 BrowserThread::DB, FROM_HERE,
807 base::Bind(base::IgnoreResult(&NativeBackendGnome::AddLogin), 843 base::Bind(&NativeBackendGnome::AddLogin,
808 base::Unretained(&backend), form_google_)); 844 base::Unretained(&backend), form_google_),
809 BrowserThread::PostTask( 845 base::Bind(&CheckPasswordChanges, changes));
846
847 changes.clear();
848 changes.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE,
849 form_google_));
850 form_google_.times_used++;
851 changes.push_back(PasswordStoreChange(PasswordStoreChange::ADD,
852 form_google_));
853
854 BrowserThread::PostTaskAndReplyWithResult(
810 BrowserThread::DB, FROM_HERE, 855 BrowserThread::DB, FROM_HERE,
811 base::Bind(base::IgnoreResult(&NativeBackendGnome::AddLogin), 856 base::Bind(&NativeBackendGnome::AddLogin,
812 base::Unretained(&backend), form_google_)); 857 base::Unretained(&backend), form_google_),
858 base::Bind(&CheckPasswordChanges, changes));
813 859
814 RunBothThreads(); 860 RunBothThreads();
815 861
816 EXPECT_EQ(1u, mock_keyring_items.size()); 862 EXPECT_EQ(1u, mock_keyring_items.size());
817 if (mock_keyring_items.size() > 0) 863 if (mock_keyring_items.size() > 0)
818 CheckMockKeyringItem(&mock_keyring_items[0], form_google_, "chrome-42"); 864 CheckMockKeyringItem(&mock_keyring_items[0], form_google_, "chrome-42");
819 } 865 }
820 866
821 TEST_F(NativeBackendGnomeTest, ListLoginsAppends) { 867 TEST_F(NativeBackendGnomeTest, ListLoginsAppends) {
822 NativeBackendGnome backend(42); 868 NativeBackendGnome backend(42);
(...skipping 22 matching lines...) Expand all
845 // Quick check that we got two results back. 891 // Quick check that we got two results back.
846 EXPECT_EQ(2u, form_list.size()); 892 EXPECT_EQ(2u, form_list.size());
847 STLDeleteElements(&form_list); 893 STLDeleteElements(&form_list);
848 894
849 EXPECT_EQ(1u, mock_keyring_items.size()); 895 EXPECT_EQ(1u, mock_keyring_items.size());
850 if (mock_keyring_items.size() > 0) 896 if (mock_keyring_items.size() > 0)
851 CheckMockKeyringItem(&mock_keyring_items[0], form_google_, "chrome-42"); 897 CheckMockKeyringItem(&mock_keyring_items[0], form_google_, "chrome-42");
852 } 898 }
853 899
854 // TODO(mdm): add more basic tests here at some point. 900 // TODO(mdm): add more basic tests here at some point.
OLDNEW
« no previous file with comments | « chrome/browser/password_manager/native_backend_gnome_x.cc ('k') | chrome/browser/password_manager/native_backend_kwallet_x.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698