OSDN Git Service

Send the AutoFill Preview string java side.
authorBen Murdoch <benm@google.com>
Tue, 19 Oct 2010 18:41:08 +0000 (19:41 +0100)
committerBen Murdoch <benm@google.com>
Fri, 5 Nov 2010 11:33:18 +0000 (11:33 +0000)
When we have determined that the form can be autofilled, send
a preview string over to Java so that we can display it in the
drop down box.

Requires a change in frameworks/base:
https://android-git.corp.google.com/g/#change,77127

Change-Id: Ia0dd899d659c6e5710155f33749255058d7c3faf

WebKit/android/WebCoreSupport/autofill/WebAutoFill.cpp
WebKit/android/WebCoreSupport/autofill/WebAutoFill.h
WebKit/android/jni/WebViewCore.cpp
WebKit/android/jni/WebViewCore.h

index 1aecef1..f80168d 100644 (file)
@@ -57,7 +57,6 @@ static URLRequestContext* webAutoFillContextGetter()
 
 WebAutoFill::WebAutoFill()
     : mWebViewCore(0)
-    , mUniqueProfileId(NO_PROFILE_SET)
 {
     mFormManager = new FormManager();
     mQueryId = 1;
@@ -107,7 +106,7 @@ void WebAutoFill::formFieldFocused(WebCore::HTMLFormControlElement* formFieldEle
         // In case that we've just been disabled and the last time we got autofill
         // suggestions and told Java about them, clear that bit Java side now
         // we're disabled.
-        mWebViewCore->setWebTextViewAutoFillable(FORM_NOT_AUTOFILLABLE);
+        mWebViewCore->setWebTextViewAutoFillable(FORM_NOT_AUTOFILLABLE, string16());
         return;
     }
 
@@ -125,7 +124,7 @@ void WebAutoFill::formFieldFocused(WebCore::HTMLFormControlElement* formFieldEle
     if (!suggestions) {
         ASSERT(mWebViewCore);
         // Tell Java no autofill suggestions for this form.
-        mWebViewCore->setWebTextViewAutoFillable(FORM_NOT_AUTOFILLABLE);
+        mWebViewCore->setWebTextViewAutoFillable(FORM_NOT_AUTOFILLABLE, string16());
         return;
     }
 }
@@ -140,7 +139,7 @@ void WebAutoFill::querySuccessful(int queryId, const string16& value, const stri
     mUniqueIdMap[queryId] = uniqueId;
 
     ASSERT(mWebViewCore);
-    mWebViewCore->setWebTextViewAutoFillable(queryId);
+    mWebViewCore->setWebTextViewAutoFillable(queryId, mAutoFillProfile->PreviewSummary());
 }
 
 void WebAutoFill::fillFormFields(int queryId)
@@ -173,24 +172,23 @@ void WebAutoFill::setProfile(int id, const string16& fullName, const string16& e
                              const string16& addressLine1, const string16& addressLine2, const string16& city,
                              const string16& state, const string16& zipCode, const string16& country, const string16& phoneNumber)
 {
-    AutoFillProfile autoFillProfile;
-    mUniqueProfileId = id;
-    autoFillProfile.set_unique_id(id);
+    mAutoFillProfile.set(new AutoFillProfile());
+    mAutoFillProfile->set_unique_id(id);
 
     // Constants for AutoFill field types are found in external/chromium/chrome/browser/autofill/field_types.h.
-    autoFillProfile.SetInfo(AutoFillType(NAME_FULL), fullName);
-    autoFillProfile.SetInfo(AutoFillType(EMAIL_ADDRESS), emailAddress);
-    autoFillProfile.SetInfo(AutoFillType(COMPANY_NAME), companyName);
-    autoFillProfile.SetInfo(AutoFillType(ADDRESS_HOME_LINE1), addressLine1);
-    autoFillProfile.SetInfo(AutoFillType(ADDRESS_HOME_LINE2), addressLine2);
-    autoFillProfile.SetInfo(AutoFillType(ADDRESS_HOME_CITY), city);
-    autoFillProfile.SetInfo(AutoFillType(ADDRESS_HOME_STATE), state);
-    autoFillProfile.SetInfo(AutoFillType(ADDRESS_HOME_ZIP), zipCode);
-    autoFillProfile.SetInfo(AutoFillType(ADDRESS_HOME_COUNTRY), country);
-    autoFillProfile.SetInfo(AutoFillType(PHONE_HOME_WHOLE_NUMBER), phoneNumber);
+    mAutoFillProfile->SetInfo(AutoFillType(NAME_FULL), fullName);
+    mAutoFillProfile->SetInfo(AutoFillType(EMAIL_ADDRESS), emailAddress);
+    mAutoFillProfile->SetInfo(AutoFillType(COMPANY_NAME), companyName);
+    mAutoFillProfile->SetInfo(AutoFillType(ADDRESS_HOME_LINE1), addressLine1);
+    mAutoFillProfile->SetInfo(AutoFillType(ADDRESS_HOME_LINE2), addressLine2);
+    mAutoFillProfile->SetInfo(AutoFillType(ADDRESS_HOME_CITY), city);
+    mAutoFillProfile->SetInfo(AutoFillType(ADDRESS_HOME_STATE), state);
+    mAutoFillProfile->SetInfo(AutoFillType(ADDRESS_HOME_ZIP), zipCode);
+    mAutoFillProfile->SetInfo(AutoFillType(ADDRESS_HOME_COUNTRY), country);
+    mAutoFillProfile->SetInfo(AutoFillType(PHONE_HOME_WHOLE_NUMBER), phoneNumber);
 
     std::vector<AutoFillProfile> profiles;
-    profiles.push_back(autoFillProfile);
+    profiles.push_back(*mAutoFillProfile);
     mTabContents->profile()->GetPersonalDataManager()->SetProfiles(&profiles);
 }
 
@@ -199,10 +197,10 @@ void WebAutoFill::clearProfiles()
    // For now Chromium only ever knows about one profile, so we can just
    // remove it by unique id. If we support multiple profiles in the future
    // we need to remove them all here.
-   if (mUniqueProfileId != NO_PROFILE_SET) {
-       mTabContents->profile()->GetPersonalDataManager()->RemoveProfile(mUniqueProfileId);
-       mUniqueProfileId = NO_PROFILE_SET;
-   }
+   int uniqueProfileId = mAutoFillProfile->unique_id();
+   if (uniqueProfileId != NO_PROFILE_SET)
+       mTabContents->profile()->GetPersonalDataManager()->RemoveProfile(uniqueProfileId);
+   mAutoFillProfile.set(0);
 }
 
 }
