Index: components/autofill/content/browser/form_field_data_android.cc |
diff --git a/components/autofill/content/browser/form_field_data_android.cc b/components/autofill/content/browser/form_field_data_android.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1aeaa35bb10857cc06884350832daf60945fb8eb |
--- /dev/null |
+++ b/components/autofill/content/browser/form_field_data_android.cc |
@@ -0,0 +1,87 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "components/autofill/content/browser/form_field_data_android.h" |
+ |
+#include "base/android/jni_string.h" |
+#include "content/public/browser/browser_thread.h" |
+#include "jni/FormFieldData_jni.h" |
+ |
+using base::android::AttachCurrentThread; |
+using base::android::ConvertJavaStringToUTF16; |
+using base::android::ConvertUTF16ToJavaString; |
+using base::android::ConvertUTF8ToJavaString; |
+using base::android::JavaParamRef; |
+using base::android::JavaRef; |
+using base::android::ScopedJavaGlobalRef; |
+using base::android::ScopedJavaLocalRef; |
+using content::BrowserThread; |
+ |
+namespace autofill { |
+ |
+FormFieldDataAndroid::FormFieldDataAndroid(const FormFieldData& field) |
+ :field_(field), |
+ field_ptr_(&field_) { |
+} |
+ |
+FormFieldDataAndroid::FormFieldDataAndroid(FormFieldData* field) |
+ : field_ptr_(field) { |
+} |
+ |
+ScopedJavaLocalRef<jobject> FormFieldDataAndroid::GetJavaPeer() { |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
+ if (obj.is_null()) { |
+ ScopedJavaLocalRef<jstring> jname = |
+ ConvertUTF16ToJavaString(env, field_ptr_->name); |
+ ScopedJavaLocalRef<jstring> jlabel = |
+ ConvertUTF16ToJavaString(env, field_ptr_->label); |
+ ScopedJavaLocalRef<jstring> jvalue = |
+ ConvertUTF16ToJavaString(env, field_ptr_->value); |
+ ScopedJavaLocalRef<jstring> jautocompleteAttr = |
+ ConvertUTF8ToJavaString(env, field_ptr_->autocomplete_attribute); |
+ |
+ obj = Java_FormFieldData_createFormFieldData(env, jname, jlabel, jvalue, |
+ jautocompleteAttr, field_ptr_->should_autocomplete); |
+ java_ref_ = JavaObjectWeakGlobalRef(env, obj); |
+ } |
+ return obj; |
+} |
+ |
+void FormFieldDataAndroid::PullAutofillValue() { |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ JNIEnv* env = AttachCurrentThread(); |
+ /* |
+ if (field_ptr_->check_status == |
+ FormFieldData::CheckStatus::CHECKABLE_BUT_UNCHECKED) { |
+ field_ptr_->check_status = FormFieldData::CheckStatus::CHECKED; |
+ field_ptr_->is_autofilled = true; |
+ } |
+ */ |
+ |
+ ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
+ if (obj.is_null()) |
+ return; |
+ ScopedJavaLocalRef<jstring> jvalue = |
+ Java_FormFieldData_getValue(env, obj); |
+ if (jvalue.is_null()) return; |
+ field_ptr_->value = ConvertJavaStringToUTF16(env, jvalue); |
+ field_ptr_->is_autofilled = true; |
+} |
+ |
+void FormFieldDataAndroid::OnTextFieldDidChange(const base::string16& value) { |
+ field_ptr_->value = value; |
+ field_ptr_->is_autofilled = false; |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
+ if (obj.is_null()) |
+ return; |
+ |
+ Java_FormFieldData_updataValue(env, obj, |
+ ConvertUTF16ToJavaString(env, value)); |
+} |
+ |
+} // namespace autofil |