personal_data_manager_android.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/autofill/android/personal_data_manager_android.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/android/jni_string.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/format_macros.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/autofill/personal_data_manager_factory.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/field_types.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "jni/PersonalDataManager_jni.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using base::android::ConvertJavaStringToUTF8; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using base::android::ConvertUTF16ToJavaString; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using base::android::ConvertUTF8ToJavaString; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using base::android::ScopedJavaLocalRef; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Profile* GetDefaultProfile() { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return g_browser_process->profile_manager()->GetDefaultProfile(); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jobject> CreateJavaProfileFromNative( 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AutofillProfile& profile) { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Java_AutofillProfile_create( 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ConvertUTF8ToJavaString(env, profile.guid()).obj(), 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ConvertUTF8ToJavaString(env, profile.origin()).obj(), 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString(env, profile.GetRawInfo(NAME_FULL)).obj(), 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString(env, profile.GetRawInfo(COMPANY_NAME)).obj(), 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString( 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile.GetRawInfo(ADDRESS_HOME_LINE1)).obj(), 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString( 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile.GetRawInfo(ADDRESS_HOME_LINE2)).obj(), 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString( 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile.GetRawInfo(ADDRESS_HOME_CITY)).obj(), 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString( 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile.GetRawInfo(ADDRESS_HOME_STATE)).obj(), 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString( 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile.GetRawInfo(ADDRESS_HOME_ZIP)).obj(), 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString( 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile.GetInfo(ADDRESS_HOME_COUNTRY, 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_browser_process->GetApplicationLocale())).obj(), 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString( 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)).obj(), 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString(env, profile.GetRawInfo(EMAIL_ADDRESS)).obj()); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PopulateNativeProfileFromJava( 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const jobject& jprofile, 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutofillProfile* profile) { 6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile->set_origin( 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ConvertJavaStringToUTF8( 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Java_AutofillProfile_getOrigin(env, jprofile))); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawInfo( 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NAME_FULL, 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16( 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AutofillProfile_getFullName(env, jprofile))); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawInfo( 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) COMPANY_NAME, 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16( 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AutofillProfile_getCompanyName(env, jprofile))); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawInfo( 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ADDRESS_HOME_LINE1, 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16( 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AutofillProfile_getAddressLine1(env, jprofile))); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawInfo( 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ADDRESS_HOME_LINE2, 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16( 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AutofillProfile_getAddressLine2(env, jprofile))); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawInfo( 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ADDRESS_HOME_CITY, 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16( 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AutofillProfile_getCity(env, jprofile))); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawInfo( 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ADDRESS_HOME_STATE, 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16( 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AutofillProfile_getState(env, jprofile))); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawInfo( 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ADDRESS_HOME_ZIP, 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16( 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AutofillProfile_getZip(env, jprofile))); 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile->SetInfo( 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ADDRESS_HOME_COUNTRY, 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16( 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_AutofillProfile_getCountry(env, jprofile)), 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_browser_process->GetApplicationLocale()); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawInfo( 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PHONE_HOME_WHOLE_NUMBER, 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16( 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AutofillProfile_getPhoneNumber(env, jprofile))); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawInfo( 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EMAIL_ADDRESS, 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16( 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AutofillProfile_getEmailAddress(env, jprofile))); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jobject> CreateJavaCreditCardFromNative( 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CreditCard& card) { 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Java_CreditCard_create( 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ConvertUTF8ToJavaString(env, card.guid()).obj(), 12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ConvertUTF8ToJavaString(env, card.origin()).obj(), 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NAME)).obj(), 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NUMBER)).obj(), 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString(env, card.ObfuscatedNumber()).obj(), 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString( 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.GetRawInfo(CREDIT_CARD_EXP_MONTH)).obj(), 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString( 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)).obj()); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PopulateNativeCreditCardFromJava( 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const jobject& jcard, 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreditCard* card) { 13690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) card->set_origin( 13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ConvertJavaStringToUTF8(Java_CreditCard_getOrigin(env, jcard))); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card->SetRawInfo( 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CREDIT_CARD_NAME, 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16(Java_CreditCard_getName(env, jcard))); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card->SetRawInfo( 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CREDIT_CARD_NUMBER, 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16(Java_CreditCard_getNumber(env, jcard))); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card->SetRawInfo( 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CREDIT_CARD_EXP_MONTH, 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16(Java_CreditCard_getMonth(env, jcard))); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card->SetRawInfo( 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CREDIT_CARD_EXP_4_DIGIT_YEAR, 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16(Java_CreditCard_getYear(env, jcard))); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env, 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : weak_java_obj_(env, obj), 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) personal_data_manager_( 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PersonalDataManagerFactory::GetForProfile(GetDefaultProfile())) { 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) personal_data_manager_->AddObserver(this); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PersonalDataManagerAndroid::~PersonalDataManagerAndroid() { 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) personal_data_manager_->RemoveObserver(this); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)jint PersonalDataManagerAndroid::GetProfileCount(JNIEnv* unused_env, 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject unused_obj) { 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return personal_data_manager_->GetProfiles().size(); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetProfileByIndex( 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject unused_obj, 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jint index) { 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<AutofillProfile*>& profiles = 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) personal_data_manager_->GetProfiles(); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t index_size_t = static_cast<size_t>(index); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_LT(index_size_t, profiles.size()); 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateJavaProfileFromNative(env, *profiles[index_size_t]); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetProfileByGUID( 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject unused_obj, 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jstring jguid) { 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutofillProfile* profile = personal_data_manager_->GetProfileByGUID( 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF8(env, jguid)); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!profile) 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ScopedJavaLocalRef<jobject>(); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateJavaProfileFromNative(env, *profile); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jstring> PersonalDataManagerAndroid::SetProfile( 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject unused_obj, 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject jprofile) { 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string guid = ConvertJavaStringToUTF8( 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AutofillProfile_getGUID(env, jprofile).obj()); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutofillProfile profile; 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PopulateNativeProfileFromJava(jprofile, env, &profile); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (guid.empty()) { 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) personal_data_manager_->AddProfile(profile); 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile.set_guid(guid); 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) personal_data_manager_->UpdateProfile(profile); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return ConvertUTF8ToJavaString(env, profile.guid()); 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)jint PersonalDataManagerAndroid::GetCreditCardCount(JNIEnv* unused_env, 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject unused_obj) { 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return personal_data_manager_->GetCreditCards().size(); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetCreditCardByIndex( 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject unused_obj, 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jint index) { 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<CreditCard*>& credit_cards = 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) personal_data_manager_->GetCreditCards(); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t index_size_t = static_cast<size_t>(index); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_LT(index_size_t, credit_cards.size()); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateJavaCreditCardFromNative(env, *credit_cards[index_size_t]); 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetCreditCardByGUID( 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject unused_obj, 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jstring jguid) { 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreditCard* card = personal_data_manager_->GetCreditCardByGUID( 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF8(env, jguid)); 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!card) 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ScopedJavaLocalRef<jobject>(); 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateJavaCreditCardFromNative(env, *card); 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jstring> PersonalDataManagerAndroid::SetCreditCard( 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject unused_obj, 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject jcard) { 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string guid = ConvertJavaStringToUTF8( 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_CreditCard_getGUID(env, jcard).obj()); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreditCard card; 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PopulateNativeCreditCardFromJava(jcard, env, &card); 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (guid.empty()) { 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) personal_data_manager_->AddCreditCard(card); 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) card.set_guid(guid); 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) personal_data_manager_->UpdateCreditCard(card); 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return ConvertUTF8ToJavaString(env, card.guid()); 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PersonalDataManagerAndroid::RemoveByGUID(JNIEnv* env, 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject unused_obj, 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jstring jguid) { 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) personal_data_manager_->RemoveByGUID(ConvertJavaStringToUTF8(env, jguid)); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PersonalDataManagerAndroid::OnPersonalDataChanged() { 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (weak_java_obj_.get(env).is_null()) 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_PersonalDataManager_personalDataChanged(env, 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) weak_java_obj_.get(env).obj()); 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool PersonalDataManagerAndroid::Register(JNIEnv* env) { 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return RegisterNativesImpl(env); 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static jint Init(JNIEnv* env, jobject obj) { 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PersonalDataManagerAndroid* personal_data_manager_android = 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new PersonalDataManagerAndroid(env, obj); 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return reinterpret_cast<jint>(personal_data_manager_android); 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 292