1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_ie_toolbar_import_win.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/registry.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_profile.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/credit_card.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/field_types.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/os_crypt/os_crypt.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::win::RegKey; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defined in autofill_ie_toolbar_import_win.cc. Not exposed in the header file. 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool ImportCurrentUserProfiles(const std::string& app_locale, 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<AutofillProfile>* profiles, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CreditCard>* credit_cards); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kUnitTestRegistrySubKey[] = L"SOFTWARE\\Chromium Unit Tests"; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kUnitTestUserOverrideSubKey[] = 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"SOFTWARE\\Chromium Unit Tests\\HKCU Override"; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t* const kProfileKey = 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"Software\\Google\\Google Toolbar\\4.0\\Autofill\\Profiles"; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t* const kCreditCardKey = 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"Software\\Google\\Google Toolbar\\4.0\\Autofill\\Credit Cards"; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t* const kPasswordHashValue = L"password_hash"; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t* const kSaltValue = L"salt"; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ValueDescription { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wchar_t const* const value_name; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wchar_t const* const value; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueDescription profile1[] = { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"name_first", L"John" }, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"name_middle", L"Herman" }, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"name_last", L"Doe" }, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"email", L"jdoe@test.com" }, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"company_name", L"Testcompany" }, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"phone_home_number", L"555-5555" }, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"phone_home_city_code", L"650" }, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"phone_home_country_code", L"1" }, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueDescription profile2[] = { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"name_first", L"Jane" }, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"name_last", L"Doe" }, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"email", L"janedoe@test.com" }, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"company_name", L"Testcompany" }, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueDescription credit_card[] = { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"credit_card_name", L"Tommy Gun" }, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "4111111111111111" encrypted: 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"credit_card_number", L"\xE53F\x19AB\xC1BF\xC9EB\xECCC\x9BDA\x8515" 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\xE14D\x6852\x80A8\x50A3\x4375\xFD9F\x1E07" 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\x790E\x7336\xB773\xAF33\x93EA\xB846\xEC89" 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\x265C\xD0E6\x4E23\xB75F\x7983" }, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"credit_card_exp_month", L"11" }, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"credit_card_exp_4_digit_year", L"2011" }, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueDescription empty_salt = { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"salt", L"\x1\x2\x3\x4\x5\x6\x7\x8\x9\xA\xB\xC\xD\xE\xF\x10\x11\x12\x13\x14" 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueDescription empty_password = { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"password_hash", L"" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueDescription protected_salt = { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"salt", L"\x4854\xB906\x9C7C\x50A6\x4376\xFD9D\x1E02" 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueDescription protected_password = { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"password_hash", L"\x18B7\xE586\x459B\x7457\xA066\x3842\x71DA" 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void EncryptAndWrite(RegKey* key, const ValueDescription* value) { 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string data; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t data_size = (lstrlen(value->value) + 1) * sizeof(wchar_t); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.resize(data_size); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(&data[0], value->value, data_size); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string encrypted_data; 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OSCrypt::EncryptString(data, &encrypted_data); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, key->WriteValue(value->value_name, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &encrypted_data[0], encrypted_data.size(), REG_BINARY)); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CreateSubkey(RegKey* key, wchar_t const* subkey_name, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ValueDescription* values, size_t values_size) { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey subkey; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subkey.Create(key->Handle(), subkey_name, KEY_ALL_ACCESS); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(subkey.Valid()); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < values_size; ++i) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EncryptAndWrite(&subkey, values + i); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutofillIeToolbarImportTest : public testing::Test { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillIeToolbarImportTest(); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // testing::Test method overrides: 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown(); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey temp_hkcu_hive_key_; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AutofillIeToolbarImportTest); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AutofillIeToolbarImportTest::AutofillIeToolbarImportTest() { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutofillIeToolbarImportTest::SetUp() { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_hkcu_hive_key_.Create(HKEY_CURRENT_USER, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUnitTestUserOverrideSubKey, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_ALL_ACCESS); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(temp_hkcu_hive_key_.Valid()); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, RegOverridePredefKey(HKEY_CURRENT_USER, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_hkcu_hive_key_.Handle())); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutofillIeToolbarImportTest::TearDown() { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, RegOverridePredefKey(HKEY_CURRENT_USER, NULL)); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_hkcu_hive_key_.Close(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey key(HKEY_CURRENT_USER, kUnitTestRegistrySubKey, KEY_ALL_ACCESS); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.DeleteKey(L""); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillIeToolbarImportTest, TestAutofillImport) { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey profile_key; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_key.Create(HKEY_CURRENT_USER, kProfileKey, KEY_ALL_ACCESS); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile_key.Valid()); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateSubkey(&profile_key, L"0", profile1, arraysize(profile1)); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateSubkey(&profile_key, L"1", profile2, arraysize(profile2)); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey cc_key; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cc_key.Create(HKEY_CURRENT_USER, kCreditCardKey, KEY_ALL_ACCESS); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cc_key.Valid()); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateSubkey(&cc_key, L"0", credit_card, arraysize(credit_card)); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EncryptAndWrite(&cc_key, &empty_password); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EncryptAndWrite(&cc_key, &empty_salt); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_key.Close(); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cc_key.Close(); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillProfile> profiles; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CreditCard> credit_cards; 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(ImportCurrentUserProfiles("en-US", &profiles, &credit_cards)); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, profiles.size()); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profiles are read in reverse order. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1[0].value, profiles[1].GetRawInfo(NAME_FIRST)); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1[1].value, profiles[1].GetRawInfo(NAME_MIDDLE)); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1[2].value, profiles[1].GetRawInfo(NAME_LAST)); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1[3].value, profiles[1].GetRawInfo(EMAIL_ADDRESS)); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1[4].value, profiles[1].GetRawInfo(COMPANY_NAME)); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(profile1[7].value, 1733240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch profiles[1].GetInfo(AutofillType(PHONE_HOME_COUNTRY_CODE), "US")); 1743240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_EQ(profile1[6].value, 1753240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch profiles[1].GetInfo(AutofillType(PHONE_HOME_CITY_CODE), "US")); 1763240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_EQ(L"5555555", 1773240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch profiles[1].GetInfo(AutofillType(PHONE_HOME_NUMBER), "US")); 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(L"1 650-555-5555", profiles[1].GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2[0].value, profiles[0].GetRawInfo(NAME_FIRST)); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2[1].value, profiles[0].GetRawInfo(NAME_LAST)); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2[2].value, profiles[0].GetRawInfo(EMAIL_ADDRESS)); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2[3].value, profiles[0].GetRawInfo(COMPANY_NAME)); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, credit_cards.size()); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(credit_card[0].value, credit_cards[0].GetRawInfo(CREDIT_CARD_NAME)); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(L"4111111111111111", 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_cards[0].GetRawInfo(CREDIT_CARD_NUMBER)); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(credit_card[2].value, 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_cards[0].GetRawInfo(CREDIT_CARD_EXP_MONTH)); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(credit_card[3].value, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_cards[0].GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mock password encrypted cc. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cc_key.Open(HKEY_CURRENT_USER, kCreditCardKey, KEY_ALL_ACCESS); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cc_key.Valid()); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EncryptAndWrite(&cc_key, &protected_password); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EncryptAndWrite(&cc_key, &protected_salt); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cc_key.Close(); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles.clear(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_cards.clear(); 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(ImportCurrentUserProfiles("en-US", &profiles, &credit_cards)); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Profiles are not protected. 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, profiles.size()); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Credit cards are. 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, credit_cards.size()); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 211