OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/autofill/android/personal_data_manager_android.h" | 5 #include "chrome/browser/autofill/android/personal_data_manager_android.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <algorithm> | |
9 #include <memory> | 8 #include <memory> |
10 #include <utility> | 9 #include <utility> |
11 | 10 |
12 #include "base/android/jni_array.h" | 11 #include "base/android/jni_array.h" |
13 #include "base/android/jni_string.h" | 12 #include "base/android/jni_string.h" |
14 #include "base/command_line.h" | 13 #include "base/command_line.h" |
15 #include "base/format_macros.h" | 14 #include "base/format_macros.h" |
16 #include "base/memory/weak_ptr.h" | 15 #include "base/memory/weak_ptr.h" |
17 #include "base/strings/stringprintf.h" | 16 #include "base/strings/stringprintf.h" |
18 #include "base/strings/utf_string_conversions.h" | 17 #include "base/strings/utf_string_conversions.h" |
19 #include "base/time/time.h" | |
20 #include "chrome/browser/android/resource_mapper.h" | 18 #include "chrome/browser/android/resource_mapper.h" |
21 #include "chrome/browser/autofill/personal_data_manager_factory.h" | 19 #include "chrome/browser/autofill/personal_data_manager_factory.h" |
22 #include "chrome/browser/browser_process.h" | 20 #include "chrome/browser/browser_process.h" |
23 #include "chrome/browser/profiles/profile.h" | 21 #include "chrome/browser/profiles/profile.h" |
24 #include "chrome/browser/profiles/profile_manager.h" | 22 #include "chrome/browser/profiles/profile_manager.h" |
25 #include "chrome/common/pref_names.h" | 23 #include "chrome/common/pref_names.h" |
26 #include "components/autofill/content/browser/content_autofill_driver.h" | 24 #include "components/autofill/content/browser/content_autofill_driver.h" |
27 #include "components/autofill/content/browser/content_autofill_driver_factory.h" | 25 #include "components/autofill/content/browser/content_autofill_driver_factory.h" |
28 #include "components/autofill/core/browser/autofill_country.h" | 26 #include "components/autofill/core/browser/autofill_country.h" |
29 #include "components/autofill/core/browser/autofill_type.h" | 27 #include "components/autofill/core/browser/autofill_type.h" |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 : weak_java_obj_(env, obj), | 281 : weak_java_obj_(env, obj), |
284 personal_data_manager_(PersonalDataManagerFactory::GetForProfile( | 282 personal_data_manager_(PersonalDataManagerFactory::GetForProfile( |
285 ProfileManager::GetActiveUserProfile())) { | 283 ProfileManager::GetActiveUserProfile())) { |
286 personal_data_manager_->AddObserver(this); | 284 personal_data_manager_->AddObserver(this); |
287 } | 285 } |
288 | 286 |
289 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() { | 287 PersonalDataManagerAndroid::~PersonalDataManagerAndroid() { |
290 personal_data_manager_->RemoveObserver(this); | 288 personal_data_manager_->RemoveObserver(this); |
291 } | 289 } |
292 | 290 |
293 ScopedJavaLocalRef<jobjectArray> | 291 jint PersonalDataManagerAndroid::GetProfileCount( |
294 PersonalDataManagerAndroid::GetProfileGUIDsForSettings( | 292 JNIEnv* unused_env, |
295 JNIEnv* env, | |
296 const JavaParamRef<jobject>& unused_obj) { | 293 const JavaParamRef<jobject>& unused_obj) { |
297 return GetProfileGUIDs(env, personal_data_manager_->GetProfiles()); | 294 return personal_data_manager_->GetProfiles().size(); |
298 } | 295 } |
299 | 296 |
300 ScopedJavaLocalRef<jobjectArray> | 297 ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetProfileByIndex( |
301 PersonalDataManagerAndroid::GetProfileGUIDsToSuggest( | |
302 JNIEnv* env, | 298 JNIEnv* env, |
303 const JavaParamRef<jobject>& unused_obj) { | 299 const JavaParamRef<jobject>& unused_obj, |
304 return GetProfileGUIDs(env, personal_data_manager_->GetProfilesToSuggest()); | 300 jint index) { |
| 301 const std::vector<AutofillProfile*>& profiles = |
| 302 personal_data_manager_->GetProfiles(); |
| 303 size_t index_size_t = static_cast<size_t>(index); |
| 304 DCHECK_LT(index_size_t, profiles.size()); |
| 305 return CreateJavaProfileFromNative(env, *profiles[index_size_t]); |
305 } | 306 } |
306 | 307 |
307 ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetProfileByGUID( | 308 ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetProfileByGUID( |
308 JNIEnv* env, | 309 JNIEnv* env, |
309 const JavaParamRef<jobject>& unused_obj, | 310 const JavaParamRef<jobject>& unused_obj, |
310 const JavaParamRef<jstring>& jguid) { | 311 const JavaParamRef<jstring>& jguid) { |
311 AutofillProfile* profile = personal_data_manager_->GetProfileByGUID( | 312 AutofillProfile* profile = personal_data_manager_->GetProfileByGUID( |
312 ConvertJavaStringToUTF8(env, jguid)); | 313 ConvertJavaStringToUTF8(env, jguid)); |
313 if (!profile) | 314 if (!profile) |
314 return ScopedJavaLocalRef<jobject>(); | 315 return ScopedJavaLocalRef<jobject>(); |
(...skipping 15 matching lines...) Expand all Loading... |
330 if (guid.empty()) { | 331 if (guid.empty()) { |
331 personal_data_manager_->AddProfile(profile); | 332 personal_data_manager_->AddProfile(profile); |
332 } else { | 333 } else { |
333 profile.set_guid(guid); | 334 profile.set_guid(guid); |
334 personal_data_manager_->UpdateProfile(profile); | 335 personal_data_manager_->UpdateProfile(profile); |
335 } | 336 } |
336 | 337 |
337 return ConvertUTF8ToJavaString(env, profile.guid()); | 338 return ConvertUTF8ToJavaString(env, profile.guid()); |
338 } | 339 } |
339 | 340 |
340 ScopedJavaLocalRef<jobjectArray> | |
341 PersonalDataManagerAndroid::GetProfileLabelsForSettings( | |
342 JNIEnv* env, | |
343 const JavaParamRef<jobject>& unused_obj) { | |
344 return GetProfileLabels(env, false, personal_data_manager_->GetProfiles()); | |
345 } | |
346 | |
347 ScopedJavaLocalRef<jobjectArray> | |
348 PersonalDataManagerAndroid::GetProfileLabelsToSuggest( | |
349 JNIEnv* env, | |
350 const JavaParamRef<jobject>& unused_obj) { | |
351 return GetProfileLabels(env, true, | |
352 personal_data_manager_->GetProfilesToSuggest()); | |
353 } | |
354 | |
355 base::android::ScopedJavaLocalRef<jobjectArray> | |
356 PersonalDataManagerAndroid::GetCreditCardGUIDsForSettings( | |
357 JNIEnv* env, | |
358 const base::android::JavaParamRef<jobject>& unused_obj) { | |
359 return GetCreditCardGUIDs(env, personal_data_manager_->GetCreditCards()); | |
360 } | |
361 | |
362 base::android::ScopedJavaLocalRef<jobjectArray> | |
363 PersonalDataManagerAndroid::GetCreditCardGUIDsToSuggest( | |
364 JNIEnv* env, | |
365 const base::android::JavaParamRef<jobject>& unused_obj) { | |
366 return GetCreditCardGUIDs(env, | |
367 personal_data_manager_->GetCreditCardsToSuggest()); | |
368 } | |
369 | |
370 ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetCreditCardByGUID( | |
371 JNIEnv* env, | |
372 const JavaParamRef<jobject>& unused_obj, | |
373 const JavaParamRef<jstring>& jguid) { | |
374 CreditCard* card = personal_data_manager_->GetCreditCardByGUID( | |
375 ConvertJavaStringToUTF8(env, jguid)); | |
376 if (!card) | |
377 return ScopedJavaLocalRef<jobject>(); | |
378 | |
379 return CreateJavaCreditCardFromNative(env, *card); | |
380 } | |
381 | |
382 ScopedJavaLocalRef<jstring> PersonalDataManagerAndroid::SetCreditCard( | |
383 JNIEnv* env, | |
384 const JavaParamRef<jobject>& unused_obj, | |
385 const JavaParamRef<jobject>& jcard) { | |
386 std::string guid = ConvertJavaStringToUTF8( | |
387 env, | |
388 Java_CreditCard_getGUID(env, jcard).obj()); | |
389 | |
390 CreditCard card; | |
391 PopulateNativeCreditCardFromJava(jcard, env, &card); | |
392 | |
393 if (guid.empty()) { | |
394 personal_data_manager_->AddCreditCard(card); | |
395 } else { | |
396 card.set_guid(guid); | |
397 personal_data_manager_->UpdateCreditCard(card); | |
398 } | |
399 return ConvertUTF8ToJavaString(env, card.guid()); | |
400 } | |
401 | |
402 void PersonalDataManagerAndroid::AddServerCreditCardForTest( | |
403 JNIEnv* env, | |
404 const base::android::JavaParamRef<jobject>& unused_obj, | |
405 const base::android::JavaParamRef<jobject>& jcard) { | |
406 std::unique_ptr<CreditCard> card(new CreditCard); | |
407 PopulateNativeCreditCardFromJava(jcard, env, card.get()); | |
408 card->set_record_type(CreditCard::MASKED_SERVER_CARD); | |
409 personal_data_manager_->AddServerCreditCardForTest(std::move(card)); | |
410 } | |
411 | |
412 void PersonalDataManagerAndroid::RemoveByGUID( | |
413 JNIEnv* env, | |
414 const JavaParamRef<jobject>& unused_obj, | |
415 const JavaParamRef<jstring>& jguid) { | |
416 personal_data_manager_->RemoveByGUID(ConvertJavaStringToUTF8(env, jguid)); | |
417 } | |
418 | |
419 void PersonalDataManagerAndroid::ClearUnmaskedCache( | |
420 JNIEnv* env, | |
421 const JavaParamRef<jobject>& unused_obj, | |
422 const JavaParamRef<jstring>& guid) { | |
423 personal_data_manager_->ResetFullServerCard( | |
424 ConvertJavaStringToUTF8(env, guid)); | |
425 } | |
426 | |
427 void PersonalDataManagerAndroid::GetFullCardForPaymentRequest( | |
428 JNIEnv* env, | |
429 const JavaParamRef<jobject>& unused_obj, | |
430 const JavaParamRef<jobject>& jweb_contents, | |
431 const JavaParamRef<jstring>& jguid, | |
432 const JavaParamRef<jobject>& jdelegate) { | |
433 // Self-deleting object. | |
434 (new FullCardRequester()) | |
435 ->GetFullCard(env, jweb_contents, jdelegate, | |
436 personal_data_manager_->GetCreditCardByGUID( | |
437 ConvertJavaStringToUTF8(env, jguid))); | |
438 } | |
439 | |
440 void PersonalDataManagerAndroid::OnPersonalDataChanged() { | |
441 JNIEnv* env = base::android::AttachCurrentThread(); | |
442 if (weak_java_obj_.get(env).is_null()) | |
443 return; | |
444 | |
445 Java_PersonalDataManager_personalDataChanged(env, | |
446 weak_java_obj_.get(env).obj()); | |
447 } | |
448 | |
449 // static | |
450 bool PersonalDataManagerAndroid::Register(JNIEnv* env) { | |
451 return RegisterNativesImpl(env); | |
452 } | |
453 | |
454 void PersonalDataManagerAndroid::SetProfileUseStatsForTesting( | |
455 JNIEnv* env, | |
456 const JavaParamRef<jobject>& unused_obj, | |
457 const JavaParamRef<jstring>& jguid, | |
458 jint count, | |
459 jint date) { | |
460 DCHECK(count >= 0 && date >= 0); | |
461 | |
462 AutofillProfile* profile = personal_data_manager_->GetProfileByGUID( | |
463 ConvertJavaStringToUTF8(env, jguid)); | |
464 if (!profile) | |
465 return; | |
466 | |
467 profile->set_use_count(static_cast<size_t>(count)); | |
468 profile->set_use_date(base::Time::FromTimeT(date)); | |
469 } | |
470 | |
471 void PersonalDataManagerAndroid::SetCreditCardUseStatsForTesting( | |
472 JNIEnv* env, | |
473 const JavaParamRef<jobject>& unused_obj, | |
474 const JavaParamRef<jstring>& jguid, | |
475 jint count, | |
476 jint date) { | |
477 DCHECK(count >= 0 && date >= 0); | |
478 | |
479 CreditCard* card = personal_data_manager_->GetCreditCardByGUID( | |
480 ConvertJavaStringToUTF8(env, jguid)); | |
481 if (!card) | |
482 return; | |
483 | |
484 card->set_use_count(static_cast<size_t>(count)); | |
485 card->set_use_date(base::Time::FromTimeT(date)); | |
486 } | |
487 | |
488 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileGUIDs( | |
489 JNIEnv* env, | |
490 const std::vector<AutofillProfile*>& profiles) { | |
491 std::vector<base::string16> guids; | |
492 for (AutofillProfile* profile : profiles) | |
493 guids.push_back(base::UTF8ToUTF16(profile->guid())); | |
494 | |
495 return base::android::ToJavaArrayOfStrings(env, guids); | |
496 } | |
497 | |
498 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetCreditCardGUIDs( | |
499 JNIEnv* env, | |
500 const std::vector<CreditCard*>& credit_cards) { | |
501 std::vector<base::string16> guids; | |
502 for (CreditCard* credit_card : credit_cards) | |
503 guids.push_back(base::UTF8ToUTF16(credit_card->guid())); | |
504 | |
505 return base::android::ToJavaArrayOfStrings(env, guids); | |
506 } | |
507 | |
508 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels( | 341 ScopedJavaLocalRef<jobjectArray> PersonalDataManagerAndroid::GetProfileLabels( |
509 JNIEnv* env, | 342 JNIEnv* env, |
510 bool address_only, | 343 const JavaParamRef<jobject>& unused_obj, |
511 std::vector<AutofillProfile*> profiles) { | 344 bool address_only) { |
512 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields; | 345 std::unique_ptr<std::vector<ServerFieldType>> suggested_fields; |
513 size_t minimal_fields_shown = 2; | 346 size_t minimal_fields_shown = 2; |
514 if (address_only) { | 347 if (address_only) { |
515 suggested_fields.reset(new std::vector<ServerFieldType>); | 348 suggested_fields.reset(new std::vector<ServerFieldType>); |
516 suggested_fields->push_back(COMPANY_NAME); | 349 suggested_fields->push_back(COMPANY_NAME); |
517 suggested_fields->push_back(ADDRESS_HOME_LINE1); | 350 suggested_fields->push_back(ADDRESS_HOME_LINE1); |
518 suggested_fields->push_back(ADDRESS_HOME_LINE2); | 351 suggested_fields->push_back(ADDRESS_HOME_LINE2); |
519 suggested_fields->push_back(ADDRESS_HOME_DEPENDENT_LOCALITY); | 352 suggested_fields->push_back(ADDRESS_HOME_DEPENDENT_LOCALITY); |
520 suggested_fields->push_back(ADDRESS_HOME_CITY); | 353 suggested_fields->push_back(ADDRESS_HOME_CITY); |
521 suggested_fields->push_back(ADDRESS_HOME_STATE); | 354 suggested_fields->push_back(ADDRESS_HOME_STATE); |
522 suggested_fields->push_back(ADDRESS_HOME_ZIP); | 355 suggested_fields->push_back(ADDRESS_HOME_ZIP); |
523 suggested_fields->push_back(ADDRESS_HOME_SORTING_CODE); | 356 suggested_fields->push_back(ADDRESS_HOME_SORTING_CODE); |
524 suggested_fields->push_back(ADDRESS_HOME_COUNTRY); | 357 suggested_fields->push_back(ADDRESS_HOME_COUNTRY); |
525 minimal_fields_shown = suggested_fields->size(); | 358 minimal_fields_shown = suggested_fields->size(); |
526 } | 359 } |
527 | 360 |
528 std::vector<base::string16> labels; | 361 std::vector<base::string16> labels; |
529 AutofillProfile::CreateInferredLabels( | 362 AutofillProfile::CreateInferredLabels( |
530 profiles, suggested_fields.get(), NAME_FULL, minimal_fields_shown, | 363 personal_data_manager_->GetProfiles(), suggested_fields.get(), NAME_FULL, |
531 g_browser_process->GetApplicationLocale(), &labels); | 364 minimal_fields_shown, g_browser_process->GetApplicationLocale(), &labels); |
532 | 365 |
533 return base::android::ToJavaArrayOfStrings(env, labels); | 366 return base::android::ToJavaArrayOfStrings(env, labels); |
534 } | 367 } |
535 | 368 |
| 369 jint PersonalDataManagerAndroid::GetCreditCardCount( |
| 370 JNIEnv* unused_env, |
| 371 const JavaParamRef<jobject>& unused_obj) { |
| 372 return personal_data_manager_->GetCreditCards().size(); |
| 373 } |
| 374 |
| 375 ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetCreditCardByIndex( |
| 376 JNIEnv* env, |
| 377 const JavaParamRef<jobject>& unused_obj, |
| 378 jint index) { |
| 379 const std::vector<CreditCard*>& credit_cards = |
| 380 personal_data_manager_->GetCreditCards(); |
| 381 size_t index_size_t = static_cast<size_t>(index); |
| 382 DCHECK_LT(index_size_t, credit_cards.size()); |
| 383 return CreateJavaCreditCardFromNative(env, *credit_cards[index_size_t]); |
| 384 } |
| 385 |
| 386 ScopedJavaLocalRef<jobject> PersonalDataManagerAndroid::GetCreditCardByGUID( |
| 387 JNIEnv* env, |
| 388 const JavaParamRef<jobject>& unused_obj, |
| 389 const JavaParamRef<jstring>& jguid) { |
| 390 CreditCard* card = personal_data_manager_->GetCreditCardByGUID( |
| 391 ConvertJavaStringToUTF8(env, jguid)); |
| 392 if (!card) |
| 393 return ScopedJavaLocalRef<jobject>(); |
| 394 |
| 395 return CreateJavaCreditCardFromNative(env, *card); |
| 396 } |
| 397 |
| 398 ScopedJavaLocalRef<jstring> PersonalDataManagerAndroid::SetCreditCard( |
| 399 JNIEnv* env, |
| 400 const JavaParamRef<jobject>& unused_obj, |
| 401 const JavaParamRef<jobject>& jcard) { |
| 402 std::string guid = ConvertJavaStringToUTF8( |
| 403 env, |
| 404 Java_CreditCard_getGUID(env, jcard).obj()); |
| 405 |
| 406 CreditCard card; |
| 407 PopulateNativeCreditCardFromJava(jcard, env, &card); |
| 408 |
| 409 if (guid.empty()) { |
| 410 personal_data_manager_->AddCreditCard(card); |
| 411 } else { |
| 412 card.set_guid(guid); |
| 413 personal_data_manager_->UpdateCreditCard(card); |
| 414 } |
| 415 return ConvertUTF8ToJavaString(env, card.guid()); |
| 416 } |
| 417 |
| 418 void PersonalDataManagerAndroid::AddServerCreditCardForTest( |
| 419 JNIEnv* env, |
| 420 const base::android::JavaParamRef<jobject>& unused_obj, |
| 421 const base::android::JavaParamRef<jobject>& jcard) { |
| 422 std::unique_ptr<CreditCard> card(new CreditCard); |
| 423 PopulateNativeCreditCardFromJava(jcard, env, card.get()); |
| 424 card->set_record_type(CreditCard::MASKED_SERVER_CARD); |
| 425 personal_data_manager_->AddServerCreditCardForTest(std::move(card)); |
| 426 } |
| 427 |
| 428 void PersonalDataManagerAndroid::RemoveByGUID( |
| 429 JNIEnv* env, |
| 430 const JavaParamRef<jobject>& unused_obj, |
| 431 const JavaParamRef<jstring>& jguid) { |
| 432 personal_data_manager_->RemoveByGUID(ConvertJavaStringToUTF8(env, jguid)); |
| 433 } |
| 434 |
| 435 void PersonalDataManagerAndroid::ClearUnmaskedCache( |
| 436 JNIEnv* env, |
| 437 const JavaParamRef<jobject>& unused_obj, |
| 438 const JavaParamRef<jstring>& guid) { |
| 439 personal_data_manager_->ResetFullServerCard( |
| 440 ConvertJavaStringToUTF8(env, guid)); |
| 441 } |
| 442 |
| 443 void PersonalDataManagerAndroid::GetFullCardForPaymentRequest( |
| 444 JNIEnv* env, |
| 445 const JavaParamRef<jobject>& unused_obj, |
| 446 const JavaParamRef<jobject>& jweb_contents, |
| 447 const JavaParamRef<jstring>& jguid, |
| 448 const JavaParamRef<jobject>& jdelegate) { |
| 449 // Self-deleting object. |
| 450 (new FullCardRequester()) |
| 451 ->GetFullCard(env, jweb_contents, jdelegate, |
| 452 personal_data_manager_->GetCreditCardByGUID( |
| 453 ConvertJavaStringToUTF8(env, jguid))); |
| 454 } |
| 455 |
| 456 void PersonalDataManagerAndroid::OnPersonalDataChanged() { |
| 457 JNIEnv* env = base::android::AttachCurrentThread(); |
| 458 if (weak_java_obj_.get(env).is_null()) |
| 459 return; |
| 460 |
| 461 Java_PersonalDataManager_personalDataChanged(env, |
| 462 weak_java_obj_.get(env).obj()); |
| 463 } |
| 464 |
| 465 // static |
| 466 bool PersonalDataManagerAndroid::Register(JNIEnv* env) { |
| 467 return RegisterNativesImpl(env); |
| 468 } |
| 469 |
536 // Returns whether the Autofill feature is enabled. | 470 // Returns whether the Autofill feature is enabled. |
537 static jboolean IsAutofillEnabled(JNIEnv* env, | 471 static jboolean IsAutofillEnabled(JNIEnv* env, |
538 const JavaParamRef<jclass>& clazz) { | 472 const JavaParamRef<jclass>& clazz) { |
539 return GetPrefs()->GetBoolean(autofill::prefs::kAutofillEnabled); | 473 return GetPrefs()->GetBoolean(autofill::prefs::kAutofillEnabled); |
540 } | 474 } |
541 | 475 |
542 // Enables or disables the Autofill feature. | 476 // Enables or disables the Autofill feature. |
543 static void SetAutofillEnabled(JNIEnv* env, | 477 static void SetAutofillEnabled(JNIEnv* env, |
544 const JavaParamRef<jclass>& clazz, | 478 const JavaParamRef<jclass>& clazz, |
545 jboolean enable) { | 479 jboolean enable) { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
577 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); | 511 base::android::ConvertJavaStringToUTF16(env, jcountry_name))); |
578 } | 512 } |
579 | 513 |
580 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 514 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
581 PersonalDataManagerAndroid* personal_data_manager_android = | 515 PersonalDataManagerAndroid* personal_data_manager_android = |
582 new PersonalDataManagerAndroid(env, obj); | 516 new PersonalDataManagerAndroid(env, obj); |
583 return reinterpret_cast<intptr_t>(personal_data_manager_android); | 517 return reinterpret_cast<intptr_t>(personal_data_manager_android); |
584 } | 518 } |
585 | 519 |
586 } // namespace autofill | 520 } // namespace autofill |
OLD | NEW |