personal_data_manager_android.cc revision a36e5920737c6adbddd3e43b760e5de8431db6e0
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"
14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "components/autofill/core/browser/autofill_country.h"
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/field_types.h"
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "jni/PersonalDataManager_jni.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using base::android::ConvertJavaStringToUTF8;
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using base::android::ConvertUTF16ToJavaString;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using base::android::ConvertUTF8ToJavaString;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using base::android::ScopedJavaLocalRef;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill {
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Profile* GetDefaultProfile() {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return g_browser_process->profile_manager()->GetDefaultProfile();
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jobject> CreateJavaProfileFromNative(
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    JNIEnv* env,
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const AutofillProfile& profile) {
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return Java_AutofillProfile_create(
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      env,
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      ConvertUTF8ToJavaString(env, profile.guid()).obj(),
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      ConvertUTF8ToJavaString(env, profile.origin()).obj(),
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(env, profile.GetRawInfo(NAME_FULL)).obj(),
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(env, profile.GetRawInfo(COMPANY_NAME)).obj(),
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          env,
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          profile.GetRawInfo(ADDRESS_HOME_LINE1)).obj(),
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          env,
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          profile.GetRawInfo(ADDRESS_HOME_LINE2)).obj(),
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          env,
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          profile.GetRawInfo(ADDRESS_HOME_CITY)).obj(),
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          env,
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          profile.GetRawInfo(ADDRESS_HOME_STATE)).obj(),
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          env,
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          profile.GetRawInfo(ADDRESS_HOME_ZIP)).obj(),
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          env,
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          profile.GetInfo(ADDRESS_HOME_COUNTRY,
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          g_browser_process->GetApplicationLocale())).obj(),
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          env,
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          profile.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)).obj(),
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(env, profile.GetRawInfo(EMAIL_ADDRESS)).obj());
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PopulateNativeProfileFromJava(
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const jobject& jprofile,
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    JNIEnv* env,
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    AutofillProfile* profile) {
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  profile->set_origin(
7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      ConvertJavaStringToUTF8(
7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          Java_AutofillProfile_getOrigin(env, jprofile)));
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile->SetRawInfo(
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      NAME_FULL,
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          Java_AutofillProfile_getFullName(env, jprofile)));
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile->SetRawInfo(
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      COMPANY_NAME,
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          Java_AutofillProfile_getCompanyName(env, jprofile)));
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile->SetRawInfo(
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ADDRESS_HOME_LINE1,
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          Java_AutofillProfile_getAddressLine1(env, jprofile)));
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile->SetRawInfo(
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ADDRESS_HOME_LINE2,
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          Java_AutofillProfile_getAddressLine2(env, jprofile)));
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile->SetRawInfo(
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ADDRESS_HOME_CITY,
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          Java_AutofillProfile_getCity(env, jprofile)));
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile->SetRawInfo(
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ADDRESS_HOME_STATE,
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          Java_AutofillProfile_getState(env, jprofile)));
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile->SetRawInfo(
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ADDRESS_HOME_ZIP,
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          Java_AutofillProfile_getZip(env, jprofile)));
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  profile->SetInfo(
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ADDRESS_HOME_COUNTRY,
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          Java_AutofillProfile_getCountry(env, jprofile)),
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      g_browser_process->GetApplicationLocale());
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile->SetRawInfo(
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      PHONE_HOME_WHOLE_NUMBER,
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          Java_AutofillProfile_getPhoneNumber(env, jprofile)));
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile->SetRawInfo(
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      EMAIL_ADDRESS,
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          Java_AutofillProfile_getEmailAddress(env, jprofile)));
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jobject> CreateJavaCreditCardFromNative(
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    JNIEnv* env,
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const CreditCard& card) {
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return Java_CreditCard_create(
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      env,
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      ConvertUTF8ToJavaString(env, card.guid()).obj(),
12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      ConvertUTF8ToJavaString(env, card.origin()).obj(),
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NAME)).obj(),
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(env, card.GetRawInfo(CREDIT_CARD_NUMBER)).obj(),
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(env, card.ObfuscatedNumber()).obj(),
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          env,
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          card.GetRawInfo(CREDIT_CARD_EXP_MONTH)).obj(),
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertUTF16ToJavaString(
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          env,
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)).obj());
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PopulateNativeCreditCardFromJava(
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const jobject& jcard,
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    JNIEnv* env,
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    CreditCard* card) {
13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  card->set_origin(
13890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      ConvertJavaStringToUTF8(Java_CreditCard_getOrigin(env, jcard)));
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  card->SetRawInfo(
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CREDIT_CARD_NAME,
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(Java_CreditCard_getName(env, jcard)));
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  card->SetRawInfo(
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CREDIT_CARD_NUMBER,
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(Java_CreditCard_getNumber(env, jcard)));
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  card->SetRawInfo(
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CREDIT_CARD_EXP_MONTH,
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(Java_CreditCard_getMonth(env, jcard)));
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  card->SetRawInfo(
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CREDIT_CARD_EXP_4_DIGIT_YEAR,
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF16(Java_CreditCard_getYear(env, jcard)));
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env,
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                       jobject obj)
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : weak_java_obj_(env, obj),
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      personal_data_manager_(
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          PersonalDataManagerFactory::GetForProfile(GetDefaultProfile())) {
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  personal_data_manager_->AddObserver(this);
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PersonalDataManagerAndroid::~PersonalDataManagerAndroid() {
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  personal_data_manager_->RemoveObserver(this);
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)jint PersonalDataManagerAndroid::GetProfileCount(JNIEnv* unused_env,
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                 jobject unused_obj) {
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return personal_data_manager_->GetProfiles().size();
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetProfileByIndex(
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    JNIEnv* env,
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    jobject unused_obj,
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    jint index) {
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::vector<AutofillProfile*>& profiles =
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      personal_data_manager_->GetProfiles();
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  size_t index_size_t = static_cast<size_t>(index);
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK_LT(index_size_t, profiles.size());
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return CreateJavaProfileFromNative(env, *profiles[index_size_t]);
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetProfileByGUID(
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    JNIEnv* env,
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    jobject unused_obj,
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    jstring jguid) {
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AutofillProfile* profile = personal_data_manager_->GetProfileByGUID(
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConvertJavaStringToUTF8(env, jguid));
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!profile)
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return ScopedJavaLocalRef<jobject>();
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return CreateJavaProfileFromNative(env, *profile);
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jstring> PersonalDataManagerAndroid::SetProfile(
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    JNIEnv* env,
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    jobject unused_obj,
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    jobject jprofile) {
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string guid = ConvertJavaStringToUTF8(
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      env,
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Java_AutofillProfile_getGUID(env, jprofile).obj());
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AutofillProfile profile;
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PopulateNativeProfileFromJava(jprofile, env, &profile);
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (guid.empty()) {
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    personal_data_manager_->AddProfile(profile);
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else {
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    profile.set_guid(guid);
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    personal_data_manager_->UpdateProfile(profile);
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return ConvertUTF8ToJavaString(env, profile.guid());
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)
285a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Returns an ISO 3166-1-alpha-2 country code for a |jcountry_name| using
286a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// the application locale, or an empty string.
287a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)static jstring ToCountryCode(JNIEnv* env, jclass clazz, jstring jcountry_name) {
288a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  return ConvertUTF8ToJavaString(
289a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      env,
290a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      AutofillCountry::GetCountryCode(
291a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)          base::android::ConvertJavaStringToUTF16(env, jcountry_name),
292a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)          g_browser_process->GetApplicationLocale())).Release();
293a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
294a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static jint Init(JNIEnv* env, jobject obj) {
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PersonalDataManagerAndroid* personal_data_manager_android =
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      new PersonalDataManagerAndroid(env, obj);
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return reinterpret_cast<jint>(personal_data_manager_android);
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace autofill
302