index d74c838..c4b63b0 100644 (file)
@@ -73,6 +73,7 @@ private:
     OwnPtr<AutoFillManager> mAutoFillManager;
     OwnPtr<AutoFillHost> mAutoFillHost;
     OwnPtr<TabContents> mTabContents;
+    OwnPtr<AutoFillProfile> mAutoFillProfile;
 
     typedef std::vector<webkit_glue::FormData, std::allocator<webkit_glue::FormData> > FormList;
     FormList mForms;
@@ -84,9 +85,6 @@ private:
     AutoFillQueryToUniqueIdMap mUniqueIdMap;
     int mQueryId;
 
-    // This is set by Java when a profile is synced.
-    int mUniqueProfileId;
-
     WebViewCore* mWebViewCore;
 };
 
index c301421..deae37f 100644 (file)
@@ -381,7 +381,7 @@ WebViewCore::WebViewCore(JNIEnv* env, jobject javaWebViewCore, WebCore::Frame* m
     m_javaGlue->m_centerFitRect = GetJMethod(env, clazz, "centerFitRect", "(IIII)V");
     m_javaGlue->m_setScrollbarModes = GetJMethod(env, clazz, "setScrollbarModes", "(II)V");
     m_javaGlue->m_setInstallableWebApp = GetJMethod(env, clazz, "setInstallableWebApp", "()V");
-    m_javaGlue->m_setWebTextViewAutoFillable = GetJMethod(env, clazz, "setWebTextViewAutoFillable", "(I)V");
+    m_javaGlue->m_setWebTextViewAutoFillable = GetJMethod(env, clazz, "setWebTextViewAutoFillable", "(ILjava/lang/String;)V");
     env->DeleteLocalRef(clazz);
 
     env->SetIntField(javaWebViewCore, gWebViewCoreFields.m_nativeClass, (jint)this);
@@ -3304,10 +3304,12 @@ void WebViewCore::notifyWebAppCanBeInstalled()
     checkException(env);
 }
 
-void WebViewCore::setWebTextViewAutoFillable(int queryId)
+void WebViewCore::setWebTextViewAutoFillable(int queryId, const string16& previewSummary)
 {
     JNIEnv* env = JSC::Bindings::getJNIEnv();
-    env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_setWebTextViewAutoFillable, queryId);
+    jstring preview = env->NewString(previewSummary.data(), previewSummary.length());
+    env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_setWebTextViewAutoFillable, queryId, preview);
+    env->DeleteLocalRef(preview);
 }
 
 bool WebViewCore::drawIsPaused() const
index 853c17b..1e2f130 100644 (file)
@@ -508,7 +508,7 @@ namespace android {
         void splitContent(PictureSet*);
 
         void notifyWebAppCanBeInstalled();
-        void setWebTextViewAutoFillable(int queryId);
+        void setWebTextViewAutoFillable(int queryId, const string16& previewSummary);
 
         DeviceMotionAndOrientationManager* deviceMotionAndOrientationManager() { return &m_deviceMotionAndOrientationManager; }