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

Side by Side Diff: components/autofill/android/form_data_android.cc

Issue 2839023003: WebView autofill implementation (Closed)
Patch Set: Refactoring AutofillManager Created 3 years, 7 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/autofill/android/form_data_android.h"
6
7 #include "base/android/jni_string.h"
8 #include "components/autofill/android/form_field_data_android.h"
9 #include "jni/FormData_jni.h"
10
11 using base::android::AttachCurrentThread;
12 using base::android::ConvertJavaStringToUTF16;
13 using base::android::ConvertUTF16ToJavaString;
14 using base::android::ConvertUTF8ToJavaString;
15 using base::android::JavaParamRef;
16 using base::android::JavaRef;
Mathieu 2017/05/24 18:02:01 not used, please clean up
michaelbai 2017/05/26 23:12:07 Done.
17 using base::android::ScopedJavaGlobalRef;
18 using base::android::ScopedJavaLocalRef;
19
20 namespace autofill {
21
22 FormDataAndroid::FormDataAndroid(const FormData& form)
23 : form_(form), index_(0) {}
24
25 FormDataAndroid::~FormDataAndroid() {
26 JNIEnv* env = AttachCurrentThread();
27 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
28 if (obj.is_null())
29 return;
30
31 Java_FormData_onNativeDestroyed(env, obj);
32 }
33
34 ScopedJavaLocalRef<jobject> FormDataAndroid::GetJavaPeer() {
35 JNIEnv* env = AttachCurrentThread();
36 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
37 if (obj.is_null()) {
38 for (size_t i = 0; i < form_.fields.size(); ++i) {
39 fields_.push_back(std::unique_ptr<FormFieldDataAndroid>(
40 new FormFieldDataAndroid(&form_.fields[i])));
41 }
42 ScopedJavaLocalRef<jstring> jname =
43 ConvertUTF16ToJavaString(env, form_.name);
44 ScopedJavaLocalRef<jstring> jhost =
45 ConvertUTF8ToJavaString(env, form_.origin.host());
46 obj = Java_FormData_createFormData(env, reinterpret_cast<intptr_t>(this),
47 jname, jhost, form_.fields.size());
48 java_ref_ = JavaObjectWeakGlobalRef(env, obj);
49 }
50 return obj;
51 }
52
53 const FormData& FormDataAndroid::PullAutofillValues() {
54 for (auto& field : fields_)
Mathieu 2017/05/24 18:02:01 let's be explicit in the type
michaelbai 2017/05/26 23:12:07 Done.
55 field->GetValue();
56 return form_;
57 }
58
59 ScopedJavaLocalRef<jobject> FormDataAndroid::GetNextFormFieldData(
60 JNIEnv* env,
61 const JavaParamRef<jobject>& jcaller) {
62 DCHECK(index_ <= fields_.size());
63 if (index_ == fields_.size())
64 return ScopedJavaLocalRef<jobject>();
65 return fields_[index_++]->GetJavaPeer();
66 }
67
68 void FormDataAndroid::OnTextFieldDidChange(size_t index,
69 const base::string16& value) {
70 form_.fields[index].value = value;
71 fields_[index]->OnTextFieldDidChange(value);
72 }
73
74 bool FormDataAndroid::GetFieldIndex(const FormFieldData& field, size_t* index) {
75 for (size_t i = 0; i < form_.fields.size(); ++i) {
76 if (form_.fields[i].SameFieldAs(field)) {
77 *index = i;
78 return true;
79 }
80 }
81 return false;
82 }
83
84 bool FormDataAndroid::GetSimilarFieldIndex(const FormFieldData& field,
85 size_t* index) {
86 for (size_t i = 0; i < form_.fields.size(); ++i) {
87 if (form_.fields[i].SimilarFieldAs(field)) {
88 *index = i;
89 return true;
90 }
91 }
92 return false;
93 }
94
95 bool FormDataAndroid::SimilarFormAs(const FormData& form) {
96 return form_.SimilarFormAs(form);
97 }
98
99 bool RegisterFormDataAndroid(JNIEnv* env) {
100 return RegisterNativesImpl(env);
101 }
102
103 } // namespace autofil
Mathieu 2017/05/24 18:02:01 autofill
michaelbai 2017/05/26 23:12:07 Done.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698