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

Unified Diff: chrome/browser/autofill/android/personal_data_manager_android.cc

Issue 1899893002: Card unmasking without form filling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use the credit card number field in metrics tests, because ios single-field form fill will not requ… Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/autofill/android/personal_data_manager_android.h ('k') | components/autofill.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/autofill/android/personal_data_manager_android.cc
diff --git a/chrome/browser/autofill/android/personal_data_manager_android.cc b/chrome/browser/autofill/android/personal_data_manager_android.cc
index 56234fefa0a7c6a2a693bbed3a22236f52c7d1c4..48ba691709abe107b03ef6ef48878f3231766b5c 100644
--- a/chrome/browser/autofill/android/personal_data_manager_android.cc
+++ b/chrome/browser/autofill/android/personal_data_manager_android.cc
@@ -10,6 +10,7 @@
#include "base/android/jni_string.h"
#include "base/command_line.h"
#include "base/format_macros.h"
+#include "base/memory/weak_ptr.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/android/resource_mapper.h"
@@ -18,19 +19,24 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/common/pref_names.h"
+#include "components/autofill/content/browser/content_autofill_driver.h"
+#include "components/autofill/content/browser/content_autofill_driver_factory.h"
#include "components/autofill/core/browser/autofill_country.h"
#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/country_names.h"
#include "components/autofill/core/browser/field_types.h"
+#include "components/autofill/core/browser/payments/full_card_request.h"
#include "components/autofill/core/browser/personal_data_manager.h"
#include "components/autofill/core/common/autofill_pref_names.h"
#include "components/autofill/core/common/autofill_switches.h"
#include "components/prefs/pref_service.h"
+#include "content/public/browser/web_contents.h"
#include "jni/PersonalDataManager_jni.h"
using base::android::ConvertJavaStringToUTF8;
using base::android::ConvertUTF16ToJavaString;
using base::android::ConvertUTF8ToJavaString;
+using base::android::ScopedJavaGlobalRef;
using base::android::ScopedJavaLocalRef;
namespace autofill {
@@ -192,6 +198,74 @@ void PopulateNativeCreditCardFromJava(
ConvertJavaStringToUTF16(Java_CreditCard_getYear(env, jcard)));
}
+// Self-deleting requester of full card details, including full PAN and the CVC
+// number.
+class FullCardRequester : public payments::FullCardRequest::Delegate,
+ public base::SupportsWeakPtr<FullCardRequester> {
+ public:
+ FullCardRequester() {}
+
+ void GetFullCard(JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jweb_contents,
+ const base::android::JavaParamRef<jobject>& jdelegate,
+ CreditCard* card) {
+ jdelegate_.Reset(env, jdelegate);
+
+ if (!card) {
+ OnFullCardError();
+ return;
+ }
+
+ content::WebContents* contents =
+ content::WebContents::FromJavaWebContents(jweb_contents);
+ if (!contents) {
+ OnFullCardError();
+ return;
+ }
+
+ ContentAutofillDriverFactory* factory =
+ ContentAutofillDriverFactory::FromWebContents(contents);
+ if (!factory) {
+ OnFullCardError();
+ return;
+ }
+
+ ContentAutofillDriver* driver =
+ factory->DriverForFrame(contents->GetMainFrame());
+ if (!driver) {
+ OnFullCardError();
+ return;
+ }
+
+ driver->autofill_manager()->GetOrCreateFullCardRequest()->GetFullCard(
+ *card, AutofillClient::UNMASK_FOR_PAYMENT_REQUEST, AsWeakPtr());
+ }
+
+ private:
+ virtual ~FullCardRequester() {}
+
+ // payments::FullCardRequest::Delegate:
+ void OnFullCardDetails(const CreditCard& card,
+ const base::string16& cvc) override {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ Java_FullCardRequestDelegate_onFullCardDetails(
+ env, jdelegate_.obj(), CreateJavaCreditCardFromNative(env, card).obj(),
+ base::android::ConvertUTF16ToJavaString(env, cvc).obj());
+ delete this;
+ }
+
+ // payments::FullCardRequest::Delegate:
+ void OnFullCardError() override {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ Java_FullCardRequestDelegate_onFullCardError(env, jdelegate_.obj());
+ delete this;
+ }
+
+ ScopedJavaGlobalRef<jobject> jdelegate_;
+
+ DISALLOW_COPY_AND_ASSIGN(FullCardRequester);
+};
+
} // namespace
PersonalDataManagerAndroid::PersonalDataManagerAndroid(JNIEnv* env,
@@ -331,6 +405,19 @@ void PersonalDataManagerAndroid::ClearUnmaskedCache(
ConvertJavaStringToUTF8(env, guid));
}
+void PersonalDataManagerAndroid::GetFullCardForPaymentRequest(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& unused_obj,
+ const JavaParamRef<jobject>& jweb_contents,
+ const JavaParamRef<jstring>& jguid,
+ const JavaParamRef<jobject>& jdelegate) {
+ // Self-deleting object.
+ (new FullCardRequester())
+ ->GetFullCard(env, jweb_contents, jdelegate,
+ personal_data_manager_->GetCreditCardByGUID(
+ ConvertJavaStringToUTF8(env, jguid)));
+}
+
void PersonalDataManagerAndroid::OnPersonalDataChanged() {
JNIEnv* env = base::android::AttachCurrentThread();
if (weak_java_obj_.get(env).is_null())
« no previous file with comments | « chrome/browser/autofill/android/personal_data_manager_android.h ('k') | components/autofill.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698